## Camera

Object Hierarchy | Related C++ Class: Camera

### Inheritance

SIObject

ProjectItem

SceneItem

X3DObject

DirectedObject

Camera

### Introduced

v1.0

### Description

The Camera object represents a Softimage camera within a scene. The Camera object is always created with its interest located at the origin of the scene's 3D world. Camera can be created with X3DObject.AddCamera or X3DObject.AddCameraRig.
It is possible to find all cameras in a scene using the X3DObject.FindChildren method, as demonstrated in the first example below.
Most important attributes of a Camera object, including the Field of View Angle (fov) and Projection Type (proj) are exposed as Parameter objects on the Primitive returned by calling X3DObject.ActivePrimitive.

### Methods

Add2DChain | Add3DChain | AddAnnotation | AddCamera
AddCameraRig | AddChild | AddControl | AddCustomOp
AddCustomProperty | AddFxTree | AddGeometry | AddICEAttribute
AddLattice | AddLight | AddLightRig | AddMaterial
AddModel | AddNull | AddNurbsCurve | AddNurbsCurveList
AddNurbsCurveList2 | AddNurbsSurface | AddNurbsSurfaceMesh | AddNurbsSurfaceMesh2
AddPolygonMesh | AddPrimitive | AddProperty | AddScriptedOp
AddScriptedOpFromFile | AnimatedParameters2 | ApplyEnvelope | BelongsTo
EvaluateAt | FindChild | FindChild2 | FindChildren
FindChildren2 | FindShaders | GetActivePrimitive2 | GetActivePrimitive3
GetAllShaders | GetBoundingBox | GetICEAttributeFromName | GetLocalPropertyFromName
GetLocalPropertyFromName2 | GetModels2 | GetPropertyFromName | GetPropertyFromName2
GetShaderInputType | GetStaticKinematicState | HasStaticKinematicState | IsA
IsAnimated2 | IsClassOf | IsEqualTo | IsKindOf
IsLocked | IsNodeAnimated | IsSelected | LockOwners
NodeAnimatedParameters | RemoveChild | RemoveFromParent | RemoveICEAttribute
SetAsSelected | SetCapabilityFlag | SetLock | SetMaterial
ShapeAnimatedClusters | TaggedParameters | UnSetLock |

### Properties

ActivePrimitive | AllImageClips | Application | BranchFlag
Capabilities | Categories | Children | Envelopes
EvaluationID | Families | FullName | Help
HierarchicalEvaluationID | ICEAttributes | Interest | Kinematics
LocalProperties | LocalRotation | LocalScaling | LocalTranslation
LockLevel | LockMasters | LockType | Material
Materials | Model | Models | Name
NestedObjects | ObjectID | Origin | OriginPath
Owners | PPGLayout | Parameters | Parent
Parent3DObject | Primitives | Properties | Selected
Shaders | Type |  |

### Examples

#### 1. VBScript Example

    'vbscript example demonstrating how to access all Cameras in the
    'scene.
    'Create a sample scene with different cameras
    NewScene ,false
    GetPrimCamera
    GetPrimCamera "Telephoto.Preset", "Telephoto"
    GetPrimCamera "Orthographic.Preset", "Ortho"
    'Put the orthographic camera inside a model
    CreateModel
    GetPrimCamera "Wide_Angle.Preset", "WideAngle"
    'Hide one of the cameras underneath a cone
    GetPrim "Cone"
    CopyPaste "WideAngle_Root", ,"cone", 1
    GetPrimCamera "Wide_Angle.Preset", "WideAngle"
    'Perform a recursive search for all the cameras in the scene
    set oCamerasCollection = ActiveSceneRoot.FindChildren( ,siCameraFilter )
    'Print out some information about the Cameras in the scene
    logmessage "The scene contains " & oCamerasCollection.count & " cameras"
    for i = 0 to oCamerasCollection.count - 1
            set oCamera = oCamerasCollection.Item( i )
            PrintCameraInfo oCamera
    next
    sub PrintCameraInfo( in_obj )
            dim oCamera
            set oCamera = in_obj
            logmessage "-----------------------Camera " & i & "------------------------"
            logmessage "Camera Name: " & oCamera.Name
            logmessage "Camera Root: " & oCamera.Parent
            logmessage "Camera Primitive: " & oCamera.ActivePrimitive
            'The Interest a "sibling" of the Camera so
            'we find it via the parent
            set oChildrenOfParent = oCamera.Parent.Children
            dim oInterest
            for each o in oChildrenOfParent
                    if ( o.type = "CameraInterest" ) then
                            set oInterest = o
                            exit for
                    end if
            next
            logmessage "Camera Interest: " & oInterest
            'Many aspects of the camera can be manipulated by reading and
            'writing the parameters on these various objects
            if ( oCamera.ActivePrimitive.Parameters("proj").Value = 1 ) then
                    logmessage "Projection: Perspective"
            else
                    logmessage "Projection: Orthographic"
            end if
            logmessage "Field of View: " & oCamera.ActivePrimitive.Parameters("fov").Value
            'Although these parameters actual belong to the local kinematic property,
            'these shortforms are available to vbscript to make it even more convenient
            logmessage "Interest Pos(local): (" & oInterest.posx.Value & _
                                                    "," & oInterest.posy.Value & _
                                                    "," & oInterest.posz.Value & ")"
            set oGlobalKine = oInterest.Kinematics.Global
            logmessage "Interest Pos(global): (" & oGlobalKine.Parameters("posx").Value & _
                                                    "," & oGlobalKine.Parameters("posy").Value & _
                                                    "," & oGlobalKine.Parameters("posz").Value & ")"
    end sub
    'This is part of the output from running this example:
    'INFO : "-----------------------Camera 2------------------------"
    'INFO : "Camera Name: Telephoto"
    'INFO : "Camera Root: Telephoto_Root"
    'INFO : "Camera Primitive: Telephoto.camera"
    'INFO : "Camera Interest: Telephoto_Interest"
    'INFO : "Projection: Perspective"
    'INFO : "Field of View: 6.662"
    'INFO : "Interest Pos(local): (0,-2,-20)"
    'INFO : "Interest Pos(global): (0,0,0)"
    'INFO : "-----------------------Camera 3------------------------"
    'INFO : "Camera Name: Ortho"
    'INFO : "Camera Root: Model.Ortho_Root"
    'INFO : "Camera Primitive: Model.Ortho.camera"
    'INFO : "Camera Interest: Model.Ortho_Interest"
    'INFO : "Projection: Orthographic"
    'INFO : "Field of View: 53.638"
    'INFO : "Interest Pos(local): (0,-2,-20)"
    'INFO : "Interest Pos(global): (0,0,0)"
    'etc.....

