]> Pileus Git - aweather/commitdiff
better modularity, initial support for RSL
authorAndy Spencer <andy753421@gmail.com>
Sun, 22 Jun 2008 08:00:42 +0000 (08:00 +0000)
committerAndy Spencer <andy753421@gmail.com>
Sun, 22 Jun 2008 08:00:42 +0000 (08:00 +0000)
Makefile.am
src/Makefile.am
src/aweather.c
src/aweather.h [new file with mode: 0644]
src/cube.c
src/cube.h
src/level2.c
src/opengl.c [new file with mode: 0644]
src/opengl.h [new file with mode: 0644]
src/radar.c [new file with mode: 0644]
src/radar.h [new file with mode: 0644]

index 76b452099835ecf5e1e7bf3d18cd63bc48d5d5fc..56147d9e29ee8cf9222818c1f60dbe75ffdb4415 100644 (file)
@@ -1,4 +1,4 @@
 SUBDIRS = src
 
-test:
-       ./src/aweather
+test: all
+       LD_LIBRARY_PATH=/usr/local/trmm/GVBOX/lib/ ./src/aweather
index cca3efd5515bd094c6034880c356b4c4bc49a2af..67a788a46f698b5fadf6f94e058f68a358aa7778 100644 (file)
@@ -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
+
+
index 2de330ba7b81e67d6898c2ad9f6e12f544a0e4a1..ebd8ce3429f1859a11298590c20dd1257cb902ae 100644 (file)
@@ -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 (file)
index 0000000..e69de29
index cf01dafbe4c2056d2479f9be262d446fcec16d75..c20f702a1bdfb47a4ed14a6c14237f7f314c028c 100644 (file)
@@ -5,6 +5,9 @@
 #include <GL/gl.h>
 #include <math.h>
 
+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);
 }
index 4ba6a6969c09e1e729ec0e4d9a2f539a3c0f6bda..d1b641da7a6a4c8b7355a17cffa07da2f40183b5 100644 (file)
@@ -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
index ecc39f3043d12b2ff2713a62f1770d21cebef5c1..a4ef136f7dcc3e0d830fb449f96b09aa95733c57 100644 (file)
@@ -14,6 +14,7 @@
 #include <bzlib.h>
 #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 (file)
index 0000000..3561869
--- /dev/null
@@ -0,0 +1,62 @@
+#include <config.h>
+#include <gtk/gtk.h>
+#include <gtk/gtkgl.h>
+#include <GL/gl.h>
+
+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 (file)
index 0000000..f0a631b
--- /dev/null
@@ -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 (file)
index 0000000..f3fcbdb
--- /dev/null
@@ -0,0 +1,63 @@
+#include <config.h>
+#include <gtk/gtk.h>
+#include <gtk/gtkgl.h>
+#include <gdk/gdkkeysyms.h>
+#include <GL/gl.h>
+#include <math.h>
+
+#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 (file)
index 0000000..d6e85b2
--- /dev/null
@@ -0,0 +1,6 @@
+#ifndef RADAR_H
+#define RADAR_H
+
+gboolean radar_init(GtkDrawingArea *drawing, GtkNotebook *config);
+
+#endif