summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2008-01-11 03:36:54 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2008-01-11 03:36:54 (GMT)
commitd7413fd0a44e780656bb928dc68dfbd12eadba05 (patch)
tree2ffbb1d9a96669b911fad04ae9fcaea3327fcabb
parent0b2a65158a7b19175bb180acb6fb7199480abcaa (diff)
download2iv35-d7413fd0a44e780656bb928dc68dfbd12eadba05.zip
2iv35-d7413fd0a44e780656bb928dc68dfbd12eadba05.tar.gz
2iv35-d7413fd0a44e780656bb928dc68dfbd12eadba05.tar.bz2
adjustable streamlines
-rw-r--r--Smoke/gtk.c4
-rw-r--r--Smoke/gtk_streamlines.c88
-rw-r--r--Smoke/renderer_gl.c11
-rwxr-xr-xSmoke/smoke.binbin651186 -> 651640 bytes
-rw-r--r--Smoke/streamlines.c24
-rw-r--r--Smoke/streamlines.h9
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
index 0ee48a7..1120671 100755
--- a/Smoke/smoke.bin
+++ b/Smoke/smoke.bin
Binary files differ
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