for (int ri = 0; ri < sweep->h.nrays; ri++) {
Ray *ray = sweep->ray[ri];
for (int bi = 0; bi < ray->h.nbins; bi++) {
- /* copy RGBA into buffer */
- //guint val = dz_f(ray->range[bi]);
- guint8 val = (guint8)ray->h.f(ray->range[bi]);
guint buf_i = (ri*max_bins+bi)*4;
- buf[buf_i+0] = colormap->data[val][0];
- buf[buf_i+1] = colormap->data[val][1];
- buf[buf_i+2] = colormap->data[val][2];
- buf[buf_i+3] = colormap->data[val][3]*0.75; // TESTING
- if (val == BADVAL || val == RFVAL || val == APFLAG ||
- val == NOTFOUND_H || val == NOTFOUND_V || val == NOECHO) {
+ float value = ray->h.f(ray->range[bi]);
+
+ /* Check for bad values */
+ if (value == BADVAL || value == RFVAL || value == APFLAG ||
+ value == NOTFOUND_H || value == NOTFOUND_V || value == NOECHO) {
buf[buf_i+3] = 0x00; // transparent
+ 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
}
}
g_debug("AWeatherLevel2: _set_sweep_cb");
AWeatherLevel2 *self = _self;
_load_sweep_gl(self);
- gtk_widget_queue_draw(GTK_WIDGET(self->viewer));
+ grits_object_queue_draw(_self);
g_object_unref(self);
return FALSE;
}
/* Find colormap */
self->sweep_colors = NULL;
- for (int i = 0; self->colormap[i].name; i++)
+ for (int i = 0; self->colormap[i].file; i++)
if (self->colormap[i].type == type)
self->sweep_colors = &self->colormap[i];
- if (!self->sweep_colors) return;
+ if (!self->sweep_colors) {
+ g_warning("AWeatherLevel2: set_sweep - missing colormap[%d]", type);
+ self->sweep_colors = &self->colormap[0];
+ }
/* Load data */
g_object_ref(self);
g_idle_add(_set_sweep_cb, self);
}
-AWeatherLevel2 *aweather_level2_new(GritsViewer *viewer,
- AWeatherColormap *colormap, Radar *radar)
+AWeatherLevel2 *aweather_level2_new(Radar *radar, AWeatherColormap *colormap)
{
g_debug("AWeatherLevel2: new - %s", radar->h.radar_name);
AWeatherLevel2 *self = g_object_new(AWEATHER_TYPE_LEVEL2, NULL);
- self->viewer = viewer;
self->radar = radar;
self->colormap = colormap;
aweather_level2_set_sweep(self, DZ_INDEX, 0);
return self;
}
-AWeatherLevel2 *aweather_level2_new_from_file(GritsViewer *viewer,
- AWeatherColormap *colormap,
- const gchar *file, const gchar *site)
+AWeatherLevel2 *aweather_level2_new_from_file(const gchar *file, const gchar *site,
+ AWeatherColormap *colormap)
{
g_debug("AWeatherLevel2: new_from_file %s %s", site, file);
if (!radar)
return NULL;
- return aweather_level2_new(viewer, colormaps, radar);
+ return aweather_level2_new(radar, colormaps);
}
static void _on_sweep_clicked(GtkRadioButton *button, gpointer _level2)
{
AWeatherLevel2 *level2 = _level2;
- gint type = (gint)g_object_get_data(G_OBJECT(button), "type");
- gint elev = (gint)g_object_get_data(G_OBJECT(button), "elev");
- aweather_level2_set_sweep(level2, type, (float)elev/100);
- //self->colormap = level2->sweep_colors;
+ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button))) {
+ gint type = (gint)g_object_get_data(G_OBJECT(button), "type");
+ gint elev = (gint)g_object_get_data(G_OBJECT(button), "elev");
+ aweather_level2_set_sweep(level2, type, (float)elev/100);
+ //self->colormap = level2->sweep_colors;
+ }
}
GtkWidget *aweather_level2_get_config(AWeatherLevel2 *level2)