BaseObject Class Reference

#include <c4d_baseobject.h>

Inheritance diagram for BaseObject:

Detailed Description

All objects in Cinema 4D are derived from the BaseObject class.
Contains methods for the object's position, scale and rotation, as well as for accessing the sub-items of the object (e.g. tags and animation tracks).

Note
Has to be created with Alloc() and destroyed with Free(). Use AutoAlloc to automate the allocation and destruction based on scope.

Public Member Functions

const MatrixGetDeformMatrix () const
 
void SetDeformMatrix (const Matrix &dm)
 
void ClearDeformMatrix ()
 
const MatrixGetUndeformedMl () const
 
const MatrixGetUndeformedMlInverse () const
 
Matrix GetUndeformedMg () const
 
Bool HasDeformMatrix () const
 
- Public Member Functions inherited from BaseList2D
void SetBit (Int32 mask)
 
Bool GetBit (Int32 mask) const
 
void DelBit (Int32 mask)
 
void ToggleBit (Int32 mask)
 
Int32 GetAllBits () const
 
void SetAllBits (Int32 bits)
 
void SetBitEx (Int32 mask, Int32 flags)
 
const CharGetViewportRenderId (VIEWPORT_RENDER_ID typeId) const
 
BaseList2DGetNext ()
 
const BaseList2DGetNext () const
 
BaseList2DGetPred ()
 
const BaseList2DGetPred () const
 
BaseContainer GetData ()
 
void SetData (const BaseContainer &bc, Bool add=true)
 
const BaseContainerGetDataInstanceRef () const
 
BaseContainerGetDataInstanceRef ()
 
const BaseContainerGetDataInstance () const
 
BaseContainerGetDataInstance ()
 
String GetName () const
 
void SetName (const maxon::String &name, Bool setDirty=true)
 
String GetBubbleHelp ()
 
Bool TransferGoal (BaseList2D *dst, Bool undolink)
 
Bool TransferMarker (BaseList2D *dst) const
 
Bool CopyDynamicDescriptionFrom (const BaseList2D *src)
 
Bool Scale (Float scale)
 
Bool Edit ()
 
void GetIcon (IconData *dat)
 
GeListHeadGetNLARoot (Bool create)
 
BaseList2DAnimationLayerRemap (BaseObject **layer=nullptr)
 
String GetTypeName () const
 
const BaseList2DGetMain () const
 
BaseList2DGetMain ()
 
void InsertTrackSorted (CTrack *track)
 
Bool AddEventNotification (BaseList2D *bl, NOTIFY_EVENT eventid, NOTIFY_EVENT_FLAG flags, const BaseContainer *data)
 
Bool RemoveEventNotification (const BaseDocument *doc, BaseList2D *bl, NOTIFY_EVENT eventid)
 
Bool FindEventNotification (const BaseDocument *doc, BaseList2D *bl, NOTIFY_EVENT eventid)
 
Bool SetDescIDState (const DescID &id, DESCIDSTATE descidstate)
 
DESCIDSTATE GetDescIDState (const DescID &id, Bool tolerant) const
 
GeListHeadGetOverrideRoot (Bool create)
 
BaseOverrideGetFirstOverride ()
 
GeListHeadGetShaderRepositoryRoot (Bool create)
 
GeListHeadGetHiddenShaderRoot (Bool create)
 
maxon::NimbusForwardRef GetNimbusRef (const maxon::Id &spaceId) const
 
maxon::Result< maxon::NimbusForwardRefPrivateGetOrCreateNimbusRef (const maxon::Id &spaceId)
 
void RemoveNimbusRef (const maxon::Id &spaceId)
 
maxon::Result< maxon::HashMap< maxon::Id, maxon::NimbusForwardRef > > GetAllNimbusRefs () const
 
Bool IsNodeBased () const
 
maxon::Result< BoolGetAccessedObjects (METHOD_ID method, AccessedObjectsCallback &access) const
 
maxon::Result< BoolGetAccessedObjectsRec (ACCESSED_OBJECTS_MASK read, ACCESSED_OBJECTS_MASK write, METHOD_ID method, Bool withSiblings, Bool withChildren, AccessedObjectsCallback &access) const
 
maxon::Result< BoolGetAccessedObjectsOfHierarchy (ACCESSED_OBJECTS_MASK read, ACCESSED_OBJECTS_MASK write, METHOD_ID method, AccessedObjectsCallback &access) const
 
maxon::Result< BoolGetAccessedObjectsOfChildren (ACCESSED_OBJECTS_MASK read, ACCESSED_OBJECTS_MASK write, METHOD_ID method, AccessedObjectsCallback &access) const
 
maxon::Result< BoolGetAccessedObjectsOfFirstChildHierarchy (ACCESSED_OBJECTS_MASK read, ACCESSED_OBJECTS_MASK write, METHOD_ID method, AccessedObjectsCallback &access) const
 
maxon::Result< maxon::GenericDataGroupChanges ()
 
void GetMarkerStampEx (UInt32 *l1, UInt32 *l2)
 
const GeMarkerGetMarker () const
 
void SetMarker (const GeMarker &m)
 
Bool AddUniqueID (Int32 appid, const Char *const mem, Int bytes)
 
Bool FindUniqueID (Int32 appid, const Char *&mem, Int &bytes) const
 
Int32 GetUniqueIDCount () const
 
Bool GetUniqueIDIndex (Int32 idx, Int32 &id, const Char *&mem, Int &bytes) const
 
Bool SetAnimatedParameter (const CTrack *track, const DescID &id, const GeData &t_data1, const GeData &t_data2, Float mix, DESCFLAGS_SET flags)
 
Bool GetAnimatedParameter (const DescID &id, GeData &t_data1, GeData &t_data2, Float &mix, DESCFLAGS_GET flags) const
 
BaseShaderGetFirstShader () const
 
void InsertShader (BaseShader *shader, BaseShader *pred=nullptr)
 
void ClearKeyframeSelection ()
 
Bool FindKeyframeSelection (const DescID &id)
 
Bool SetKeyframeSelection (const DescID &id, Bool selection)
 
Bool KeyframeSelectionContent ()
 
LayerObjectGetLayerObject (const BaseDocument *doc)
 
const LayerObjectGetLayerObject (const BaseDocument *doc) const
 
Bool SetLayerObject (const LayerObject *layer)
 
const LayerDataGetLayerData (const BaseDocument *doc, Bool rawdata=false) const
 
Bool SetLayerData (BaseDocument *doc, const LayerData &data)
 
GeListHeadGetCTrackRoot (Bool create)
 
const GeListHeadGetCTrackRoot () const
 
const CTrackGetFirstCTrack () const
 
CTrackGetFirstCTrack ()
 
const CTrackFindCTrack (const DescID &id) const
 
CTrackFindCTrack (const DescID &id)
 
- Public Member Functions inherited from GeListNode
GeListNodeGetNext ()
 
const GeListNodeGetNext () const
 
GeListNodeGetPred ()
 
const GeListNodeGetPred () const
 
GeListNodeGetDown ()
 
const GeListNodeGetDown () const
 
GeListNodeGetUp ()
 
const GeListNodeGetUp () const
 
GeListNodeGetDownLast ()
 
const GeListNodeGetDownLast () const
 
void InsertBefore (GeListNode *bl)
 
void InsertAfter (GeListNode *bl)
 
void InsertUnder (GeListNode *bl)
 
void InsertUnderLast (GeListNode *bl)
 
void Remove ()
 
void FlushChilds ()
 
void MoveChildrenTo (GeListNode *dest)
 
GeListHeadGetListHead ()
 
const GeListHeadGetListHead () const
 
Int32 GetNodeID (Int32 index=0) const
 
template<typename CAST >
const CAST * GetNodeData (Int32 index=0) const
 
template<typename CAST >
CAST * GetNodeData (Int32 index=0)
 
void SetCustomData (GeListNode *node)
 
GeListNodeGetCustomData ()
 
const GeListNodeGetCustomData () const
 
