diff options
author | Oliver Schinagl <oliver@schinagl.nl> | 2007-12-19 15:44:23 (GMT) |
---|---|---|
committer | Oliver Schinagl <oliver@schinagl.nl> | 2007-12-19 15:44:23 (GMT) |
commit | a60088999da4f44bf5885f431fe78eb87d643ae7 (patch) | |
tree | 27940a3cd14a7cdee60ddb0263bf1173c51df56c | |
parent | c287b3f591fe3e10dceedfd90a5ce71b2c703988 (diff) | |
download | 2iv35-a60088999da4f44bf5885f431fe78eb87d643ae7.zip 2iv35-a60088999da4f44bf5885f431fe78eb87d643ae7.tar.gz 2iv35-a60088999da4f44bf5885f431fe78eb87d643ae7.tar.bz2 |
splitted up glyphs
-rw-r--r-- | Smoke/Makefile | 7 | ||||
-rw-r--r-- | Smoke/colormap.c | 21 | ||||
-rw-r--r-- | Smoke/colormap.h | 4 | ||||
-rw-r--r-- | Smoke/fluids.c | 138 | ||||
-rw-r--r-- | Smoke/fluids.h | 5 | ||||
-rw-r--r-- | Smoke/glyphs.c | 197 | ||||
-rw-r--r-- | Smoke/glyphs.h | 11 | ||||
-rw-r--r-- | Smoke/gtk.c | 100 | ||||
-rw-r--r-- | Smoke/gtk_colormap.c | 7 | ||||
-rw-r--r-- | Smoke/gtk_glyphs.c | 143 | ||||
-rw-r--r-- | Smoke/gtk_glyphs.h | 6 | ||||
-rw-r--r-- | Smoke/palette.c | 12 | ||||
-rw-r--r-- | Smoke/palette.h | 14 | ||||
-rw-r--r-- | Smoke/renderer_gl.c | 288 | ||||
-rw-r--r-- | Smoke/renderer_gl.h | 8 | ||||
-rwxr-xr-x | Smoke/smoke.bin | bin | 604182 -> 608721 bytes | |||
-rw-r--r-- | Smoke/smoke.c | 16 | ||||
-rw-r--r-- | Smoke/smoke.h | 7 |
18 files changed, 580 insertions, 404 deletions
diff --git a/Smoke/Makefile b/Smoke/Makefile index 64fb80b..ac15258 100644 --- a/Smoke/Makefile +++ b/Smoke/Makefile @@ -3,10 +3,10 @@ CPP = g++ CC = gcc -OBJ_GTK = gtk.o gtk_colormap.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_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_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.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) 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 @@ -41,6 +41,9 @@ gtk.o: gtk.c 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) + glut.o: glut.c $(CC) -c glut.c -o glut.o $(CFLAGS) diff --git a/Smoke/colormap.c b/Smoke/colormap.c index ffb9afe..efe0114 100644 --- a/Smoke/colormap.c +++ b/Smoke/colormap.c @@ -5,13 +5,15 @@ #include <math.h> +#include "funcs.h" #include "palette.h" + #include "colormap.h" -#include "funcs.h" -static int colormap_num_colors = COLOR_MAXCOLORS; -static int colormap = COLOR_BLACKWHITE; +static int colormap_colormap = PALETTE_BLACKWHITE; + +static int colormap_num_colors = PALETTE_MAXCOLORS; static int colormap_scaling = FALSE; @@ -32,9 +34,18 @@ void colormap_set_num_colors(int num_colors) colormap_num_colors = num_colors; } +int colormap_get_num_colors(void) +{ + return colormap_num_colors; +} + void colormap_set_map(int color_map) { - colormap = color_map; + colormap_colormap = color_map; +} + +int colormap_get_map(void){ + return colormap_colormap; } void colormap_set_scaling(int scaling) @@ -217,7 +228,7 @@ struct color4f colormap_get_color(float value) value = colormap_clamping ? clamp(value) : value; value = colormap_scaling ? remap(value) : value; - return_value = set_palette(colormap, value, colormap_num_colors); + return_value = set_palette(colormap_colormap, value, colormap_num_colors); return return_value; } diff --git a/Smoke/colormap.h b/Smoke/colormap.h index c0001ad..22c34ed 100644 --- a/Smoke/colormap.h +++ b/Smoke/colormap.h @@ -1,11 +1,11 @@ #ifndef _COLORMAP_H
#define _COLORMAP_H
-#define COLOR_MAXCOLORS 256
-
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_scaling(int scaling);
int colormap_get_scaling(void);
diff --git a/Smoke/fluids.c b/Smoke/fluids.c index c9b54e4..25d742f 100644 --- a/Smoke/fluids.c +++ b/Smoke/fluids.c @@ -14,13 +14,11 @@ #include <GL/gl.h> #include <GL/glu.h> +#include "funcs.h" #include "fluids.h" #include "palette.h" -#include "colormap.h" -#include "glyphs.h" #include "seedpoint.h" #include "streamlines.h" -#include "funcs.h" //--- SIMULATION PARAMETERS ------------------------------------------------------------------------ const int DIM = 50; //size of simulation grid @@ -39,7 +37,6 @@ 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 -static int fluids_render_smoke = FALSE; 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 @@ -47,7 +44,6 @@ int vis_dataset = DATASET_RHO; int mousebutton; int mousebuttonstate; int active_slider = 0; -int use_glyphs = FALSE; int glyph_scalar = SCALAR_RHO; int glyph_vector = VECTOR_VEL; int glyph_sort = GLYPH_CYLINDERS; @@ -67,15 +63,6 @@ float z_rot = 0.0f; //------ SIMULATION CODE STARTS HERE ----------------------------------------------------------------- -/* Setters and getters */ -void fluids_set_render_smoke(int render_smoke) { - fluids_render_smoke = render_smoke; -} - -int fluids_get_render_smoke(void) { - return fluids_render_smoke; -} - //init_simulation: Initialize simulation data structures as a function of the grid size 'n'. // Although the simulation takes place on a 2D grid, we allocate all data structures as 1D arrays, // for compatibility with the FFTW numerical library. @@ -513,126 +500,6 @@ void draw_isolines(float threshold) glEnd(); } -void render_smoke(void) -{ - int i, j, idx; double px,py; - 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 - struct color4f color; - - glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - - for (j = 0; j < DIM - 1; j++) //draw smoke - { - glBegin(GL_TRIANGLE_STRIP); - - i = 0; - px = wn + (fftw_real)i * wn; - py = hn + (fftw_real)j * hn; - idx = (j * DIM) + i; - - glColor3f(rho[idx],rho[idx],rho[idx]); - glVertex3f(px,py, height_array[idx]); - - for (i = 0; i < DIM - 1; i++) - { - px = wn + (fftw_real)i * wn; - py = hn + (fftw_real)(j + 1) * hn; - idx = ((j + 1) * DIM) + i; - color = colormap_get_color(get_dataset(idx)); - glColor4f(color.r, color.g, color.b, 1.0f); - glVertex3f(px, py, height_array[idx]); - px = wn + (fftw_real)(i + 1) * wn; - py = hn + (fftw_real)j * hn; - idx = (j * DIM) + (i + 1); - color = colormap_get_color(get_dataset(idx)); - glColor4f(color.r, color.g, color.b, 1.0f); - glVertex3f(px, py, height_array[idx]); - } - - px = wn + (fftw_real)(DIM - 1) * wn; - py = hn + (fftw_real)(j + 1) * hn; - idx = ((j + 1) * DIM) + (DIM - 1); - color = colormap_get_color(get_dataset(idx)); - glColor4f(color.r, color.g, color.b, 1.0f); - glVertex3f(px, py, height_array[idx]); - glEnd(); - } -} - -void render_legend(void) -{ - int i; - struct color4f color; - - for (i = 0; i < winWidth; i++) - { - float value, clamp_scaled_min, clamp_scaled_max, scale_scaled_min, scale_scaled_max; - - - value = (float)((float)i/winWidth); - - color = colormap_get_color(value); - - - clamp_scaled_min = colormap_get_clamp_min() *winWidth; - clamp_scaled_max = colormap_get_clamp_max() *winWidth; - - scale_scaled_min = colormap_get_scale_min() *winWidth; - scale_scaled_max = colormap_get_scale_max() *winWidth; - - glBegin(GL_LINES); - if (colormap_get_scaling()) { - glColor3f(1, 0, 0); - glVertex2i(scale_scaled_min, winHeight -4); - glVertex2i(scale_scaled_min, winHeight -18); - glVertex2i(scale_scaled_max, winHeight -4); - glVertex2i(scale_scaled_max, winHeight -18); - } - if (colormap_get_clamping()) { - glColor4f(0.2, 0.2, 0.2, 1.0); - glVertex2i(clamp_scaled_min, winHeight -6); - glVertex2i(clamp_scaled_min, winHeight -18); - glVertex2i(clamp_scaled_max, winHeight -6); - glVertex2i(clamp_scaled_max, winHeight -18); - } - if (!(i %20)) { - glColor3f(0.7, 0.7, 0.7); - glVertex2i(i -1, winHeight -6); - glVertex2i(i -1, winHeight -22); - glVertex2i(i, winHeight -6); - glVertex2i(i, winHeight -22); - glVertex2i(i +1, winHeight -6); - glVertex2i(i +1, winHeight -22); - } else { - glColor3f(color.r, color.g, color.b); - glVertex2i(i, winHeight -6); - glVertex2i(i, winHeight -18); - } - glEnd(); - - glBegin(GL_TRIANGLES); - if (colormap_get_scaling()) { - glColor3f(1, 0, 0); - glVertex2i(scale_scaled_min, winHeight -6); - glVertex2i(scale_scaled_min -4, winHeight); - glVertex2i(scale_scaled_min +4, winHeight); - glVertex2i(scale_scaled_max, winHeight -6); - glVertex2i(scale_scaled_max -4, winHeight); - glVertex2i(scale_scaled_max +4, winHeight); - } - if (colormap_get_clamping()) { - glColor3f(0.9, 0.9, 0.9); - glVertex2i(clamp_scaled_min, winHeight -18); - glVertex2i(clamp_scaled_min -4, winHeight -25); - glVertex2i(clamp_scaled_min +4, winHeight -25); - glVertex2i(clamp_scaled_max, winHeight -18); - glVertex2i(clamp_scaled_max -4, winHeight -25); - glVertex2i(clamp_scaled_max +4, winHeight -25); - } - glEnd(); - } -} //------ INTERACTION CODE STARTS HERE ----------------------------------------------------------------- @@ -743,11 +610,8 @@ void drag(int mx, int my) } } -int get_glyph_usage(void) { return use_glyphs; } - void selectColor(int arg) { scalar_col = arg; } void select_dataset(int arg) { vis_dataset = arg; } -void toggle_glyph_usage(void) { use_glyphs = (use_glyphs) ? FALSE : TRUE; } void toggle_mouse_rotate(void) { rotate_plane = (rotate_plane) ? FALSE : TRUE; } void toggle_seed_insert(void) { seed_insert = (seed_insert) ? FALSE : TRUE; } void set_glyph_scalar(int arg) { glyph_scalar = arg; } diff --git a/Smoke/fluids.h b/Smoke/fluids.h index 68e14e5..b08db20 100644 --- a/Smoke/fluids.h +++ b/Smoke/fluids.h @@ -51,7 +51,6 @@ extern int vis_dataset; extern int mousebutton; extern int mousebuttonstate; extern int active_slider; -extern int use_glyphs; extern int glyph_scalar; extern int glyph_vector; @@ -130,8 +129,4 @@ extern int isolines_nr; extern float threshold1; extern float threshold2; -/* Setters and getters */ -void fluids_set_render_smoke(int render_smoke); -int fluids_get_render_smoke(void); - #endif diff --git a/Smoke/glyphs.c b/Smoke/glyphs.c index eca9af5..2c60aa0 100644 --- a/Smoke/glyphs.c +++ b/Smoke/glyphs.c @@ -1,165 +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 "glyphs.h"
#include "funcs.h"
+#include "palette.h"
+
+#include "glyphs.h"
+
+
+static int glyphs_render = FALSE;
+
+static int glyphs_num_colors = PALETTE_MAXCOLORS;
-void render_glyph(float x_value, float y_value, float i, float j)
+static int glyphs_colormap = PALETTE_BLACKWHITE;
+
+
+void glyphs_set_render(int render_glyphs)
{
- float x0, y0, z0, x1, y1, z1, x_dev, y_dev, size, length;
- float scale = (float)((float)DIM / (float)get_var_dims()) / 6;
- double theta, in_prod;
- fftw_real wn, hn;
-
- GLuint startList = glGenLists(1);
- GLUquadricObj *qobj = gluNewQuadric();
-
- gluQuadricDrawStyle(qobj, GLU_FILL);
- gluQuadricNormals(qobj, GLU_SMOOTH);
- glNewList(startList, GL_COMPILE);
- gluCylinder(qobj, 10, 0.2, 8, 8, 8);
- glEndList();
-
- size = quake_root((x_value * x_value * 20) + (y_value * y_value * 20)) * 3 * scale;
-
- wn = (fftw_real)winWidth / (fftw_real)(get_var_dims() + 1); // Grid cell width
- hn = (fftw_real)winHeight / (fftw_real)(get_var_dims() + 1); // Grid cell heigh
-
- x0 = wn + (fftw_real)i * wn;
- y0 = hn + (fftw_real)j * hn;
- z0 = 0.0f;
-
- x1 = x0 + (vec_scale * x_value)/4;
- y1 = y0 + (vec_scale * y_value)/4;
- z1 = 0.0f;
-
- // inner product
- x_dev = x1 - x0;
- y_dev = y1 - y0;
- length = quake_root(x_dev * x_dev + y_dev * y_dev);
-
- x_dev = (length == 0) ? 0 : x_dev / length;
- y_dev = (length == 0) ? 1 : y_dev / length;
-
- in_prod = x_dev * 0 + y_dev * 1;
- theta = acos(in_prod) * (180/3.141592654);
- if (x1 > x0) { theta *= -1; }
-
- switch(get_glyph_sort())
- {
- default:
- case GLYPH_LINES:
- glBegin(GL_LINES);
- glVertex3f(x0, y0, z0);
- glVertex3f(x1, y1, z0);
- glEnd();
- break;
-
- case GLYPH_ARROWS:
- glPushMatrix();
- glTranslatef(x0, y0, z0);
- glRotatef(theta, 0.0, 0.0, 1.0);
- glTranslatef(-x0, -y0, -z0);
-
- glBegin(GL_TRIANGLES);
- glVertex2d(-10 * size + x0, -25 * size + y0);
- glVertex2d( 0 * size + x0, 25 * size + y0);
- glVertex2d( 10 * size + x0, -25 * size + y0);
- glEnd();
-
- glRotatef(-theta, 0.0, 0.0, 1.0);
- glPopMatrix();
- break;
-
- case GLYPH_CYLINDERS:
- x_dev = x1 - x0;
- y_dev = y1 - y0;
- length = quake_root(x_dev * x_dev + y_dev * y_dev) / 8;
-
- glPushMatrix();
-
- glTranslatef(x0, y0, -1.0);
- glRotatef(theta, 0.0, 0.0, 1.0);
- glRotatef(-90, 1.0, 0.0, 0.0);
- glScalef(length, length, length);
- glCallList(startList);
-
- glPopMatrix();
- break;
-
- case GLYPH_SPHERES:
- glPushMatrix();
-
- glTranslatef(x0, y0, -1.0);
- glRotatef(theta, 0.0, 0.0, 1.0);
- glRotatef(-90, 1.0, 0.0, 0.0);
- glScalef(length, length, length);
- glCallList(startList);
-
- glPopMatrix();
- break;
- }
-
- gluDeleteQuadric(qobj);
- glDeleteLists(startList, 1);
+ glyphs_render = render_glyphs;
}
-void draw_glyphs(void)
+int glyphs_get_render(void)
{
- int i, j, idx;
- float value, scale, idxcf, idxrf;
-
-#if 0
- if (use_glyphs)
- {
- scale = (float)((float)DIM / (float)get_var_dims());
- for (i = 0; i < get_var_dims(); i++)
- {
- for (j = 0; j < get_var_dims(); j++)
- {
- idxcf = round(j * scale) * DIM;
- idxrf = round(i * scale);
- idx = idxcf + idxrf;
-
- switch (glyph_scalar)
- {
- default:
- case SCALAR_RHO:
- value = rho[idx];
- break;
-
- case SCALAR_VEL:
- value = vec_len(vx[idx], vy[idx]);
- break;
-
- case SCALAR_FORCE:
- value = vec_len(fx[idx], fy[idx]);
- break;
- }
-
- set_colormap(scalar_col, value, FALSE, 0.5f);
- switch (glyph_vector)
- {
- default:
- case VECTOR_VEL:
- render_glyph(vx[idx], vy[idx], i, j);
- break;
-
- case VECTOR_FORCE:
- render_glyph(fx[idx], fy[idx], i, j);
- break;
- }
- }
- }
- }
-#endif
+ return glyphs_render;
+}
+
+void glyphs_set_num_colors(int num_colors)
+{
+ glyphs_num_colors = num_colors;
+}
+
+int glyphs_get_num_colors(void)
+{
+ return glyphs_num_colors;
+}
+
+void glyphs_set_map(int colormap)
+{
+ glyphs_colormap = colormap;
+}
+
+int glyphs_get_map(void)
+{
+ return glyphs_colormap;
+}
+
+
+struct color4f glyphs_get_color(float value)
+{
+ struct color4f return_value;
+
+ return_value = set_palette(glyphs_colormap, value, glyphs_num_colors);
+
+ return return_value;
}
diff --git a/Smoke/glyphs.h b/Smoke/glyphs.h index 5d61d98..ef24fce 100644 --- a/Smoke/glyphs.h +++ b/Smoke/glyphs.h @@ -1,6 +1,15 @@ #ifndef _GLYPHS_H
#define _GLYPHS_H
-void draw_glyphs(void);
+void glyphs_set_render(int render_glyphs);
+int glphys_get_render(void);
+void glyphs_set_num_colors(int num_colors);
+int glyphs_get_num_colors(void);
+
+void glyphs_set_map(int colormap);
+int glyphs_get_map(void);
+
+
+struct color4f glyphs_get_color(float value);
#endif
diff --git a/Smoke/gtk.c b/Smoke/gtk.c index e567e44..9c91164 100644 --- a/Smoke/gtk.c +++ b/Smoke/gtk.c @@ -47,12 +47,14 @@ #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" /************************************************************************** * The following section contains all the macro definitions. @@ -406,19 +408,23 @@ key_press_event (GtkWidget *widget, break; case GDK_x: - if (fluids_get_render_smoke()) { - fluids_set_render_smoke(TRUE); + if (smoke_get_render()) { + smoke_set_render(TRUE); } else { - fluids_set_render_smoke(FALSE); + smoke_set_render(FALSE); } break; case GDK_y: - toggle_glyph_usage(); + if (glyphs_get_render()) { + glyphs_set_render(TRUE); + } else { + glyphs_set_render(FALSE); + } break; case GDK_m: - scalar_col++; if (scalar_col > COLOR_OLIVER) scalar_col = COLOR_BLACKWHITE; + scalar_col++; if (scalar_col > PALETTE_OLIVER) scalar_col = PALETTE_BLACKWHITE; break; case GDK_a: @@ -605,7 +611,12 @@ void show_settings(GtkWidget *notebook) #endif static gboolean select_render_smoke(GtkWidget *button, gpointer data) { - fluids_set_render_smoke(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))); + 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 @@ -639,8 +650,8 @@ GtkWidget *create_main_page(void) gtk_widget_show(button); button = gtk_check_button_new_with_label("Draw Glyphs"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); - g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(toggle_glyph_usage), NULL); + 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); @@ -706,77 +717,6 @@ GtkWidget *create_main_page(void) return page; } -/* - * Draw glyph notebook page - */ -GtkWidget *create_glyph_page(void) -{ - /* in reality a page is really just a vbox filled with other widgets - */ - GtkWidget *page; - GtkWidget *frame; - GtkWidget *box; - GtkWidget *button; - 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); - - return page; -} - -/* - * Draw divergence notebook page - */ GtkWidget *create_divergence_page(void) { /* in reality a page is really just a vbox filled with other widgets @@ -980,7 +920,7 @@ create_window (GdkGLConfig *glconfig) notebook_page_label = gtk_label_new("Glyphs"); gtk_widget_show(notebook_page_label); - notebook_page = create_glyph_page(); + notebook_page = create_glyphs_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 802ad28..7be65a8 100644 --- a/Smoke/gtk_colormap.c +++ b/Smoke/gtk_colormap.c @@ -1,8 +1,11 @@ #include <gtk/gtk.h> -#include "gtk_colormap.h" + +#include "palette.h" #include "colormap.h" +#include "gtk_colormap.h" + static gboolean select_colormap(GtkComboBox *combo, gpointer data) { @@ -96,7 +99,7 @@ GtkWidget *create_colormap_page(void) color_adjustment = GTK_ADJUSTMENT(gtk_adjustment_new( - COLOR_MAXCOLORS, 1, COLOR_MAXCOLORS +1, 0.5, 5, 1)); + 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); diff --git a/Smoke/gtk_glyphs.c b/Smoke/gtk_glyphs.c new file mode 100644 index 0000000..9ea1f14 --- /dev/null +++ b/Smoke/gtk_glyphs.c @@ -0,0 +1,143 @@ +#include <gtk/gtk.h> + +#include <rfftw.h> +#include "fluids.h" + + +#include "palette.h" +#include "glyphs.h" + +#include "gtk_glyphs.h" + + +static gboolean select_colormap(GtkComboBox *combo, gpointer data) +{ + glyphs_set_map(gtk_combo_box_get_active(combo)); +} + + +static gboolean select_num_colors(GtkRange *adjustment, gpointer data) +{ + glyphs_set_num_colors((int)gtk_range_get_value(adjustment)); +} + + +GtkWidget *create_glyphs_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_glyphs.h b/Smoke/gtk_glyphs.h new file mode 100644 index 0000000..f2704d6 --- /dev/null +++ b/Smoke/gtk_glyphs.h @@ -0,0 +1,6 @@ +#ifndef _GTK_GLYPHS_H +#define _GTK_GLYPHS_H + +GtkWidget *create_glyphs_page(void); + +#endif diff --git a/Smoke/palette.c b/Smoke/palette.c index 0fdcb7c..e5727c9 100644 --- a/Smoke/palette.c +++ b/Smoke/palette.c @@ -63,17 +63,17 @@ struct color4f set_palette(int colormap_sort, float value, int num_colors) switch (colormap_sort) { - case COLOR_BLACKWHITE: + case PALETTE_BLACKWHITE: R = G = B = value; break; - case COLOR_RAINBOW: + case PALETTE_RAINBOW: rainbow(value,&R,&G,&B); break; - case COLOR_BANDS: + case PALETTE_BANDS: value *= NLEVELS; value = (float)(int)(value); value/= NLEVELS; rainbow(value,&R,&G,&B); break; - case COLOR_BLUE_GREEN_RED: + case PALETTE_BLUE_GREEN_RED: if (value < -0.1) { R = G = 0; @@ -96,10 +96,10 @@ struct color4f set_palette(int colormap_sort, float value, int num_colors) G = B = 0; } break; - case COLOR_WILRIK: + case PALETTE_WILRIK: colormap_fire(value, &R, &G, &B); break; - case COLOR_OLIVER: + case PALETTE_OLIVER: rainbow(value, &R, &G, &B); break; diff --git a/Smoke/palette.h b/Smoke/palette.h index d320864..b5c7941 100644 --- a/Smoke/palette.h +++ b/Smoke/palette.h @@ -1,12 +1,14 @@ #ifndef _PALETTE_H #define _PALETTE_H -#define COLOR_BLACKWHITE 0 -#define COLOR_RAINBOW 1 -#define COLOR_BANDS 2 -#define COLOR_BLUE_GREEN_RED 3 -#define COLOR_WILRIK 4 -#define COLOR_OLIVER 5 +#define PALETTE_BLACKWHITE 0 +#define PALETTE_RAINBOW 1 +#define PALETTE_BANDS 2 +#define PALETTE_BLUE_GREEN_RED 3 +#define PALETTE_WILRIK 4 +#define PALETTE_OLIVER 5 + +#define PALETTE_MAXCOLORS 256 struct color4f { float r; diff --git a/Smoke/renderer_gl.c b/Smoke/renderer_gl.c index d1b0436..0a15d42 100644 --- a/Smoke/renderer_gl.c +++ b/Smoke/renderer_gl.c @@ -11,8 +11,13 @@ #include <rfftw.h> -#include "fluids.h" + #include "funcs.h" +#include "fluids.h" +#include "palette.h" +#include "colormap.h" +#include "glyphs.h" + #include "renderer_gl.h" float x_pos = 0.0f; @@ -25,6 +30,278 @@ float yPos = -295.0f; float zPos = -725.0f; +static void render_legend(void) +{ + int i; + struct color4f color; + + for (i = 0; i < winWidth; i++) + { + float value, clamp_scaled_min, clamp_scaled_max, scale_scaled_min, scale_scaled_max; + + + value = (float)((float)i/winWidth); + + color = colormap_get_color(value); + + + clamp_scaled_min = colormap_get_clamp_min() *winWidth; + clamp_scaled_max = colormap_get_clamp_max() *winWidth; + + scale_scaled_min = colormap_get_scale_min() *winWidth; + scale_scaled_max = colormap_get_scale_max() *winWidth; + + glBegin(GL_LINES); + if (colormap_get_scaling()) { + glColor3f(1, 0, 0); + glVertex2i(scale_scaled_min, winHeight -4); + glVertex2i(scale_scaled_min, winHeight -18); + glVertex2i(scale_scaled_max, winHeight -4); + glVertex2i(scale_scaled_max, winHeight -18); + } + if (colormap_get_clamping()) { + glColor4f(0.2, 0.2, 0.2, 1.0); + glVertex2i(clamp_scaled_min, winHeight -6); + glVertex2i(clamp_scaled_min, winHeight -18); + glVertex2i(clamp_scaled_max, winHeight -6); + glVertex2i(clamp_scaled_max, winHeight -18); + } + if (!(i %20)) { + glColor3f(0.7, 0.7, 0.7); + glVertex2i(i -1, winHeight -6); + glVertex2i(i -1, winHeight -22); + glVertex2i(i, winHeight -6); + glVertex2i(i, winHeight -22); + glVertex2i(i +1, winHeight -6); + glVertex2i(i +1, winHeight -22); + } else { + glColor3f(color.r, color.g, color.b); + glVertex2i(i, winHeight -6); + glVertex2i(i, winHeight -18); + } + glEnd(); + + glBegin(GL_TRIANGLES); + if (colormap_get_scaling()) { + glColor3f(1, 0, 0); + glVertex2i(scale_scaled_min, winHeight -6); + glVertex2i(scale_scaled_min -4, winHeight); + glVertex2i(scale_scaled_min +4, winHeight); + glVertex2i(scale_scaled_max, winHeight -6); + glVertex2i(scale_scaled_max -4, winHeight); + glVertex2i(scale_scaled_max +4, winHeight); + } + if (colormap_get_clamping()) { + glColor3f(0.9, 0.9, 0.9); + glVertex2i(clamp_scaled_min, winHeight -18); + glVertex2i(clamp_scaled_min -4, winHeight -25); + glVertex2i(clamp_scaled_min +4, winHeight -25); + glVertex2i(clamp_scaled_max, winHeight -18); + glVertex2i(clamp_scaled_max -4, winHeight -25); + glVertex2i(clamp_scaled_max +4, winHeight -25); + } + glEnd(); + } +} + + +static void render_smoke(void) +{ + int i, j, idx; double px,py; + 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 + struct color4f color; + + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + + for (j = 0; j < DIM - 1; j++) //draw smoke + { + glBegin(GL_TRIANGLE_STRIP); + + i = 0; + px = wn + (fftw_real)i * wn; + py = hn + (fftw_real)j * hn; + idx = (j * DIM) + i; + + glColor3f(rho[idx],rho[idx],rho[idx]); + glVertex3f(px,py, height_array[idx]); + + for (i = 0; i < DIM - 1; i++) + { + px = wn + (fftw_real)i * wn; + py = hn + (fftw_real)(j + 1) * hn; + idx = ((j + 1) * DIM) + i; + color = colormap_get_color(get_dataset(idx)); + glColor4f(color.r, color.g, color.b, 1.0f); + glVertex3f(px, py, height_array[idx]); + px = wn + (fftw_real)(i + 1) * wn; + py = hn + (fftw_real)j * hn; + idx = (j * DIM) + (i + 1); + color = colormap_get_color(get_dataset(idx)); + glColor4f(color.r, color.g, color.b, 1.0f); + glVertex3f(px, py, height_array[idx]); + } + + px = wn + (fftw_real)(DIM - 1) * wn; + py = hn + (fftw_real)(j + 1) * hn; + idx = ((j + 1) * DIM) + (DIM - 1); + color = colormap_get_color(get_dataset(idx)); + glColor4f(color.r, color.g, color.b, 1.0f); + glVertex3f(px, py, height_array[idx]); + glEnd(); + } +} + + +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; + double theta, in_prod; + fftw_real wn, hn; + + GLuint startList = glGenLists(1); + GLUquadricObj *qobj = gluNewQuadric(); + + gluQuadricDrawStyle(qobj, GLU_FILL); + gluQuadricNormals(qobj, GLU_SMOOTH); + glNewList(startList, GL_COMPILE); + gluCylinder(qobj, 10, 0.2, 8, 8, 8); + glEndList(); + + size = quake_root((x_value * x_value * 20) + (y_value * y_value * 20)) * 3 * scale; + + wn = (fftw_real)winWidth / (fftw_real)(get_var_dims() + 1); // Grid cell width + hn = (fftw_real)winHeight / (fftw_real)(get_var_dims() + 1); // Grid cell heigh + + x0 = wn + (fftw_real)i * wn; + y0 = hn + (fftw_real)j * hn; + z0 = 0.0f; + + x1 = x0 + (vec_scale * x_value)/4; + y1 = y0 + (vec_scale * y_value)/4; + z1 = 0.0f; + + // inner product + x_dev = x1 - x0; + y_dev = y1 - y0; + length = quake_root(x_dev * x_dev + y_dev * y_dev); + + x_dev = (length == 0) ? 0 : x_dev / length; + y_dev = (length == 0) ? 1 : y_dev / length; + + in_prod = x_dev * 0 + y_dev * 1; + theta = acos(in_prod) * (180/3.141592654); + if (x1 > x0) { theta *= -1; } + + switch(get_glyph_sort()) + { + default: + case GLYPH_LINES: + glBegin(GL_LINES); + glVertex3f(x0, y0, z0); + glVertex3f(x1, y1, z0); + glEnd(); + break; + + case GLYPH_ARROWS: + glPushMatrix(); + glTranslatef(x0, y0, z0); + glRotatef(theta, 0.0, 0.0, 1.0); + glTranslatef(-x0, -y0, -z0); + + glBegin(GL_TRIANGLES); + glVertex2d(-10 * size + x0, -25 * size + y0); + glVertex2d( 0 * size + x0, 25 * size + y0); + glVertex2d( 10 * size + x0, -25 * size + y0); + glEnd(); + + glRotatef(-theta, 0.0, 0.0, 1.0); + glPopMatrix(); + break; + + case GLYPH_CYLINDERS: + x_dev = x1 - x0; + y_dev = y1 - y0; + length = quake_root(x_dev * x_dev + y_dev * y_dev) / 8; + + glPushMatrix(); + + glTranslatef(x0, y0, -1.0); + glRotatef(theta, 0.0, 0.0, 1.0); + glRotatef(-90, 1.0, 0.0, 0.0); + glScalef(length, length, length); + glCallList(startList); + + glPopMatrix(); + break; + + case GLYPH_SPHERES: + glPushMatrix(); + + glTranslatef(x0, y0, -1.0); + glRotatef(theta, 0.0, 0.0, 1.0); + glRotatef(-90, 1.0, 0.0, 0.0); + glScalef(length, length, length); + glCallList(startList); + + glPopMatrix(); + break; + } + + gluDeleteQuadric(qobj); + glDeleteLists(startList, 1); +} + +void draw_glyphs(void) +{ + int i, j, idx; + float value, scale, idxcf, idxrf; + struct color4f color; + + scale = (float)((float)DIM / (float)get_var_dims()); + for (i = 0; i < get_var_dims(); i++) + { + for (j = 0; j < get_var_dims(); j++) + { + idxcf = round(j * scale) * DIM; + idxrf = round(i * scale); + idx = idxcf + idxrf; + + switch (glyph_scalar) + { + default: + case SCALAR_RHO: + value = rho[idx]; + break; + + case SCALAR_VEL: + value = vec_len(vx[idx], vy[idx]); + break; + + case SCALAR_FORCE: + value = vec_len(fx[idx], fy[idx]); + break; + } + + color = glyphs_get_color(value); + glColor4f(color.r, color.b, color.g, 0.5f); + switch (glyph_vector) + { + default: + case VECTOR_VEL: + render_glyph(vx[idx], vy[idx], i, j); + break; + + case VECTOR_FORCE: + render_glyph(fx[idx], fy[idx], i, j); + break; + } + } + } +} + + void zoom_in(int zoom) { z_pos += zoom; @@ -35,6 +312,7 @@ void zoom_out(int zoom) z_pos -= zoom; } + //visualize: This is the main visualization function void visualize(void) { @@ -70,12 +348,16 @@ void visualize(void) } // draw the smoke - if (fluids_get_render_smoke()) + if (smoke_get_render()) { render_smoke(); } - draw_glyphs(); + if (glyphs_get_render()) + { + draw_glyphs(); + } + render_seedpoints(); render_streamlines(); } diff --git a/Smoke/renderer_gl.h b/Smoke/renderer_gl.h index d9da2d2..f082170 100644 --- a/Smoke/renderer_gl.h +++ b/Smoke/renderer_gl.h @@ -1 +1,9 @@ +#ifndef _RENDERER_GL_H +#define _RENDERER_GL_H + void visualize(void); + +void zoom_in(int zoom); +void zoom_out(int zoom); + +#endif diff --git a/Smoke/smoke.bin b/Smoke/smoke.bin Binary files differindex 2bafd96..4c2ab2f 100755 --- a/Smoke/smoke.bin +++ b/Smoke/smoke.bin diff --git a/Smoke/smoke.c b/Smoke/smoke.c index e81590f..c905dc4 100644 --- a/Smoke/smoke.c +++ b/Smoke/smoke.c @@ -3,7 +3,17 @@ #include <windows.h> #endif -#include <rfftw.h> -#include <GL/gl.h> -#include <GL/glu.h> +#include "funcs.h" +static int smoke_render_smoke = FALSE; + + +void smoke_set_render(int render_smoke) +{ + smoke_render_smoke = render_smoke; +} + +int smoke_get_render(void) +{ + return smoke_render_smoke; +} diff --git a/Smoke/smoke.h b/Smoke/smoke.h index e69de29..dcd5749 100644 --- a/Smoke/smoke.h +++ b/Smoke/smoke.h @@ -0,0 +1,7 @@ +#ifndef _SMOKE_H +#define _SMOKE_H + +void smoke_set_render(int render_smoke); +int smoke_get_render(void); + +#endif |