#### 2. VBScript Example

    'VBScript example : display the properties of a camera
    Option Explicit
    CreateCamera()
    sub CreateCamera()
            dim oCam
            set oCam = ActiveProject.ActiveScene.Root.AddCameraRig( "Camera" ).camera
            LogMessage "camera interest"
            LogMessage oCam.name & ".interest.name: " & oCam.interest.name
            LogMessage "camera parameters"
            oCam.near.value = oCam.near.value * 2
            oCam.far.value = oCam.far.value * 2
            oCam.orthoheight.value = oCam.orthoheight.value * 2
            oCam.fov.value = oCam.fov.value * 2
            LogMessage oCam & ".near: " & oCam.near.value
            LogMessage oCam & ".far: " & oCam.far.value
            LogMessage oCam & ".orthoheight: " & oCam.orthoheight.value
            LogMessage oCam & ".fov: " & oCam.fov.value
            LogMessage "camera marking"
            oCam.near.marked = true
            oCam.far.marked = true
            oCam.orthoheight.marked = true
            oCam.fov.marked = true
            LogMessage oCam & ".near.marked: " & oCam.near.marked
            LogMessage oCam & ".far.marked: " & oCam.far.marked
            LogMessage oCam & ".orthoheight.marked: " & oCam.orthoheight.marked
            LogMessage oCam & ".fov.marked: " & oCam.fov.marked
            LogMessage "camera capabilities"
            LogMessage oCam & ".near.capabilities: " & oCam.near.capabilities
            LogMessage oCam & ".far.capabilities: " & oCam.far.capabilities
            LogMessage oCam & ".orthoheight.capabilities: " & oCam.orthoheight.capabilities
            LogMessage oCam & ".fov.capabilities: " & oCam.fov.capabilities
            LogMessage "camera kinematics position"
            oCam.posx.value = oCam.posx.value * 2
            oCam.posy.value = oCam.posy.value * 2
            oCam.posz.value = oCam.posz.value * 2
            LogMessage oCam & ".posx: " & oCam.posx.value
            LogMessage oCam & ".posy: " & oCam.posy.value
            LogMessage oCam & ".posz: " & oCam.posz.value
            LogMessage "camera kinematics rotation"
            oCam.rotx.value = oCam.rotx.value * 2
            oCam.roty.value = oCam.roty.value * 2
            oCam.rotz.value = oCam.rotz.value * 2
            LogMessage oCam & ".rotx: " & oCam.rotx.value
            LogMessage oCam & ".roty: " & oCam.roty.value
            LogMessage oCam & ".rotz: " & oCam.rotz.value
            LogMessage "camera kinematics scaling"
            oCam.sclx.value = oCam.sclx.value * 2
            oCam.scly.value = oCam.scly.value * 2
            oCam.sclz.value = oCam.sclz.value * 2
            LogMessage oCam & ".sclx: " & oCam.sclx.value
            LogMessage oCam & ".scly: " & oCam.scly.value
            LogMessage oCam & ".sclz: " & oCam.sclz.value
            LogMessage "camera kinematics constrained transfo"
            oCam.cnsscl.value = false
            oCam.cnsori.value = false
            oCam.cnspos.value = false
            LogMessage oCam & ".cnsscl: " & oCam.cnsscl.value
            LogMessage oCam & ".cnsori: " & oCam.cnsori.value
            LogMessage oCam & ".cnspos: " & oCam.cnspos.value
    end sub

### See Also

CameraRig DirectedObject.Interest GetPrimCamera