const BaseDocumentGetDocument () const
 
BaseDocumentGetDocument ()
 
maxon::Result< BoolGetBranchInfo (const maxon::ValueReceiver< const BranchInfo & > &info, GETBRANCHINFO flags) const
 
Bool IsDocumentRelated () const
 
Int32 GetInfo () const
 
Bool GetNBit (NBIT bit) const
 
UInt32 GetNBitMask (Int32 index) const
 
Bool ChangeNBit (NBIT bit, NBITCONTROL bitmode)
 
- Public Member Functions inherited from C4DAtomGoal
Bool HasLinks () const
 
- Public Member Functions inherited from C4DAtom
Int32 GetType () const
 
Int32 GetRealType () const
 
Int32 GetDiskType () const
 
Bool IsInstanceOf (Int32 id) const
 
Int32 GetClassification () const
 
Bool Message (Int32 type, void *data=nullptr)
 
Bool MultiMessage (MULTIMSG_ROUTE flags, Int32 type, void *data)
 
C4DAtomGetClone (COPYFLAGS flags, AliasTrans *trn) const
 
Bool CopyTo (C4DAtom *dst, COPYFLAGS flags, AliasTrans *trn) const
 
Bool Read (HyperFile *hf, Int32 id, Int32 level)
 
Bool Write (HyperFile *hf) const
 
Bool ReadObject (HyperFile *hf, Bool readheader)
 
Bool WriteObject (HyperFile *hf) const
 
Bool GetDescription (Description *description, DESCFLAGS_DESC flags) const
 
Bool GetParameter (const DescID &id, GeData &t_data, DESCFLAGS_GET flags) const
 
