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.

Private Member Functions

 BaseObject ()
 
 ~BaseObject ()
 

Alloc/Free

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

Navigation

BaseObjectGetNext (void)
 
BaseObjectGetPred (void)
 
BaseObjectGetUp (void)
 
BaseObjectGetDown (void)
 
BaseObjectGetDownLast (void)
 

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 (void) 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)
 

Bounding Box

Vector GetMp (void)
 
Vector GetRad (void)
 

Editor/Render/Deform Mode

Int32 GetEditorMode (void)
 
void SetEditorMode (Int32 mode)
 
Int32 GetRenderMode (void)
 
void SetRenderMode (Int32 mode)
 
Bool GetDeformMode (void)
 
void SetDeformMode (Bool mode)
 

Unique IP

Int32 GetUniqueIP (void)
 
void SetUniqueIP (Int32 ip)
 

Tag

BaseTagGetFirstTag (void)
 
BaseTagGetLastTag (void)
 
BaseTagGetTag (Int32 type, Int32 nr=0)
 
const void * GetTagDataR (Int32 type, Int32 nr=0) const
 
void * GetTagDataW (Int32 type, Int32 nr=0)
 
Int32 GetTagDataCount (Int32 type) 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)
 

Cache

BaseObjectGetCache (HierarchyHelp *hh=nullptr)
 
BaseObjectGetDeformCache (void)
 
LineObjectGetIsoparm (void)
 
void SetIsoparm (LineObject *l)
 
BaseObjectGetCacheParent (void)
 

Phong

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

Dirty

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

Color Properties

void GetColorProperties (ObjectColorProperties *prop)
 
void SetColorProperties (ObjectColorProperties *prop)
 

Modeling Axis

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

Hierarchy Clone

BaseObjectGetAndCheckHierarchyClone (HierarchyHelp *hh, BaseObject *op, HIERARCHYCLONEFLAGS flags, Bool *dirty, AliasTrans *trans, Bool allchildren)
 
BaseObjectGetHierarchyClone (HierarchyHelp *hh, BaseObject *op, HIERARCHYCLONEFLAGS flags, Bool *dirty, AliasTrans *trans)
 
BaseObjectGetHierarchyClone (HierarchyHelp *hh, BaseObject *op, HIERARCHYCLONEFLAGS flags, Bool *dirty, AliasTrans *trans, DIRTYFLAGS dirtyflags)
 

Dependence List

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

Rotation Order

void SetRotationOrder (ROTATIONORDER order)
 
ROTATIONORDER GetRotationOrder (void) const
 

Synchronized Rotation Mode

void SetQuaternionRotationMode (Bool active, Bool bUndo)
 
Bool IsQuaternionRotationMode (void)
 
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 ()
 
Int32 GetHighlightHandle (BaseDraw *bd)
 
SplineObjectGetRealSpline (void)
 
Float GetVisibility (Float parent)
 
Bool SearchHierarchy (BaseObject *op)
 

Private

BaseObjectGetOrigin (Bool safe)
 
void SetOrigin (BaseObject *origin)
 
BaseObjectGetTopOrigin (Bool parent, Bool safe)
 
BaseObjectGetEditObject (BaseObject **psds, DISPLAYEDITSTATE state)
 
void RemoveFromCache (void)
 

Additional Inherited Members

- Public Member Functions inherited from BaseList2D
BaseList2DGetNext (void)
 
BaseList2DGetPred (void)
 
void SetBit (Int32 mask)
 
Bool GetBit (Int32 mask) const
 
void DelBit (Int32 mask)
 
void ToggleBit (Int32 mask)
 
Int32 GetAllBits (void) const
 
void SetAllBits (Int32 bits)
 
BaseContainer GetData (void)
 
void SetData (const BaseContainer &bc, Bool add=true)
 
const BaseContainerGetDataInstance (void) const
 
BaseContainerGetDataInstance (void)
 
const BaseContainerGetDataInstanceRef (void) const
 
BaseContainerGetDataInstanceRef (void)
 
const StringGetName (void) const
 
void SetName (const String &name)
 
String GetBubbleHelp (void)
 
Bool TransferGoal (BaseList2D *dst, Bool undolink)
 
Bool TransferMarker (BaseList2D *dst) const
 
Bool Scale (Float scale)
 
Bool Edit (void)
 
void GetIcon (IconData *dat)
 
GeListHeadGetNLARoot (void)
 
BaseList2DAnimationLayerRemap (BaseObject **layer=nullptr)
 
const StringGetTypeName (void)
 
BaseList2DGetMain (void) const
 
void InsertTrackSorted (CTrack *track)
 
Bool AddEventNotification (BaseList2D *bl, NOTIFY_EVENT eventid, NOTIFY_EVENT_FLAG flags, const BaseContainer *data)
 
Bool RemoveEventNotification (BaseDocument *doc, BaseList2D *bl, NOTIFY_EVENT eventid)
 
Bool FindEventNotification (BaseDocument *doc, BaseList2D *bl, NOTIFY_EVENT eventid)
 
