pro mggrwindow3d::getProperty, eye_separation=eyeSeparation, _ref_extra=e
compile_opt strictarr
if (arg_present(eyeSeparation)) then begin
self.converter->getProperty, eye_separation=eyeSeparation
endif
if (n_elements(e) gt 0) then begin
self->IDLgrWindow::getProperty, _strict_extra=e
endif
end
pro mggrwindow3d::setProperty, dimensions=dimensions, $
eye_separation=eyeSeparation, _extra=e
compile_opt strictarr
self->IDLgrWindow::setProperty, _extra=e
if (n_elements(dimensions) gt 0) then begin
self->IDLgrWindow::setProperty, dimensions=dimensions
self.converter->setProperty, dimensions=dimensions
endif
if (n_elements(eye_separation) gt 0) then begin
self.converter->setProperty, eye_separation=eyeSeparation
endif
end
pro mggrwindow3d::draw, picture
compile_opt strictarr
on_error, 2
self->getProperty, graphics_tree=graphicsTree
_picture = obj_valid(picture) ? picture : graphicsTree
view = self.converter->convert(_picture)
self->idlgrwindow::draw, view
end
pro mggrwindow3d::cleanup
compile_opt strictarr
self->idlgrwindow::cleanup
obj_destroy, self.converter
end
function mggrwindow3d::init, eye_separation=eyeSeparation, $
dimensions=dimensions, _extra=e
compile_opt strictarr
if (~self->IDLgrWindow::init(dimensions=dimensions, _extra=e)) then return, 0
if (n_elements(dimensions) eq 0) then begin
case strlowcase(!version.os_family) of
'unix' : begin
dims = [pref_get('idl_gr_x_width'), pref_get('idl_gr_x_height')]
end
'windows' : begin
dims = [pref_get('idl_gr_win_width'), pref_get('idl_gr_win_height')]
end
endcase
endif else dims = dimensions
self.converter = obj_new('MGgr3dConverter', $
eye_separation=eyeSeparation, $
dimensions=dims, _extra=e)
return, 1
end
pro mggrwindow3d__define
compile_opt strictarr
define = { MGgrWindow3d, inherits IDLgrWindow, $
converter: obj_new() $
}
end
view = obj_new('IDLgrView')
lightmodel = obj_new('IDLgrModel')
view->add, lightmodel
light = obj_new('IDLgrLight', type=2, location=[-1, 1, 1])
lightmodel->add, light
model = obj_new('IDLgrModel')
view->add, model
surface = obj_new('IDLgrSurface', hanning(20, 20), style=2, color=[255, 0, 0])
model->add, surface
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
surface->setProperty, xcoord_conv=xc, ycoord_conv=yc, zcoord_conv=zc
model->rotate, [1, 0, 0], -90
model->rotate, [0, 1, 0], 45
model->rotate, [1, 0, 0], 30
window3d = obj_new('MGgrWindow3d')
window3d->draw, view
end