内容表
关于
BaseObject
is the base class of all scene objects of
Cinema 4D
. These objects can be polygon objects, splines, generators, deformers, effectors, cameras, lights or objects like the "Sky" or "Background" object.
BaseObject
objects are an instance of
Obase
.
A
BaseObject
may be also a:
另请参阅
Flags
.
Access
BaseObject
objects are typically stored in and accessed from a
BaseDocument
:
见
BaseDocument
对象
and
选择
.
// This example searches for an object named "Cube".
// If it cannot be found a new cube with that name will be created.
BaseObject
*
const
object
= doc->
SearchObject
(
"Cube"
_s);
if
(
object
!=
nullptr
)
{
ApplicationOutput
(
"found \"Cube\""
_s);
return
maxon::OK
;
}
BaseObject
*
const
cubeObject =
BaseObject::Alloc
(
Ocube
);
if
(cubeObject ==
nullptr
)
return
maxon::OutOfMemoryError(
MAXON_SOURCE_LOCATION
);
cubeObject->
SetName
(
"Cube"
_s);
doc->
InsertObject
(cubeObject,
nullptr
,
nullptr
);
Allocation/Deallocation
BaseObject
objects are created with the usual tools:
The object IDs of many build-in object types are defined in
Object Types
.
// This example shows how to create a new "Cube" object and how to insert it into the document.
BaseDocument
*
const
document =
GetActiveDocument
();
if
(document ==
nullptr
)
return
maxon::UnexpectedError(
MAXON_SOURCE_LOCATION
);
BaseObject
*
const
cubeObject =
BaseObject::Alloc
(
Ocube
);
if
(cubeObject ==
nullptr
)
return
maxon::OutOfMemoryError(
MAXON_SOURCE_LOCATION
);
cubeObject->
SetName
(
"This is a new object"
_s);
document->
InsertObject
(cubeObject,
nullptr
,
nullptr
);
EventAdd
();
Primitive objects can also be created with these dedicated functions:
New objects are typically added to a
BaseDocument
that takes ownership:
// This example accesses the currently active object.
// If an object is found a new Sphere is created and inserted under the found object.
BaseObject
*
const
parentObject = doc->
GetActiveObject
();
if
(parentObject ==
nullptr
)
return
maxon::IllegalArgumentError(
MAXON_SOURCE_LOCATION
);
BaseObject
*
const
newSphere =
BaseObject::Alloc
(
Osphere
);
if
(newSphere ==
nullptr
)
return
maxon::OutOfMemoryError(
MAXON_SOURCE_LOCATION
);
newSphere->
InsertUnder
(parentObject);
移除
A
BaseObject
can be removed from the host
BaseDocument
:
// The example removes the active object from the document.
BaseObject
*
object
= doc->
GetActiveObject
();
if
(
object
==
nullptr
)
return
maxon::IllegalArgumentError(
MAXON_SOURCE_LOCATION
);
object
->Remove();
BaseObject::Free
(
object
);
Navigate
BaseObject
elements are organized in a tree. The usual functions can be used to navigate in that tree:
另请参阅
Navigation in Lists and Trees
.
// This example function iterates through all objects
// of the object tree defined by the given BaseObject.
static
void
CheckObjects(
BaseObject
* obj)
{
while
(obj !=
nullptr
)
{
ApplicationOutput
(
"Object Name: "
+ obj->
GetName
());
CheckObjects(obj->
GetDown
());
obj = obj->
GetNext
();
}
}
Read-Only Properties
Bounding Box
The bounding box defines the dimensions of a
BaseObject
.
// This example creates a cube with the size of the bounding box.
const
向量
bbCenter =
object
->GetMp();
const
向量
bbRadius =
object
->GetRad();
BaseObject
*
const
cube =
BaseObject::Alloc
(
Ocube
);
if
(cube ==
nullptr
)
return
maxon::OutOfMemoryError(
MAXON_SOURCE_LOCATION
);
cube->
SetParameter
(
DescID
(
PRIM_CUBE_LEN
), bbRadius * 2.0,
DESCFLAGS_SET::NONE
);
cube->
SetParameter
(
DescID
(
ID_BASEOBJECT_REL_POSITION
), bbCenter,
DESCFLAGS_SET::NONE
);
cube->
InsertUnder
(
object
);
缓存
Generator objects store virtual child objects in a cache. If a deformer is applied, the deformed child objects are found in the deform cache.
// This function can be used to recursively search the cache
// of a given BaseObject for polygon objects.
static
void
DoRecursion(
BaseObject
* op)
{
// Check the deform cache
BaseObject
* tp = op->
GetDeformCache
();
if
(tp)
{
DoRecursion(tp);
}
else
{
// check the cache
tp = op->
GetCache
(
nullptr
);
if
(tp)
{
DoRecursion(tp);
}
else
{
// check if generator
if
(!op->
GetBit
(
BIT_CONTROLOBJECT
))
{
// check if polygon object
if
(op->
IsInstanceOf
(
Opolygon
))
{
ApplicationOutput
(
"Found polygon data"
_s);
}
}
}
}
// loop through child objects
for
(tp = op->
GetDown
(); tp; tp = tp->
GetNext
())
{
DoRecursion(tp);
}
}
另请参阅
Generating
.
杂项
Further functions are:
// This example casts the given BaseObject into SplineObject
// if it is a spline or if it is a spline generator.
SplineObject
* spline =
nullptr
;
// check if the object is a "Spline" object
if
(object->
IsInstanceOf
(
Ospline
))
spline =
ToSpline
(
object
);
// check if the object is a spline generator
else
if
(object->
GetInfo
() &
OBJECT_ISSPLINE
)
spline =
object
->
GetRealSpline
();
if
(spline !=
nullptr
)
ApplicationOutput
(
"Spline Object: "
+ spline->
GetName
());
特性
参数
The basic parameters IDs of a
BaseObject
are defined in
obase.h
. They can be changed using
C4DAtom::SetParameter()
and
C4DAtom::GetParameter()
. For several properties dedicated functions exist.
PSR
The placement of an object is defined by its position, scale and rotation (PSR). Freeze Transformations allow to define a default or reset value. In short, the absolute value is the frozen value plus the relative value.
-
注意
-
The "absolute" values are not the world space values.
These functions give access to the "absolute" values:
These functions give access to the "frozen" values:
These functions give access to the "relative" values:
These functions are used to access the local and global Matrix of an object:
// This example reads the global matrix of the given object
// and applies it to the newly created BaseObject.
const
矩阵
mg =
object
->GetMg();
BaseObject
*
const
cube =
BaseObject::Alloc
(
Ocube
);
if
(cube ==
nullptr
)
return
maxon::OutOfMemoryError(
MAXON_SOURCE_LOCATION
);
doc->
InsertObject
(cube,
nullptr
,
nullptr
);
cube->
SetMg
(mg);
另请参阅
Vector Manual (Classic)
and
Matrix Manual (Classic)
.
Visibility
A
BaseObject
may or may not be visible in the editor and rendered output.
The modes are:
-
MODE_ON
: The object is enabled regardless of the state of any parent object.
-
MODE_OFF
: The object is disabled regardless of the state of any parent object.
-
MODE_UNDEF
: The object is enabled by default, but the state of any parent object is used if it is enabled or disabled.
// This example synchronizes editor and render mode if the render mode is off.
const
Int32
mode =
object
->GetRenderMode();
if
(mode ==
MODE_OFF
)
object
->SetEditorMode(
MODE_OFF
);
-
注意
-
CheckEditorVisibility()
checks the editor mode effect and layer settings of the given object, see
Utility
.
Generator / Deformer enabled
If an object is a generator or deformer it can be enabled or disabled:
// This example checks if the given object is a SDS.
// If so it gets disabled.
// check if the object is a
// "Subdivision Surface"
if
(object->
IsInstanceOf
(
Osds
))
{
object
->SetDeformMode(
false
);
}
Tags
A
BaseObject
can host a variable number of tags. These tags add additional functionality and data to the object.
另请参阅
BaseTag and VariableTag Manual
.
-
警告
-
Since R17 the Take System can add and own tags. See
Take System Overview
.
Existing tags can be accessed with:
// This example loops through the tags of the given object.
BaseTag
* tag =
object
->GetFirstTag();
while
(tag !=
nullptr
)
{
ApplicationOutput
(
"Tag: "
+ tag->
GetName
());
tag = tag->
GetNext
();
}
New tags can be created:
// This example checks if the given object owns a "Protection" tag.
// If not, the "Protection" tag is created.
BaseTag
* protectionTag =
object
->GetTag(
Tprotection
);
if
(protectionTag ==
nullptr
)
{
protectionTag =
object
->MakeTag(
Tprotection
);
if
(protectionTag ==
nullptr
)
return
maxon::OutOfMemoryError(
MAXON_SOURCE_LOCATION
);
}
and
// This example adds a Phong tag to the given object.
object
->SetPhong(
true
,
true
,
DegToRad
(60.0));
Further tag related functionality:
// This example removes all "Annotation" tags from the given object.
// loop until no "Annotation" tag can be found anymore
while
(object->
GetTag
(
Tannotation
))
{
object
->KillTag(
Tannotation
);
}
颜色
A
BaseObject
can have an assigned color and can be displayed in xray mode:
The settings are:
// This example reads the color settings of the given object.
ObjectColorProperties
objColor;
object
->GetColorProperties(&objColor);
ApplicationOutput
(
"Color: "
+
String::VectorToString
(objColor.
color
));
-
注意
-
To set the color of virtual objects in
ObjectData::GetVirtualObjects()
a generator must be registered with
OBJECT_USECACHECOLOR
,见
Flags
and
Generating
.
Modeling Axis
In certain modeling modes a modeling axis is presented as the result of the current selection.
// This example creates a new cube object using the modeling axis of the given object.
const
矩阵
mat =
object
->GetModelingAxis(doc);
BaseObject
*
const
cube =
BaseObject::Alloc
(
Ocube
);
if
(cube ==
nullptr
)
return
maxon::OutOfMemoryError(
MAXON_SOURCE_LOCATION
);
cube->
SetMg
(mat);
doc->
InsertObject
(cube,
nullptr
,
nullptr
);
-
注意
-
The axis of a multiselection can be obtained from the document, see
BaseDocument
Axis and Plane
.
Generating
A generator object creates virtual and cached
BaseObject
elements in its
ObjectData::GetVirtualObjects()
function. The following
BaseObject
member functions are only used in this context.
While creating the cache one should typically check if the cache is already build:
// This code checks if the cache or the object is dirty.
// If not, the existing cache is returned.
Bool
dirty = op->
CheckCache
(hh) || op->
IsDirty
(
DIRTYFLAGS::DATA
);
if
(!dirty)
return
op->
GetCache
(hh);
另请参阅
缓存
.
Generators can use child objects as input objects (see flag
OBJECT_INPUT
). A generator can check if these child objects are dirty and it can hide them in the viewport. The most simple way is to handle the child objects manually:
// This example checks if the child object is dirty and "touches" it so it will be hidden.
Bool
dirty =
false
;
BaseObject
*
const
childObject = op->
GetDown
();
if
(childObject !=
nullptr
)
{
dirty = childObject->
IsDirty
(
DIRTYFLAGS::MATRIX
|
DIRTYFLAGS::DATA
);
childObject->
Touch
();
}
To handle multiple child objects a dependence list can be used:
// This example adds only the cube child objects to the dependencies list.
op->
NewDependenceList
();
BaseObject
* child = op->
GetDown
();
while
(child !=
nullptr
)
{
// check if the child object is a "Cube" object
if
(child->
GetType
() ==
Ocube
)
{
op->
AddDependence
(hh, child);
}
child = child->
GetNext
();
}
if
(!dirty)
dirty = !op->
CompareDependenceList
();
op->
TouchDependenceList
();
But the most simple way is to use one of these two functions: They will return polygon versions of the child objects and hide them:
-
注意
-
In some special cases (eg, Matrix Object) these functions don't work as expected (eg, wrong dirtiness). In these cases, a custom cache handling is needed.
// This example gets a polygon clone of the first child object.
// If the child object is not dirty, the returned object is the cache.
Bool
dirty =
false
;
BaseObject
*
const
childObject = op->
GetDown
();
if
(childObject !=
nullptr
)
{
const
HIERARCHYCLONEFLAGS
flags =
HIERARCHYCLONEFLAGS::ASPOLY
;
BaseObject
*
const
clone = op->
GetAndCheckHierarchyClone
(hh, childObject, flags, &dirty,
nullptr
,
false
);
if
(!dirty)
return
clone;
// Fill the cache based on the polygon clone.
// ...
If a generator creates multiple child objects each object must be uniquely identifiable. If the flag
OBJECT_UNIQUEENUMERATION
is set each object can receive an unique IP number.
-
注意
-
The unique IP must not be zero.
// This example creates some cube objects with a unique IP.
向量
pos =
向量
(0, 0, 0);
for
(
Int32
i = 1; i < 11; ++i)
{
BaseObject
*
const
cube =
BaseObject::Alloc
(
Ocube
);
if
(cube !=
nullptr
)
{
cube->
InsertUnder
(parent);
cube->
SetAbsPos
(pos);
cube->
SetUniqueIP
(i);
pos.
x
+= 250.0;
}
}
Isoparm lines can be used to display and accentuate certain lines in the viewport.
// This example creates a simple Line object and assigns it to the given polygon object.
LineObject
*
const
lineObject =
LineObject::Alloc
(2, 1);
if
(lineObject !=
nullptr
)
{
Segment
*
const
segments = lineObject->
GetSegmentW
();
向量
*
const
linePoints = lineObject->
GetPointW
();
// check pointers
if
(segments && linePoints)
{
segments[0].
cnt
= 2;
linePoints[0] =
向量
(0, 0, 0);
linePoints[1] =
向量
(0, 1000, 0);
lineObject->
消息
(
MSG_UPDATE
);
polyObject->
SetIsoparm
(lineObject);
}
}
Rotation Order
在
Cinema 4D
the rotation of an object is stored as a
向量
. Each component of this vector corresponds to a rotation axis. The rotation result depends on the order in which the rotation is executed. For values see
ROTATIONORDER
.
// This example simply sets the default rotation order.
object
->SetRotationOrder(
ROTATIONORDER::DEFAULT
);
-
注意
-
Typically used with
MatrixToHPB()
and
HPBToMatrix()
。见
Matrix Manual (Classic)
.
The rotation values of an animation can be optimized:
// This example checks the rotation tracks of the given object.
// FindBestEulerAngle() will modify the existing keys to find the best angles.
obj->
FindBestEulerAngle
(
ID_BASEOBJECT_REL_ROTATION
,
true
,
false
);
// animate the object so it uses the new key values
doc->
AnimateObject
(obj, doc->
GetTime
(),
ANIMATEFLAGS::NONE
);
Quaternion Rotation Mode
The (animated) rotation values of an object can be interpolated using quaternions.
// This example checks if the given object uses quaternion interpolation.
// If not quaternion interpolation is enabled.
// check if the object uses quaternion interpolation
if
(obj->
IsQuaternionRotationMode
() ==
false
)
{
// turn on quaternion interpolation.
// this will update the rotation animation tracks
obj->
SetQuaternionRotationMode
(
true
,
false
);
}
The use of quaternion interpolation can be forced with:
Animation Tracks
These utility functions allow fast access to the animation tracks and curves of an animated
向量
parameter. See
动画概述
.
-
注意
-
This is typically used with synchronized tracks, see
CTrack
Synchronisation
.
// This example accesses the subtracks of the object's position track.
const
DescID
positionTrack {
DescLevel
{
ID_BASEOBJECT_REL_POSITION
,
DTYPE_VECTOR
, 0 } };
CTrack
* trackX =
nullptr
;
CTrack
* trackY =
nullptr
;
CTrack
* trackZ =
nullptr
;
// access track for each vector component
if
(obj->
GetVectorTracks
(positionTrack, trackX, trackY, trackZ))
{
if
(trackX !=
nullptr
)
ApplicationOutput
(
"Track X: "
+ trackX->
GetName
());
if
(trackY !=
nullptr
)
ApplicationOutput
(
"Track Y: "
+ trackY->
GetName
());
if
(trackZ !=
nullptr
)
ApplicationOutput
(
"Track Z: "
+ trackZ->
GetName
());
}
This function is used to handle keys on a
向量
parameter:
动画
An object can be animated using the host
BaseDocument
:
-
注意
-
This function only animates the object based on its keyframes but does not care about expressions or other objects.
另请参阅
BaseDocument
动画
.
转换
Generators create and own virtual child objects. To access these child object one can read the cache of the generator (see
缓存
). Another way is to apply the "Current State to Object" command to the given generator object.
// This example creates a torus object and converts it to a polygon object.
AutoAlloc<BaseDocument>
tempDoc;
if
(tempDoc ==
nullptr
)
return
maxon::OutOfMemoryError(
MAXON_SOURCE_LOCATION
);
BaseObject
*
const
object
=
BaseObject::Alloc
(
Otorus
);
if
(
object
==
nullptr
)
return
maxon::OutOfMemoryError(
MAXON_SOURCE_LOCATION
);
// insert it into the temp doc.
tempDoc->
InsertObject
(
object
,
nullptr
,
nullptr
);
// modify object
object
->SetParameter(
PRIM_TORUS_INNERRAD
, 100.0,
DESCFLAGS_SET::NONE
);
ModelingCommandData
mcd;
mcd.
doc
= tempDoc;
mcd.
op
= object;
// execute the "Current State to Object" modeling command
if
(!
SendModelingCommand
(
MCOMMAND_CURRENTSTATETOOBJECT
, mcd))
return
maxon::UnexpectedError(
MAXON_SOURCE_LOCATION
);
C4DAtom
* atom = mcd.
result
->
GetIndex
(0);
BaseObject
*
const
res =
static_cast<
BaseObject
*
>
(atom);
// check if the result object is a polygon object
if
(res && (res->
GetType
() ==
Opolygon
))
{
doc->
InsertObject
(res,
nullptr
,
nullptr
);
}
Bits
A
BaseObject
can be hidden in the Object Manager or viewport using these bits:
// This example hides the given object in the Object Manager.
object
->ChangeNBit(
NBIT::OHIDE
,
NBITCONTROL::SET
);
Flags
The flags of a
BaseObject
can be accessed with
GeListNode::GetInfo()
. These flags inform about the type of object and its behavior.
Object type:
// This example casts the given BaseObject into SplineObject
// if it is a spline or if it is a spline generator.
SplineObject
* spline =
nullptr
;
// check if the object is a "Spline" object
if
(object->
IsInstanceOf
(
Ospline
))
spline =
ToSpline
(
object
);
// check if the object is a spline generator
else
if
(object->
GetInfo
() &
OBJECT_ISSPLINE
)
spline =
object
->
GetRealSpline
();
if
(spline !=
nullptr
)
ApplicationOutput
(
"Spline Object: "
+ spline->
GetName
());
Generator related flags:
Other flags:
Utility
These utility functions can return the name of the object type or return the object type based on that name.
// This example prints the name of the object type of the given object.
const
Int32
type = obj->
GetType
();
const
String
typeName =
GetObjectName
(type);
ApplicationOutput
(
"Object Type: "
+ typeName);
These functions can be used to check if the given
BaseObject
is visible in the Editor:
// This example checks if the given BaseObject is visible in the active editor view.
BaseDraw
*
const
bd = doc->
GetActiveBaseDraw
();
if
(bd ==
nullptr
)
return
maxon::UnexpectedError(
MAXON_SOURCE_LOCATION
);
const
DISPLAYFILTER
filter = bd->
GetDisplayFilter
();
const
Bool
displayFilter =
CheckDisplayFilter
(
object
, filter);
// check editor visibility
const
Bool
editorVisibiliy =
CheckEditorVisibility
(
object
);
// check if the object is visible in the viewport
if
(displayFilter && editorVisibiliy)
{
ApplicationOutput
(
"The object is visible in the Editor"
_s);
}
else
{
ApplicationOutput
(
"The object is not visible in the Editor"
_s);
}
延伸阅读
#define Opolygon
Polygon - PolygonObject.
定义:
ge_prepass.h:975
Bool IsDirty(DIRTYFLAGS flags)
定义:
c4d_baseobject.h:891
Vector * GetPointW(void)
定义:
c4d_baseobject.h:1432
Bool CheckCache(HierarchyHelp *hh)
定义:
c4d_baseobject.h:905
Bool GetBit(Int32 mask) const
定义:
c4d_baselist.h:2207
Bool IsQuaternionRotationMode(void)
定义:
c4d_baseobject.h:1082
@ DATA
Container changed.
BaseObject * GetDeformCache(void)
定义:
c4d_baseobject.h:837
BaseDocument * GetActiveDocument(void)
BaseObject * GetCache(HierarchyHelp *hh=nullptr)
定义:
c4d_baseobject.h:809
void InsertObject(BaseObject *op, BaseObject *parent, BaseObject *pred, Bool checknames=false)
BaseObject * SearchObject(const maxon::String &str)
AtomArray * result
定义:
operatingsystem.h:828
static LineObject * Alloc(Int32 pcnt, Int32 scnt)
Bool SendModelingCommand(Int32 command, ModelingCommandData &data)
Bool CheckDisplayFilter(BaseObject *op, DISPLAYFILTER filter)
Bool CheckEditorVisibility(BaseObject *op)
#define Ospline
Spline - SplineObject.
定义:
ge_prepass.h:976
void SetUniqueIP(Int32 ip)
定义:
lib_description.h:327
#define ToSpline(op)
Casts a BaseObject* to a SplineObject*.
定义:
c4d_baseobject.h:2177
@ ID_BASEOBJECT_REL_POSITION
定义:
obase.h:12
void NewDependenceList(void)
Starts a new dependence list. Enables to keep track of changes made to any children.
void SetMg(const Matrix &m)
定义:
c4d_baseobject.h:488
DISPLAYFILTER
定义:
ge_prepass.h:4279
#define Tannotation
Annotation.
定义:
ge_prepass.h:1242
return OK
定义:
apibase.h:2532
#define Ocube
Cube.
定义:
ge_prepass.h:1040
#define MAXON_SOURCE_LOCATION
定义:
memoryallocationbase.h:66
#define Tprotection
Protection.
定义:
ge_prepass.h:1238
BaseDraw * GetActiveBaseDraw(void)
BaseObject * GetNext(void)
定义:
c4d_baseobject.h:256
void SetIsoparm(LineObject *l)
void Touch(void)
Marks object to be used by generator. Automatically resets dirty values for use with IsDirty().
void AnimateObject(BaseList2D *op, const BaseTime &time, ANIMATEFLAGS flags)
#define Osphere
Sphere.
定义:
ge_prepass.h:1041
#define MSG_UPDATE
Must be sent if the bounding box has to be recalculated. (Otherwise use MSG_CHANGE....
定义:
c4d_baselist.h:340
@ ASPOLY
Objects cloned as polygons. (Used by e.g. HyperNURBS.)
A helper object for SendModelingCommand().
定义:
operatingsystem.h:805
@ DEFAULT
Default order (HPB).
Bool SetParameter(const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
void SetQuaternionRotationMode(Bool active, Bool bUndo)
定义:
c4d_baseobject.h:1075
String GetObjectName(Int32 type)
BaseTime GetTime(void) const
@ DTYPE_VECTOR
向量
定义:
lib_description.h:70
Represents a level within a DescID.
定义:
lib_description.h:286
SplineObject * GetRealSpline(void)
Bool FindBestEulerAngle(Int32 rotationTrackID, Bool bAdjustTangent, Bool bUndo, BaseTime startRange=BaseTime(-108000, 1), BaseTime endRange=BaseTime(108000, 1))
Bool GetVectorTracks(const DescID &id, CTrack *&xfound, CTrack *&yfound, CTrack *&zfound)
#define Osds
SDS (HyperNURBS) - SDSObject.
定义:
ge_prepass.h:1079
Represents a Spline segment data.
定义:
c4d_baseobject.h:158
@ PRIM_CUBE_LEN
定义:
ocube.h:6
void SetName(const maxon::String &name)
定义:
c4d_baselist.h:2324
maxon::Int32 Int32
定义:
ge_sys_math.h:58
void AddDependence(HierarchyHelp *hh, BaseObject *op)
#define ApplicationOutput(formatString,...)
定义:
debugdiagnostics.h:207
Segment * GetSegmentW(void)
定义:
c4d_baseobject.h:1530
Bool Message(Int32 type, void *data=nullptr)
定义:
c4d_baselist.h:1394
BaseObject * GetDown(void)
定义:
c4d_baseobject.h:274
BaseObject * op
The input object. Use arr for multiple objects.
定义:
operatingsystem.h:819
#define Otorus
Torus.
定义:
ge_prepass.h:1044
BaseTag * GetTag(Int32 type, Int32 nr=0)
定义:
c4d_baseobject.h:674
Int32 cnt
The number of points in the segment.
定义:
c4d_baseobject.h:160
maxon::Vec3< maxon::Float64, 1 > Vector
定义:
ge_math.h:145
BaseObject * GetAndCheckHierarchyClone(HierarchyHelp *hh, BaseObject *op, HIERARCHYCLONEFLAGS flags, Bool *dirty, AliasTrans *trans, Bool allchildren)
static BaseObject * Alloc(Int32 type)
void EventAdd(EVENT eventflag=EVENT::NONE)
Data structure for object color properties.
定义:
c4d_baseobject.h:167
static void Free(BaseObject *&bl)
#define MCOMMAND_CURRENTSTATETOOBJECT
Current state to object (returns object): MDATA_CURRENTSTATETOOBJECT.
定义:
ge_prepass.h:1410
Represents a spline object.
定义:
c4d_baseobject.h:2009
@ PRIM_TORUS_INNERRAD
定义:
otorus.h:7
#define MODE_OFF
The object is disabled regardless of the state of any parent object.
定义:
c4d_baseobject.h:36
maxon::Bool Bool
定义:
ge_sys_math.h:53
Bool CompareDependenceList(void)
BaseTag * GetNext(void)
定义:
c4d_basetag.h:78
BaseObject * GetActiveObject(void)
BaseDocument * doc
定义:
operatingsystem.h:817
Bool IsInstanceOf(Int32 id) const
定义:
c4d_baselist.h:1373
String GetName() const
定义:
c4d_baselist.h:2318
定义:
c4d_baseobject.h:1491
void SetAbsPos(const Vector &v)
定义:
c4d_baseobject.h:304
#define OBJECT_ISSPLINE
Spline object.
定义:
ge_prepass.h:898
#define BIT_CONTROLOBJECT
Internal bit set by generators.
定义:
ge_prepass.h:853
static String VectorToString(const Vector32 &v, Int32 nnk=-1)
定义:
c4d_string.h:571
Vector color
The color.
定义:
c4d_baseobject.h:170
Int32 GetType() const
定义:
c4d_baselist.h:1348
void TouchDependenceList(void)
Marks all the objects in the dependence list to be replaced by the generator.
@ ID_BASEOBJECT_REL_ROTATION
定义:
obase.h:13
void InsertUnder(GeListNode *bl)
定义:
c4d_baselist.h:1835
定义:
c4d_basedocument.h:490
HIERARCHYCLONEFLAGS
定义:
ge_prepass.h:3142
DISPLAYFILTER GetDisplayFilter() const
定义:
c4d_basedraw.h:1588
Float32 DegToRad(Float32 r)
定义:
apibasemath.h:247
@ OHIDE
Hide object/tag in Object Manager or material in Material Manager.
C4DAtom * GetIndex(Int32 idx) const
定义:
c4d_baselist.h:1634