Bool SetDescIDState (const DescID &id, DESCIDSTATE descidstate)
 
DESCIDSTATE GetDescIDState (const DescID &id, Bool tolerant) const
 
GeListHeadGetOverrideRoot (void)
 
BaseOverrideGetFirstOverride (void)
 
GeListHeadGetShaderRepositoryRoot (void)
 
void GetMarkerStampEx (UInt32 *l1, UInt32 *l2)
 
const GeMarkerGetMarker (void) 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 (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)
 
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 (BaseDocument *doc)
 
Bool SetLayerObject (LayerObject *layer)
 
const LayerDataGetLayerData (BaseDocument *doc, Bool rawdata=false)
 
Bool SetLayerData (BaseDocument *doc, const LayerData &data)
 
GeListHeadGetCTrackRoot (void)
 
CTrackGetFirstCTrack (void)
 
CTrackFindCTrack (const DescID &id)
 
- Public Member Functions inherited from GeListNode
GeListNodeGetNext (void)
 
GeListNodeGetPred (void)
 
GeListNodeGetDown (void)
 
GeListNodeGetUp (void)
 
GeListNodeGetDownLast (void)
 
void InsertBefore (GeListNode *bl)
 
void InsertAfter (GeListNode *bl)
 
void InsertUnder (GeListNode *bl)
 
void InsertUnderLast (GeListNode *bl)
 
void Remove (void)
 
GeListHeadGetListHead (void)
 
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 (void)
 
BaseDocumentGetDocument (void)
 
Int32 GetBranchInfo (BranchInfo *info, Int32 max, GETBRANCHINFO flags)
 
Bool IsDocumentRelated (void)
 
Int32 GetInfo (void)
 
Bool GetNBit (NBIT bit) const
 
Bool ChangeNBit (NBIT bit, NBITCONTROL bitmode)
 
- Public Member Functions inherited from C4DAtom
Int32 GetType (void) const
 
Int32 GetRealType (void) const
 
Int32 GetDiskType (void) const
 
Bool IsInstanceOf (Int32 id) const
 
Int32 GetClassification (void) const
 
Bool Message (Int32 type, void *data=nullptr)
 
Bool MultiMessage (MULTIMSG_ROUTE flags, Int32 type, void *data)
 
C4DAtomGetClone (COPYFLAGS flags, AliasTrans *trn)
 
Bool CopyTo (C4DAtom *dst, COPYFLAGS flags, AliasTrans *trn)
 
Bool Read (HyperFile *hf, Int32 id, Int32 level)
 
Bool Write (HyperFile *hf)
 
Bool ReadObject (HyperFile *hf, Bool readheader)
 
Bool WriteObject (HyperFile *hf)
 
Bool GetDescription (Description *description, DESCFLAGS_DESC flags)
 
Bool GetParameter (const DescID &id, GeData &t_data, DESCFLAGS_GET flags)
 
Bool SetParameter (const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
 
DynamicDescriptionGetDynamicDescription ()
 
Bool GetEnabling (const DescID &id, const GeData &t_data, DESCFLAGS_ENABLE flags, const BaseContainer *itemdesc)
 
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)
 
- Static Public Member Functions inherited from BaseList2D
static BaseList2DAlloc (Int32 type)
 
static void Free (BaseList2D *&bl)
 

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()

BaseObject* GetNext ( void  )

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.

§ GetPred()

BaseObject* GetPred ( void  )

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.

§ GetUp()

BaseObject* GetUp ( void  )

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.

§ GetDown()

BaseObject* GetDown ( void  )

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.

§ GetDownLast()

BaseObject* GetDownLast ( void  )

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.

§ 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 article Freeze Transformation
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 article Freeze Transformation
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 article Freeze Transformation
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 article Freeze Transformation
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 article Freeze Transformation
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 article Freeze Transformation
Parameters
[in]vThe object's absolute HPB rotation to set.

§ GetFrozenPos()

Vector GetFrozenPos ( ) const

Gets the frozen position of the object.

See also
The article Freeze Transformation
Returns
The object's frozen position.

§ SetFrozenPos()

void SetFrozenPos ( const Vector v)

Sets the frozen position of the object.

See also
The article Freeze Transformation
Parameters
[in]vThe object's frozen position to set.

§ GetFrozenScale()

Vector GetFrozenScale ( ) const

Gets the frozen scale of the object.

See also
The article Freeze Transformation
Returns
The object's frozen scale.

§ SetFrozenScale()

void SetFrozenScale ( const Vector v)

Sets the frozen scale of the object.

See also
The article Freeze Transformation
Parameters
[in]vThe object's frozen scale to set.

§ GetFrozenRot()

Vector GetFrozenRot ( ) const

Gets the frozen HPB rotation of the object.

See also
The article Freeze Transformation
Returns
The object's frozen HPB rotation.

§ SetFrozenRot()

void SetFrozenRot ( const Vector v)

Sets the frozen HPB rotation of the object.

See also
The article Freeze Transformation
Parameters
[in]vThe object's frozen HPB rotation to set.

§ GetRelPos()

