summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2007-12-19 15:44:23 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2007-12-19 15:44:23 (GMT)
commita60088999da4f44bf5885f431fe78eb87d643ae7 (patch)
tree27940a3cd14a7cdee60ddb0263bf1173c51df56c
parentc287b3f591fe3e10dceedfd90a5ce71b2c703988 (diff)
download2iv35-a60088999da4f44bf5885f431fe78eb87d643ae7.zip
2iv35-a60088999da4f44bf5885f431fe78eb87d643ae7.tar.gz
2iv35-a60088999da4f44bf5885f431fe78eb87d643ae7.tar.bz2
splitted up glyphs
-rw-r--r--Smoke/Makefile7
-rw-r--r--Smoke/colormap.c21
-rw-r--r--Smoke/colormap.h4
-rw-r--r--Smoke/fluids.c138
-rw-r--r--Smoke/fluids.h5
-rw-r--r--Smoke/glyphs.c197
-rw-r--r--Smoke/glyphs.h11
-rw-r--r--Smoke/gtk.c100
-rw-r--r--Smoke/gtk_colormap.c7
-rw-r--r--Smoke/gtk_glyphs.c143
-rw-r--r--Smoke/gtk_glyphs.h6
-rw-r--r--Smoke/palette.c12
-rw-r--r--Smoke/palette.h14
-rw-r--r--Smoke/renderer_gl.c288
-rw-r--r--Smoke/renderer_gl.h8
-rwxr-xr-xSmoke/smoke.binbin604182 -> 608721 bytes
-rw-r--r--Smoke/smoke.c16
-rw-r--r--Smoke/smoke.h7
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
index 2bafd96..4c2ab2f 100755
--- a/Smoke/smoke.bin
+++ b/Smoke/smoke.bin
Binary files differ
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