Bool SetParameter (const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
 
DynamicDescriptionGetDynamicDescriptionWritable ()
 
const DynamicDescriptionGetDynamicDescription () const
 
Bool CopyDynamicDescriptionFrom (const BaseList2D *src)
 
Bool GetEnabling (const DescID &id, const GeData &t_data, DESCFLAGS_ENABLE flags, const BaseContainer *itemdesc) const
 
Bool TranslateDescID (const DescID &id, DescID &res_id, C4DAtom *&res_at)
 
UInt32 GetDirty (DIRTYFLAGS flags) const
 
void SetDirty (DIRTYFLAGS flags)
 
UInt32 GetHDirty (HDIRTYFLAGS mask) const
 
void SetHDirty (HDIRTYFLAGS mask)
 

Private Member Functions

 BaseObject ()
 
 ~BaseObject ()
 

Alloc/Free

static BaseObjectAlloc (Int32 type)
 
static void Free (BaseObject *&bl)
 

Navigation

BaseObjectGetNext ()
 
const BaseObjectGetNext () const
 
BaseObjectGetPred ()
 
const BaseObjectGetPred () const
 
BaseObjectGetUp ()
 
const BaseObjectGetUp () const
 
BaseObjectGetDown ()
 
const BaseObjectGetDown () const
 
BaseObjectGetDownLast ()
 
const BaseObjectGetDownLast () const
 

Abs Pos/Scale/Rot

Vector GetAbsPos () const
 
void SetAbsPos (const Vector &v)
 
Vector GetAbsScale () const
 
void SetAbsScale (const Vector &v)
 
Vector GetAbsRot () const
 
void SetAbsRot (const Vector &v)
 

Frozen Pos/Scale/Rot

Vector GetFrozenPos () const
 
void SetFrozenPos (const Vector &v)
 
Vector GetFrozenScale () const
 
void SetFrozenScale (const Vector &v)
 
Vector GetFrozenRot () const
 
void SetFrozenRot (const Vector &v)
 

Rel Pos/Scale/Rot

Vector GetRelPos () const
 
void SetRelPos (const Vector &v)
 
Vector GetRelScale () const
 
void SetRelScale (const Vector &v)
 
Vector GetRelRot () const
 
void SetRelRot (const Vector &v)
 

Ml/Mg Matrix

const MatrixGetMl () const
 
void SetMl (const Matrix &m)
 
Matrix GetFrozenMln () const
 
Matrix GetRelMln () const
 
Matrix GetRelMl () const
 
void SetRelMl (const Matrix &m)
 
Matrix GetMg () const
 
void SetMg (const Matrix &m)
 
Matrix GetMln () const
 
Matrix GetMgn () const
 
Matrix GetUpMg () const
 
void CopyMatrixTo (BaseObject *dst) const
 

Bounding Box

Vector GetMp () const
 
Vector GetRad () const
 
void GetDimension (Vector &mp, Vector &rad) const
 

Editor/Render/Deform Mode

Int32 GetEditorMode () const
 
Int32 GetEditorModeH () const
 
void SetEditorMode (Int32 mode)
 
Int32 GetRenderMode () const
 
Int32 GetRenderModeH () const
 
void SetRenderMode (Int32 mode)
 
Bool GetDeformMode () const
 
void SetDeformMode (Bool mode)
 
Int32 GetRealDeformMode () const
 
void SetRealDeformMode (Int32 mode)
 

Unique IP

Int32 GetUniqueIP () const
 
void SetUniqueIP (Int32 ip)
 

Tag

BaseTagGetFirstTag ()
 
const BaseTagGetFirstTag () const
 
BaseTagGetLastTag ()
 
const BaseTagGetLastTag () const
 
BaseTagGetTag (Int32 type, Int32 nr=0)
 
const BaseTagGetTag (Int32 type, Int32 nr=0) const
 
maxon::Block< const BaseTag *const > GetTagsOfType (Int32 type) const
 
maxon::Block< BaseTag *const > GetTagsOfType (Int32 type)
 
const void * GetTagDataR (Int32 type, Int32 nr=0) const
 
void * GetTagDataW (Int32 type, Int32 nr=0)
 
Int32 GetTagDataCount (Int32 type) const
 
const VariableTagDataRef & GetVariableTagData (Int32 type, Int32 nr=0) const
 
BaseTagMakeTag (Int32 type, BaseTag *pred=nullptr)
 
VariableTagMakeVariableTag (Int32 type, Int32 count, BaseTag *pred=nullptr)
 
void InsertTag (BaseTag *tp, BaseTag *pred=nullptr)
 
void KillTag (Int32 type, Int32 nr=0)
 
Bool CopyTagsTo (BaseObject *dest, Int32 visible, Int32 variable, Int32 hierarchical, AliasTrans *trans) const
 

Cache

BaseObjectGetCache ()
 
const BaseObjectGetCache () const
 
BaseObjectGetDeformCache ()
 
const BaseObjectGetDeformCache () const
 
LineObjectGetIsoparm ()
 
void SetIsoparm (LineObject *l)
 
BaseObjectGetCacheParent () const
 
BaseObjectGetCacheTopParent () const
 

Phong

Bool SetPhong (Bool on, Bool anglelimit, Float angle)
 

Dirty

Bool IsDirty (DIRTYFLAGS flags) const
 
void SetDirty (DIRTYFLAGS flags)
 
Bool CheckCache (const HierarchyHelp *hh) const
 
void Touch ()
 

Color Properties

void GetColorProperties (ObjectColorProperties *prop) const
 
void SetColorProperties (ObjectColorProperties *prop)
 
maxon::Opt< maxon::ColorGetDisplayColor () const
 

Modeling Axis

const MatrixGetModelingAxis (BaseDocument *doc)
 
void SetModelingAxis (const Matrix &m)
 

Hierarchy Clone

BaseObjectGetAndCheckHierarchyClone (const HierarchyHelp *hh, BaseObject *op, HIERARCHYCLONEFLAGS flags, Bool *dirty, AliasTrans *trans, Int childCount, maxon::BaseArray< BaseObject * > *children, Bool addChildOrClone=false)
 
BaseObjectGetAndCheckHierarchyClone (const HierarchyHelp *hh, BaseObject *op, HIERARCHYCLONEFLAGS flags, Bool *dirty, AliasTrans *trans, Bool allchildren)
 
BaseObjectGetHierarchyClone (const HierarchyHelp *hh, BaseObject *op, HIERARCHYCLONEFLAGS flags, Bool *dirty, AliasTrans *trans)
 
BaseObjectGetHierarchyClone (const HierarchyHelp *hh, BaseObject *op, HIERARCHYCLONEFLAGS flags, Bool *dirty, AliasTrans *trans, DIRTYFLAGS dirtyflags)
 

Dependence List

void NewDependenceList ()
 
Bool CompareDependenceList ()
 
void AddDependence (const BaseObject *op)
 
void AddDependence (const BaseObject *op, DIRTYFLAGS dirtyflags)
 
void TouchDependenceList ()
 

Rotation Order

void SetRotationOrder (ROTATIONORDER order)
 
ROTATIONORDER GetRotationOrder () const
 

Synchronized Rotation Mode

void SetQuaternionRotationMode (Bool active, Bool bUndo)
 
Bool IsQuaternionRotationMode () const
 
Bool SynchronizeVectorTrackKeys (Int32 vectorTrackID, Bool bUndo, BaseTime startRange=BaseTime(-108000, 1), BaseTime endRange=BaseTime(108000, 1))
 
Bool FindBestEulerAngle (Int32 rotationTrackID, Bool bAdjustTangent, Bool bUndo, BaseTime startRange=BaseTime(-108000, 1), BaseTime endRange=BaseTime(108000, 1))
 
Bool EvaluateSynchronizedRotation (const BaseTime &time, ANIMATEFLAGS flags, Vector *resultRotation=nullptr)
 

Miscellaneous

Bool GetVectorTracks (const DescID &id, CTrack *&xfound, CTrack *&yfound, CTrack *&zfound)
 
Bool GetVectorCurves (CCurve *curveToSearch, CCurve *&xfound, CCurve *&yfound, CCurve *&zfound)
 
UInt64 GetGUID () const
 
Int32 GetHighlightHandle (BaseDraw *bd)
 
SplineObjectGetRealSpline ()
 
const SplineObjectGetRealSpline () const
 
Float GetVisibility (Float parent) const
 
Bool SearchHierarchy (const BaseObject *op) const
 

Private

BaseObjectGetOrigin (Bool safe)
 
const BaseObjectGetOrigin (Bool safe) const
 
void SetOrigin (BaseObject *origin)
 
BaseObjectGetTopOrigin (Bool parent, Bool safe) const
 
BaseObjectGetEditObject (BaseObject **psds, DISPLAYEDITSTATE state, Bool safetey=true) const
 
void RemoveFromCache (Bool clearParentObject=true)
 
DRAWRESULT ObjDraw (DRAWPASS drawpass, BaseDraw *bd, BaseDrawHelp *bh)
 
maxon::Tuple< Bool, maxon::HashIntGetObjectDrawHash (Int32 type) const
 
void GetDrawStateData (void *state) const
 

Additional Inherited Members

- Static Public Member Functions inherited from BaseList2D
static BaseList2DAlloc (Int32 type)
 
static void Free (BaseList2D *&bl)
 
- Static Public Attributes inherited from BaseList2D
static const Int32 SETBIT_FLAG_NODIRTY
 
static const Int32 SETBIT_FLAG_REMOVE
 

Constructor & Destructor Documentation

◆ BaseObject()

BaseObject ( )
private

◆ ~BaseObject()

~BaseObject ( )
private

Member Function Documentation

◆ Alloc()

static BaseObject* Alloc ( Int32  type)
static

Allocates a base object. Destroy the allocated base object with Free(). Use AutoAlloc to automate the allocation and destruction based on scope.

Parameters
[in]typeThe object type: Object Types
Returns
The allocated base object, or nullptr if the allocation failed.

◆ Free()

static void Free ( BaseObject *&  bl)
static

Destructs base objects allocated with Alloc(). Use AutoAlloc to automate the allocation and destruction based on scope.

Parameters
[in,out]blThe base object to destruct. If the pointer is nullptr nothing happens. The pointer is assigned nullptr afterwards.

◆ GetNext() [1/2]

BaseObject* GetNext ( )

Gets the next object in the list. Convenience version of GeListNode::GetNext().

Returns
The next object, or nullptr if there is none. Cinema 4D owns the pointed object.

◆ GetNext() [2/2]

const BaseObject* GetNext ( ) const

◆ GetPred() [1/2]

BaseObject* GetPred ( )

Gets the previous object in the list. Convenience version of GeListNode::GetPred().

Returns
The previous base object, or nullptr if there is none. Cinema 4D owns the pointed object.

◆ GetPred() [2/2]

const BaseObject* GetPred ( ) const

◆ GetUp() [1/2]

BaseObject* GetUp ( )

Gets the parent object of the list node. Convenience version of GeListNode::GetUp().

Returns
The parent object, or nullptr if there is none. Cinema 4D owns the pointed object.

◆ GetUp() [2/2]

const BaseObject* GetUp ( ) const

◆ GetDown() [1/2]

BaseObject* GetDown ( )

Gets the first child object of the list node. Convenience version of GeListNode::GetDown().

Returns
The first child object, or nullptr if there is none. Cinema 4D owns the pointed object.

◆ GetDown() [2/2]

const BaseObject* GetDown ( ) const

◆ GetDownLast() [1/2]

BaseObject* GetDownLast ( )

Gets the last child base object of the list node. Convenience version of GeListNode::GetDownLast().

Returns
The last child object, or nullptr if there is none. Cinema 4D owns the pointed object.

◆ GetDownLast() [2/2]

const BaseObject* GetDownLast ( ) const

◆ GetAbsPos()

Vector GetAbsPos ( ) const

Gets the absolute position of the object.
These are the absolute local coordinates within the parent object.
If the object has no parent then these are world coordinates.

See also
The BaseObject Manual
Returns
The object's absolute position.

◆ SetAbsPos()

void SetAbsPos ( const Vector v)

Sets the absolute local position of the object within its parent.
These are the absolute local coordinates within the parent object.
If the object has no parent then these are world coordinates.

See also
The BaseObject Manual
Parameters
[in]vThe object's absolute position to set.

◆ GetAbsScale()

Vector GetAbsScale ( ) const

Gets the absolute scale of the object.
This is relative to the object's parent if it has one.

See also
The BaseObject Manual
Returns
The object's absolute scale.

◆ SetAbsScale()

void SetAbsScale ( const Vector v)

Sets the absolute scale of the object.
This is relative to the object's parent if it has one.

See also
The BaseObject Manual
Parameters
[in]vThe object's absolute scale to set.

◆ GetAbsRot()

Vector GetAbsRot ( ) const

Gets the absolute HPB rotation of the object.
This is relative to the object's parent if it has one.

See also
The BaseObject Manual
Returns
The object's absolute HPB rotation.

◆ SetAbsRot()

void SetAbsRot ( const Vector v)

Sets the absolute HPB rotation of the object.
This is relative to the object's parent if it has one.

See also
The BaseObject Manual
Parameters
[in]vThe object's absolute HPB rotation to set.

◆ GetFrozenPos()

Vector GetFrozenPos ( ) const

Gets the frozen position of the object.

See also
The BaseObject Manual
Returns
The object's frozen position.

◆ SetFrozenPos()

void SetFrozenPos ( const Vector v)

Sets the frozen position of the object.

See also
The BaseObject Manual
Parameters
[in]vThe object's frozen position to set.

◆ GetFrozenScale()

Vector GetFrozenScale ( ) const

Gets the frozen scale of the object.

See also
The BaseObject Manual
Returns
The object's frozen scale.

◆ SetFrozenScale()

void SetFrozenScale ( const Vector v)

Sets the frozen scale of the object.

See also
The BaseObject Manual
Parameters
[in]vThe object's frozen scale to set.

◆ GetFrozenRot()

Vector GetFrozenRot ( ) const

Gets the frozen HPB rotation of the object.

See also
The BaseObject Manual
Returns
The object's frozen HPB rotation.

◆ SetFrozenRot()

void SetFrozenRot ( const Vector v)

Sets the frozen HPB rotation of the object.

See also
The BaseObject Manual
Parameters
[in]vThe object's frozen HPB rotation to set.

◆ GetRelPos()

Vector GetRelPos ( ) const

Get the relative position of the object.

See also
The BaseObject Manual
Returns
The object's relative position.

◆ SetRelPos()

void SetRelPos ( const Vector v)

Sets the relative position of the object.

See also
The BaseObject Manual
Parameters
[in]vThe object's relative position to set.

◆ GetRelScale()

Vector GetRelScale ( ) const

Gets the relative scale of the object.

See also
The BaseObject Manual
Returns
The object's relative scale.

◆ SetRelScale()

void SetRelScale ( const Vector v)

Sets the relative scale of the object.

See also
The BaseObject Manual
Parameters
[in]vThe object's relative scale to set.

◆ GetRelRot()

Vector GetRelRot ( ) const

Gets the relative HPB rotation of the object.

See also
The BaseObject Manual
Returns
The object's relative scale.

◆ SetRelRot()

void SetRelRot ( const Vector v)

Sets the relative HPB rotation of the object.

See also
The BaseObject Manual
Parameters
[in]vThe object's relative rotation to set.

◆ GetMl()

const Matrix& GetMl ( ) const

Gets the local matrix representing the object's position, scale and rotation.

Returns
The object's local matrix.

◆ SetMl()

void SetMl ( const Matrix m)

Sets the local matrix representing the object's position, scale and rotation.

Parameters
[in]mThe object's local matrix to set.

◆ GetFrozenMln()

Matrix GetFrozenMln ( ) const

Gets the frozen and normalized matrix of the object.

See also
The BaseObject Manual
Returns
The object's frozen and normalized matrix.

◆ GetRelMln()

Matrix GetRelMln ( ) const

Gets the relative and normalized matrix of the object.

See also
The BaseObject Manual
Returns
The object's relative and normalized matrix.

◆ GetRelMl()

Matrix GetRelMl ( ) const

Gets the relative matrix of the object.

See also
The BaseObject Manual
Returns
The object's relative matrix.

◆ SetRelMl()

void SetRelMl ( const Matrix m)

Sets the relative matrix of the object.

See also
The BaseObject Manual
Parameters
[in]mThe object's relative matrix to set.

◆ GetMg()

Matrix GetMg ( ) const

Gets the world (global) matrix representing the object's position, scale and rotation.

Warning
Only valid if the object is attached to a document. Virtual objects in caches and deform caches are not attached to a document, so this cannot be used for those objects.
Returns
The object's world matrix.

◆ SetMg()

void SetMg ( const Matrix m)

Sets the world (global) matrix representing the object's position, scale and rotation.

Parameters
[in]mThe object's world matrix to set.

◆ GetMln()

Matrix GetMln ( ) const

Gets the local normalized matrix representing the object's position, scale and rotation.

Returns
The object's normalized local matrix.

◆ GetMgn()

Matrix GetMgn ( ) const

Gets the world (global) normalized matrix representing the object's position, scale and rotation.

Returns
The object's normalized world matrix.

◆ GetUpMg()

Matrix GetUpMg ( ) const

Gets the world (global) matrix of the parent object representing the parent's position, scale and rotation.
If the object has no parent object then the method returns a unit matrix.

Returns
The parent object's world matrix.

◆ CopyMatrixTo()

void CopyMatrixTo ( BaseObject dst) const

Copies the object's matrix to another object.

Parameters
[in,out]dstThe destination object to copy the matrix to.

◆ GetMp()

Vector GetMp ( ) const

Gets the object's bounding box center in local space.

Returns
The bounding box center.

◆ GetRad()

Vector GetRad ( ) const

Gets the object's bounding box radius (x/y/z).

Note
Works for all objects and is faster than manually finding the bounds of even polygon objects, because the radius is internally cached.
Returns
The object's bounding box radius.

◆ GetDimension()

void GetDimension ( Vector mp,
Vector rad 
) const

Gets the object's bounding box center in local space. This call combines the GetMp()/GetRad() in one call and is much more performant if you need both values.

Parameters
[out]mpcenter of the object
[out]radradius of the object

◆ GetEditorMode()

Int32 GetEditorMode ( ) const

Gets the mode of the editor dot for the object.

Returns
The editor mode: MODE

◆ GetEditorModeH()

Int32 GetEditorModeH ( ) const

Gets the mode of the editor dot for the object.

Returns
The editor mode: MODE

◆ SetEditorMode()

void SetEditorMode ( Int32  mode)

Sets the mode for of editor dot for the object.

Parameters
[in]modeThe editor mode to set: MODE

◆ GetRenderMode()

Int32 GetRenderMode ( ) const

Gets the mode of the render dot for the object.

Returns
The render mode: MODE

◆ GetRenderModeH()

Int32 GetRenderModeH ( ) const

Gets the mode of the render dot for the object.

Returns
The render mode: MODE

◆ SetRenderMode()

void SetRenderMode ( Int32  mode)

Sets the mode of the render dot for the object.

Parameters
[in]modeThe render mode to set: MODE

◆ GetDeformMode()

Bool GetDeformMode ( ) const

Gets the enabled mode of the deformation/generator tick.

Returns
true if the deformer/generator is enabled, otherwise false.

◆ SetDeformMode()

void SetDeformMode ( Bool  mode)

Sets the enabled mode of the deformation/generator tick.

Parameters
[in]modetrue to enable the generator/deformer object, otherwise false.

◆ GetRealDeformMode()

Int32 GetRealDeformMode ( ) const

Gets the real deform mode (MODE_ON, MODE_OFF, MODE_UNKNOWN).

Returns
The real deform mode.

◆ SetRealDeformMode()

void SetRealDeformMode ( Int32  mode)

Sets the real deform mode (MODE_ON, MODE_OFF, MODE_UNKNOWN).

Parameters
[in]modeMODE_ON, MODE_OFF or MODE_UNKNOWN.

◆ GetUniqueIP()

Int32 GetUniqueIP ( ) const

Gets the IP number for the object.
GetUniqueIP() and SetUniqueIP() allow Cinema 4D to identify and track objects between different frames (which is necessary for stuff like object motion blur).

In case of a static generator that is easy: for every frame there is exactly the same structure.
For a particle system however that is different: e.g. there could always be 3 objects (particles), but some might be the same, some might be new ones.
To allow Cinema 4D to track that stuff an IP-like system is used: each object can carry a unique Int32 number and Cinema 4D creates full paths from it, e.g. 5.7.102.43.65.2
This is done 100% internally.

Only generator objects that have variable output or generator objects that use GetHierarchyClone() need to program some extra lines.
Such objects need to set the bit OBJECT_UNIQUEENUMERATION. Then it needs to assign unique Int32 values to all objects returned (except for the top-level object, which is handled by Cinema 4D).

Example:
A generator has 3 objects, but those objects appear and disappear during time. Say that obj3 is child of obj1; obj1 and obj2 are children of main (which is returned). obj2 and obj3 might not be present:

main
obj1
[obj3]
[obj2]

The generator will call:

if (obj1) obj->SetUniqueIP(1);
if (obj2) obj->SetUniqueIP(2);
if (obj3) obj->SetUniqueIP(3);
PyObject * obj
Definition: complexobject.h:60

That is all that is needed. Cinema 4D will recognize which object matches another object at a different time.
If GetHierarchyClone() is called those objects already have a unique numeration. It is only needed to assign a unique value to the top level:

obj1 = GetHierarchyClone(...);
obj2 = GetHierarchyClone(...);
...
if (obj1) obj1->SetUniqueIP(1);
if (obj2) obj2->SetUniqueIP(2);
BaseObject * GetHierarchyClone(const HierarchyHelp *hh, BaseObject *op, HIERARCHYCLONEFLAGS flags, Bool *dirty, AliasTrans *trans)
Returns
The IP number for the object.

◆ SetUniqueIP()

void SetUniqueIP ( Int32  ip)

Sets the IP number for the object.

See also
GetUniqueIP()
Parameters
[in]ipThe new IP number.

◆ GetFirstTag() [1/2]

BaseTag* GetFirstTag ( )

Gets the first tag associated with the object.

Returns
The first tag, or nullptr if no tags available. The object owns the pointed tag.

◆ GetFirstTag() [2/2]

const BaseTag* GetFirstTag ( ) const

◆ GetLastTag() [1/2]

BaseTag* GetLastTag ( )

Gets the last tag associated with the object.

Since
R19
Returns
The last tag, or nullptr if no tags available. The object owns the pointed tag.

◆ GetLastTag() [2/2]

const BaseTag* GetLastTag ( ) const

◆ GetTag() [1/2]

BaseTag* GetTag ( Int32  type,
Int32  nr = 0 
)

Gets a tag of a certain type associated with the object.

Parameters
[in]typeThe type of tag to fetch from the object: Tag Types
[in]nrOptionally specify a starting tag index to begin the search.
If the requested number is not available then nullptr will be returned even if there is a tag of that type with a different index.
Returns
The requested tag, or nullptr if no tags of the requested type are available. The object owns the pointed tag.

◆ GetTag() [2/2]

const BaseTag* GetTag ( Int32  type,
Int32  nr = 0 
) const

◆ GetTagsOfType() [1/2]

maxon::Block<const BaseTag* const> GetTagsOfType ( Int32  type) const

Gets an array of tags of a certain type associated with the object.

Parameters
[in]typeThe type of tags to fetch from the object: Tag Types
Returns
An array of tags with the given type.

◆ GetTagsOfType() [2/2]

maxon::Block<BaseTag* const> GetTagsOfType ( Int32  type)

Gets an array of tags of a certain type associated with the object.

Parameters
[in]typeThe type of tags to fetch from the object: Tag Types
Returns
An array of tags with the given type.

◆ GetTagDataR()

const void* GetTagDataR ( Int32  type,
Int32  nr = 0 
) const

Gets a variable tag's readable data of a certain type associated with the object.

Parameters
[in]typeThe type of tag to fetch the data for: VariableTag Types
[in]nrOptionally specify a starting tag index to begin the search.
Returns
The variable tag's readable data, nullptr if this is not a variable tag or the tag could not be found. The tag owns the pointed data.

◆ GetTagDataW()

void* GetTagDataW ( Int32  type,
Int32  nr = 0 
)

Gets a variable tag's writable data of a certain type associated with the object.

Parameters
[in]typeThe type of tag to fetch the data for: VariableTag Types
[in]nrOptionally specify a starting tag index to begin the search.
Returns
The variable tag's writable data, nullptr if this is not a variable tag or the tag could not be found. The tag owns the pointed data.

◆ GetTagDataCount()

Int32 GetTagDataCount ( Int32  type) const

Gets the variable tag data count.

Parameters
[in]typeThe type of tag to fetch the data for: VariableTag Types
Returns
The data count in the variable tag.

◆ GetVariableTagData()

const VariableTagDataRef& GetVariableTagData ( Int32  type,
Int32  nr = 0 
) const

Gets the copy-on-write reference to the data of a variable tag of a certain type associated with the object.

Parameters
[in]typeThe type of tag to fetch the data for: VariableTag Types
[in]nrOptionally specify a starting tag index to begin the search.
Returns
A reference to the variable tag's data, a null reference if there's no such variable tag.

◆ MakeTag()

BaseTag* MakeTag ( Int32  type,
BaseTag pred = nullptr 
)

Creates and associates a tag with the object.

Parameters
[in]typeThe type of tag to create: Tag Types
[in]predThe previous tag to insert the tag after, or nullptr if the tag should be inserted at the start of the tag list. The caller owns the pointed tag.
Returns
The new tag, or nullptr if failed. The object owns the pointed tag.

◆ MakeVariableTag()

VariableTag* MakeVariableTag ( Int32  type,
Int32  count,
BaseTag pred = nullptr 
)

Creates and associates a variable tag with the object.

Parameters
[in]typeThe type of variable tag to create: VariableTag Types
[in]countThe data count.
[in]predThe previous tag to insert the tag after, or nullptr if the tag should be inserted at the start of the tag list. The caller owns the pointed tag.
Returns
The new variable tag, or nullptr if failed. The object owns the pointed variable tag.

◆ InsertTag()

void InsertTag ( BaseTag tp,
BaseTag pred = nullptr 
)

Inserts tag into the object's tag list.

Warning
If the tag type was not registered with TAG_MULTIPLE, any existing old tag of same type will be implicitly removed. Any previous reference to the old tag will be invalid afterwards.
Parameters
[in]tpThe tag to insert. The object takes over the ownership of the pointed tag.
[in]predThe previous tag to insert the tag after, or nullptr if the tag should be inserted at the start of the tag list. The caller owns the pointed tag.

◆ KillTag()

void KillTag ( Int32  type,
Int32  nr = 0 
)

Removes a tag from the object and frees its resources.

Parameters
[in]typeThe type of tag to remove: Tag Types
[in]nrOptionally specify a starting tag index to begin the search.

◆ CopyTagsTo()

Bool CopyTagsTo ( BaseObject dest,
Int32  visible,
Int32  variable,
Int32  hierarchical,
AliasTrans trans 
) const

Copies the object's tags to another object.

Parameters
[in]destThe destination object. The caller owns the pointed object.
[in]visibletrue if the tag must be visible, false if it must not be visible or NOTOK if it can be either (if this property does not need to be checked).
[in]variabletrue if the tag must be variable, false if it must not be variable or NOTOK if it can be either (if this property does not need to be checked).
[in]hierarchicaltrue if the tag must be hierarchical, false if it must not be hierarchical or NOTOK if it can be either (if this property does not need to be checked).
[in]transAn alias translator for the operation. Can be nullptr. The caller owns the pointed alias translator.
Returns
true if the tags were copied successfully, otherwise false.

◆ GetCache() [1/2]

BaseObject* GetCache ( )

Gets the object from the previously built cache.
Situations can be quite complex in Cinema 4D. For instance GetCache() could return a list of objects.
For example the default Sweep Generator internally has some built-in caches for the sweep surface and for the caps.
The following helper routine can be used to make things easier. It browses through this rather complex hierarchy of objects and caches recursively:

void DoRecursion(BaseObject *op)
{
BaseObject* tp = op->GetDeformCache();
if (tp)
{
DoRecursion(tp);
}
else
{
tp = op->GetCache();
if (tp)
{
DoRecursion(tp);
}
else
{
if (!op->GetBit(BIT_CONTROLOBJECT))
{
if (op->IsInstanceOf(Opolygon))
{
...
}
}
}
}
for (tp = op->GetDown(); tp; tp=tp->GetNext())
{
DoRecursion(tp);
}
}
Definition: c4d_baseobject.h:248
BaseObject * GetNext()
Definition: c4d_baseobject.h:279
#define BIT_CONTROLOBJECT
Internal bit set by generators.
Definition: ge_prepass.h:905
#define Opolygon
Polygon - PolygonObject.
Definition: ge_prepass.h:1042
PyObject * op
Definition: object.h:520

Remember:
Use the above routine only if the caches are already built. It is for instance not safe to use it in a command plugin since the user can have stopped the scene redraw and the building of caches.

See also
CheckCache() GetDeformCache()
Returns
The object's previously built cache or nullptr. The object owns the pointed object's cache.
May return nullptr if the cache is not available or is not yet built.
See also
Hierarchy if a plugin needs access to pre-built caches.

◆ GetCache() [2/2]

const BaseObject* GetCache ( ) const

Gets the object from the previously built cache.
Situations can be quite complex in Cinema 4D. For instance GetCache() could return a list of objects.
For example the default Sweep Generator internally has some built-in caches for the sweep surface and for the caps.
The following helper routine can be used to make things easier. It browses through this rather complex hierarchy of objects and caches recursively:

void DoRecursion(BaseObject *op)
{
BaseObject* tp = op->GetDeformCache();
if (tp)
{
DoRecursion(tp);
}
else
{
tp = op->GetCache();
if (tp)
{
DoRecursion(tp);
}
else
{
if (!op->GetBit(BIT_CONTROLOBJECT))
{
if (op->IsInstanceOf(Opolygon))
{
...
}
}
}
}
for (tp = op->GetDown(); tp; tp=tp->GetNext())
{
DoRecursion(tp);
}
}

Remember:
Use the above routine only if the caches are already built. It is for instance not safe to use it in a command plugin since the user can have stopped the scene redraw and the building of caches.

See also
CheckCache() GetDeformCache()
Returns
The object's previously built cache or nullptr. The object owns the pointed object's cache.
May return nullptr if the cache is not available or is not yet built.
See also
Hierarchy if a plugin needs access to pre-built caches.

◆ GetDeformCache() [1/2]

BaseObject* GetDeformCache ( )

Gets the previously built cache that has been deformed by an active deformer.
It is important to understand the concept how the deformer cache operates.
For each object in the hierarchy that generates a polygonal cache a deformer cache could also have been created by an active deformer object.
A simple example will help to see how this works:

Take the simple hierarchy shown above, the array generator object creates a virtual hierarchy in the cache, this can be retrieved using GetCache().
This hierarchy is:

From each of the Cube objects a further cache is generated, this time polygonal:

From these the deformer object generates a deformed polygon cache:

So the final hierarchy is:

When a deformer becomes active every object/cache object gets a deform cache (if it was a polygonal object). The deformer cache is always polygonal and is only ever a single object.
Important:
The caches are always built after all plugins and expressions have been called.
If the virtual objects have to be accessed to obtain a polygonal based object it is generally advised to call SendModelingCommand() with MCOMMAND_CURRENTSTATETOOBJECT::
This will rebuild the cache for the passed object if needed, and then clone the polygonal objects.
Another possible solution is to use the Hierarchy class, this will give full access to all virtual objects, or can be used to just rebuild the internal caches.
But be aware that rebuilding the internal caches can cause serious overhead, be time consuming and if called too soon in the pipeline, the caches may need to be rebuilt afterwards.

Returns
The objects previously built deformed cache or nullptr. The object owns the pointed object's cache.
May return nullptr if the cache is not available or is not yet built.
See also
Hierarchy if a plugin needs access to pre-built caches.

◆ GetDeformCache() [2/2]

const BaseObject* GetDeformCache ( ) const

Gets the previously built cache that has been deformed by an active deformer.
It is important to understand the concept how the deformer cache operates.
For each object in the hierarchy that generates a polygonal cache a deformer cache could also have been created by an active deformer object.
A simple example will help to see how this works:

Take the simple hierarchy shown above, the array generator object creates a virtual hierarchy in the cache, this can be retrieved using GetCache().
This hierarchy is:

From each of the Cube objects a further cache is generated, this time polygonal:

From these the deformer object generates a deformed polygon cache:

So the final hierarchy is:

When a deformer becomes active every object/cache object gets a deform cache (if it was a polygonal object). The deformer cache is always polygonal and is only ever a single object.
Important:
The caches are always built after all plugins and expressions have been called.
If the virtual objects have to be accessed to obtain a polygonal based object it is generally advised to call SendModelingCommand() with MCOMMAND_CURRENTSTATETOOBJECT::
This will rebuild the cache for the passed object if needed, and then clone the polygonal objects.
Another possible solution is to use the Hierarchy class, this will give full access to all virtual objects, or can be used to just rebuild the internal caches.
But be aware that rebuilding the internal caches can cause serious overhead, be time consuming and if called too soon in the pipeline, the caches may need to be rebuilt afterwards.

Returns
The objects previously built deformed cache or nullptr. The object owns the pointed object's cache.
May return nullptr if the cache is not available or is not yet built.
See also
Hierarchy if a plugin needs access to pre-built caches.

◆ GetIsoparm()

LineObject* GetIsoparm ( )

Gets the previously built isoparm representation of the object.

Returns
The isoparm representation of the object or nullptr. The object owns the pointed isoparm.
May return nullptr if the isoparm is not available or is not yet built.
See also
Hierarchy if a plugin needs access to pre-built caches.

◆ SetIsoparm()

void SetIsoparm ( LineObject l)

Sets the isoparm representation of the object.

Warning
Must only be called from within ObjectData::GetVirtualObjects() of a generator object.
Parameters
[in]lThe isoparm representation of the object to set. The object takes over the ownership of the pointed isoparm.

◆ GetCacheParent()

BaseObject* GetCacheParent ( ) const

A cache/deform object has no GetUp() link. Instead this method can be called to detect the cache building parent.

Returns
The cache parent or nullptr. The object owns the pointed cache parent.

◆ GetCacheTopParent()

BaseObject* GetCacheTopParent ( ) const

A cache/deform object has no GetUp() link. Instead this method can be called to detect the top cache building parent.

Returns
The top cache parent or nullptr. The object owns the pointed top cache parent.

◆ SetPhong()

Bool SetPhong ( Bool  on,
Bool  anglelimit,
Float  angle 
)

Sets the phong smoothing for the object.
Deletes any existing Phong tag. If on is set to true it creates a new Phong tag.

Parameters
[in]onfalse removes the Phong tag from the object. true creates a new Phong tag.
[in]anglelimittrue if angle should be used.
[in]angleThe phong angle.
Returns
true if the phong smoothing was changed successfully, otherwise false.

◆ IsDirty()

Bool IsDirty ( DIRTYFLAGS  flags) const

Checks if the object has been changed since the last time the object was touched.

Parameters
[in]flagsThe object part to check: DIRTYFLAGS
Returns
true if the object is dirty, otherwise false.

◆ SetDirty()

void SetDirty ( DIRTYFLAGS  flags)

Sets if any part of the object was changed.

Parameters
[in]flagsThe object part that was changed: DIRTYFLAGS

◆ CheckCache()

Bool CheckCache ( const HierarchyHelp hh) const

Check if cache is built and if it matches the requirements (polygonized/isoparm, level of detail etc.)

Note
Must only be called from within ObjectData::GetVirtualObjects() of a generator object.
Parameters
[in]hhA HierarchyHelp, usually passed from the calling method parameters, for instance ObjectData::GetVirtualObjects().
Returns
true if the cache is dirty, false if it is valid.

◆ Touch()

void Touch ( )

Marks object to be used by generator. Automatically resets dirty values for use with IsDirty().

◆ GetColorProperties()

void GetColorProperties ( ObjectColorProperties prop) const

Gets the object's color properties and fill prop.

Parameters
[in]propFilled with the color properties. The caller owns the pointed color properties.

◆ SetColorProperties()

void SetColorProperties ( ObjectColorProperties prop)

Sets the object's color properties from prop.

Parameters
[in]propThe color properties to set. The caller owns the pointed color properties.

◆ GetDisplayColor()

maxon::Opt<maxon::Color> GetDisplayColor ( ) const

Returns the selected display color of the object.

Returns
res.HasValue() if the color should be used. Otherwise no color is set (see ID_BASEOBJECT_USECOLOR_OFF).

◆ GetModelingAxis()

const Matrix& GetModelingAxis ( BaseDocument doc)

Gets the internal matrix for the modeling axis.

Note
To access the axis type, and other axis options, use the IDs defined in ToolModelingAxis.h.
Parameters
[in]docThe document for the operation. The caller owns the pointed document.
Returns
The modeling axis.

◆ SetModelingAxis()

void SetModelingAxis ( const Matrix m)

Sets the internal matrix for the modeling axis.

Note
To access the axis type, and other axis options, use the IDs in ToolModelingAxis.res. Here is a code sample:
void SetToolData(BaseDocument *doc, Int32 pluginid, Int32 dataid, const GeData &dat)
{
BasePlugin *plug = static_cast<BasePlugin*>(FindPlugin(pluginid, PLUGINTYPE::TOOL));
if (!plug) return;
plug->SetParameter(DescID(dataid), dat, 0);
}
BasePlugin * FindPlugin(Int32 id, PLUGINTYPE type)
Definition: c4d_basedocument.h:497
The base class for Cinema&#160;4D plugins.
Definition: c4d_baseplugin.h:70
Bool SetParameter(const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
Definition: lib_description.h:355
Definition: c4d_gedata.h:83
maxon::Int32 Int32
Definition: ge_sys_math.h:56
#define ID_MODELING_LIVESELECTION
Definition: modelingids.h:48
@ TOOL
Tool. (ToolData)
const char * doc
Definition: pyerrors.h:226
@ MDATA_AXIS_MODE_FREE
Definition: toolmodelingaxis.h:19
@ MDATA_AXIS_MODE
Definition: toolmodelingaxis.h:10
If the matrix is changed so that it does not fit the current mode the axis mode should be set to MDATA_AXIS_MODE_FREE.
Parameters
[in]mThe new modeling axis to set.

◆ GetAndCheckHierarchyClone() [1/2]

BaseObject* GetAndCheckHierarchyClone ( const HierarchyHelp hh,
BaseObject op,
HIERARCHYCLONEFLAGS  flags,
Bool dirty,
AliasTrans trans,
Int  childCount,
maxon::BaseArray< BaseObject * > *  children,
Bool  addChildOrClone = false 
)

Checks and generates a clone of the child objects of a parent generator.
Similar to GetHierarchyClone() except that it checks if the hierarchy is dirty and if not it does not need to generate a new clone.

See also
GetHierarchyClone()
Parameters
[in]hhUsually passed through from a calling method, for instance from ObjectData::GetVirtualObjects(). The caller owns the pointed hierarchy helper.
[in]opThe object to start the clone from, usually the first child of the parent object. The caller owns the pointed object.
[in]flagsThe flags for the generation of the cloned chain. The values are: HIERARCHYCLONEFLAGS
[in]dirtyAssigned the state of any changes to the chain. true if some part of the child objects in the chain has changed, otherwise false.
[in]transAn alias translator for the operation. Can be nullptr. The caller owns the pointed alias translator.
[in]childCountMaximum number of children to check (starting at the first child). With a negative value the function checks exactly one child and doesn't create a parent Null object for the clones.
[in]childrenAn optional array where the generated clones are added. For each child there will be one entry, even if no clone is generated for that child (then the entry will be nullptr or the child depending on addChildOrClone). Note that this array gets filled only in the dirty case.
[in]addChildOrCloneWhen true, the original child will be added to children instead of a nullptr in the case of a child which doesn't generate a clone.
Returns
The cloned objects. The caller owns the pointed object.

◆ GetAndCheckHierarchyClone() [2/2]

BaseObject* GetAndCheckHierarchyClone ( const HierarchyHelp hh,
BaseObject op,
HIERARCHYCLONEFLAGS  flags,
Bool dirty,
AliasTrans trans,
Bool  allchildren 
)

Checks and generates a clone of the child objects of a parent generator.
Similar to GetHierarchyClone() except that it checks if the hierarchy is dirty and if not it does not need to generate a new clone.

See also
GetHierarchyClone()
Parameters
[in]hhUsually passed through from a calling method, for instance from ObjectData::GetVirtualObjects(). The caller owns the pointed hierarchy helper.
[in]opThe object to start the clone from, usually the first child of the parent object. The caller owns the pointed object.
[in]flagsThe flags for the generation of the cloned chain. The values are: HIERARCHYCLONEFLAGS
[in]dirtyAssigned the state of any changes to the chain. true if some part of the child objects in the chain has changed, otherwise false.
[in]transAn alias translator for the operation. Can be nullptr. The caller owns the pointed alias translator.
[in]allchildrentrue if all children should be used in the check.
Returns
The cloned objects. The caller owns the pointed object.

◆ GetHierarchyClone() [1/2]

BaseObject* GetHierarchyClone ( const HierarchyHelp hh,
BaseObject op,
HIERARCHYCLONEFLAGS  flags,
Bool dirty,
AliasTrans trans 
)

Generates a clone of the child objects of a parent generator.

Note
The result given by GetAndCheckHierarchyClone() will be a chain of objects with various types.
Passing HIERARCHYCLONEFLAGS::ASLINE e.g. will force all splines to be converted, but not every object in the chain will be of type Oline; some objects like PolygonObject cannot be converted, also Onull.
Parameters
[in]hhUsually passed through from a calling method, for instance from ObjectData::GetVirtualObjects(). The caller owns the pointed hierarchy helper.
[in]opThe object to start the clone from, usually the parent object itself. The caller owns the pointed object.
[in]flagsThe flags for the generation of the cloned chain. The values are: HIERARCHYCLONEFLAGS
[in]dirtyHas to be set to nullptr for the cloning to take place. Set to true if some part of the child objects in the chain has changed, or false if nothing has changed.
[in]transAn alias translator for the operation. Can be nullptr. The caller owns the pointed alias translator.
Returns
The cloned object(s). The caller owns the pointed object.

◆ GetHierarchyClone() [2/2]

BaseObject* GetHierarchyClone ( const HierarchyHelp hh,
BaseObject op,
HIERARCHYCLONEFLAGS  flags,
Bool dirty,
AliasTrans trans,
DIRTYFLAGS  dirtyflags 
)

Generates a clone of the child objects of a parent generator. This version accepts dirtyflags parameter.

Since
R19
Note
The result given by GetAndCheckHierarchyClone() will be a chain of objects with various types.
Passing HIERARCHYCLONEFLAGS::ASLINE e.g. will force all splines to be converted, but not every object in the chain will be of type Oline; some objects like PolygonObject cannot be converted, also Onull.
Parameters
[in]hhUsually passed through from a calling method, for instance from ObjectData::GetVirtualObjects(). The caller owns the pointed hierarchy helper.
[in]opThe object to start the clone from, usually the parent object itself. The caller owns the pointed object.
[in]flagsThe flags for the generation of the cloned chain. The values are: HIERARCHYCLONEFLAGS
[in]dirtyHas to be set to nullptr for the cloning to take place. Set to true if some part of the child objects in the chain has changed, or false if nothing has changed.
[in]transAn alias translator for the operation. Can be nullptr. The caller owns the pointed alias translator.
[in]dirtyflagsThe dirty flags stored within the dependence list.
Returns
The cloned object(s). The caller owns the pointed object.

◆ NewDependenceList()

void NewDependenceList ( )

Starts a new dependence list. Enables to keep track of changes made to any children.

◆ CompareDependenceList()

Bool CompareDependenceList ( )

Compares if anything in the dependence list has changed.

Returns
true if the dependence list has not changed, otherwise false.

◆ AddDependence() [1/2]

void AddDependence ( const BaseObject op)

Adds a child object to the dependence list.
Usually op is a child object used by a generator object.

Parameters
[in]opThe child object to add to the dependence list. Should be a child object used by the generator object. The caller owns the pointed object.

◆ AddDependence() [2/2]

void AddDependence ( const BaseObject op,
DIRTYFLAGS  dirtyflags 
)

Adds a child object to the dependence list. This version accepts dirtyflags parameter.

Since
R19
Parameters
[in]opThe child object to add to the dependence list. Should be a child object used by the generator object. The caller owns the pointed object.
[in]dirtyflagsThe dirty flags stored within the dependence list.

◆ TouchDependenceList()

void TouchDependenceList ( )

Marks all the objects in the dependence list to be replaced by the generator.

◆ SetRotationOrder()

void SetRotationOrder ( ROTATIONORDER  order)

Sets the rotation order of the object.

Parameters
[in]orderThe rotation order to set for the object: ROTATIONORDER

◆ GetRotationOrder()

ROTATIONORDER GetRotationOrder ( ) const

Gets the rotation order of the object.

Returns
The rotation order of the object: ROTATIONORDER

◆ SetQuaternionRotationMode()

void SetQuaternionRotationMode ( Bool  active,
Bool  bUndo 
)

Sets the Synchronized Rotation Mode of the object.

Since
R18
Parameters
[in]activeEnable/Disable the Synchronized Rotation mode for the object.
[in]bUndoAdd undo to value changed (need to manage start and end externally).

◆ IsQuaternionRotationMode()

Bool IsQuaternionRotationMode ( ) const

Checks if Object Rotation is interpolated in Quaternion Mode.

Since
R18
Returns
true if Rotation Interpolation is Quaternion, otherwise false.

◆ SynchronizeVectorTrackKeys()

Bool SynchronizeVectorTrackKeys ( Int32  vectorTrackID,
Bool  bUndo,
BaseTime  startRange = BaseTime(-108000, 1),
BaseTime  endRange = BaseTime(108000, 1) 
)

Makes sure that the track Curves component are synchronized (keys on each component). If a component track is found, the other track component will be synchronized.

Since
R18
Parameters
[in]vectorTrackIDID of the Vector Track to synchronize.
[in]bUndoAdd undo to value changed (need to manage start and end externally).
[in]startRangeOptional start operation at given time.
[in]endRangeOptional end operation at given time.
Returns
true if Track Synchronization was successful, otherwise false.

◆ FindBestEulerAngle()

Bool FindBestEulerAngle ( Int32  rotationTrackID,
Bool  bAdjustTangent,
Bool  bUndo,
BaseTime  startRange = BaseTime(-108000, 1),
BaseTime  endRange = BaseTime(108000, 1) 
)

Tries to find the best Euler Angle according to the previous key. The Object must have keys on each component.

Since
R18
Parameters
[in]rotationTrackIDRotation Track ID to manage (relative, global, absolute, frozen).
[in]bAdjustTangentTry to adjust the tangent with new value, if false auto is used.
[in]bUndoAdd undo to value changed (need to manage start and end externally).
[in]startRangeOptional start operation at given time.
[in]endRangeOptional end operation at given time.
Returns
true if Rotation Synchronization was successful, otherwise false.

◆ EvaluateSynchronizedRotation()

Bool EvaluateSynchronizedRotation ( const BaseTime time,
ANIMATEFLAGS  flags,
Vector resultRotation = nullptr 
)

Forces an evaluation of all rotation tracks and consider Quaternion interpolation. This will directly update attribute values if no vector is specified for resultRotation.

Since
R18
Parameters
[in]timeEvaluation time.
[in]flagsThe animate flags: ANIMATEFLAGS
[in]resultRotationOptionally store result in Vector instead of updating attributes.
Returns
true if evaluation was a success, otherwise false.

◆ GetVectorTracks()

Bool GetVectorTracks ( const DescID id,
CTrack *&  xfound,
CTrack *&  yfound,
CTrack *&  zfound 
)

Returns each component track for the given DescID.

Since
R18
Parameters
[in]idID of desired vector.
[out]xfoundX Track of Vector if found.
[out]yfoundY Track of Vector if found.
[out]zfoundZ Track of Vector if found.
Returns
true if successful, otherwise false.

◆ GetVectorCurves()

Bool GetVectorCurves ( CCurve curveToSearch,
CCurve *&  xfound,
CCurve *&  yfound,
CCurve *&  zfound 
)

Returns each component CCurve for the given curve.

Since
R18
Parameters
[in]curveToSearchCCurve Component of desired vector.
[out]xfoundX CCurve of Vector if found.
[out]yfoundY CCurve of Vector if found.
[out]zfoundZ CCurve of Vector if found.
Returns
true if successful, otherwise false.

◆ GetGUID()

UInt64 GetGUID ( ) const

Gets a unique ID for any object in a document.
Works for generated objects in a cache (e.g. clones generated by a MoGraph cloner) and also for 'real' objects in the document (GetUniqueIP() does not do this).

Note
The ID generation for cache objects is based on GetUniqueIP(), so if two cache objects have the same IP, they will probably also get the same GUID
(unless they are PointObject or PolygonObject with different point or polygon count).
The ID generation for 'real' objects is based on the object's GeMarker, so if an object has no marker it will not return a unique ID.
Returns
A checksum for the object.

◆ GetHighlightHandle()

Int32 GetHighlightHandle ( BaseDraw bd)

Checks if a highlight handle has been hit.
Returns the handle ID previously given by ObjectData::DetectHandle(). The handle can then be drawn in the highlight mode.

Parameters
[in]bdThe base draw for the operation. The caller owns the pointed base draw.
Returns
The handle ID.

◆ GetRealSpline() [1/2]

SplineObject* GetRealSpline ( )

Gets a real spline representation of a primitive spline object.
This can for example be used to calculate the length of a spline.
If the object is a real spline it returns this. Otherwise nullptr.

Returns
The real spline object. The object owns owns the pointed spline.
Note
The matrix of the returned object must not be used. Use the matrix of *this instead.

◆ GetRealSpline() [2/2]

const SplineObject* GetRealSpline ( ) const

◆ GetVisibility()

Float GetVisibility ( Float  parent) const

Gets the object's visibility value. The range of values are 0.0 <= visibility <= 1.0.
The object's visibility depends upon its parent, if it has no visibility track this will return the parent's visibility which is passed.

Note
In the editor only a visibility of 0.0 can be noticed but all other intermediate values are visualized in render only.
Parameters
[in]parentThe parent object's visibility.
Returns
The visibility.

◆ SearchHierarchy()

Bool SearchHierarchy ( const BaseObject op) const

Checks if the object is a child of op.

Parameters
[in]opThe object to search within his hierarchy.
Returns
true if the object is a child of op, otherwise false.

◆ GetOrigin() [1/2]

BaseObject* GetOrigin ( Bool  safe)

Private.

◆ GetOrigin() [2/2]

const BaseObject* GetOrigin ( Bool  safe) const

Private.

◆ SetOrigin()

void SetOrigin ( BaseObject origin)

Private.

◆ GetTopOrigin()

BaseObject* GetTopOrigin ( Bool  parent,
Bool  safe 
) const

Private.

◆ GetEditObject()

BaseObject* GetEditObject ( BaseObject **  psds,
DISPLAYEDITSTATE  state,
Bool  safetey = true 
) const

Private.

◆ RemoveFromCache()

void RemoveFromCache ( Bool  clearParentObject = true)

Private.

◆ ObjDraw()

DRAWRESULT ObjDraw ( DRAWPASS  drawpass,
BaseDraw bd,
BaseDrawHelp bh 
)

Private.

◆ GetObjectDrawHash()

maxon::Tuple<Bool, maxon::HashInt> GetObjectDrawHash ( Int32  type) const

Private.

◆ GetDrawStateData()

void GetDrawStateData ( void *  state) const

Private.

◆ GetDeformMatrix()

const Matrix& GetDeformMatrix ( ) const

Gets the deformation matrix.

Returns
The matrix that deforms the local matrix.

◆ SetDeformMatrix()

void SetDeformMatrix ( const Matrix dm)

Sets the deformation of the local matrix.

Parameters
[in]dmThe matrix that deforms the local matrix.

◆ ClearDeformMatrix()

void ClearDeformMatrix ( )

Clears the deformation of the local matrix.

◆ GetUndeformedMl()

const Matrix& GetUndeformedMl ( ) const

Gets the undeformed local matrix.

Returns
The local matrix withouth deformation applied.

◆ GetUndeformedMlInverse()

const Matrix& GetUndeformedMlInverse ( ) const

Gets the inverse of the undeformed local matrix. It does not recompute it if the undeformed local matrix is unchanged since last call.

Returns
The inverse of the local matrix withouth deformation applied.

◆ GetUndeformedMg()

Matrix GetUndeformedMg ( ) const

Gets the global matrix without any matrix deformation applied in the hierarchy.

Returns
the global matrix without any matrix deformation applied in the hierarchy.

◆ HasDeformMatrix()

Bool HasDeformMatrix ( ) const

Returns true if the object has a deform matrix.