; docformat = 'rst'
;+
; Example of using the animation classes.
;
; Graphics hierarchy setup
; ------------------------
;
; An object graphics hierarchy is setup in the standard way::
;
; oview = obj_new('IDLgrView')
;
; omodel = obj_new('IDLgrModel')
; oview->add, omodel
;
; oorb = obj_new('orb', radius=0.9, color=[0, 0, 255])
; omodel->add, oorb
;
; olightmodel = obj_new('IDLgrModel')
; oview->add, olightmodel
;
; olight = obj_new('IDLgrLight', type=2, location=[1, 1, 1])
; olightmodel->add, olight
;
;
; Animation hierarchy
; -------------------
;
; A separate animation hierarchy is then built to represent the animations
; intended to run on the object graphics hierarchy. This hierarchy is rooted
; at a `MGgrWindowAnimation` (for interactive animations) or a
; `MGgrImageSequenceAnimation` (for creating a sequence of images):
;
; oanimation = obj_new('MGgrWindowAnimation', dimension=[400, 400])
;
; There are various other animators that can be children of the root that
; produce transformations, property changes, etc.
;
; Using TransformAnimator to scale and rotate
; -------------------------------------------
;
; A `MGgrTransformAnimator` represents a scaling, rotation, or translation
; transformation. Here we scale `omodel` down and then back up::
;
; oanimator1 = obj_new('MGgrTransformAnimator', target=omodel)
; for i = 0, 20 do begin
; oanimator1->addScale, 0.97, 0.97, 0.97
; endfor
; oanimation->addAnimator, oanimator1
;
; for i = 0, 20 do begin
; oanimator1->addScale, 1.02, 1.02, 1.02
; endfor
;
; Then we rotate the `olightmodel`::
;
; oanimator2 = obj_new('MGgrTransformAnimator', target=olightmodel)
; for i = 0, 44 do begin
; oanimator2->addRotate, [0, 1, 0], 8
; endfor
; oanimation->addAnimator, oanimator2
;
; Produce the animation
; ---------------------
;
; Finally, the animation is produced with::
;
; oanimation->draw, oview
;
; :Author:
; Michael Galloy, 2011
;-
oview = obj_new('IDLgrView')
omodel = obj_new('IDLgrModel')
oview->add, omodel
oorb = obj_new('orb', radius=0.9, color=[0, 0, 255])
omodel->add, oorb
olightmodel = obj_new('IDLgrModel')
oview->add, olightmodel
olight = obj_new('IDLgrLight', type=2, location=[1, 1, 1])
olightmodel->add, olight
;oanimation = obj_new('MGgrImageSequenceAnimation', base_filename='anim_', $
; dimension=[400, 400])
oanimation = obj_new('MGgrWindowAnimation', dimension=[400, 400])
oanimator1 = obj_new('MGgrTransformAnimator', target=omodel)
for i = 0, 20 do begin
oanimator1->addScale, 0.97, 0.97, 0.97
endfor
oanimation->addAnimator, oanimator1
for i = 0, 20 do begin
oanimator1->addScale, 1.02, 1.02, 1.02
endfor
oanimator2 = obj_new('MGgrTransformAnimator', target=olightmodel)
for i = 0, 44 do begin
oanimator2->addRotate, [0, 1, 0], 8
endfor
oanimation->addAnimator, oanimator2
oanimation->draw, oview
end