diff options
author | Oliver Schinagl <oliver@schinagl.nl> | 2008-01-03 14:58:08 (GMT) |
---|---|---|
committer | Oliver Schinagl <oliver@schinagl.nl> | 2008-01-03 14:58:08 (GMT) |
commit | 747c680560744a021f1b99455db33f906970c3fe (patch) | |
tree | 6b7cf0ec59e1e399b060ca16e657249f8c5add32 | |
parent | e1b9274194fcb0e5054948917628c5e1022b42c2 (diff) | |
download | 2iv35-747c680560744a021f1b99455db33f906970c3fe.zip 2iv35-747c680560744a021f1b99455db33f906970c3fe.tar.gz 2iv35-747c680560744a021f1b99455db33f906970c3fe.tar.bz2 |
dataset selection buttons now work
-rw-r--r-- | Smoke/fluids.c | 12 | ||||
-rw-r--r-- | Smoke/glyphs.c | 33 | ||||
-rw-r--r-- | Smoke/glyphs.h | 9 | ||||
-rw-r--r-- | Smoke/gtk.c | 3 | ||||
-rw-r--r-- | Smoke/gtk_glyphs.c | 53 | ||||
-rw-r--r-- | Smoke/gtk_main.c | 30 | ||||
-rw-r--r-- | Smoke/renderer_gl.c | 10 | ||||
-rwxr-xr-x | Smoke/smoke.bin | bin | 622107 -> 625977 bytes | |||
-rw-r--r-- | Smoke/smoke.c | 29 | ||||
-rw-r--r-- | Smoke/smoke.h | 6 |
10 files changed, 157 insertions, 28 deletions
diff --git a/Smoke/fluids.c b/Smoke/fluids.c index 5e1f7a6..2223bde 100644 --- a/Smoke/fluids.c +++ b/Smoke/fluids.c @@ -36,7 +36,7 @@ rfftwnd_plan plan_rc, plan_cr; //simulation domain discretization int winWidth, winHeight; //size of the graphics window, in pixels int color_dir = 0; //use direction color-coding or not float vec_scale = 1000; //scaling of hedgehogs -int vis_dataset = DATASET_RHO; +int vis_dataset = DATASET_VEL; int active_slider = 0; int glyph_scalar = SCALAR_RHO; int glyph_vector = VECTOR_VEL; @@ -339,9 +339,9 @@ void calculate_height_plot(void) } } -void copy_frame(fftw_real *field) +void copy_frame(fftw_real *field, fftw_real *dataset) { - memcpy(field, rho, DIM * 2 * (DIM / 2 + 1) * sizeof(fftw_real)); + memcpy(field, dataset, DIM * 2 * (DIM / 2 + 1) * sizeof(fftw_real)); } //do_one_simulation_step: Do one complete cycle of the simulation: @@ -359,7 +359,7 @@ void calculate_one_simulation_step(fftw_real *field) diffuse_matter(DIM, vx, vy, rho, rho0, dt); calculate_height_plot(); calculate_normal_vectors(); - copy_frame(field); + copy_frame(field, rho); } } @@ -410,10 +410,10 @@ float get_dataset(int index) switch (vis_dataset) { case DATASET_FORCE: - return_value = (float)quake_root((fx[index] * fx[index]) + (fy[index] * fy[index])); + return_value = vec_len2f(fx[index], fy[index]); break; case DATASET_VEL: - return_value = (float)quake_root((vx[index] * vx[index]) + (vy[index] * vy[index])); + return_value = vec_len2f(vx[index], vy[index]); break; default: case DATASET_RHO: diff --git a/Smoke/glyphs.c b/Smoke/glyphs.c index 7ccf04e..c4466df 100644 --- a/Smoke/glyphs.c +++ b/Smoke/glyphs.c @@ -7,6 +7,7 @@ #include <rfftw.h>
#include "funcs.h"
+#include "fluids.h"
#include "palette.h"
#include "glyphs.h"
@@ -20,7 +21,9 @@ static int glyphs_colormap = PALETTE_BLACKWHITE; static float glyphs_alpha = 0.5f;
-static fftw_real *glyphs_frame;
+static int glyphs_dataset_color = DATASET_RHO;
+static int glyphs_dataset_direction = DATASET_RHO;
+static fftw_real *glyphs_field;
void glyphs_set_render(int render_glyphs)
@@ -63,14 +66,34 @@ float glyphs_get_alpha(void) return glyphs_alpha;
}
-void glyphs_set_frame(fftw_real *frame)
+void glyphs_set_dataset_color(int dataset)
{
- glyphs_frame = frame;
+ glyphs_dataset_color = dataset;
}
-fftw_real *glyphs_get_frame(void)
+int glyphs_get_dataset_color(void)
{
- return glyphs_frame;
+ return glyphs_dataset_color;
+}
+
+void glyphs_set_dataset_direction(int dataset)
+{
+ glyphs_dataset_direction = dataset;
+}
+
+int glyphs_get_dataset_direction(void)
+{
+ return glyphs_dataset_direction;
+}
+
+void glyphs_set_field(fftw_real *field)
+{
+ glyphs_field = field;
+}
+
+fftw_real *glyphs_get_field(void)
+{
+ return glyphs_field;
}
diff --git a/Smoke/glyphs.h b/Smoke/glyphs.h index 4f080f2..1e220a2 100644 --- a/Smoke/glyphs.h +++ b/Smoke/glyphs.h @@ -13,9 +13,14 @@ int glyphs_get_map(void); void glyphs_set_alpha(float alpha);
float glyphs_get_alpha(void);
-void glyphs_set_frame(fftw_real *frame);
-fftw_real *glyphs_get_frame(void);
+void glyphs_set_dataset_color(int dataset);
+int glyphs_get_dataset_color(void);
+void glyphs_set_dataset_direction(int dataset);
+int glyphs_get_dataset_direction(void);
+
+void glyphs_set_field(fftw_real *field);
+fftw_real *glyphs_get_field(void);
struct color4f glyphs_get_color(float value);
#endif
diff --git a/Smoke/gtk.c b/Smoke/gtk.c index 2173e0f..7de195f 100644 --- a/Smoke/gtk.c +++ b/Smoke/gtk.c @@ -61,6 +61,9 @@ #include "gtk_streamlines.h" #include "gtk_flowvis.h" +#include "smoke.h" +#include "glyphs.h" + /************************************************************************** * The following section contains all the macro definitions. diff --git a/Smoke/gtk_glyphs.c b/Smoke/gtk_glyphs.c index b30a3e3..6049323 100644 --- a/Smoke/gtk_glyphs.c +++ b/Smoke/gtk_glyphs.c @@ -26,6 +26,20 @@ static gboolean select_alpha(GtkRange *adjustment, gpointer data) glyphs_set_alpha((float)gtk_range_get_value(adjustment)); } +static gboolean set_dataset_color(GtkButton *button, gpointer data) +{ + if (gtk_toggle_button_get_active(button)) { + glyphs_set_dataset_color((int)data); + } +} + +static gboolean set_dataset_direction(GtkButton *button, gpointer data) +{ + if (gtk_toggle_button_get_active(button)) { + glyphs_set_dataset_direction((int)data); + } +} + GtkWidget *create_glyphs_page(void) { @@ -43,25 +57,40 @@ GtkWidget *create_glyphs_page(void) page = gtk_vbox_new(FALSE, 0); - frame = gtk_frame_new("Scalarset"); + frame = gtk_frame_new("Color"); box = gtk_hbox_new(FALSE, 0); button = gtk_radio_button_new_with_label (NULL, "Rho"); + if (glyphs_get_dataset_color() == DATASET_RHO) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + } else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + } 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); + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_dataset_color), (gpointer)DATASET_RHO); gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button)); button = gtk_radio_button_new_with_label(dataset_group, "Velocity"); - g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_VEL); + if (glyphs_get_dataset_color() == DATASET_VEL) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + } else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + } + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_dataset_color), (gpointer)DATASET_VEL); gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force"); - g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_glyph_scalar), (gpointer)SCALAR_FORCE); + if (glyphs_get_dataset_color() == DATASET_FORCE) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + } else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + } + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_dataset_color), (gpointer)DATASET_FORCE); gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); @@ -71,19 +100,29 @@ GtkWidget *create_glyphs_page(void) gtk_box_pack_start (GTK_BOX(page), frame, FALSE, TRUE, 0); gtk_widget_show(frame); - frame = gtk_frame_new("Vectorset"); + frame = gtk_frame_new("Direction"); 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); + if (glyphs_get_dataset_direction() == DATASET_FORCE) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + } else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + } + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_dataset_direction), (gpointer)DATASET_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); + if (glyphs_get_dataset_direction() == DATASET_FORCE) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + } else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + } + g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(set_dataset_direction), (gpointer)DATASET_FORCE); gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); diff --git a/Smoke/gtk_main.c b/Smoke/gtk_main.c index 3c01fcc..6c9815f 100644 --- a/Smoke/gtk_main.c +++ b/Smoke/gtk_main.c @@ -6,6 +6,7 @@ #include "gtk_main.h" +#include "smoke.h" @@ -34,6 +35,13 @@ static gboolean select_calculate(GtkWidget *button, gpointer data) { fluids_set_calculate(gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))); } +static gboolean set_dataset(GtkButton *button, gpointer data) +{ + if (gtk_toggle_button_get_active(button)) { + smoke_set_dataset((int)data); + } +} + static gboolean reset_zoom(GtkWidget *button, gpointer data) { renderer_reset_zoom(); } @@ -135,20 +143,34 @@ GtkWidget *create_main_page(void) box = gtk_hbox_new(FALSE, 0); button = gtk_radio_button_new_with_label (NULL, "Rho"); - gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); - g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_RHO); + if (smoke_get_dataset() == DATASET_RHO) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + } else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + } + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(set_dataset), (gpointer)DATASET_RHO); gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); dataset_group = gtk_radio_button_get_group(GTK_RADIO_BUTTON(button)); button = gtk_radio_button_new_with_label(dataset_group, "Velocity"); - g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_VEL); + if (smoke_get_dataset() == DATASET_VEL) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + } else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + } + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(set_dataset), (gpointer)DATASET_VEL); gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); button = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(button), "Force"); - g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(select_dataset), (gpointer)DATASET_FORCE); + if (smoke_get_dataset() == DATASET_FORCE) { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), TRUE); + } else { + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), FALSE); + } + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(set_dataset), (gpointer)DATASET_FORCE); gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); gtk_widget_show(button); diff --git a/Smoke/renderer_gl.c b/Smoke/renderer_gl.c index c2c5a87..19b982b 100644 --- a/Smoke/renderer_gl.c +++ b/Smoke/renderer_gl.c @@ -40,7 +40,7 @@ #define LEGEND_X_POS -298.0f #define LEGEND_Y_POS -295.0f -#define LEGEND_Z_POS -725.0f +#define LEGEND_Z_POS -720.0f float x_pos = DEFAULT_X_POS; float y_pos = DEFAULT_Y_POS; @@ -55,7 +55,9 @@ static void render_legend(void) struct color4f color; glDisable(GL_LIGHTING); + glDisable(GL_DEPTH_TEST); + glLoadIdentity(); glTranslatef(LEGEND_X_POS, LEGEND_Y_POS, LEGEND_Z_POS); for (i = 0; i < winWidth; i++) @@ -127,6 +129,7 @@ static void render_legend(void) } glEnable(GL_LIGHTING); + glEnable(GL_DEPTH_TEST); } static void render_normal(void) @@ -337,9 +340,9 @@ static void render_glyphs(void) value = vec_len2f(fx[idx], fy[idx]); break; } - color = glyphs_get_color(value); glColor4f(color.r, color.b, color.g, color.a); + switch (glyph_vector) { default: @@ -664,7 +667,6 @@ void renderer_reset_roll(void) //visualize: This is the main visualization function void visualize(fftw_real *field) { - render_legend(); // Rotate field glLoadIdentity(); @@ -700,6 +702,8 @@ void visualize(fftw_real *field) if (normals_get_render()) { render_normal(); } + + render_legend(); } int normals_get_render(void) diff --git a/Smoke/smoke.bin b/Smoke/smoke.bin Binary files differindex 639ad99..64193c0 100755 --- a/Smoke/smoke.bin +++ b/Smoke/smoke.bin diff --git a/Smoke/smoke.c b/Smoke/smoke.c index 1ccdb71..539c64e 100644 --- a/Smoke/smoke.c +++ b/Smoke/smoke.c @@ -3,10 +3,17 @@ #include <windows.h> #endif +#include <rfftw.h> + +#include "fluids.h" #include "funcs.h" + static int smoke_render_smoke = TRUE; - + +static int smoke_dataset = DATASET_RHO; +static fftw_real *smoke_field; + void smoke_set_render(int render_smoke) { @@ -17,3 +24,23 @@ int smoke_get_render(void) { return smoke_render_smoke; } + +void smoke_set_dataset(int dataset) +{ + smoke_dataset = dataset; +} + +int smoke_get_dataset(void) +{ + return smoke_dataset; +} + +void smoke_set_field(fftw_real *field) +{ + smoke_field = field; +} + +fftw_real *smoke_get_field(void) +{ + return smoke_field; +} diff --git a/Smoke/smoke.h b/Smoke/smoke.h index dcd5749..bbdcacb 100644 --- a/Smoke/smoke.h +++ b/Smoke/smoke.h @@ -4,4 +4,10 @@ void smoke_set_render(int render_smoke); int smoke_get_render(void); +void smoke_set_dataset(int dataset); +int smoke_get_dataset(void); + +void smoke_set_field(fftw_real *field); +fftw_real *smoke_get_field(void); + #endif |