From cd9b92089bf40c7e21a914e06d45ef734aadd086 Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Sun, 22 Jun 2008 08:00:42 +0000 Subject: [PATCH] better modularity, initial support for RSL --- Makefile.am | 4 ++-- src/Makefile.am | 8 ++++--- src/aweather.c | 5 ++-- src/aweather.h | 0 src/cube.c | 51 ++++++--------------------------------- src/cube.h | 4 +--- src/level2.c | 4 ++++ src/opengl.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ src/opengl.h | 6 +++++ src/radar.c | 63 +++++++++++++++++++++++++++++++++++++++++++++++++ src/radar.h | 6 +++++ 11 files changed, 159 insertions(+), 54 deletions(-) create mode 100644 src/aweather.h create mode 100644 src/opengl.c create mode 100644 src/opengl.h create mode 100644 src/radar.c create mode 100644 src/radar.h diff --git a/Makefile.am b/Makefile.am index 76b4520..56147d9 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ SUBDIRS = src -test: - ./src/aweather +test: all + LD_LIBRARY_PATH=/usr/local/trmm/GVBOX/lib/ ./src/aweather diff --git a/src/Makefile.am b/src/Makefile.am index cca3efd..67a788a 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,5 +1,7 @@ bin_PROGRAMS = aweather -aweather_SOURCES = aweather.c aweather.h cube.c cube.h -aweather_CPPFLAGS = @PACKAGE_CFLAGS@ -aweather_LDADD = @PACKAGE_LIBS@ +aweather_SOURCES = aweather.c opengl.c cube.c radar.c +aweather_CPPFLAGS = @PACKAGE_CFLAGS@ -I/usr/local/trmm/GVBOX/include/ +aweather_LDADD = @PACKAGE_LIBS@ -L/usr/local/trmm/GVBOX/lib/ -lrsl + + diff --git a/src/aweather.c b/src/aweather.c index 2de330b..ebd8ce3 100644 --- a/src/aweather.c +++ b/src/aweather.c @@ -32,7 +32,6 @@ int main(int argc, char *argv[]) GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size(GTK_WINDOW(window), 800, 600); g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(delete_event), NULL); - g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(delete_event), NULL); g_signal_connect(G_OBJECT(window), "key-press-event", G_CALLBACK(key_press), NULL); /* Set up layout */ @@ -69,7 +68,9 @@ int main(int argc, char *argv[]) gtk_notebook_append_page(GTK_NOTEBOOK(tab_area), contents, label); /* Load plugins */ - cube_init(drawing, tab_area); + opengl_init(GTK_DRAWING_AREA(drawing), GTK_NOTEBOOK(tab_area)); + cube_init (GTK_DRAWING_AREA(drawing), GTK_NOTEBOOK(tab_area)); + radar_init (GTK_DRAWING_AREA(drawing), GTK_NOTEBOOK(tab_area)); gtk_widget_show_all(window); gtk_main(); diff --git a/src/aweather.h b/src/aweather.h new file mode 100644 index 0000000..e69de29 diff --git a/src/cube.c b/src/cube.c index cf01daf..c20f702 100644 --- a/src/cube.c +++ b/src/cube.c @@ -5,6 +5,9 @@ #include #include +static gboolean expose(GtkWidget *da, GdkEventExpose *event, gpointer user_data); +static gboolean rotate(gpointer user_data); + static GtkWidget *rotate_button; float boxv[][3] = { @@ -21,20 +24,12 @@ float boxv[][3] = { static float ang = 30.; -gboolean expose (GtkWidget *da, GdkEventExpose *event, gpointer user_data) +static gboolean expose(GtkWidget *da, GdkEventExpose *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (da); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (da); - // g_print (" :: expose\n"); - - if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) - { - g_assert_not_reached (); - } - /* draw in here */ - glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glPushMatrix(); glRotatef (ang, 1, 0, 1); @@ -100,41 +95,10 @@ gboolean expose (GtkWidget *da, GdkEventExpose *event, gpointer user_data) glPopMatrix (); - if (gdk_gl_drawable_is_double_buffered (gldrawable)) - gdk_gl_drawable_swap_buffers (gldrawable); - - else - glFlush (); - - gdk_gl_drawable_gl_end (gldrawable); - - return TRUE; -} - -gboolean configure(GtkWidget *da, GdkEventConfigure *event, gpointer user_data) -{ - GdkGLContext *glcontext = gtk_widget_get_gl_context (da); - GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (da); - - if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) - { - g_assert_not_reached (); - } - - glLoadIdentity(); - glViewport (0, 0, da->allocation.width, da->allocation.height); - glOrtho (-10,10,-10,10,-20050,10000); - glEnable (GL_BLEND); - glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - - glScalef (10., 10., 10.); - - gdk_gl_drawable_gl_end (gldrawable); - - return TRUE; + return FALSE; } -gboolean rotate (gpointer user_data) +static gboolean rotate(gpointer user_data) { if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(rotate_button))) return TRUE; @@ -157,7 +121,6 @@ gboolean cube_init(GtkDrawingArea *drawing, GtkNotebook *config) gtk_notebook_append_page(GTK_NOTEBOOK(config), rotate_button, label); /* Set up OpenGL Stuff */ - g_signal_connect(drawing, "configure-event", G_CALLBACK(configure), NULL); - g_signal_connect(drawing, "expose-event", G_CALLBACK(expose), NULL); + g_signal_connect(drawing, "expose-event", G_CALLBACK(expose), NULL); g_timeout_add(1000/60, rotate, drawing); } diff --git a/src/cube.h b/src/cube.h index 4ba6a69..d1b641d 100644 --- a/src/cube.h +++ b/src/cube.h @@ -1,8 +1,6 @@ #ifndef CUBE_H #define CUBE_H -gboolean expose(GtkWidget *da, GdkEventExpose *event, gpointer user_data); -gboolean configure(GtkWidget *da, GdkEventConfigure *event, gpointer user_data); -gboolean rotate(gpointer user_data); +gboolean cube_init(GtkDrawingArea *drawing, GtkNotebook *config); #endif diff --git a/src/level2.c b/src/level2.c index ecc39f3..a4ef136 100644 --- a/src/level2.c +++ b/src/level2.c @@ -14,6 +14,7 @@ #include #include "level2.h" +/* Not used in favor of RSL */ level2_packet_t **level2_split_packets(char *data, int *num_packets, int data_size) { int packet_i = 0; @@ -46,6 +47,7 @@ level2_packet_t **level2_split_packets(char *data, int *num_packets, int data_si return packets; } +/* Not used in favor of RSL */ level2_packet_t *level2_decompress(char *raw_data, int *num_packets) { /* Read header */ @@ -96,6 +98,8 @@ level2_packet_t *level2_decompress(char *raw_data, int *num_packets) //return level2_split_packets(data, num_packets, data_size); } + + int main(int argc, char **argv) { if (argc < 2) { diff --git a/src/opengl.c b/src/opengl.c new file mode 100644 index 0000000..3561869 --- /dev/null +++ b/src/opengl.c @@ -0,0 +1,62 @@ +#include +#include +#include +#include + +static gboolean expose_start(GtkWidget *da, GdkEventExpose *event, gpointer user_data) +{ + GdkGLContext *glcontext = gtk_widget_get_gl_context (da); + GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (da); + + if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) { + g_assert_not_reached (); + } + + /* draw in here */ + glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); +} +/* Plugins run stuff here */ +static gboolean expose_end(GtkWidget *da, GdkEventExpose *event, gpointer user_data) +{ + GdkGLContext *glcontext = gtk_widget_get_gl_context (da); + GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (da); + + if (gdk_gl_drawable_is_double_buffered (gldrawable)) + gdk_gl_drawable_swap_buffers (gldrawable); + else + glFlush (); + + gdk_gl_drawable_gl_end (gldrawable); + + return FALSE; +} +static gboolean configure(GtkWidget *da, GdkEventConfigure *event, gpointer user_data) +{ + GdkGLContext *glcontext = gtk_widget_get_gl_context (da); + GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (da); + + if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) + g_assert_not_reached (); + + glLoadIdentity(); + glViewport (0, 0, da->allocation.width, da->allocation.height); + glOrtho (-10,10,-10,10,-20050,10000); + glEnable (GL_BLEND); + glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + glScalef (10., 10., 10.); + + gdk_gl_drawable_gl_end (gldrawable); + + return TRUE; +} + +gboolean opengl_init(GtkDrawingArea *drawing, GtkNotebook *config) +{ + /* Set up OpenGL Stuff */ + g_signal_connect(drawing, "configure-event", G_CALLBACK(configure), NULL); + + //g_signal_connect(drawing, "expose-event", G_CALLBACK(expose), NULL); + g_signal_connect (drawing, "expose-event", G_CALLBACK(expose_start), NULL); + g_signal_connect_after(drawing, "expose-event", G_CALLBACK(expose_end), NULL); +} diff --git a/src/opengl.h b/src/opengl.h new file mode 100644 index 0000000..f0a631b --- /dev/null +++ b/src/opengl.h @@ -0,0 +1,6 @@ +#ifndef OPENGL_H +#define OPENGL_H + +gboolean opengl_init(GtkDrawingArea *drawing, GtkNotebook *config); + +#endif diff --git a/src/radar.c b/src/radar.c new file mode 100644 index 0000000..f3fcbdb --- /dev/null +++ b/src/radar.c @@ -0,0 +1,63 @@ +#include +#include +#include +#include +#include +#include + +#include "rsl.h" + +#include "radar.h" + +static GtkWidget *rotate_button; +static Radar *radar; + +static gboolean expose(GtkWidget *da, GdkEventExpose *event, gpointer user_data) +{ + GdkGLContext *glcontext = gtk_widget_get_gl_context (da); + GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (da); + + /* draw in here */ + glPushMatrix(); + + glRotatef(0, 0, 0, 0); + + glShadeModel(GL_FLAT); + + glBegin (GL_TRIANGLE_FAN); + glVertex3f(0., 0., 0.); + glVertex3f(0., .5, 0.); + + int angle; + for (angle = 1; angle <= 360; angle++) { + double rad = (angle*M_PI)/180.0; + double x = sin(rad); + double y = cos(rad); + //g_printf("tick.. %d - %5.3f: (%5.2f,%5.2f)\n", angle, rad, x, y); + glColor3f((float)angle/360.0, 0., 0.); + glVertex3f(x/2., y/2., 0.); + } + + glEnd (); + + glPopMatrix (); + + return FALSE; +} + +gboolean radar_init(GtkDrawingArea *drawing, GtkNotebook *config) +{ + /* Add configuration tab */ + GtkWidget *label = gtk_label_new("Radar"); + rotate_button = gtk_toggle_button_new_with_label("Rotate"); + gtk_notebook_append_page(GTK_NOTEBOOK(config), rotate_button, label); + + /* Set up OpenGL Stuff */ + g_signal_connect(drawing, "expose-event", G_CALLBACK(expose), NULL); + + /* Parse hard coded file.. */ + RSL_read_these_sweeps("0", NULL); + radar = RSL_wsr88d_to_radar("/scratch/aweather/src/KABR_20080609_0224", "KABR"); + RSL_load_refl_color_table(); + RSL_volume_to_gif(radar->v[DZ_INDEX], "dz_sweep", 400, 400, 200.0); +} diff --git a/src/radar.h b/src/radar.h new file mode 100644 index 0000000..d6e85b2 --- /dev/null +++ b/src/radar.h @@ -0,0 +1,6 @@ +#ifndef RADAR_H +#define RADAR_H + +gboolean radar_init(GtkDrawingArea *drawing, GtkNotebook *config); + +#endif -- 2.43.2