+#ifdef MARCHING
+ /* Load the surface */
+ if (self->cur_triangles) {
+ g_free(self->cur_triangles);
+ self->cur_triangles = NULL;
+ }
+ self->cur_num_triangles = 0;
+ int x = 1;
+ for (guint vi = 0; vi < radar->h.nvolumes; vi++) {
+ if (radar->v[vi] == NULL) continue;
+
+ for (guint si = 0; si+1 < radar->v[vi]->h.nsweeps; si++) {
+ Sweep *sweep0 = radar->v[vi]->sweep[si+0];
+ Sweep *sweep1 = radar->v[vi]->sweep[si+1];
+
+ //g_debug("_aweather_radar_expose: sweep[%3d-%3d] -- nrays = %d, %d",
+ // si, si+1,sweep0->h.nrays, sweep1->h.nrays);
+
+ /* Skip super->regular resolution switch for now */
+ if (sweep0 == NULL || sweep0->h.elev == 0 ||
+ sweep1 == NULL || sweep1->h.elev == 0 ||
+ sweep0->h.nrays != sweep1->h.nrays)
+ continue;
+
+ /* We repack the arrays so that raysX[0] is always north, etc */
+ Ray **rays0 = g_malloc0(sizeof(Ray*)*sweep0->h.nrays);
+ Ray **rays1 = g_malloc0(sizeof(Ray*)*sweep1->h.nrays);
+
+ for (guint ri = 0; ri < sweep0->h.nrays; ri++)
+ rays0[(guint)(sweep0->ray[ri]->h.azimuth * sweep0->h.nrays / 360)] =
+ sweep0->ray[ri];
+ for (guint ri = 0; ri < sweep1->h.nrays; ri++)
+ rays1[(guint)(sweep1->ray[ri]->h.azimuth * sweep1->h.nrays / 360)] =
+ sweep1->ray[ri];
+
+ for (guint ri = 0; ri+x < sweep0->h.nrays; ri+=x) {
+ //g_debug("_aweather_radar_expose: ray[%3d-%3d] -- nbins = %d, %d, %d, %d",
+ // ri, ri+x,
+ // rays0[ri ]->h.nbins,
+ // rays0[ri+1]->h.nbins,
+ // rays1[ri ]->h.nbins,
+ // rays1[ri+1]->h.nbins);
+
+ for (guint bi = 0; bi+x < rays1[ri]->h.nbins; bi+=x) {
+ GRIDCELL grid = {};
+ _aweather_radar_grid_set(&grid, 7, rays0[(ri )%sweep0->h.nrays], bi+x);
+ _aweather_radar_grid_set(&grid, 6, rays0[(ri+x)%sweep0->h.nrays], bi+x);
+ _aweather_radar_grid_set(&grid, 5, rays0[(ri+x)%sweep0->h.nrays], bi );
+ _aweather_radar_grid_set(&grid, 4, rays0[(ri )%sweep0->h.nrays], bi );
+ _aweather_radar_grid_set(&grid, 3, rays1[(ri )%sweep0->h.nrays], bi+x);
+ _aweather_radar_grid_set(&grid, 2, rays1[(ri+x)%sweep0->h.nrays], bi+x);
+ _aweather_radar_grid_set(&grid, 1, rays1[(ri+x)%sweep0->h.nrays], bi );
+ _aweather_radar_grid_set(&grid, 0, rays1[(ri )%sweep0->h.nrays], bi );
+
+ TRIANGLE tris[10];
+ int n = march_one_cube(grid, 40, tris);
+
+ self->cur_triangles = g_realloc(self->cur_triangles,
+ (self->cur_num_triangles+n)*sizeof(TRIANGLE));
+ for (int i = 0; i < n; i++) {
+ //g_debug("triangle: ");
+ //g_debug("\t(%f,%f,%f)", tris[i].p[0].x, tris[i].p[0].y, tris[i].p[0].z);
+ //g_debug("\t(%f,%f,%f)", tris[i].p[1].x, tris[i].p[1].y, tris[i].p[1].z);
+ //g_debug("\t(%f,%f,%f)", tris[i].p[2].x, tris[i].p[2].y, tris[i].p[2].z);
+ self->cur_triangles[self->cur_num_triangles+i] = tris[i];
+ }
+ self->cur_num_triangles += n;
+ //g_debug(" ");
+ }
+ }
+ }
+ break; // Exit after first volume (reflectivity)
+ }
+#endif
+