]> Pileus Git - aweather/blobdiff - src/plugins/level2.c
Fix hiding and freeing volumes
[aweather] / src / plugins / level2.c
index 271dfbe2c8af009d006eb3cdf1ff3c5fb591453c..38da4e8654fde11a251faf795c57331ead59048d 100644 (file)
@@ -58,15 +58,12 @@ static void _bscan_sweep(Sweep *sweep, AWeatherColormap *colormap,
                                continue;
                        }
 
-                       /* Convert data value to index */
-                       gint idx = value * colormap->scale + colormap->shift;
-                       idx = CLAMP(idx, 0, colormap->len);
-
                        /* Copy color to buffer */
-                       buf[buf_i+0] = colormap->data[idx][0];
-                       buf[buf_i+1] = colormap->data[idx][1];
-                       buf[buf_i+2] = colormap->data[idx][2];
-                       buf[buf_i+3] = colormap->data[idx][3]*0.75; // TESTING
+                       guint8 *data = colormap_get(colormap, value);
+                       buf[buf_i+0] = data[0];
+                       buf[buf_i+1] = data[1];
+                       buf[buf_i+2] = data[2];
+                       buf[buf_i+3] = data[3]*0.75; // TESTING
                }
        }
 
@@ -161,7 +158,7 @@ static VolGrid *_load_grid(Volume *vol)
        gint nsweeps   = vol->h.nsweeps;
        gint nrays     = sweep->h.nrays/(1/sweep->h.beam_width)+1;
        gint nbins     = ray->h.nbins  /(1000/ray->h.gate_size);
-       nbins = MIN(nbins, 100);
+       nbins = MIN(nbins, 150);
 
        VolGrid  *grid = vol_grid_new(nrays, nbins, nsweeps);
 
@@ -268,6 +265,13 @@ void aweather_level2_draw(GritsObject *_self, GritsOpenGL *opengl)
        //glEnd();
 }
 
+void aweather_level2_hide(GritsObject *_self, gboolean hidden)
+{
+       AWeatherLevel2 *self = AWEATHER_LEVEL2(_self);
+       if (self->volume)
+               grits_object_hide(GRITS_OBJECT(self->volume), hidden);
+}
+
 
 /***********
  * Methods *
@@ -324,15 +328,15 @@ void aweather_level2_set_iso(AWeatherLevel2 *level2, gfloat level)
                level2->volume = vol;
        }
        if (ISO_MIN < level && level < ISO_MAX) {
-               AWeatherColormap *cm = &level2->colormap[0];
-               level2->volume->color[0] = cm->data[(gint)level][0];
-               level2->volume->color[1] = cm->data[(gint)level][1];
-               level2->volume->color[2] = cm->data[(gint)level][2];
-               level2->volume->color[3] = cm->data[(gint)level][3];
+               guint8 *data = colormap_get(&level2->colormap[0], level);
+               level2->volume->color[0] = data[0];
+               level2->volume->color[1] = data[1];
+               level2->volume->color[2] = data[2];
+               level2->volume->color[3] = data[3];
                grits_volume_set_level(level2->volume, level);
-               GRITS_OBJECT(level2->volume)->hidden = FALSE;
+               grits_object_hide(GRITS_OBJECT(level2->volume), FALSE);
        } else {
-               GRITS_OBJECT(level2->volume)->hidden = TRUE;
+               grits_object_hide(GRITS_OBJECT(level2->volume), TRUE);
        }
 }
 
@@ -507,6 +511,16 @@ G_DEFINE_TYPE(AWeatherLevel2, aweather_level2, GRITS_TYPE_OBJECT);
 static void aweather_level2_init(AWeatherLevel2 *self)
 {
 }
+static void aweather_level2_dispose(GObject *_self)
+{
+       AWeatherLevel2 *self = AWEATHER_LEVEL2(_self);
+       g_debug("AWeatherLevel2: dispose - %p", _self);
+       if (self->volume) {
+               grits_viewer_remove(GRITS_OBJECT(self)->viewer, self->volume);
+               self->volume = NULL;
+       }
+       G_OBJECT_CLASS(aweather_level2_parent_class)->dispose(_self);
+}
 static void aweather_level2_finalize(GObject *_self)
 {
        AWeatherLevel2 *self = AWEATHER_LEVEL2(_self);
@@ -518,6 +532,8 @@ static void aweather_level2_finalize(GObject *_self)
 }
 static void aweather_level2_class_init(AWeatherLevel2Class *klass)
 {
+       G_OBJECT_CLASS(klass)->dispose  = aweather_level2_dispose;
        G_OBJECT_CLASS(klass)->finalize = aweather_level2_finalize;
-       GRITS_OBJECT_CLASS(klass)->draw   = aweather_level2_draw;
+       GRITS_OBJECT_CLASS(klass)->draw = aweather_level2_draw;
+       GRITS_OBJECT_CLASS(klass)->hide = aweather_level2_hide;
 }