Class TExamineCamera

DescriptionHierarchyFieldsMethodsProperties

Unit

Declaration

type TExamineCamera = class(TCamera)

Description

Navigate the 3D model in examine mode, like you would hold a box with the model inside. The model is displayed around MoveAmount 3D point, it's rotated by Rotations and scaled by ScaleFactor (scaled around MoveAmount point).

Hierarchy

Overview

Fields

Public internal const DefaultRotationAccelerationSpeed = 5.0;
Public internal const DefaultRotationSpeed = 2.0;

Methods

Public constructor Create(AOwner: TComponent); override;
Public destructor Destroy; override;
Public function Matrix: TMatrix4Single; override;
Public function MatrixInverse: TMatrix4Single;
Public function RotationMatrix: TMatrix4Single; override;
Public procedure Idle(const CompSpeed: Single; const HandleMouseAndKeys: boolean; var LetOthersHandleMouseAndKeys: boolean); override;
Public function AllowSuspendForInput: boolean; override;
Public function Press(const Event: TInputPressRelease): boolean; override;
Public function MouseMove(const OldX, OldY, NewX, NewY: Integer): boolean; override;
Public function Mouse3dTranslation(const X, Y, Z, Length: Double; const CompSpeed: Single): boolean; override;
Public function Mouse3dRotation(const X, Y, Z, Angle: Double; const CompSpeed: Single): boolean; override;
Public procedure Init(const AModelBox: TBox3D; const ARadius: Single);
Public procedure StopRotating;
Public procedure Scale(const ScaleBy: Single);
Public procedure Move(coord: integer; const MoveDistance: Single);
Public procedure GetView(out APos, ADir, AUp: TVector3Single); override;
Public procedure GetView(out APos, ADir, AUp, AGravityUp: TVector3Single); override;
Public function GetPosition: TVector3Single; override;
Public function GetGravityUp: TVector3Single; override;
Public procedure SetView(const APos, ADir, AUp: TVector3Single; const AdjustUp: boolean = true); override;
Public procedure SetView(const APos, ADir, AUp, AGravityUp: TVector3Single; const AdjustUp: boolean = true); override;
Public procedure VisibleChange; override;

Properties

Public property Rotations: TQuaternion read FRotations write SetRotations;
Public property RotationsAnim: TVector3Single read FRotationsAnim write SetRotationsAnim;
Public property MoveAmount: TVector3Single read FMoveAmount write SetMoveAmount;
Public property CenterOfRotation: TVector3Single read FCenterOfRotation write SetCenterOfRotation;
Public property ArchitectureMode: boolean read FArchitectureMode write FArchitectureMode default false;
Public property ScaleFactor: Single read FScaleFactor write SetScaleFactor default 1;
Public property ModelBox: TBox3D read FModelBox write SetModelBox;
Public property Inputs_Move: T3BoolInputs read FInputs_Move;
Public property Inputs_Rotate: T3BoolInputs read FInputs_Rotate;
Public property Input_MoveXInc: TInputShortcut read GetInput_MoveXInc;
Public property Input_MoveXDec: TInputShortcut read GetInput_MoveXDec;
Public property Input_MoveYInc: TInputShortcut read GetInput_MoveYInc;
Public property Input_MoveYDec: TInputShortcut read GetInput_MoveYDec;
Public property Input_MoveZInc: TInputShortcut read GetInput_MoveZInc;
Public property Input_MoveZDec: TInputShortcut read GetInput_MoveZDec;
Public property Input_RotateXInc: TInputShortcut read GetInput_RotateXInc;
Public property Input_RotateXDec: TInputShortcut read GetInput_RotateXDec;
Public property Input_RotateYInc: TInputShortcut read GetInput_RotateYInc;
Public property Input_RotateYDec: TInputShortcut read GetInput_RotateYDec;
Public property Input_RotateZInc: TInputShortcut read GetInput_RotateZInc;
Public property Input_RotateZDec: TInputShortcut read GetInput_RotateZDec;
Public property Input_ScaleLarger: TInputShortcut read FInput_ScaleLarger;
Public property Input_ScaleSmaller: TInputShortcut read FInput_ScaleSmaller;
Public property Input_Home: TInputShortcut read FInput_Home;
Public property Input_StopRotating: TInputShortcut read FInput_StopRotating;
Published property MouseNavigation: boolean read GetMouseNavigation write SetMouseNavigation default true;
Published property RotationAccelerate: boolean read FRotationAccelerate write SetRotationAccelerate default true;
Published property RotationAccelerationSpeed: Single read FRotationAccelerationSpeed write FRotationAccelerationSpeed default DefaultRotationAccelerationSpeed;
Published property RotationSpeed: Single read FRotationSpeed write FRotationSpeed default DefaultRotationSpeed;

Description

Fields

Public internal const DefaultRotationAccelerationSpeed = 5.0;
 
Public internal const DefaultRotationSpeed = 2.0;
 

Methods

Public constructor Create(AOwner: TComponent); override;
 
Public destructor Destroy; override;
 
Public function Matrix: TMatrix4Single; override;
 
Public function MatrixInverse: TMatrix4Single;
 
Public function RotationMatrix: TMatrix4Single; override;
 
Public procedure Idle(const CompSpeed: Single; const HandleMouseAndKeys: boolean; var LetOthersHandleMouseAndKeys: boolean); override;
 
Public function AllowSuspendForInput: boolean; override;
 
Public function Press(const Event: TInputPressRelease): boolean; override;
 
Public function MouseMove(const OldX, OldY, NewX, NewY: Integer): boolean; override;
 
