diff options
author | Oliver Schinagl <oliver@schinagl.nl> | 2007-12-19 20:59:56 (GMT) |
---|---|---|
committer | Oliver Schinagl <oliver@schinagl.nl> | 2007-12-19 20:59:56 (GMT) |
commit | 5f1fc7b0711f51dd05077303f854c658ccd9dcba (patch) | |
tree | 7d519f704a04a8f25d3e5f14ce809a7d985c4581 | |
parent | a60088999da4f44bf5885f431fe78eb87d643ae7 (diff) | |
download | 2iv35-5f1fc7b0711f51dd05077303f854c658ccd9dcba.zip 2iv35-5f1fc7b0711f51dd05077303f854c658ccd9dcba.tar.gz 2iv35-5f1fc7b0711f51dd05077303f854c658ccd9dcba.tar.bz2 |
Loads of splitting, gui templates added for other elements
38 files changed, 1222 insertions, 518 deletions
diff --git a/Smoke/Makefile b/Smoke/Makefile index ac15258..f5f4514 100644 --- a/Smoke/Makefile +++ b/Smoke/Makefile @@ -3,10 +3,10 @@ CPP = g++ CC = gcc -OBJ_GTK = gtk.o gtk_colormap.o gtk_glyphs.o renderer_gl.o fluids.o smoke.o colormap.o glyphs.o seedpoint.o streamlines.o palette.o funcs.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES) +OBJ_GTK = gtk.o gtk_main.o gtk_colormap.o gtk_glyphs.o gtk_divergence.o gtk_heightplots.o gtk_isolines.o gtk_streamlines.o gtk_flowvis.o renderer_gl.o fluids.o smoke.o colormap.o glyphs.o divergence.o isolines.o heightplots.o seedpoint.o streamlines.o flowvis.o palette.o funcs.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES) OBJ_GLUT = glut.o fluids.o colormap.o glyphs.o seedpoint.o streamlines.o palette.o funcs.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES) LINKOBJ_GLUT = fluids.o colormap.o glyphs.o seedpoint.o streamlines.o palette.o funcs.o glut.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES) -LINKOBJ_GTK = fluids.o smoke.o colormap.o glyphs.o seedpoint.o streamlines.o palette.o funcs.o renderer_gl.o gtk_colormap.o gtk_glyphs.o gtk.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES) +LINKOBJ_GTK = fluids.o smoke.o colormap.o glyphs.o divergence.o isolines.o heightplots.o seedpoint.o streamlines.o flowvis.o palette.o funcs.o renderer_gl.o gtk_main.o gtk_colormap.o gtk_glyphs.o gtk_divergence.o gtk_isolines.o gtk_heightplots.o gtk_streamlines.o gtk_flowvis.o gtk.o fftw-2.1.3/fftw/config.o fftw-2.1.3/fftw/executor.o fftw-2.1.3/fftw/fftwf77.o fftw-2.1.3/fftw/fftwnd.o fftw-2.1.3/fftw/fn_1.o fftw-2.1.3/fftw/fn_2.o fftw-2.1.3/fftw/fn_3.o fftw-2.1.3/fftw/fn_4.o fftw-2.1.3/fftw/fn_5.o fftw-2.1.3/fftw/fn_6.o fftw-2.1.3/fftw/fn_7.o fftw-2.1.3/fftw/fn_8.o fftw-2.1.3/fftw/fn_9.o fftw-2.1.3/fftw/fn_10.o fftw-2.1.3/fftw/fn_11.o fftw-2.1.3/fftw/fn_12.o fftw-2.1.3/fftw/fn_13.o fftw-2.1.3/fftw/fn_14.o fftw-2.1.3/fftw/fn_15.o fftw-2.1.3/fftw/fn_16.o fftw-2.1.3/fftw/fn_32.o fftw-2.1.3/fftw/fn_64.o fftw-2.1.3/fftw/fni_1.o fftw-2.1.3/fftw/fni_2.o fftw-2.1.3/fftw/fni_3.o fftw-2.1.3/fftw/fni_4.o fftw-2.1.3/fftw/fni_5.o fftw-2.1.3/fftw/fni_6.o fftw-2.1.3/fftw/fni_7.o fftw-2.1.3/fftw/fni_8.o fftw-2.1.3/fftw/fni_9.o fftw-2.1.3/fftw/fni_10.o fftw-2.1.3/fftw/fni_11.o fftw-2.1.3/fftw/fni_12.o fftw-2.1.3/fftw/fni_13.o fftw-2.1.3/fftw/fni_14.o fftw-2.1.3/fftw/fni_15.o fftw-2.1.3/fftw/fni_16.o fftw-2.1.3/fftw/fni_32.o fftw-2.1.3/fftw/fni_64.o fftw-2.1.3/fftw/ftw_2.o fftw-2.1.3/fftw/ftw_3.o fftw-2.1.3/fftw/ftw_4.o fftw-2.1.3/fftw/ftw_5.o fftw-2.1.3/fftw/ftw_6.o fftw-2.1.3/fftw/ftw_7.o fftw-2.1.3/fftw/ftw_8.o fftw-2.1.3/fftw/ftw_9.o fftw-2.1.3/fftw/ftw_10.o fftw-2.1.3/fftw/ftw_16.o fftw-2.1.3/fftw/ftw_32.o fftw-2.1.3/fftw/ftw_64.o fftw-2.1.3/fftw/ftwi_2.o fftw-2.1.3/fftw/ftwi_3.o fftw-2.1.3/fftw/ftwi_4.o fftw-2.1.3/fftw/ftwi_5.o fftw-2.1.3/fftw/ftwi_6.o fftw-2.1.3/fftw/ftwi_7.o fftw-2.1.3/fftw/ftwi_8.o fftw-2.1.3/fftw/ftwi_9.o fftw-2.1.3/fftw/ftwi_10.o fftw-2.1.3/fftw/ftwi_16.o fftw-2.1.3/fftw/ftwi_32.o fftw-2.1.3/fftw/ftwi_64.o fftw-2.1.3/fftw/generic.o fftw-2.1.3/fftw/malloc.o fftw-2.1.3/fftw/planner.o fftw-2.1.3/fftw/putils.o fftw-2.1.3/fftw/rader.o fftw-2.1.3/fftw/timer.o fftw-2.1.3/fftw/twiddle.o fftw-2.1.3/fftw/wisdom.o fftw-2.1.3/fftw/wisdomio.o fftw-2.1.3/rfftw/fcr_1.o fftw-2.1.3/rfftw/fcr_2.o fftw-2.1.3/rfftw/fcr_3.o fftw-2.1.3/rfftw/fcr_4.o fftw-2.1.3/rfftw/fcr_5.o fftw-2.1.3/rfftw/fcr_6.o fftw-2.1.3/rfftw/fcr_7.o fftw-2.1.3/rfftw/fcr_8.o fftw-2.1.3/rfftw/fcr_9.o fftw-2.1.3/rfftw/fcr_10.o fftw-2.1.3/rfftw/fcr_11.o fftw-2.1.3/rfftw/fcr_12.o fftw-2.1.3/rfftw/fcr_13.o fftw-2.1.3/rfftw/fcr_14.o fftw-2.1.3/rfftw/fcr_15.o fftw-2.1.3/rfftw/fcr_16.o fftw-2.1.3/rfftw/fcr_32.o fftw-2.1.3/rfftw/fcr_64.o fftw-2.1.3/rfftw/fcr_128.o fftw-2.1.3/rfftw/fhb_2.o fftw-2.1.3/rfftw/fhb_3.o fftw-2.1.3/rfftw/fhb_4.o fftw-2.1.3/rfftw/fhb_5.o fftw-2.1.3/rfftw/fhb_6.o fftw-2.1.3/rfftw/fhb_7.o fftw-2.1.3/rfftw/fhb_8.o fftw-2.1.3/rfftw/fhb_9.o fftw-2.1.3/rfftw/fhb_10.o fftw-2.1.3/rfftw/fhb_16.o fftw-2.1.3/rfftw/fhb_32.o fftw-2.1.3/rfftw/fhf_2.o fftw-2.1.3/rfftw/fhf_3.o fftw-2.1.3/rfftw/fhf_4.o fftw-2.1.3/rfftw/fhf_5.o fftw-2.1.3/rfftw/fhf_6.o fftw-2.1.3/rfftw/fhf_7.o fftw-2.1.3/rfftw/fhf_8.o fftw-2.1.3/rfftw/fhf_9.o fftw-2.1.3/rfftw/fhf_10.o fftw-2.1.3/rfftw/fhf_16.o fftw-2.1.3/rfftw/fhf_32.o fftw-2.1.3/rfftw/frc_1.o fftw-2.1.3/rfftw/frc_2.o fftw-2.1.3/rfftw/frc_3.o fftw-2.1.3/rfftw/frc_4.o fftw-2.1.3/rfftw/frc_5.o fftw-2.1.3/rfftw/frc_6.o fftw-2.1.3/rfftw/frc_7.o fftw-2.1.3/rfftw/frc_8.o fftw-2.1.3/rfftw/frc_9.o fftw-2.1.3/rfftw/frc_10.o fftw-2.1.3/rfftw/frc_11.o fftw-2.1.3/rfftw/frc_12.o fftw-2.1.3/rfftw/frc_13.o fftw-2.1.3/rfftw/frc_14.o fftw-2.1.3/rfftw/frc_15.o fftw-2.1.3/rfftw/frc_16.o fftw-2.1.3/rfftw/frc_32.o fftw-2.1.3/rfftw/frc_64.o fftw-2.1.3/rfftw/frc_128.o fftw-2.1.3/rfftw/rconfig.o fftw-2.1.3/rfftw/rexec2.o fftw-2.1.3/rfftw/rexec.o fftw-2.1.3/rfftw/rfftwf77.o fftw-2.1.3/rfftw/rfftwnd.o fftw-2.1.3/rfftw/rgeneric.o fftw-2.1.3/rfftw/rplanner.o $(RES) LIBS_GLUT = -lglut -lm #INCS = -I"fftw-2.1.3/fftw" -I"fftw-2.1.3/rfftw" LIBS_GTK = -lglut -lm `pkg-config --libs gtk+-2.0` /usr/lib/libgdkglext-x11-1.0.so /usr/lib/libgtkglext-x11-1.0.so @@ -38,21 +38,48 @@ gtk: $(OBJ_GTK) gtk.o: gtk.c $(CC) -c gtk.c -o gtk.o $(CFLAGS) +gtk_main.o: gtk.c + $(CC) -c gtk_main.c -o gtk_main.o $(CFLAGS) + gtk_colormap.o: gtk_colormap.c $(CC) -c gtk_colormap.c -o gtk_colormap.o $(CFLAGS) gtk_glyphs.o: gtk_glyphs.c $(CC) -c gtk_glyphs.c -o gtk_glyphs.o $(CFLAGS) +gtk_divergence.o: gtk_divergence.c + $(CC) -c gtk_divergence.c -o gtk_divergence.o $(CFLAGS) + +gtk_isolines.o: gtk_isolines.c + $(CC) -c gtk_isolines.c -o gtk_isolines.o $(CFLAGS) + +gtk_heightplots.o: gtk_heightplots.c + $(CC) -c gtk_heightplots.c -o gtk_heightplots.o $(CFLAGS) + +gtk_streamlines.o: gtk_streamlines.c + $(CC) -c gtk_streamlines.c -o gtk_streamlines.o $(CFLAGS) + +gtk_flowvis.o: gtk_flowvis.c + $(CC) -c gtk_flowvis.c -o gtk_flowvis.o $(CFLAGS) + glut.o: glut.c $(CC) -c glut.c -o glut.o $(CFLAGS) renderer_gl.o: renderer_gl.c $(CC) -c renderer_gl.c -o renderer_gl.o $(CFLAGS) +funcs.o: funcs.c + $(CC) -c funcs.c -o funcs.o $(CFLAGS) + fluids.o: fluids.c $(CC) -c fluids.c -o fluids.o $(CFLAGS) +seedpoint.o: seedpoint.c + $(CC) -c seedpoint.c -o seedpoint.o $(CFLAGS) + +palette.o: palette.c + $(CC) -c palette.c -o palette.o $(CFLAGS) + smoke.o: smoke.c $(CC) -c smoke.c -o smoke.o $(CFLAGS) @@ -62,17 +89,20 @@ colormap.o: colormap.c glyphs.o: glyphs.c $(CC) -c glyphs.c -o glyphs.o $(CFLAGS) -seedpoint.o: seedpoint.c - $(CC) -c seedpoint.c -o seedpoint.o $(CFLAGS) +divergence.o: divergence.c + $(CC) -c divergence.c -o divergence.o $(CFLAGS) + +isolines.o: isolines.c + $(CC) -c isolines.c -o isolines.o $(CFLAGS) + +heightplots.o: heightplots.c + $(CC) -c heightplots.c -o heightplots.o $(CFLAGS) streamlines.o: streamlines.c $(CC) -c streamlines.c -o streamlines.o $(CFLAGS) -palette.o: palette.c - $(CC) -c palette.c -o palette.o $(CFLAGS) - -funcs.o: funcs.c - $(CC) -c funcs.c -o funcs.o $(CFLAGS) +flowvis.o: flowvis.c + $(CC) -c flowvis.c -o flowvis.o $(CFLAGS) fftw-2.1.3/fftw/config.o: fftw-2.1.3/fftw/config.c $(CC) -c fftw-2.1.3/fftw/config.c -o fftw-2.1.3/fftw/config.o $(CFLAGS) diff --git a/Smoke/colormap.c b/Smoke/colormap.c index efe0114..d9ede0f 100644 --- a/Smoke/colormap.c +++ b/Smoke/colormap.c @@ -5,6 +5,7 @@ #include <math.h> + #include "funcs.h" #include "palette.h" @@ -39,12 +40,12 @@ int colormap_get_num_colors(void) return colormap_num_colors; } -void colormap_set_map(int color_map) +void colormap_set_colormap(int colormap) { - colormap_colormap = color_map; + colormap_colormap = colormap; } -int colormap_get_map(void){ +int colormap_get_colormap(void){ return colormap_colormap; } @@ -133,93 +134,6 @@ static float clamp(float value) return value; } -void HSVtoRGB(float *r, float *g, float *b, float h, float s, float v) -{ - int i; - float f, p, q, t; - - if( s == 0 ) { - // achromatic (grey) - *r = *g = *b = v; - return; - } - - h /= 60; // sector 0 to 5 - i = floor(h); - f = h - i; // factorial part of h - p = v * (1 - s); - q = v * (1 - s * f); - t = v * (1 - s * (1 - f)); - - switch(i) { - case 0: - *r = v; - *g = t; - *b = p; - break; - case 1: - *r = q; - *g = v; - *b = p; - break; - case 2: - *r = p; - *g = v; - *b = t; - break; - case 3: - *r = p; - *g = q; - *b = v; - break; - case 4: - *r = t; - *g = p; - *b = v; - break; - default: // case 5: - *r = v; - *g = p; - *b = q; - break; - } - -} - -// r,g,b values are from 0 to 1 -// h = [0,360], s = [0,1], v = [0,1] -// if s == 0, then h = -1 (undefined) -void RGBtoHSV( float r, float g, float b, float *h, float *s, float *v ) -{ - float min, max, delta; - - min = MIN3(r, g, b); - max = MAX3(r, g, b); - *v = max; // v - - delta = max - min; - - if(max != 0) { - *s = delta / max; // s - } else { - // r = g = b = 0 // s = 0, v is undefined - *s = 0; - *h = -1; - return; - } - - if(r == max) { - *h = ( g - b ) / delta; // between yellow & magenta - } else if(g == max) { - *h = 2 + (b - r) / delta; // between cyan & yellow - } else { - *h = 4 + (r - g) / delta; // between magenta & cyan - } - *h *= 60; // degrees - if(*h < 0) { - *h += 360; - } -} struct color4f colormap_get_color(float value) { diff --git a/Smoke/colormap.h b/Smoke/colormap.h index 22c34ed..1d70054 100644 --- a/Smoke/colormap.h +++ b/Smoke/colormap.h @@ -4,8 +4,8 @@ void colormap_set_num_colors(int num_colors);
int colormap_get_num_colors(void);
-void colormap_set_map(int color_map);
-int colormap_get_map(void);
+void colormap_set_colormap(int colormap);
+int colormap_get_colormap(void);
void colormap_set_scaling(int scaling);
int colormap_get_scaling(void);
diff --git a/Smoke/divergence.c b/Smoke/divergence.c new file mode 100644 index 0000000..29f9c26 --- /dev/null +++ b/Smoke/divergence.c @@ -0,0 +1,58 @@ +#ifdef G_OS_WIN32 +#define WIN32_LEAN_AND_MEAN 1 +#include <windows.h> +#endif + + +#include "funcs.h" +#include "palette.h" + +#include "divergence.h" + + +static int divergence_render = FALSE; + +static int divergence_num_colors = PALETTE_MAXCOLORS; + +static int divergence_colormap = PALETTE_BLACKWHITE; + + +void divergence_set_render(int render_divergence) +{ + divergence_render = render_divergence; +} + +int divergence_get_render(void) +{ + return divergence_render; +} + +void divergence_set_num_colors(int num_colors) +{ + divergence_num_colors = num_colors; +} + +int divergence_get_num_colors(void) +{ + return divergence_num_colors; +} + +void divergence_set_colormap(int colormap) +{ + divergence_colormap = colormap; +} + +int divergence_get_colormap(void) +{ + return divergence_colormap; +} + + +struct color4f divergence_get_color(float value) +{ + struct color4f return_value; + + return_value = set_palette(divergence_colormap, value, divergence_num_colors); + + return return_value; +} diff --git a/Smoke/divergence.h b/Smoke/divergence.h new file mode 100644 index 0000000..3785177 --- /dev/null +++ b/Smoke/divergence.h @@ -0,0 +1,16 @@ +#ifndef _DIVERGENCE_H +#define _DIVERGENCE_H + +void divergence_set_render(int render_divergence); +int divergence_get_render(void); + +void divergence_set_num_colors(int num_colors); +int divergence_get_num_colors(void); + +void divergence_set_colormap(int colormap); +int divergence_get_colormap(void); + + +struct color4f divergence_get_color(float value); + +#endif diff --git a/Smoke/flowvis.c b/Smoke/flowvis.c new file mode 100644 index 0000000..5adaf99 --- /dev/null +++ b/Smoke/flowvis.c @@ -0,0 +1,58 @@ +#ifdef G_OS_WIN32 +#define WIN32_LEAN_AND_MEAN 1 +#include <windows.h> +#endif + + +#include "funcs.h" +#include "palette.h" + +#include "flowvis.h" + + +static int flowvis_render = FALSE; + +static int flowvis_num_colors = PALETTE_MAXCOLORS; + +static int flowvis_colormap = PALETTE_BLACKWHITE; + + +void flowvis_set_render(int render_flowvis) +{ + flowvis_render = render_flowvis; +} + +int flowvis_get_render(void) +{ + return flowvis_render; +} + +void flowvis_set_num_colors(int num_colors) +{ + flowvis_num_colors = num_colors; +} + +int flowvis_get_num_colors(void) +{ + return flowvis_num_colors; +} + +void flowvis_set_colormap(int colormap) +{ + flowvis_colormap = colormap; +} + +int flowvis_get_colormap(void) +{ + return flowvis_colormap; +} + + +struct color4f flowvis_get_color(float value) +{ + struct color4f return_value; + + return_value = set_palette(flowvis_colormap, value, flowvis_num_colors); + + return return_value; +} diff --git a/Smoke/flowvis.h b/Smoke/flowvis.h new file mode 100644 index 0000000..dcbff60 --- /dev/null +++ b/Smoke/flowvis.h @@ -0,0 +1,16 @@ +#ifndef _FLOWVIS_H +#define _FLOWVIS_H + +void flowvis_set_render(int render_flowvi); +int flowvi_get_render(void); + +void flowvi_set_num_colors(int num_colors); +int flowvi_get_num_colors(void); + +void flowvi_set_colormap(int colormap); +int flowvi_get_colormap(void); + + +struct color4f flowvis_get_color(float value); + +#endif diff --git a/Smoke/fluids.c b/Smoke/fluids.c index 25d742f..3b3f8fe 100644 --- a/Smoke/fluids.c +++ b/Smoke/fluids.c @@ -16,9 +16,6 @@ #include "funcs.h" #include "fluids.h" -#include "palette.h" -#include "seedpoint.h" -#include "streamlines.h" //--- SIMULATION PARAMETERS ------------------------------------------------------------------------ const int DIM = 50; //size of simulation grid @@ -37,12 +34,7 @@ rfftwnd_plan plan_rc, plan_cr; //simulation domain discretization int winWidth, winHeight; //size of the graphics window, in pixels int color_dir = 0; //use direction color-coding or not float vec_scale = 1000; //scaling of hedgehogs -int draw_vecs = 1; //draw the vector field or not -int scalar_col = 0; //method for scalar coloring -int frozen = 0; //toggles on/off the animation int vis_dataset = DATASET_RHO; -int mousebutton; -int mousebuttonstate; int active_slider = 0; int glyph_scalar = SCALAR_RHO; int glyph_vector = VECTOR_VEL; @@ -383,124 +375,6 @@ void set_autoscaling(void) //threshold = (scale_min + scale_max) / 2; } -#define percentage(a, b) (min(a, b) / max(a, b)) - -void draw_isolines(float threshold) -{ - fftw_real wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width - fftw_real hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height - - int idx; - int i, j; - float v0, v1, v2, v3; - float x0, y0, x1, y1, x_offset, y_offset; - int state = 0; - static int prev_state = 0; - struct color4f colormap; - - v0 = v1 = v2 = v3 = 0.0f; - x0 = y0 = x1 = y1 = 0.0f; - - if (isolines_nr == 1) glLineWidth(2.0f); - else glLineWidth(2.0f); - glBegin(GL_LINES); - - for (i = 0; i < DIM - 1; i++) - { - for (j = 0; j < DIM - 1; j++) - { - state = 0; - idx = (j * DIM) + i; - colormap = set_palette(scalar_col, get_dataset(idx), 5); - glColor4f(colormap.r, colormap.g, colormap.b, 1.0f); - - v0 = get_dataset(idx + DIM); - v1 = get_dataset(idx + 1 + DIM); - v2 = get_dataset(idx + 1); - v3 = get_dataset(idx); - - if (v0 >= threshold) { state += 1; } - if (v1 >= threshold) { state += 2; } - if (v2 >= threshold) { state += 4; } - if (v3 >= threshold) { state += 8; } - - x_offset = wn + (fftw_real)i * wn; - y_offset = wn + (fftw_real)j * hn; - - switch (state) - { - case 5: - case 10: - x0 = 0; - y0 = percentage(fabs(v3 - v0), threshold) * hn; - x1 = percentage(fabs(v1 - v0), threshold) * wn; - y1 = hn; - if (x0 != y0 != x1 != y1 != 0.0f) { - glVertex3i(x_offset + x0, y_offset + y0, 0.0f); - glVertex3i(x_offset + x1, y_offset + y1, 0.0f); - } - // no break !! - case 4: - case 11: - x0 = percentage(fabs(v3 - v2), threshold) * wn; - y0 = 0; - x1 = wn; - y1 = percentage(fabs(v2 - v1), threshold) * hn; - break; - case 6: - case 9: - x0 = percentage(fabs(v3 - v2), threshold) * wn; - y0 = 0; - x1 = percentage(fabs(v1 - v0), threshold) * wn; - y1 = hn; - break; - case 7: - case 8: - x0 = percentage(fabs(v3 - v2), threshold) * wn; - y0 = 0; - x1 = 0; - y1 = percentage(fabs(v3 - v0), threshold) * hn; - break; - case 3: - case 12: - x0 = 0; - y0 = percentage(fabs(v3 - v0), threshold) * hn; - x1 = wn; - y1 = percentage(fabs(v2 - v1), threshold) * hn; - break; - case 2: - case 13: - x0 = percentage(fabs(v1 - v0), threshold) * wn; - y0 = hn; - x1 = wn; - y1 = percentage(fabs(v2 - v1), threshold) * hn; - break; - case 1: - case 14: - x0 = 0; - y0 = percentage(fabs(v3 - v0), threshold) * hn; - x1 = percentage(fabs(v1 - v0), threshold) * wn; - y1 = hn; - break; - case 0: case 15: default: - x0 = y0 = x1 = y1 = 0.0f; - break; - } - - // draw line - if (x0 != y0 != x1 != y1 != 0.0f) - { - glVertex3i(x_offset + x0, y_offset + y0, 0.0f); - glVertex3i(x_offset + x1, y_offset + y1, 0.0f); - } - - } - } - - glEnd(); -} - - //------ INTERACTION CODE STARTS HERE ----------------------------------------------------------------- void click(int button, int state, int mx, int my) @@ -610,7 +484,6 @@ void drag(int mx, int my) } } -void selectColor(int arg) { scalar_col = arg; } void select_dataset(int arg) { vis_dataset = arg; } void toggle_mouse_rotate(void) { rotate_plane = (rotate_plane) ? FALSE : TRUE; } void toggle_seed_insert(void) { seed_insert = (seed_insert) ? FALSE : TRUE; } diff --git a/Smoke/fluids.h b/Smoke/fluids.h index b08db20..47bb31f 100644 --- a/Smoke/fluids.h +++ b/Smoke/fluids.h @@ -43,14 +43,7 @@ extern int frame_index; extern int winWidth, winHeight; //size of the graphics window, in pixels extern int color_dir; //use direction color-coding or not extern float vec_scale; //scaling of hedgehogs -extern int draw_vecs; //draw the vector field or not -extern int scalar_col; //method for scalar coloring -extern int frozen; //toggles on/off the animation -extern int autoscale; extern int vis_dataset; -extern int mousebutton; -extern int mousebuttonstate; -extern int active_slider; extern int glyph_scalar; extern int glyph_vector; @@ -72,40 +65,13 @@ void keyboard(unsigned char key, int x, int y); void calculate_one_simulation_step(void); -int get_glyph_usage(void); - -////////////////// - -void init_simulation(int n); -int rescale_to_winwidth(float value); -void FFT(int direction,void* vx); -int clamp(float x); -void solve(int n, fftw_real* vx, fftw_real* vy, fftw_real* vx0, fftw_real* vy0, fftw_real visc, fftw_real dt); -void diffuse_matter(int n, fftw_real *vx, fftw_real *vy, fftw_real *rho, fftw_real *rho0, fftw_real dt); -void set_forces(void); -void calculate_hight_plot(void); -void copy_frame(void); -void calculate_one_simulation_step(void);; -float remap(float value); -void direction_to_color(float x, float y, int method); float get_dataset(int index); void set_autoscaling(void); -void draw_isolines(float threshold); -void visualize(void); -void keyboard(unsigned char key, int x, int y); -void click(int button, int state, int mx, int my); void mouse_rotate(int mx, int my); -void drag(int mx, int my); ////////////////// -int get_glyph_usage(void); -void selectColor(int arg); void select_dataset(int arg); -void toggle_autoscale(void); -void toggle_clamping(void); -void show_options(void); -void toggle_glyph_usage(void); void toggle_mouse_rotate(void); void toggle_seed_insert(void); void set_glyph_scalar(int arg); diff --git a/Smoke/funcs.h b/Smoke/funcs.h index dcb8ce4..cfb0000 100644 --- a/Smoke/funcs.h +++ b/Smoke/funcs.h @@ -12,6 +12,8 @@ #define round(x) (int)(x < 0 ? x - 0.5 : x + 0.5)
+#define percentage(a, b) (min(a, b) / max(a, b))
+
#define FALSE 0
#define TRUE !FALSE
diff --git a/Smoke/glyphs.c b/Smoke/glyphs.c index 2c60aa0..c2b9840 100644 --- a/Smoke/glyphs.c +++ b/Smoke/glyphs.c @@ -37,12 +37,12 @@ int glyphs_get_num_colors(void) return glyphs_num_colors;
}
-void glyphs_set_map(int colormap)
+void glyphs_set_colormap(int colormap)
{
glyphs_colormap = colormap;
}
-int glyphs_get_map(void)
+int glyphs_get_colormap(void)
{
return glyphs_colormap;
}
diff --git a/Smoke/gtk.c b/Smoke/gtk.c index 9c91164..51016dd 100644 --- a/Smoke/gtk.c +++ b/Smoke/gtk.c @@ -45,16 +45,20 @@ #include <GL/gl.h> #include <GL/glu.h> -#include <rfftw.h> //the numerical simulation FFTW library - +#include <rfftw.h> //the numerical simulation FFTW library #include "fluids.h" + #include "palette.h" #include "renderer_gl.h" -#include "seedpoint.h" - #include "gtk_colormap.h" #include "gtk_glyphs.h" +#include "gtk_divergence.h" +#include "gtk_isolines.h" +#include "gtk_heightplots.h" +#include "gtk_streamlines.h" + +#include "gtk_main.h" /************************************************************************** * The following section contains all the macro definitions. @@ -423,10 +427,6 @@ key_press_event (GtkWidget *widget, } break; - case GDK_m: - scalar_col++; if (scalar_col > PALETTE_OLIVER) scalar_col = PALETTE_BLACKWHITE; - break; - case GDK_a: // g_print ("a key\n"); toggle_animation (widget); @@ -549,7 +549,7 @@ visibility_notify_event (GtkWidget *widget, static void toggle_animation (GtkWidget *widget) { - frozen = animate = !animate; + animate = !animate; if (animate) { @@ -586,13 +586,6 @@ create_popup_menu (GtkWidget *drawing_area) G_CALLBACK (toggle_animation), drawing_area); gtk_widget_show (menu_item); - /* Toggle glyphs */ -// menu_item = gtk_menu_item_new_with_label ("Glyphs"); -// gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); -// g_signal_connect_swapped (G_OBJECT (menu_item), "activate", -// G_CALLBACK (set_glyph_usage), drawing_area); -// gtk_widget_show (menu_item); - /* Quit */ menu_item = gtk_menu_item_new_with_label ("Quit"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); @@ -602,178 +595,8 @@ create_popup_menu (GtkWidget *drawing_area) return menu; } - - -void show_settings(GtkWidget *notebook) -{ - -} #endif -static gboolean select_render_smoke(GtkWidget *button, gpointer data) { - smoke_set_render(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))); -} - - -static gboolean select_render_glyphs(GtkWidget *button, gpointer data) { - glyphs_set_render(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))); -} - -static gboolean -select_palette(GtkComboBox *combo, gpointer data) { - g_print("combo: %d\n", gtk_combo_box_get_active(combo)); - selectColor(gtk_combo_box_get_active(combo)); -} - -/* - * Draw main notebook page - */ -GtkWidget *create_main_page(void) -{ - /* in reality a page is really just a vbox filled with other widgets - */ - GtkWidget *page; - GtkWidget *frame; - GtkWidget *box; - GtkWidget *button; - GtkWidget *combo; - GSList *dataset_group; - - page = gtk_vbox_new(FALSE, 0); - - - box = gtk_vbox_new(FALSE, 0); - button = gtk_check_button_new_with_label("Draw Smoke"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); - g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_render_smoke), NULL); - gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); - gtk_widget_show(button); - - button = gtk_check_button_new_with_label("Draw Glyphs"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); - g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_render_glyphs), NULL); - gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); - gtk_widget_show(button); - - gtk_box_pack_start (GTK_BOX(page), box, FALSE, TRUE, 0); - gtk_widget_show(box); - - - frame = gtk_frame_new("Dataset"); - - box = gtk_hbox_new(FALSE, 0); - - button = gtk_radio_button_new_with_label (NULL, "Rho"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); - g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_RHO); - gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); - gtk_widget_show(button); - - dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button)); - - button = gtk_radio_button_new_with_label(dataset_group, "Velocity"); - g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_VEL); - gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); - gtk_widget_show(button); - - button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force"); - g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_FORCE); - gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); - gtk_widget_show(button); - - gtk_container_add(GTK_CONTAINER(frame), box); - gtk_widget_show(box); - - gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0); - gtk_widget_show(frame); - - frame = gtk_frame_new("Colormap"); - - box = gtk_hbox_new(FALSE, 0); - - combo = gtk_combo_box_new_text(); - - gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Black & White"); - gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Rainbow"); - gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Bands"); - gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Wilrik"); - gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Oliver"); - - g_signal_connect(combo, "changed", - G_CALLBACK(select_palette), (gpointer)NULL); - - gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); - - gtk_box_pack_start(GTK_BOX(box), combo, FALSE, TRUE, 0); - gtk_widget_show(combo); - - gtk_container_add(GTK_CONTAINER(frame), box); - gtk_widget_show(box); - - gtk_box_pack_start(GTK_BOX(page), frame, FALSE, TRUE, 0); - - gtk_widget_show(frame); - - return page; -} - -GtkWidget *create_divergence_page(void) -{ - /* in reality a page is really just a vbox filled with other widgets - */ - GtkWidget *page; - - page = gtk_vbox_new(FALSE, 0); - - return page; -} - -/* - * Draw isolines notebook page - */ -GtkWidget *create_isolines_page(void) -{ - /* in reality a page is really just a vbox filled with other widgets - */ - GtkWidget *page; - - page = gtk_vbox_new(FALSE, 0); - - return page; -} -/* - * Draw height plots notebook page - */ -GtkWidget *create_height_plots_page(void) -{ - /* in reality a page is really just a vbox filled with other widgets - */ - GtkWidget *page; - - page = gtk_vbox_new(FALSE, 0); - - return page; -} - -GtkWidget *create_stream_tubes_page(void) -{ - int i, max; - GtkWidget *page; - - page = gtk_vbox_new(FALSE, 0); - - return page; -} - -GtkWidget *create_animated_textures_page(void) -{ - int i, max; - GtkWidget *page; - - page = gtk_vbox_new(FALSE, 0); - - return page; -} /*** *** Creates the simple application window with one @@ -909,7 +732,7 @@ create_window (GdkGLConfig *glconfig) gtk_notebook_append_page(GTK_NOTEBOOK(settings_notebook), notebook_page, notebook_page_label); - notebook_page_label = gtk_label_new("Colormaps"); + notebook_page_label = gtk_label_new("Colormap"); gtk_widget_show(notebook_page_label); notebook_page = create_colormap_page(); @@ -941,26 +764,26 @@ create_window (GdkGLConfig *glconfig) gtk_notebook_append_page(GTK_NOTEBOOK(settings_notebook), notebook_page, notebook_page_label); - notebook_page_label = gtk_label_new("Height plots"); + notebook_page_label = gtk_label_new("Height Plots"); gtk_widget_show(notebook_page_label); - notebook_page = create_height_plots_page(); + notebook_page = create_heightplots_page(); gtk_widget_show(notebook_page); gtk_notebook_append_page(GTK_NOTEBOOK(settings_notebook), notebook_page, notebook_page_label); - notebook_page_label = gtk_label_new("Stream tubes"); + notebook_page_label = gtk_label_new("Stream Tubes"); gtk_widget_show(notebook_page_label); - notebook_page = create_stream_tubes_page(); + notebook_page = create_streamlines_page(); gtk_widget_show(notebook_page); gtk_notebook_append_page(GTK_NOTEBOOK(settings_notebook), notebook_page, notebook_page_label); - notebook_page_label = gtk_label_new("Animated Textures"); + notebook_page_label = gtk_label_new("Flow Vis"); gtk_widget_show(notebook_page_label); - notebook_page = create_animated_textures_page(); + notebook_page = create_flowvis_page(); gtk_widget_show(notebook_page); gtk_notebook_append_page(GTK_NOTEBOOK(settings_notebook), notebook_page, notebook_page_label); diff --git a/Smoke/gtk_colormap.c b/Smoke/gtk_colormap.c index 7be65a8..5a1894d 100644 --- a/Smoke/gtk_colormap.c +++ b/Smoke/gtk_colormap.c @@ -9,7 +9,7 @@ static gboolean select_colormap(GtkComboBox *combo, gpointer data) { - colormap_set_map(gtk_combo_box_get_active(combo)); + colormap_set_colormap(gtk_combo_box_get_active(combo)); } diff --git a/Smoke/gtk_divergence.c b/Smoke/gtk_divergence.c new file mode 100644 index 0000000..5a72acc --- /dev/null +++ b/Smoke/gtk_divergence.c @@ -0,0 +1,29 @@ +#include <gtk/gtk.h> + + +#include "gtk_divergence.h" + + +static gboolean select_colormap(GtkComboBox *combo, gpointer data) +{ + divergence_set_colormap(gtk_combo_box_get_active(combo)); +} + + +static gboolean select_num_colors(GtkRange *adjustment, gpointer data) +{ + divergence_set_num_colors((int)gtk_range_get_value(adjustment)); +} + + + +GtkWidget *create_divergence_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + + page = gtk_vbox_new(FALSE, 0); + + return page; +} diff --git a/Smoke/gtk_divergence.h b/Smoke/gtk_divergence.h new file mode 100644 index 0000000..a244571 --- /dev/null +++ b/Smoke/gtk_divergence.h @@ -0,0 +1,6 @@ +#ifndef _GTK_DIVERGENCE_H +#define _GTK_DIVERGENCE_H + +GtkWidget *create_divergence_page(void); + +#endif diff --git a/Smoke/gtk_flowvis.c b/Smoke/gtk_flowvis.c new file mode 100644 index 0000000..7a56f4f --- /dev/null +++ b/Smoke/gtk_flowvis.c @@ -0,0 +1,29 @@ +#include <gtk/gtk.h> + + +#include "gtk_flowvis.h" + + +static gboolean select_colormap(GtkComboBox *combo, gpointer data) +{ + flowvis_set_colormap(gtk_combo_box_get_active(combo)); +} + + +static gboolean select_num_colors(GtkRange *adjustment, gpointer data) +{ + flowvis_set_num_colors((int)gtk_range_get_value(adjustment)); +} + + + +GtkWidget *create_flowvis_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + + page = gtk_vbox_new(FALSE, 0); + + return page; +} diff --git a/Smoke/gtk_flowvis.h b/Smoke/gtk_flowvis.h new file mode 100644 index 0000000..c98a6aa --- /dev/null +++ b/Smoke/gtk_flowvis.h @@ -0,0 +1,6 @@ +#ifndef _GTK_FLOWVIS_H +#define _GTK_FLOWVIS_H + +GtkWidget *create_flowvis_page(void); + +#endif diff --git a/Smoke/gtk_glyphs.c b/Smoke/gtk_glyphs.c index 9ea1f14..b3bebe9 100644 --- a/Smoke/gtk_glyphs.c +++ b/Smoke/gtk_glyphs.c @@ -12,7 +12,7 @@ static gboolean select_colormap(GtkComboBox *combo, gpointer data) { - glyphs_set_map(gtk_combo_box_get_active(combo)); + glyphs_set_colormap(gtk_combo_box_get_active(combo)); } diff --git a/Smoke/gtk_heightplots.c b/Smoke/gtk_heightplots.c new file mode 100644 index 0000000..9e3d52a --- /dev/null +++ b/Smoke/gtk_heightplots.c @@ -0,0 +1,29 @@ +#include <gtk/gtk.h> + + +#include "gtk_heightplots.h" + + +static gboolean select_colormap(GtkComboBox *combo, gpointer data) +{ + heightplots_set_colormap(gtk_combo_box_get_active(combo)); +} + + +static gboolean select_num_colors(GtkRange *adjustment, gpointer data) +{ + heightplots_set_num_colors((int)gtk_range_get_value(adjustment)); +} + + + +GtkWidget *create_heightplots_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + + page = gtk_vbox_new(FALSE, 0); + + return page; +} diff --git a/Smoke/gtk_heightplots.h b/Smoke/gtk_heightplots.h new file mode 100644 index 0000000..634ed72 --- /dev/null +++ b/Smoke/gtk_heightplots.h @@ -0,0 +1,6 @@ +#ifndef _GTK_HEIGHTPLOTS_H +#define _GTK_HEIGHTPLOTS_H + +GtkWidget *create_heightplots_page(void); + +#endif diff --git a/Smoke/gtk_isolines.c b/Smoke/gtk_isolines.c new file mode 100644 index 0000000..647d393 --- /dev/null +++ b/Smoke/gtk_isolines.c @@ -0,0 +1,143 @@ +#include <gtk/gtk.h> + +#include <rfftw.h> +#include "fluids.h" + + +#include "palette.h" +#include "glyphs.h" + +#include "gtk_isolines.h" + + +static gboolean select_colormap(GtkComboBox *combo, gpointer data) +{ + isolines_set_colormap(gtk_combo_box_get_active(combo)); +} + + +static gboolean select_num_colors(GtkRange *adjustment, gpointer data) +{ + isolines_set_num_colors((int)gtk_range_get_value(adjustment)); +} + + +GtkWidget *create_isolines_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + GtkWidget *frame; + GtkWidget *box; + GtkWidget *label; + GtkWidget *button; + GtkWidget *combo; + GtkAdjustment *color_adjustment; + GtkWidget *color_scale; + GSList *dataset_group; + + page = gtk_vbox_new(FALSE, 0); + + frame = gtk_frame_new("Scalarset"); + + box = gtk_hbox_new(FALSE, 0); + + button = gtk_radio_button_new_with_label (NULL, "Rho"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_RHO); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button)); + + button = gtk_radio_button_new_with_label(dataset_group, "Velocity"); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_VEL); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force"); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_FORCE); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + gtk_container_add(GTK_CONTAINER(frame), box); + gtk_widget_show(box); + + gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0); + gtk_widget_show(frame); + + frame = gtk_frame_new("Vectorset"); + + box = gtk_hbox_new(FALSE, 0); + + button = gtk_radio_button_new_with_label(NULL, "Velocity"); + // g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_vector), (gpointer)VECTOR_VEL); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button)); + + button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force"); + // g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_vector), (gpointer)VECTOR_FORCE); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + gtk_container_add(GTK_CONTAINER(frame), box); + gtk_widget_show(box); + + gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0); + gtk_widget_show(frame); + + + frame = gtk_frame_new("Colors"); + + box = gtk_vbox_new(FALSE, 0); + + + label = gtk_label_new("Colormap"); + + gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0); + gtk_widget_show(label); + + + combo = gtk_combo_box_new_text(); + + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Black & White"); + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Rainbow"); + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Bands"); + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Wilrik"); + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Oliver"); + + gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); + g_signal_connect(combo, "changed", G_CALLBACK(select_colormap), (gpointer)NULL); + + gtk_box_pack_start(GTK_BOX(box), combo, FALSE, TRUE, 0); + gtk_widget_show(combo); + + + label = gtk_label_new("Number of Colors"); + + gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0); + gtk_widget_show(label); + + + color_adjustment = GTK_ADJUSTMENT(gtk_adjustment_new( + PALETTE_MAXCOLORS, 1, PALETTE_MAXCOLORS +1, 0.5, 5, 1)); + color_scale = gtk_hscale_new(color_adjustment); + gtk_scale_set_digits(GTK_SCALE(color_scale), 0); + g_signal_connect(GTK_RANGE(color_scale), "value-changed", G_CALLBACK(select_num_colors), NULL); + + gtk_box_pack_start(GTK_BOX(box), color_scale, FALSE, TRUE, 0); + gtk_widget_show(color_scale); + + + gtk_container_add(GTK_CONTAINER(frame), box); + gtk_widget_show(box); + + gtk_box_pack_start(GTK_BOX(page), frame, FALSE, TRUE, 0); + + gtk_widget_show(frame); + + + return page; +} diff --git a/Smoke/gtk_isolines.h b/Smoke/gtk_isolines.h new file mode 100644 index 0000000..c800cd0 --- /dev/null +++ b/Smoke/gtk_isolines.h @@ -0,0 +1,6 @@ +#ifndef _GTK_ISOLINES_H +#define _GTK_ISOLINES_H + +GtkWidget *create_isolines_page(void); + +#endif diff --git a/Smoke/gtk_main.c b/Smoke/gtk_main.c new file mode 100644 index 0000000..81e4d8c --- /dev/null +++ b/Smoke/gtk_main.c @@ -0,0 +1,91 @@ +#include <gtk/gtk.h> + + +#include <rfftw.h> +#include "fluids.h" + + +#include "gtk_main.h" + + + +static gboolean select_render_smoke(GtkWidget *button, gpointer data) { + smoke_set_render(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))); +} + + +static gboolean select_render_glyphs(GtkWidget *button, gpointer data) { + glyphs_set_render(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))); +} + +static gboolean select_render_isolines(GtkWidget *button, gpointer data) { + isolines_set_render(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))); +} + + +GtkWidget *create_main_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + GtkWidget *frame; + GtkWidget *box; + GtkWidget *button; + GtkWidget *combo; + GSList *dataset_group; + + page = gtk_vbox_new(FALSE, 0); + + box = gtk_vbox_new(FALSE, 0); + button = gtk_check_button_new_with_label("Draw Smoke"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_render_smoke), NULL); + gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + button = gtk_check_button_new_with_label("Draw Glyphs"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_render_glyphs), NULL); + gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + button = gtk_check_button_new_with_label("Draw Isolines"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(select_render_isolines), NULL); + gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + gtk_box_pack_start (GTK_BOX(page), box, FALSE, TRUE, 0); + gtk_widget_show(box); + + + frame = gtk_frame_new("Dataset"); + + box = gtk_hbox_new(FALSE, 0); + + button = gtk_radio_button_new_with_label (NULL, "Rho"); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_RHO); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button)); + + button = gtk_radio_button_new_with_label(dataset_group, "Velocity"); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_VEL); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force"); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_FORCE); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); + + gtk_container_add(GTK_CONTAINER(frame), box); + gtk_widget_show(box); + + gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0); + gtk_widget_show(frame); + + return page; +} diff --git a/Smoke/gtk_main.h b/Smoke/gtk_main.h new file mode 100644 index 0000000..e404129 --- /dev/null +++ b/Smoke/gtk_main.h @@ -0,0 +1,6 @@ +#ifndef _GTK_MAIN_H +#define _GTK_MAIN_H + +GtkWidget *create_main_page(void); + +#endif diff --git a/Smoke/gtk_streamlines.c b/Smoke/gtk_streamlines.c new file mode 100644 index 0000000..67a6661 --- /dev/null +++ b/Smoke/gtk_streamlines.c @@ -0,0 +1,93 @@ +#include <gtk/gtk.h> + +#include <rfftw.h> +#include "fluids.h" + + +#include "palette.h" +#include "streamlines.h" + +#include "gtk_streamlines.h" + + + +static gboolean select_colormap(GtkComboBox *combo, gpointer data) +{ + streamlines_set_colormap(gtk_combo_box_get_active(combo)); +} + + +static gboolean select_num_colors(GtkRange *adjustment, gpointer data) +{ + streamlines_set_num_colors((int)gtk_range_get_value(adjustment)); +} + + +GtkWidget *create_streamlines_page(void) +{ + /* in reality a page is really just a vbox filled with other widgets + */ + GtkWidget *page; + GtkWidget *frame; + GtkWidget *box; + GtkWidget *label; + GtkWidget *button; + GtkWidget *combo; + GtkAdjustment *color_adjustment; + GtkWidget *color_scale; + GSList *dataset_group; + + page = gtk_vbox_new(FALSE, 0); + + frame = gtk_frame_new("Colors"); + + box = gtk_vbox_new(FALSE, 0); + + + label = gtk_label_new("Colormap"); + + gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0); + gtk_widget_show(label); + + + combo = gtk_combo_box_new_text(); + + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Black & White"); + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Rainbow"); + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Bands"); + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Wilrik"); + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Oliver"); + + gtk_combo_box_set_active(GTK_COMBO_BOX(combo), 0); + g_signal_connect(combo, "changed", G_CALLBACK(select_colormap), (gpointer)NULL); + + gtk_box_pack_start(GTK_BOX(box), combo, FALSE, TRUE, 0); + gtk_widget_show(combo); + + + label = gtk_label_new("Number of Colors"); + + gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0); + gtk_widget_show(label); + + + color_adjustment = GTK_ADJUSTMENT(gtk_adjustment_new( + PALETTE_MAXCOLORS, 1, PALETTE_MAXCOLORS +1, 0.5, 5, 1)); + color_scale = gtk_hscale_new(color_adjustment); + gtk_scale_set_digits(GTK_SCALE(color_scale), 0); + g_signal_connect(GTK_RANGE(color_scale), "value-changed", G_CALLBACK(select_num_colors), NULL); + + gtk_box_pack_start(GTK_BOX(box), color_scale, FALSE, TRUE, 0); + gtk_widget_show(color_scale); + + + gtk_container_add(GTK_CONTAINER(frame), box); + gtk_widget_show(box); + + gtk_box_pack_start(GTK_BOX(page), frame, FALSE, TRUE, 0); + + gtk_widget_show(frame); + + + return page; +} diff --git a/Smoke/gtk_streamlines.h b/Smoke/gtk_streamlines.h new file mode 100644 index 0000000..f828b62 --- /dev/null +++ b/Smoke/gtk_streamlines.h @@ -0,0 +1,6 @@ +#ifndef _GTK_STREAMLINES_H +#define _GTK_STREAMLINES_H + +GtkWidget *create_streamlines_page(void); + +#endif diff --git a/Smoke/heightplots.c b/Smoke/heightplots.c new file mode 100644 index 0000000..57d9054 --- /dev/null +++ b/Smoke/heightplots.c @@ -0,0 +1,58 @@ +#ifdef G_OS_WIN32 +#define WIN32_LEAN_AND_MEAN 1 +#include <windows.h> +#endif + + +#include "funcs.h" +#include "palette.h" + +#include "heightplots.h" + + +static int heightplots_render = FALSE; + +static int heightplots_num_colors = PALETTE_MAXCOLORS; + +static int heightplots_colormap = PALETTE_BLACKWHITE; + + +void heightplots_set_render(int render_heightplots) +{ + heightplots_render = render_heightplots; +} + +int heightplots_get_render(void) +{ + return heightplots_render; +} + +void heightplots_set_num_colors(int num_colors) +{ + heightplots_num_colors = num_colors; +} + +int heightplots_get_num_colors(void) +{ + return heightplots_num_colors; +} + +void heightplots_set_colormap(int colormap) +{ + heightplots_colormap = colormap; +} + +int heightplots_get_colormap(void) +{ + return heightplots_colormap; +} + + +struct color4f heightplots_get_color(float value) +{ + struct color4f return_value; + + return_value = set_palette(heightplots_colormap, value, heightplots_num_colors); + + return return_value; +} diff --git a/Smoke/heightplots.h b/Smoke/heightplots.h new file mode 100644 index 0000000..6bdaa51 --- /dev/null +++ b/Smoke/heightplots.h @@ -0,0 +1,16 @@ +#ifndef _HEIGHTPLOTS_H +#define _HEIGHTPLOTS_H + +void heightplots_set_render(int render_heightplots); +int heightplots_get_render(void); + +void heightplots_set_num_colors(int num_colors); +int heightplots_get_num_colors(void); + +void heightplots_set_colormap(int colormap); +int heightplots_get_colormap(void); + + +struct color4f heightplots_get_color(float value); + +#endif diff --git a/Smoke/isolines.c b/Smoke/isolines.c new file mode 100644 index 0000000..5355b83 --- /dev/null +++ b/Smoke/isolines.c @@ -0,0 +1,58 @@ +#ifdef G_OS_WIN32 +#define WIN32_LEAN_AND_MEAN 1 +#include <windows.h> +#endif + + +#include "funcs.h" +#include "palette.h" + +#include "isolines.h" + + +static int isolines_render = FALSE; + +static int isolines_num_colors = PALETTE_MAXCOLORS; + +static int isolines_colormap = PALETTE_BLACKWHITE; + + +void isolines_set_render(int render_isolines) +{ + isolines_render = render_isolines; +} + +int isolines_get_render(void) +{ + return isolines_render; +} + +void isolines_set_num_colors(int num_colors) +{ + isolines_num_colors = num_colors; +} + +int isolines_get_num_colors(void) +{ + return isolines_num_colors; +} + +void isolines_set_colormap(int colormap) +{ + isolines_colormap = colormap; +} + +int isolines_get_colormap(void) +{ + return isolines_colormap; +} + + +struct color4f isolines_get_color(float value) +{ + struct color4f return_value; + + return_value = set_palette(isolines_colormap, value, isolines_num_colors); + + return return_value; +} diff --git a/Smoke/isolines.h b/Smoke/isolines.h new file mode 100644 index 0000000..f47b645 --- /dev/null +++ b/Smoke/isolines.h @@ -0,0 +1,16 @@ +#ifndef _ISOLINES_H +#define _ISOLINES_H + +void isolines_set_render(int render_isolines); +int isolines_get_render(void); + +void isolines_set_num_colors(int num_colors); +int isolines_get_num_colors(void); + +void isolines_set_colormap(int colormap); +int isolines_get_colormap(void); + + +struct color4f isolines_get_color(float value); + +#endif diff --git a/Smoke/palette.c b/Smoke/palette.c index e5727c9..fbf4c25 100644 --- a/Smoke/palette.c +++ b/Smoke/palette.c @@ -6,10 +6,101 @@ #include <math.h> + #include "funcs.h" + #include "palette.h" +void HSVtoRGB(float *r, float *g, float *b, float h, float s, float v) +{ + int i; + float f, p, q, t; + + if( s == 0 ) { + // achromatic (grey) + *r = *g = *b = v; + return; + } + + h /= 60; // sector 0 to 5 + i = floor(h); + f = h - i; // factorial part of h + p = v * (1 - s); + q = v * (1 - s * f); + t = v * (1 - s * (1 - f)); + + switch(i) { + case 0: + *r = v; + *g = t; + *b = p; + break; + case 1: + *r = q; + *g = v; + *b = p; + break; + case 2: + *r = p; + *g = v; + *b = t; + break; + case 3: + *r = p; + *g = q; + *b = v; + break; + case 4: + *r = t; + *g = p; + *b = v; + break; + default: // case 5: + *r = v; + *g = p; + *b = q; + break; + } + +} + +// r,g,b values are from 0 to 1 +// h = [0,360], s = [0,1], v = [0,1] +// if s == 0, then h = -1 (undefined) +void RGBtoHSV(float r, float g, float b, float *h, float *s, float *v) +{ + float min, max, delta; + + min = MIN3(r, g, b); + max = MAX3(r, g, b); + *v = max; // v + + delta = max - min; + + if(max != 0) { + *s = delta / max; // s + } else { + // r = g = b = 0 // s = 0, v is undefined + *s = 0; + *h = -1; + return; + } + + if(r == max) { + *h = ( g - b ) / delta; // between yellow & magenta + } else if(g == max) { + *h = 2 + (b - r) / delta; // between cyan & yellow + } else { + *h = 4 + (r - g) / delta; // between magenta & cyan + } + *h *= 60; // degrees + if(*h < 0) { + *h += 360; + } +} + + //rainbow: Implements a color palette, mapping the scalar 'value' to a rainbow color RGB void rainbow(float value, float *R, float *G, float *B) { diff --git a/Smoke/palette.h b/Smoke/palette.h index b5c7941..46d8e5a 100644 --- a/Smoke/palette.h +++ b/Smoke/palette.h @@ -17,6 +17,11 @@ struct color4f { float a; }; + +void HSVtoRGB(float *r, float *g, float *b, float h, float s, float v); +void RGBtoHSV(float r, float g, float b, float *h, float *s, float *v); + + struct color4f set_palette(int colormap_sort, float value, int num_colors); #endif diff --git a/Smoke/renderer_gl.c b/Smoke/renderer_gl.c index 0a15d42..2e56b04 100644 --- a/Smoke/renderer_gl.c +++ b/Smoke/renderer_gl.c @@ -17,6 +17,9 @@ #include "palette.h" #include "colormap.h" #include "glyphs.h" +#include "isolines.h" + +#include "seedpoint.h" #include "renderer_gl.h" @@ -153,7 +156,7 @@ static void render_smoke(void) } -void render_glyph(float x_value, float y_value, float i, float j) +static void render_glyph(float x_value, float y_value, float i, float j) { float x0, y0, z0, x1, y1, z1, x_dev, y_dev, size, length; float scale = (float)((float)DIM / (float)get_var_dims()) / 6; @@ -253,7 +256,7 @@ void render_glyph(float x_value, float y_value, float i, float j) glDeleteLists(startList, 1); } -void draw_glyphs(void) +static void draw_glyphs(void) { int i, j, idx; float value, scale, idxcf, idxrf; @@ -302,6 +305,173 @@ void draw_glyphs(void) } +static void render_isolines(void) +{ + fftw_real wn = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width + fftw_real hn = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell height + + if (glyph_scalar == SCALAR_RHO) + { + int count; + float iso_scale; + + if (isolines_nr) { + iso_scale = fabs(threshold1 - threshold2) / isolines_nr; + } else { + iso_scale = 0.0f; + } + + for (count = 0; count < isolines_nr; count++) + { + int idx; + int i, j; + float v0, v1, v2, v3; + float x0, y0, x1, y1, x_offset, y_offset; + int state = 0; + static int prev_state = 0; + struct color4f color; + float threshold; + + v0 = v1 = v2 = v3 = 0.0f; + x0 = y0 = x1 = y1 = 0.0f; + + threshold = min(threshold1, threshold2) + count * iso_scale; + + if (isolines_nr == 1) glLineWidth(2.0f); + else glLineWidth(2.0f); + glBegin(GL_LINES); + + for (i = 0; i < DIM - 1; i++) + { + for (j = 0; j < DIM - 1; j++) + { + state = 0; + idx = (j * DIM) + i; + color = isolines_get_color(get_dataset(idx)); + glColor4f(color.r, color.g, color.b, 1.0f); + + v0 = get_dataset(idx + DIM); + v1 = get_dataset(idx + 1 + DIM); + v2 = get_dataset(idx + 1); + v3 = get_dataset(idx); + + if (v0 >= threshold) { state += 1; } + if (v1 >= threshold) { state += 2; } + if (v2 >= threshold) { state += 4; } + if (v3 >= threshold) { state += 8; } + + x_offset = wn + (fftw_real)i * wn; + y_offset = wn + (fftw_real)j * hn; + + switch (state) + { + case 5: + case 10: + x0 = 0; + y0 = percentage(fabs(v3 - v0), threshold) * hn; + x1 = percentage(fabs(v1 - v0), threshold) * wn; + y1 = hn; + if (x0 != y0 != x1 != y1 != 0.0f) { + glVertex3i(x_offset + x0, y_offset + y0, 0.0f); + glVertex3i(x_offset + x1, y_offset + y1, 0.0f); + } + // no break !! + case 4: + case 11: + x0 = percentage(fabs(v3 - v2), threshold) * wn; + y0 = 0; + x1 = wn; + y1 = percentage(fabs(v2 - v1), threshold) * hn; + break; + case 6: + case 9: + x0 = percentage(fabs(v3 - v2), threshold) * wn; + y0 = 0; + x1 = percentage(fabs(v1 - v0), threshold) * wn; + y1 = hn; + break; + case 7: + case 8: + x0 = percentage(fabs(v3 - v2), threshold) * wn; + y0 = 0; + x1 = 0; + y1 = percentage(fabs(v3 - v0), threshold) * hn; + break; + case 3: + case 12: + x0 = 0; + y0 = percentage(fabs(v3 - v0), threshold) * hn; + x1 = wn; + y1 = percentage(fabs(v2 - v1), threshold) * hn; + break; + case 2: + case 13: + x0 = percentage(fabs(v1 - v0), threshold) * wn; + y0 = hn; + x1 = wn; + y1 = percentage(fabs(v2 - v1), threshold) * hn; + break; + case 1: + case 14: + x0 = 0; + y0 = percentage(fabs(v3 - v0), threshold) * hn; + x1 = percentage(fabs(v1 - v0), threshold) * wn; + y1 = hn; + break; + case 0: case 15: default: + x0 = y0 = x1 = y1 = 0.0f; + break; + } + + // draw line + if (x0 != y0 != x1 != y1 != 0.0f) + { + glVertex3i(x_offset + x0, y_offset + y0, 0.0f); + glVertex3i(x_offset + x1, y_offset + y1, 0.0f); + } + + } + } + + glEnd(); + } + } +} + + +static void render_streamlines(void) +{ + int i, j, k, l, idx; + float v; + struct point p; + int *frame_history; + fftw_real cell_x, cell_y; + + i = j = k = l = 0; + + for (i = 0; i < get_cur_seedpoint(); i++) + { + p = get_seedpoint(i); + + while (j < DIM) + { + frame_history = frame_hist[j]; + + cell_x = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width + cell_y = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell heigh + + cell_x = round(p.x / cell_x); + cell_y = round(p.y / cell_y); + + idx = cell_x + (cell_y * DIM) + (j * DIM * DIM); + //v = frame_history[idx]; + + j++; + } + } +} + + void zoom_in(int zoom) { z_pos += zoom; @@ -323,7 +493,8 @@ void visualize(void) render_legend(); - // Rotate field + /* Rotate field + */ glLoadIdentity(); glTranslatef(x_pos, y_pos, z_pos); glRotatef(x_rot, 1.0f, 0.0f, 0.0f); @@ -332,32 +503,21 @@ void visualize(void) glTranslatef(-(wn*DIM)/2, -(hn*DIM)/2, 0.0f); - // draw isolines - if (glyph_scalar == SCALAR_RHO) - { - int count; - float iso_scale; - - if (isolines_nr) iso_scale = fabs(threshold1 - threshold2) / isolines_nr; - else iso_scale = 0.0f; - - for (count = 0; count < isolines_nr; count++) - { - draw_isolines(min(threshold1, threshold2) + count * iso_scale); - } + if (isolines_get_render()) { + render_isolines(); } - // draw the smoke - if (smoke_get_render()) - { + if (smoke_get_render()) { render_smoke(); } - if (glyphs_get_render()) - { + if (glyphs_get_render()) { draw_glyphs(); } render_seedpoints(); - render_streamlines(); + + if (streamlines_get_render()) { + render_streamlines(); + } } diff --git a/Smoke/smoke.bin b/Smoke/smoke.bin Binary files differindex 4c2ab2f..02062ff 100755 --- a/Smoke/smoke.bin +++ b/Smoke/smoke.bin diff --git a/Smoke/streamlines.c b/Smoke/streamlines.c index 59f9b33..acfc016 100644 --- a/Smoke/streamlines.c +++ b/Smoke/streamlines.c @@ -1,47 +1,58 @@ -// Includes - #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif -#include <rfftw.h> -#include <GL/gl.h> -#include <GL/glu.h> -#include "fluids.h" -#include "streamlines.h" -#include "seedpoint.h" #include "funcs.h" +#include "palette.h" + +#include "streamlines.h" + + +static int streamlines_render = FALSE; -void render_streamlines(void) +static int streamlines_num_colors = PALETTE_MAXCOLORS; + +static int streamlines_colormap = PALETTE_BLACKWHITE; + + +void streamlines_set_render(int render_streamlines) { - int i, j, k, l, idx; - float v; - struct point p; - int *frame_history; - fftw_real cell_x, cell_y; + streamlines_render = render_streamlines; +} - i = j = k = l = 0; +int streamlines_get_render(void) +{ + return streamlines_render; +} - for (i = 0; i < get_cur_seedpoint(); i++) - { - p = get_seedpoint(i); +void streamlines_set_num_colors(int num_colors) +{ + streamlines_num_colors = num_colors; +} - while (j < DIM) - { - frame_history = frame_hist[j]; +int streamlines_get_num_colors(void) +{ + return streamlines_num_colors; +} - cell_x = (fftw_real)winWidth / (fftw_real)(DIM + 1); // Grid cell width - cell_y = (fftw_real)winHeight / (fftw_real)(DIM + 1); // Grid cell heigh +void streamlines_set_colormap(int colormap) +{ + streamlines_colormap = colormap; +} - cell_x = round(p.x / cell_x); - cell_y = round(p.y / cell_y); +int streamlines_get_colormap(void) +{ + return streamlines_colormap; +} + + +struct color4f streamlines_get_color(float value) +{ + struct color4f return_value; - idx = cell_x + (cell_y * DIM) + (j * DIM * DIM); - //v = frame_history[idx]; + return_value = set_palette(streamlines_colormap, value, streamlines_num_colors); - j++; - } - } + return return_value; } diff --git a/Smoke/streamlines.h b/Smoke/streamlines.h index f2c2816..dc253aa 100644 --- a/Smoke/streamlines.h +++ b/Smoke/streamlines.h @@ -1,7 +1,16 @@ -#ifndef _STREAMLINES_H
-#define _STREAMLINES_H
-
-void render_streamlines(void);
-
-#endif
-
+#ifndef _STREAMLINES_H +#define _STREAMLINES_H + +void streamlines_set_render(int render_streamlines); +int streamlines_get_render(void); + +void streamlines_set_num_colors(int num_colors); +int streamlines_get_num_colors(void); + +void streamlines_set_colormap(int colormap); +int streamlines_get_colormap(void); + + +struct color4f streamlines_get_color(float value); + +#endif diff --git a/Smoke/template.c b/Smoke/template.c new file mode 100644 index 0000000..c873256 --- /dev/null +++ b/Smoke/template.c @@ -0,0 +1,58 @@ +#ifdef G_OS_WIN32 +#define WIN32_LEAN_AND_MEAN 1 +#include <windows.h> +#endif + + +#include "funcs.h" +#include "palette.h" + +#include ".h" + + +static int _render = FALSE; + +static int _num_colors = PALETTE_MAXCOLORS; + +static int _colormap = PALETTE_BLACKWHITE; + + +void _set_render(int render_) +{ + _render = render_; +} + +int _get_render(void) +{ + return _render; +} + +void _set_num_colors(int num_colors) +{ + _num_colors = num_colors; +} + +int _get_num_colors(void) +{ + return _num_colors; +} + +void _set_colormap(int colormap) +{ + _colormap = colormap; +} + +int _get_colormap(void) +{ + return _colormap; +} + + +struct color4f _get_color(float value) +{ + struct color4f return_value; + + return_value = set_palette(_colormap, value, _num_colors); + + return return_value; +} diff --git a/Smoke/template.h b/Smoke/template.h new file mode 100644 index 0000000..cb9907c --- /dev/null +++ b/Smoke/template.h @@ -0,0 +1,16 @@ +#ifndef __H +#define __H + +void _set_render(int render_); +int _get_render(void); + +void _set_num_colors(int num_colors); +int _get_num_colors(void); + +void _set_colormap(int colormap); +int _get_colormap(void); + + +struct color4f _get_color(float value); + +#endif |