Camera Operations (Y-Setup)

Add the script to Simulation Flow (Ctrl/Cmd + F2) > FramesPre.

The script makes a camera ("SceneCamera01") to spin around a cube object ("Cube01"). During the motion the camera will look at the cube. 

It is possible to specify the distance between camera and object, and the number of revolutions around the object during the simulation. With "orientation" the camera's rotation can be clockwise or counter-clockwise.

The script is for Y-based axis setups. If you have a Z-based axis setup go to → "Camera Operations (Z-Setup)"

# Load Python's math module
import math

# Get the camera "SceneCamera01" and a focus object "Cube01"
# Initialize standard values
camera           = scene.getCamera("SceneCamera01")
focusObject      = scene.getObject("Cube01")
objectPosition   = focusObject.getParameter("Position")
frame            = scene.getCurrentFrame()
radius           = 1.5
cycles           = 3.0
verticalPosition = 0.5
orientation      = 0

# Make the camera look at the "focusObject" node's position
if (frame == scene.getMinFrame()):
	camera.setParameter("LookAt", objectPosition)

# Clockwise or counter-clockwise?
if (orientation == 0): sign = 1
else                 : sign = -1

# Get the simulation range
simRange    = float(scene.getMaxFrames() - scene.getMinFrame()) - 1.0
 
# Calculate how many degrees the camera covers within a single frame
# Convert the result from degrees to radians
degPerFrame = (360.0 / simRange) * cycles
radians     = (sign * degPerFrame * math.pi / 180.0) * frame

# Calculate the XZ coordinates based on the available values
xCoord         = math.cos(radians) * radius + objectPosition.x
zCoord         = math.sin(radians) * radius + objectPosition.z
 
# Assemble a position vector and apply it to the camera to make it move
cameraPosition = Vector.new(xCoord, verticalPosition, zCoord)
 
camera.setParameter("Position", cameraPosition)