; docformat = 'rst' ;+ ; Simple example of displaying a isosurface polygonal meshes in object ; graphics. ; ; :Params: ; volume : in, required, type="fltarr(m, n, p)" ; 3-dimensional volume data ; n : in, required, type=long ; number of isosurfaces to draw ; ; :Keywords: ; renderer : in, optional, type=long ; set to 0 for hardware rendering, 1 for software rendering ; _extra : in, optional, type=keywords ; keywords to IDLgrPolygons::init ;- pro mg_ogisosurface_example, volume, n, renderer=renderer, _extra=e compile_opt strictarr ; first and last values won't get drawn so add two to make up for it _n = n + 2 dims = size(volume, /dimensions) xr = [0, dims[0]] yr = [0, dims[1]] zr = [0, dims[2]] xc = mg_linear_function(xr, [-0.6, 0.6]) yc = mg_linear_function(yr, [-0.6, 0.6]) zc = mg_linear_function(zr, [-0.6, 0.6]) viewgroup = obj_new('IDLgrViewGroup') ; units=3 -> normal coordinates view = obj_new('IDLgrView', location=[0.0, 0.0], dimensions=[5./6., 1.0], $ units=3) viewgroup->add, view model = obj_new('IDLgrModel') view->add, model palette = obj_new('IDLgrPalette') viewgroup->add, palette palette->loadCT, 5 maxV = max(volume, min=minV) values = (maxV - minV) * findgen(_n) / (_n - 1L) + minV colors = bytscl(values) for i = 0L, _n - 1L do begin isosurface, volume, values[i], vertices, polygons if (polygons[0] lt 0L) then continue polygon = obj_new('IDLgrPolygon', vertices, polygons=polygons, $ palette=palette, color=colors[i], $ _extra=e) model->add, polygon polygon->setProperty, xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc endfor lightModel = obj_new('IDLgrModel') view->add, lightModel light = obj_new('IDLgrLight', type=2, location=[-1, 1, 1]) lightModel->add, light model->rotate, [0, 1, 0], -30 model->rotate, [1, 0, 0], 30 xaxis = obj_new('IDLgrAxis', direction=0, range=xr, /exact, $ location=[xr[0], yr[0], zr[0]], ticklen=0.015) model->add, xaxis yaxis = obj_new('IDLgrAxis', direction=1, range=yr, /exact, $ location=[xr[0], yr[0], zr[0]], ticklen=0.015) model->add, yaxis zaxis = obj_new('IDLgrAxis', direction=2, range=zr, /exact, $ location=[xr[0], yr[0], zr[0]], ticklen=0.015) model->add, zaxis xaxis->setProperty, xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc yaxis->setProperty, xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc zaxis->setProperty, xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc cbView = obj_new('IDLgrView', location=[5./6., 0.0], dimensions=[1./6., 1.], $ units=3) viewgroup->add, cbView cbModel = obj_new('IDLgrModel') cbView->add, cbModel ticktext = obj_new('IDLgrText', strtrim(values, 2)) colorbar = obj_new('IDLgrColorbar', palette=palette, $ show_axes=2, /show_outline, $ major=_n, ticktext=ticktext, tickvalues=colors) cbModel->add, colorbar colorbar->getProperty, xrange=xr, yrange=yr xc = mg_linear_function(xr, [-0.25, 0.25]) yc = mg_linear_function(yr, [-0.9, 0.9]) colorbar->setProperty, xcoord_conv=xc, ycoord_conv=yc window = obj_new('IDLgrWindow', dimensions=[600, 500], $ graphics_tree=viewgroup, renderer=renderer) window->draw end ; main-level example program restore, filename=filepath('storm25.sav', subdir=['examples', 'demo', 'demodata']) mg_ogisosurface_example, p, 9, /shading end