Public function Mouse3dTranslation(const X, Y, Z, Length: Double; const CompSpeed: Single): boolean; override;
 
Public function Mouse3dRotation(const X, Y, Z, Angle: Double; const CompSpeed: Single): boolean; override;
 
Public procedure Init(const AModelBox: TBox3D; const ARadius: Single);

Initialize most important properties of this class: sets ModelBox and goes to a nice view over the entire scene.

In other words, this is just a shortcut to setting ModelBox and then calling Home.

Public procedure StopRotating;

Sets RotationsAnim to zero, stopping the rotation of the model.

Public procedure Scale(const ScaleBy: Single);
 
Public procedure Move(coord: integer; const MoveDistance: Single);
 
Public procedure GetView(out APos, ADir, AUp: TVector3Single); override;
 
Public procedure GetView(out APos, ADir, AUp, AGravityUp: TVector3Single); override;
 
Public function GetPosition: TVector3Single; override;
 
Public function GetGravityUp: TVector3Single; override;
 
Public procedure SetView(const APos, ADir, AUp: TVector3Single; const AdjustUp: boolean = true); override;
 
Public procedure SetView(const APos, ADir, AUp, AGravityUp: TVector3Single; const AdjustUp: boolean = true); override;
 
Public procedure VisibleChange; override;
 

Properties

Public property Rotations: TQuaternion read FRotations write SetRotations;

Current rotation of the model. Rotation is done around ModelBox middle (with MoveAmount added).

Public property RotationsAnim: TVector3Single read FRotationsAnim write SetRotationsAnim;

Continous rotation animation, applied each Idle to Rotations.

Public property MoveAmount: TVector3Single read FMoveAmount write SetMoveAmount;

MoveAmount says how to translate the model. It's always added to the middle of ModelBox, this is usually comfortable.

The default value of this is zero vector. If you want to just see the whole model, you may want to set this to something like

MoveAmount := Middle of ModelBox + (0, 0, -2 * ModelSize)

Actually, Init method does the above for you.

Public property CenterOfRotation: TVector3Single read FCenterOfRotation write SetCenterOfRotation;
 
Public property ArchitectureMode: boolean read FArchitectureMode write FArchitectureMode default false;

ArchitectureMode rotates the scene around its Y axis instead of current camera axis.

Public property ScaleFactor: Single read FScaleFactor write SetScaleFactor default 1;

How the model is scaled. Scaling is done around MoveAmount added to the middle of ModelBox. May never be zero (or too near zero).

Public property ModelBox: TBox3D read FModelBox write SetModelBox;

The aproximate size of 3D model that will be viewed. This is the crucial property of this class that you have to set, to make the navigation work best. Setting this sets also CenterOfRotation to the middle of the box.

The idea is that usually this is the only property that you have to set. ScaleFactor, MoveAmount, RotationsAnim will be almost directly controlled by user (through Press and other events). Rotations will be automatically modified by Idle.

So often you only need to set ModelBox, once, and everything else will work smoothly.

Initially this is EmptyBox3D.

Public property Inputs_Move: T3BoolInputs read FInputs_Move;

Alternative ways to access Input_Move/Rotate(X|Y|Z)(Inc|Dec). Index the array (2nd index true means increase) instead of having to use the full identifier.

Public property Inputs_Rotate: T3BoolInputs read FInputs_Rotate;
 
Public property Input_MoveXInc: TInputShortcut read GetInput_MoveXInc;
 
Public property Input_MoveXDec: TInputShortcut read GetInput_MoveXDec;
 
Public property Input_MoveYInc: TInputShortcut read GetInput_MoveYInc;
 
Public property Input_MoveYDec: TInputShortcut read GetInput_MoveYDec;
 
Public property Input_MoveZInc: TInputShortcut read GetInput_MoveZInc;
 
Public property Input_MoveZDec: TInputShortcut read GetInput_MoveZDec;
 
Public property Input_RotateXInc: TInputShortcut read GetInput_RotateXInc;
 
Public property Input_RotateXDec: TInputShortcut read GetInput_RotateXDec;
 
Public property Input_RotateYInc: TInputShortcut read GetInput_RotateYInc;
 
Public property Input_RotateYDec: TInputShortcut read GetInput_RotateYDec;
 
Public property Input_RotateZInc: TInputShortcut read GetInput_RotateZInc;
 
Public property Input_RotateZDec: TInputShortcut read GetInput_RotateZDec;
 
Public property Input_ScaleLarger: TInputShortcut read FInput_ScaleLarger;
 
Public property Input_ScaleSmaller: TInputShortcut read FInput_ScaleSmaller;
 
Public property Input_Home: TInputShortcut read FInput_Home;
 
Public property Input_StopRotating: TInputShortcut read FInput_StopRotating;
 
Published property MouseNavigation: boolean read GetMouseNavigation write SetMouseNavigation default true;

Deprecated, include/exclude ciMouseDragging from Input instead.

Published property RotationAccelerate: boolean read FRotationAccelerate write SetRotationAccelerate default true;

When True, rotation keys make the rotation faster, and the model keeps rotating even when you don't hold any keys. When False, you have to hold rotation keys to rotate.

Published property RotationAccelerationSpeed: Single read FRotationAccelerationSpeed write FRotationAccelerationSpeed default DefaultRotationAccelerationSpeed;

Speed to change the rotation acceleration, used when RotationAccelerate = True.

Published property RotationSpeed: Single read FRotationSpeed write FRotationSpeed default DefaultRotationSpeed;

Speed to change the rotation, used when RotationAccelerate = False.


Generated by PasDoc 0.12.1 on 2013-02-04 20:26:49