;+ ; Get properties of the animator. ; ; @keyword nframes {out}{optional}{type=long} number of frames in the animator ; @keyword _ref_extra {out}{optional}{type=keywords} keywords to ; MGgrAnimator::getProperty ;- pro mggrtransformanimator::getProperty, nframes=nframes, _ref_extra=e compile_opt strictarr if (arg_present(nframes)) then nframes = self.transforms->count() if (n_elements(e) gt 0) then self->mggranimator::getProperty, _extra=e end ;+ ; Add another step of the animation for this animator. ; ; @param x {in}{required}{type=float} amount to translate target in x-direction ; @param y {in}{required}{type=float} amount to translate target in y-direction ; @param z {in}{required}{type=float} amount to translate target in z-direction ;- pro mggrtransformanimator::addTranslate, x, y, z compile_opt strictarr self.model->reset self.model->translate, x, y, z self.model->getProperty, transform=transform self->addTransform, transform end ;+ ; Add another step of the animation for this animator. ; ; @param sx {in}{required}{type=float} amount to scale target in x-direction ; @param sy {in}{required}{type=float} amount to scale target in y-direction ; @param sz {in}{required}{type=float} amount to scale target in z-direction ;- pro mggrtransformanimator::addScale, sx, sy, sz compile_opt strictarr self.model->reset self.model->scale, sx, sy, sz self.model->getProperty, transform=transform self->addTransform, transform end ;+ ; Add another step of the animation for this animator. ; ; @param axis {in}{required}{type=fltarr(3)} axis to rotate about ; @param angle {in}{required}{type=float} angle to rotate about axis ;- pro mggrtransformanimator::addRotate, axis, angle compile_opt strictarr self.model->reset self.model->rotate, axis, angle self.model->getProperty, transform=transform self->addTransform, transform end ;+ ; Add another step of the animation for this animator. ; ; @param transform {in}{required}{type=fltarr(4, 4)} transformation matrix ; representing a step in the animation ;- pro mggrtransformanimator::addTransform, transform compile_opt strictarr otransform = obj_new('MGgrTransform', transform) self.transforms->add, otransform end ;+ ; Apply the animator to the target for a given frame. ; ; @keyword frame {in}{required}{type=long} frame number to apply ;- pro mggrtransformanimator::apply, frame=frame compile_opt strictarr index = frame - self.startFrame if ((index ge self.transforms->count()) or (index lt 0)) then return otransform = self.transforms->get(position=index) otransform->apply, self.target end ;+ ; Free resources. ;- pro mggrtransformanimator::cleanup compile_opt strictarr obj_destroy, [self.model, self.transforms] self->mggranimator::cleanup end ;+ ; Initialize object. ; ; @returns 1 for success, 0 otherwise ; @keyword _extra {in}{optional}{type=keywords} keywords of MGgrAnimator::init ;- function mggrtransformanimator::init, _extra=e compile_opt strictarr if (~self->mggranimator::init(_extra=e)) then return, 0 self.model = obj_new('IDLgrModel') self.transforms = obj_new('IDL_Container') return, 1 end ;+ ; Define member variables. ; ; @file_comments A MGgrTransformAnimator represents transforms of a given model ; during certain steps in an animation. ; @field model IDLgrModel used for calculations ; @field transforms list of MGgrTransform objects ;- pro mggrtransformanimator__define compile_opt strictarr define = { MGgrTransformAnimator, inherits MGgrAnimator, $ model : obj_new(), $ transforms : obj_new() $ } end