diff options
author | Oliver Schinagl <oliver@schinagl.nl> | 2008-01-11 03:36:54 (GMT) |
---|---|---|
committer | Oliver Schinagl <oliver@schinagl.nl> | 2008-01-11 03:36:54 (GMT) |
commit | d7413fd0a44e780656bb928dc68dfbd12eadba05 (patch) | |
tree | 2ffbb1d9a96669b911fad04ae9fcaea3327fcabb | |
parent | 0b2a65158a7b19175bb180acb6fb7199480abcaa (diff) | |
download | 2iv35-d7413fd0a44e780656bb928dc68dfbd12eadba05.zip 2iv35-d7413fd0a44e780656bb928dc68dfbd12eadba05.tar.gz 2iv35-d7413fd0a44e780656bb928dc68dfbd12eadba05.tar.bz2 |
adjustable streamlines
-rw-r--r-- | Smoke/gtk.c | 4 | ||||
-rw-r--r-- | Smoke/gtk_streamlines.c | 88 | ||||
-rw-r--r-- | Smoke/renderer_gl.c | 11 | ||||
-rwxr-xr-x | Smoke/smoke.bin | bin | 651186 -> 651640 bytes | |||
-rw-r--r-- | Smoke/streamlines.c | 24 | ||||
-rw-r--r-- | Smoke/streamlines.h | 9 |
6 files changed, 113 insertions, 23 deletions
diff --git a/Smoke/gtk.c b/Smoke/gtk.c index 09b0c53..80c9840 100644 --- a/Smoke/gtk.c +++ b/Smoke/gtk.c @@ -79,9 +79,9 @@ #define DEFAULT_TITLE "2iv35 \"Smoke\" by Wilrik & Oliver" #ifdef G_OS_WIN32 -#define TIMEOUT_INTERVAL 30 +#define TIMEOUT_INTERVAL 40 #else -#define TIMEOUT_INTERVAL 20 +#define TIMEOUT_INTERVAL 30 #endif /************************************************************************** diff --git a/Smoke/gtk_streamlines.c b/Smoke/gtk_streamlines.c index d207684..ca6aff7 100644 --- a/Smoke/gtk_streamlines.c +++ b/Smoke/gtk_streamlines.c @@ -43,6 +43,22 @@ static gboolean select_sort(GtkComboBox *combo, gpointer data) return TRUE; } +static gboolean select_slices(GtkRange *adjustment, gpointer data) +{ + streamlines_set_slices((int)gtk_range_get_value(adjustment)); + + return TRUE; +} + +static gboolean select_radius(GtkRange *adjustment, gpointer data) +{ + streamlines_set_radius((float)gtk_range_get_value(adjustment)); + + return TRUE; +} + + + GtkWidget *create_streamlines_page(void) { @@ -121,33 +137,71 @@ GtkWidget *create_streamlines_page(void) 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("Streamlines"); + box = gtk_vbox_new(FALSE, 0); + + button = gtk_button_new_with_label("Delete seedpoints"); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(reset_seedpoints), NULL); + gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); + gtk_widget_show(button); - button = gtk_button_new_with_label("Delete seedpoints"); - g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(reset_seedpoints), NULL); - gtk_box_pack_start(GTK_BOX(box), button, TRUE, TRUE, 0); - gtk_widget_show(button); - gtk_widget_show(frame); + label = gtk_label_new("Traceline"); + + gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0); + gtk_widget_show(label); - label = gtk_label_new("Select your traceline"); + combo = gtk_combo_box_new_text(); - gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0); - gtk_widget_show(label); + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Streamlines"); + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Streamtubes"); + gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Stream-spheres"); - combo = gtk_combo_box_new_text(); + gtk_combo_box_set_active(GTK_COMBO_BOX(combo), streamlines_get_sort()); + g_signal_connect(combo, "changed", G_CALLBACK(select_sort), (gpointer)NULL); - gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Streamlines"); - gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Streamtubes"); - gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Stream-spheres"); + gtk_box_pack_start(GTK_BOX(box), combo, FALSE, TRUE, 0); + gtk_widget_show(combo); - gtk_combo_box_set_active(GTK_COMBO_BOX(combo), streamlines_get_sort()); - g_signal_connect(combo, "changed", G_CALLBACK(select_sort), (gpointer)NULL); - gtk_box_pack_start(GTK_BOX(box), combo, FALSE, TRUE, 0); - gtk_widget_show(combo); + label = gtk_label_new("Slices"); + gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0); + gtk_widget_show(label); + + adjustment = GTK_ADJUSTMENT(gtk_adjustment_new( + streamlines_get_slices(), 3, 10, 0.5, 5, 0)); + scale = gtk_hscale_new(adjustment); + gtk_scale_set_digits(GTK_SCALE(scale), 0); + g_signal_connect(GTK_RANGE(scale), "value-changed", G_CALLBACK(select_slices), NULL); + + gtk_box_pack_start(GTK_BOX(box), scale, FALSE, TRUE, 0); + gtk_widget_show(scale); + + + label = gtk_label_new("Radius"); + + gtk_box_pack_start(GTK_BOX(box), label, FALSE, TRUE, 0); + gtk_widget_show(label); + + adjustment = GTK_ADJUSTMENT(gtk_adjustment_new( + streamlines_get_radius(), 0.1, 25, 0.5, 5, 0)); + scale = gtk_hscale_new(adjustment); + gtk_scale_set_digits(GTK_SCALE(scale), 1); + g_signal_connect(GTK_RANGE(scale), "value-changed", G_CALLBACK(select_radius), NULL); + + gtk_box_pack_start(GTK_BOX(box), scale, FALSE, TRUE, 0); + gtk_widget_show(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/renderer_gl.c b/Smoke/renderer_gl.c index 613307f..698bcf1 100644 --- a/Smoke/renderer_gl.c +++ b/Smoke/renderer_gl.c @@ -70,7 +70,6 @@ void renderer_load_raw_texture(char *filename) bitmap = fopen(filename, "rb"); if (bitmap > 0) { unsigned int filesize; - GLsizei width, height; unsigned char *imagedata; fseek(bitmap, 0, SEEK_END); @@ -767,6 +766,12 @@ static void render_streamlines(void) float scale = 10.0f; GLUquadricObj *qobj = gluNewQuadric(); struct color4f color; + int slices; + float radius; + + + slices = streamlines_get_slices(); + radius = streamlines_get_radius(); gluQuadricDrawStyle(qobj, GLU_FILL); gluQuadricNormals(qobj, GLU_FLAT); @@ -823,14 +828,14 @@ static void render_streamlines(void) case STREAMLINES_SORT_TUBES: glPushMatrix(); glTranslatef(p.x, p.y, j * cell_x); - gluCylinder(qobj, 8.0, 8.0, 16.0, 6, 6); + gluCylinder(qobj, radius, radius, 16.0f, slices, 1); glPopMatrix(); break; case STREAMLINES_SORT_SPHERES: glPushMatrix(); glTranslatef(p.x, p.y, j * cell_x); - gluSphere(qobj, 8.0f, 6, 6); + gluSphere(qobj, radius, slices, slices); glPopMatrix(); break; } diff --git a/Smoke/smoke.bin b/Smoke/smoke.bin Binary files differindex 0ee48a7..1120671 100755 --- a/Smoke/smoke.bin +++ b/Smoke/smoke.bin diff --git a/Smoke/streamlines.c b/Smoke/streamlines.c index e28be9f..66a7d1b 100644 --- a/Smoke/streamlines.c +++ b/Smoke/streamlines.c @@ -19,6 +19,8 @@ static int streamlines_colormap = PALETTE_RAINBOW; static int streamlines_dataset = DATASET_RHO; static float streamlines_alpha = 1.0f; static int streamlines_sort = STREAMLINES_SORT_LINES; +static int streamlines_slices = 6; +static float streamlines_radius = 8.0f; static fftw_real *streamlines_frame; struct fftw_real_xy **streamlines_history_scalars; @@ -83,6 +85,26 @@ int streamlines_get_dataset(void) return streamlines_dataset; } +void streamlines_set_slices(int slices) +{ + streamlines_slices = slices; +} + +int streamlines_get_slices(void) +{ + return streamlines_slices; +} + +void streamlines_set_radius(float radius) +{ + streamlines_radius = radius; +} + +float streamlines_get_radius(void) +{ + return streamlines_radius; +} + void streamlines_set_frame(fftw_real *frame) { streamlines_frame = frame; @@ -127,4 +149,4 @@ void streamlines_reset_seedpoints(void) delete_seedpoint(0); i++; } -}
\ No newline at end of file +} diff --git a/Smoke/streamlines.h b/Smoke/streamlines.h index f071e41..0e98988 100644 --- a/Smoke/streamlines.h +++ b/Smoke/streamlines.h @@ -20,6 +20,12 @@ float streamlines_get_alpha(void); void streamlines_set_dataset(int dataset); int streamlines_get_dataset(void); +void streamlines_set_slices(int slices); +int streamlines_get_slices(void); + +void streamlines_set_radius(float radius); +float streamlines_get_radius(void); + void streamlines_set_frame(fftw_real *frame); fftw_real *streamlines_get_frame(void); @@ -29,6 +35,9 @@ struct fftw_real_xy *streamlines_get_history_scalars(int hisdex); void streamlines_set_sort(int sort); int streamlines_get_sort(void); + +void streamlines_reset_seedpoints(void); + struct color4f streamlines_get_color(float value); #endif |