pro mgwidsurfaceviewer::handleEvents, event
compile_opt strictarr
uname = widget_info(event.id, /uname)
case uname of
'draw': begin
update = self.trackball->update(event, transform=rotation)
if (update) then begin
self.model->getProperty, transform=transform
self.model->setProperty, transform=transform # rotation
self.draw->draw, self.view
endif
if (event.clicks eq 2L) then begin
selected = self.draw->select(self.view, [event.x, event.y])
if (selected eq self.surface) then begin
if (obj_valid(self.properties)) then begin
self.properties->show
endif else begin
self.properties = obj_new('MGwidSurfaceProperties', $
self.surface, viewer=self)
endelse
endif
endif
end
else: message, 'unknown widget generated event'
endcase
end
pro mgwidsurfaceviewer::cleanupWidgets, tlb
compile_opt strictarr
obj_destroy, self
end
pro mgwidsurfaceviewer::_createGraphics
compile_opt strictarr
self.view = obj_new('IDLgrView', color=[0, 0, 0])
self.model = obj_new('IDLgrModel')
self.view->add, self.model
self.surface = obj_new('IDLgrSurface', *self.data, name='IDLgrSurface', $
style=2, color=[255, 0, 0], bottom=[100, 0, 0], $
/register_properties)
self.model->add, self.surface
self.surface->getProperty, xrange=xr, yrange=yr, zrange=zr
xc = norm_coord(xr)
xc[0] -= 0.5
yc = norm_coord(yr)
yc[0] -= 0.5
zc = norm_coord(zr)
zc[0] -= 0.5
self.surface->setProperty, xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc
self.model->rotate, [1, 0, 0], -90
self.model->rotate, [0, 1, 0], -30
self.model->rotate, [1, 0, 0], 30
lightmodel = obj_new('IDLgrModel')
self.view->add, lightmodel
light = obj_new('IDLgrLight', type=2, location=[-1, 1, 1])
lightmodel->add, light
self.trackball = obj_new('Trackball', [300, 300], 300)
self->refreshDisplay
end
pro mgwidsurfaceviewer::refreshDisplay
compile_opt strictarr
self.draw->draw, self.view
end
pro mgwidsurfaceviewer::createWidgets
compile_opt strictarr
self.tlb = widget_base(title='Surface viewer', /column, uvalue=self)
draw = widget_draw(self.tlb, uname='draw', graphics_level=2, $
/motion_events, /button_events, $
xsize=600, ysize=600)
end
pro mgwidsurfaceviewer::realizeWidgets
compile_opt strictarr
widget_control, self.tlb, /realize
widget_control, widget_info(self.tlb, find_by_uname='draw'), get_value=draw
self.draw = draw
end
pro mgwidsurfaceviewer::startXmanager
compile_opt strictarr
xmanager, 'mgwidsurfaceviewer', self.tlb, /no_block, $
event_handler='mg_object_event_handler', $
cleanup='mg_object_cleanup'
end
pro mgwidsurfaceviewer::cleanup
compile_opt strictarr
ptr_free, self.data
obj_destroy, [self.view, self.trackball, self.properties]
end
function mgwidsurfaceviewer::init, z
compile_opt strictarr
self.data = ptr_new(z)
self->createWidgets
self->realizeWidgets
self->_createGraphics
self->startXmanager
return, 1
end
pro mgwidsurfaceviewer__define
compile_opt strictarr
define = { MGwidSurfaceViewer, $
tlb: 0L, $
data: ptr_new(), $
draw: obj_new(), $
trackball: obj_new(), $
view: obj_new(), $
model: obj_new(), $
surface: obj_new(), $
properties: obj_new() $
}
end