hybrid/keyframe.py# ----------------------------------------------------------------------------
# CLASSES: nightly
#
# Test Case: keyframe.py
#
# Tests: mesh - 3D structured, single domain
# plots - pc, mesh
# operators - none
# selection - none
#
# Defect ID: none
#
# Programmer: Eric Brugger
# Date: Thu Dec 19 16:02:41 PST 2002
#
# Modifications:
# Brad Whitlock, Wed Apr 7 17:24:41 PST 2004
# I added TestSection to break up the test images a little. I also updated
# the code so it uses the new time slider functions instead of the
# deprecated animation functions.
#
# Mark C. Miller, Wed Jan 20 07:37:11 PST 2010
# Added ability to switch between Silo's HDF5 and PDB data.
#
# Eric Brugger, Wed Mar 22 16:23:12 PDT 2023
# Added operator keyframe tests.
#
# ----------------------------------------------------------------------------
# Open a database.
OpenDatabase(silo_data_path("wave.visit"))
# Enable keyframe mode.
k = GetKeyframeAttributes()
k.enabled = 1
SetKeyframeAttributes(k)
# Set the number of frames to be 6.
AnimationSetNFrames(6)
# Create a pseudocolor plot that exists over the first
# 6 frames of the animation.
AddPlot("Pseudocolor", "pressure")
SetPlotFrameRange(0, 0, 5)
# Set the attributes at the first and last frame.
SetTimeSliderState(0)
pc = PseudocolorAttributes()
pc.min = 0
pc.max = 0.2
pc.minFlag = 1
pc.maxFlag = 1
SetPlotOptions(pc)
SetTimeSliderState(5)
pc.max = 0.5
SetPlotOptions(pc)
# Create a mesh plot that exists over frames 2
# through 4.
AddPlot("Mesh", "quadmesh")
SetPlotFrameRange(1, 2, 4)
SetPlotDatabaseState(1, 2, 28)
SetPlotDatabaseState(1, 4, 56)
# Cycle through all the frames, checking that all
# the images are correct.
TestSection("Simple 6 frame animation")
SetTimeSliderState(0)
DrawPlots()
Test("keyframe_01")
TimeSliderNextState()
Test("keyframe_02")
TimeSliderNextState()
Test("keyframe_03")
TimeSliderNextState()
Test("keyframe_04")
TimeSliderNextState()
Test("keyframe_05")
TimeSliderNextState()
Test("keyframe_06")
# Change to frame 4, change the frame range and
# check that all the frames are ok.
TestSection("Setting plot frame range")
SetTimeSliderState(4)
SetPlotFrameRange(1, 0, 2)
SetPlotDatabaseState(1, 0, 0)
SetPlotDatabaseState(1, 2, 28)
SetTimeSliderState(0)
Test("keyframe_07")
TimeSliderNextState()
Test("keyframe_08")
TimeSliderNextState()
Test("keyframe_09")
TimeSliderNextState()
Test("keyframe_10")
TimeSliderNextState()
Test("keyframe_11")
TimeSliderNextState()
Test("keyframe_12")
SetActivePlots(1)
DeleteActivePlots()
# Set the pseudocolor attributes for frame 2 and
# check that all the frames are ok.
TestSection("Setting a plot attributes keyframe")
SetActivePlots(0)
SetTimeSliderState(2)
pc.max = 0.7
SetPlotOptions(pc)
SetTimeSliderState(0)
Test("keyframe_13")
TimeSliderNextState()
Test("keyframe_14")
TimeSliderNextState()
Test("keyframe_15")
TimeSliderNextState()
Test("keyframe_16")
TimeSliderNextState()
Test("keyframe_17")
TimeSliderNextState()
Test("keyframe_18")
# Delete the keyframe at frame 2 and check that
# all the frames are ok.
TestSection("Removing a plot attributes keyframe")
SetTimeSliderState(2)
DeletePlotKeyframe(0, 2)
SetTimeSliderState(0)
Test("keyframe_19")
TimeSliderNextState()
Test("keyframe_20")
TimeSliderNextState()
Test("keyframe_21")
TimeSliderNextState()
Test("keyframe_22")
TimeSliderNextState()
Test("keyframe_23")
TimeSliderNextState()
Test("keyframe_24")
# Delete the keyframe at frame 5 and check that
# all the frames are ok.
TestSection("Deleting another plot attributes keyframe")
DeletePlotKeyframe(0, 5)
SetTimeSliderState(0)
Test("keyframe_25")
TimeSliderNextState()
Test("keyframe_26")
TimeSliderNextState()
Test("keyframe_27")
TimeSliderNextState()
Test("keyframe_28")
TimeSliderNextState()
Test("keyframe_29")
TimeSliderNextState()
Test("keyframe_30")
# Change the number of frames to 4. Create a
# pseudocolor plot that changes its range but
# keeps the database state constant at 0. Check
# that all the frames are ok.
TestSection("Decreasing number of animation frames")
DeleteActivePlots()
AnimationSetNFrames(4)
AddPlot("Pseudocolor", "pressure")
SetPlotFrameRange(0, 0, 3)
SetTimeSliderState(0)
pc.max = 0.2
SetPlotOptions(pc)
SetTimeSliderState(3)
pc.max = 0.5
SetPlotOptions(pc)
DeletePlotDatabaseKeyframe(0, 3)
DrawPlots()
SetTimeSliderState(0)
Test("keyframe_31")
TimeSliderNextState()
Test("keyframe_32")
TimeSliderNextState()
Test("keyframe_33")
TimeSliderNextState()
Test("keyframe_34")
# Test copying plots to a new window.
TestSection("Copying keyframed plot to a new window")
SetTimeSliderState(2)
AddWindow()
SetActiveWindow(2)
CopyPlotsToWindow(1, 2)
CopyAnnotationsToWindow(1, 2)
CopyViewToWindow(1, 2)
DrawPlots()
Test("keyframe_35")
TimeSliderNextState()
Test("keyframe_36")
TimeSliderNextState()
Test("keyframe_37")
TimeSliderNextState()
Test("keyframe_38")
# Take the window out of keyframe mode and
# check that setting the plot attributes sets
# them for all the frames.
TestSection("Turning off keyframe mode")
k.enabled = 0
SetKeyframeAttributes(k)
SetPlotDatabaseState(0, 3, 3)
SetTimeSliderState(3)
pc.minFlag = 0
pc.maxFlag = 0
SetPlotOptions(pc)
SetTimeSliderState(0)
Test("keyframe_39")
TimeSliderNextState()
Test("keyframe_40")
TimeSliderNextState()
Test("keyframe_41")
TimeSliderNextState()
Test("keyframe_42")
# Clear the window, reset the view and enable
# keyframe mode in preparation to test view
# keyframing.
TestSection("Testing view keyframing")
DeleteAllPlots()
ResetView()
k.enabled = 1
SetKeyframeAttributes(k)
# Open a database.
OpenDatabase(silo_data_path("globe.silo"))
# Set the number of frames to be 9.
AnimationSetNFrames(9)
# Create a pseudocolor plot that exists over the first
# 9 frames of the animation.
AddPlot("Pseudocolor", "u")
SetPlotFrameRange(0, 0, 8)
# Create 5 view keyframes.
SetTimeSliderState(0)
v = GetView3D()
v.SetViewNormal(1, 0, 0)
v.SetFocus(0, 0, 0)
v.SetViewUp(0, 0, 1)
v.SetViewAngle(30)
v.SetParallelScale(17.3205)
v.SetNearPlane(-34.641)
v.SetFarPlane(34.641)
v.SetPerspective(1)
SetView3D(v)
SetViewKeyframe()
SetTimeSliderState(2)
v.SetViewNormal(0, 1, 0)
SetView3D(v)
SetViewKeyframe()
SetTimeSliderState(4)
v.SetViewNormal(-1, 0, 0)
SetView3D(v)
SetViewKeyframe()
SetTimeSliderState(6)
v.SetViewNormal(0, -1, 0)
SetView3D(v)
SetViewKeyframe()
SetTimeSliderState(8)
v.SetViewNormal(1, 0, 0)
SetView3D(v)
SetViewKeyframe()
# Render the first frame.
SetTimeSliderState(0)
DrawPlots()
# Enter camera view mode and cycle through all the
# frames, checking that all the images are correct.
ToggleCameraViewMode()
Test("keyframe_43")
TimeSliderNextState()
Test("keyframe_44")
TimeSliderNextState()
Test("keyframe_45")
TimeSliderNextState()
Test("keyframe_46")
TimeSliderNextState()
Test("keyframe_47")
TimeSliderNextState()
Test("keyframe_48")
TimeSliderNextState()
Test("keyframe_49")
TimeSliderNextState()
Test("keyframe_50")
TimeSliderNextState()
Test("keyframe_51")
# Delete the view keyframe at frame 8 and check the image.
DeleteViewKeyframe(8)
Test("keyframe_52")
# Clear all the view keyframes and check the first image.
ClearViewKeyframes()
TimeSliderNextState()
Test("keyframe_53")
# Clear the window and reset the view in preparation
# to test moving keyframes.
TestSection("Moving keyframes")
DeleteAllPlots()
ResetView()
# Open a database.
OpenDatabase(silo_data_path("wave.visit"))
# Set the number of frames to be 6.
AnimationSetNFrames(6)
# Create a pseudocolor plot that exists over the first
# 6 frames of the animation.
AddPlot("Pseudocolor", "pressure")
SetPlotFrameRange(0, 0, 5)
# Set 3 keyframes.
SetTimeSliderState(0)
pc = PseudocolorAttributes()
pc.min = 0
pc.max = 0.2
pc.minFlag = 1
pc.maxFlag = 1
SetPlotOptions(pc)
SetTimeSliderState(3)
pc.max = 0.7
SetPlotOptions(pc)
SetTimeSliderState(5)
pc.max = 0.5
SetPlotOptions(pc)
# Render all the images.
SetTimeSliderState(0)
DrawPlots()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
# Move the keyframe at frame 3 to 4, regenerate all
# the frames and check a few of them.
MovePlotKeyframe(0, 3, 4)
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
SetTimeSliderState(2)
Test("keyframe_54")
SetTimeSliderState(4)
Test("keyframe_55")
SetTimeSliderState(5)
Test("keyframe_56")
# Delete the last 2 keyframes, move the database
# keyframe from frame 5 to 3, regenerate all
# the frames and check a few of them.
DeletePlotKeyframe(0, 4)
DeletePlotKeyframe(0, 5)
MovePlotDatabaseKeyframe(0, 5, 3)
SetTimeSliderState(0)
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
SetTimeSliderState(1)
Test("keyframe_57")
SetTimeSliderState(3)
Test("keyframe_58")
SetTimeSliderState(4)
Test("keyframe_59")
# Delete the second database keyframe, create
# 3 view keyframes and regenerate all the images.
DeletePlotDatabaseKeyframe(0, 3)
SetTimeSliderState(0)
v = GetView3D()
v.SetViewNormal(-1, 0, 1)
v.SetFocus(5, 0.35, 2.5)
v.SetViewUp(0, 1, 0)
v.SetViewAngle(30)
v.SetParallelScale(5.6009)
v.SetNearPlane(-11.2018)
v.SetFarPlane(11.2018)
v.SetPerspective(1)
SetView3D(v)
SetViewKeyframe()
SetTimeSliderState(2)
v.SetViewNormal(0, 0, 1)
SetView3D(v)
SetViewKeyframe()
SetTimeSliderState(5)
v.SetViewNormal(1, 0, 1)
SetView3D(v)
SetViewKeyframe()
ToggleCameraViewMode()
SetTimeSliderState(0)
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
# Move the view keyframe at frame 2 to frame 3,
# regenerate all the frames and check a few of them.
MoveViewKeyframe(2, 3)
SetTimeSliderState(0)
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
TimeSliderNextState()
SetTimeSliderState(2)
Test("keyframe_60")
SetTimeSliderState(3)
Test("keyframe_61")
SetTimeSliderState(4)
Test("keyframe_62")
# Clear the window and reset the view in preparation
# to test operator keyframes.
TestSection("Operator keyframes")
DeleteAllPlots()
ResetView()
# Open a database.
OpenDatabase(silo_data_path("noise.silo"))
# Set the number of frames to be 11.
AnimationSetNFrames(11)
# Create a pseudocolor plot that exists over the first
# 11 frames of the animation.
AddPlot("Pseudocolor", "hardyglobal")
AddOperator("Slice")
AddOperator("Isosurface")
SetPlotFrameRange(0, 0, 10)
# Set 3 slice keyframes.
SetTimeSliderState(0)
slice = SliceAttributes()
slice.originType = slice.Percent
slice.originPercent = 0
slice.project2d = 0
SetOperatorOptions(slice)
SetTimeSliderState(2)
SetOperatorOptions(slice)
SetTimeSliderState(10)
slice.originPercent = 100
SetOperatorOptions(slice)
# Set 2 isosurface keyframes.
SetTimeSliderState(0)
iso = IsosurfaceAttributes()
SetOperatorOptions(iso)
SetTimeSliderState(5)
iso.contourNLevels = 5
SetOperatorOptions(iso)
SetTimeSliderState(0)
DrawPlots()
v = GetView3D()
v.viewNormal = (0.225979, 0.625179, 0.747051)
v.focus = (0, 0, 0)
v.viewUp = (-0.965293, 0.246786, 0.0854703)
v.viewAngle = 30
v.parallelScale = 17.3205
v.nearPlane = -34.641
v.farPlane = 34.641
v.perspective = 1
SetView3D(v)
# Check a bunch of frames.
Test("keyframe_63")
SetTimeSliderState(2)
Test("keyframe_64")
SetTimeSliderState(5)
Test("keyframe_65")
SetTimeSliderState(7)
Test("keyframe_66")
SetTimeSliderState(10)
Test("keyframe_67")
# Delete the slice keyframe and move the isosurface keyframe.
DeleteOperatorKeyframe(0, 0, 2)
MoveOperatorKeyframe(0, 1, 5, 10)
# Check a bunch of frames.
SetTimeSliderState(0)
Test("keyframe_68")
SetTimeSliderState(2)
Test("keyframe_69")
SetTimeSliderState(5)
Test("keyframe_70")
SetTimeSliderState(7)
Test("keyframe_71")
SetTimeSliderState(10)
Test("keyframe_72")
Exit()