summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2008-01-03 14:58:08 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2008-01-03 14:58:08 (GMT)
commit747c680560744a021f1b99455db33f906970c3fe (patch)
tree6b7cf0ec59e1e399b060ca16e657249f8c5add32
parente1b9274194fcb0e5054948917628c5e1022b42c2 (diff)
download2iv35-747c680560744a021f1b99455db33f906970c3fe.zip
2iv35-747c680560744a021f1b99455db33f906970c3fe.tar.gz
2iv35-747c680560744a021f1b99455db33f906970c3fe.tar.bz2
dataset selection buttons now work
-rw-r--r--Smoke/fluids.c12
-rw-r--r--Smoke/glyphs.c33
-rw-r--r--Smoke/glyphs.h9
-rw-r--r--Smoke/gtk.c3
-rw-r--r--Smoke/gtk_glyphs.c53
-rw-r--r--Smoke/gtk_main.c30
-rw-r--r--Smoke/renderer_gl.c10
-rwxr-xr-xSmoke/smoke.binbin622107 -> 625977 bytes
-rw-r--r--Smoke/smoke.c29
-rw-r--r--Smoke/smoke.h6
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
index 639ad99..64193c0 100755
--- a/Smoke/smoke.bin
+++ b/Smoke/smoke.bin
Binary files differ
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