Vector GetRelPos ( ) const

Get the relative position of the object.

See also
The article Freeze Transformation
Returns
The object's relative position.

§ SetRelPos()

void SetRelPos ( const Vector v)

Sets the relative position of the object.

See also
The article Freeze Transformation
Parameters
[in]vThe object's relative position to set.

§ GetRelScale()

Vector GetRelScale ( ) const

Gets the relative scale of the object.

See also
The article Freeze Transformation
Returns
The object's relative scale.

§ SetRelScale()

void SetRelScale ( const Vector v)

Sets the relative scale of the object.

See also
The article Freeze Transformation
Parameters
[in]vThe object's relative scale to set.

§ GetRelRot()

Vector GetRelRot ( ) const

Gets the relative HPB rotation of the object.

See also
The article Freeze Transformation
Returns
The object's relative scale.

§ SetRelRot()

void SetRelRot ( const Vector v)

Sets the relative HPB rotation of the object.

See also
The article Freeze Transformation
Parameters
[in]vThe object's relative rotation to set.

§ GetMl()

const Matrix& GetMl ( void  ) 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 article Freeze Transformation
Returns
The object's frozen and normalized matrix.

§ GetRelMln()

Matrix GetRelMln ( ) const

Gets the relative and normalized matrix of the object.

See also
The article Freeze Transformation
Returns
The object's relative and normalized matrix.

§ GetRelMl()

Matrix GetRelMl ( ) const

Gets the relative matrix of the object.

See also
The article Freeze Transformation
Returns
The object's relative matrix.

§ SetRelMl()

void SetRelMl ( const Matrix m)

Sets the relative matrix of the object.

See also
The article Freeze Transformation
Parameters
[in]mThe object's relative matrix to set.

§ GetMg()

Matrix GetMg ( void  ) 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)

Copies the object's matrix to another object.

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

§ GetMp()

Vector GetMp ( void  )

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

Returns
The bounding box center.

§ GetRad()

Vector GetRad ( void  )

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.

§ GetEditorMode()

Int32 GetEditorMode ( void  )

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 ( void  )

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 ( void  )

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.

§ GetUniqueIP()

Int32 GetUniqueIP ( void  )

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);

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);
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()

BaseTag* GetFirstTag ( void  )

Gets the first tag associated with the object.

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

§ GetLastTag()

BaseTag* GetLastTag ( void  )

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.

§ GetTag()

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.

§ 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.

§ 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 
)

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()

BaseObject* GetCache ( HierarchyHelp hh = nullptr)

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)
{
if (tp)
{
DoRecursion(tp);
}
else
{
tp = op->GetCache(nullptr);
if (tp)
{
DoRecursion(tp);
}
else
{
{
{
...
}
}
}
}
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()
Parameters
[in]hhA hierarchy help, usually passed from the calling method parameters, for example ObjectData::GetVirtualObjects(). The caller owns the pointed hierarchy help.
Usually nullptr. Only for some special cases a hierarchy help must be passed.
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()

BaseObject* GetDeformCache ( void  )

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:

cache_arraycube1.png

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:

cache_arraycube2.png

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

cache_arraycube3.png

From these the deformer object generates a deformed polygon cache:

cache_arraycube4.png

So the final hierarchy is:

cache_arraycube5.png

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 ( void  )

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 ( void  )

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.

§ 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)

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 ( HierarchyHelp hh)

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 ( void  )

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

§ GetColorProperties()

void GetColorProperties ( ObjectColorProperties prop)

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.

§ 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);
}
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()

BaseObject* GetAndCheckHierarchyClone ( 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 ( 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 ( 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 ( void  )

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

§ CompareDependenceList()

Bool CompareDependenceList ( void  )

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 ( HierarchyHelp hh,
BaseObject op 
)

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

Parameters
[in]hhUsually passed from a calling method, for example from ObjectData::GetVirtualObjects(). The caller owns the pointed hierarchy help.
[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 ( HierarchyHelp hh,
BaseObject op,
DIRTYFLAGS  dirtyflags 
)

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

Since
R19
Parameters
[in]hhUsually passed from a calling method, for example from ObjectData::GetVirtualObjects(). The caller owns the pointed hierarchy help.
[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 ( void  )

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 ( void  ) 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 ( void  )

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 successfull, 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 successfull, 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 successfull, 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 successfull, otherwise false.

§ GetGUID()

UInt64 GetGUID ( )

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()

SplineObject* GetRealSpline ( void  )

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.

§ GetVisibility()

Float GetVisibility ( Float  parent)

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 ( BaseObject op)

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()

BaseObject* GetOrigin ( Bool  safe)

Private.

§ SetOrigin()

void SetOrigin ( BaseObject origin)

Private.

§ GetTopOrigin()

BaseObject* GetTopOrigin ( Bool  parent,
Bool  safe 
)

Private.

§ GetEditObject()

BaseObject* GetEditObject ( BaseObject **  psds,
DISPLAYEDITSTATE  state 
)

Private.

§ RemoveFromCache()

void RemoveFromCache ( void  )

Private.