LodObject Manual

内容表

关于

A LodObject represents a LOD (level of detail) object generator. This generator creates geometry based on various parameters e.g. camera distance. The LodObject class provides access to the parameters of the dynamically defined levels. It is defined in the lib_lodobject.h header file.

LodObject objects are an instance of Olod .

Access

A LodObject object is a BaseObject and can be accessed like any other object. See BaseObject Manual .

Allocation/Deallocation

LodObject objects are created with the usual tools, see Entity Creation and Destruction Manual (Classic) .

// This example creates a new LOD object and adds it to the given BaseDocument.
LodObject * const lodObject = LodObject::Alloc (); if (lodObject == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION );
lodObject-> SetName ( "New LOD Object" _s); doc-> InsertObject (lodObject, nullptr , nullptr );

特性

The standard parameters of a LodObject can be obtained and changed with C4DAtom::SetParameter() / C4DAtom::GetParameter() . The parameter IDs are defined in olod.h .

// This example checks the current criteria of the given LOD object. // If it is "User LOD Level" the current level is set to the maximum level.

// get current criteria GeData data; lodObject-> GetParameter ( LOD_CRITERIA , data, DESCFLAGS_GET::NONE ); const Int32 criteria = data. GetInt32 ();

// check if User LOD Level if (criteria == LOD_CRITERIA_MANUAL ) { // get max level const Int32 maxLevel = lodObject-> GetLevelCount () - 1; // set current level to max level lodObject-> SetParameter ( LOD_CURRENT_LEVEL , maxLevel, DESCFLAGS_SET::NONE ); }

Levels

A LodObject object handles multiple levels. The current level is used to define the geometry it should create.

// This example hides the objects of the current level.

// get current level const Int32 currentLevel = lodObject-> GetCurrentLevel ();

// hide current level DescID showControlID; if (!lodObject-> GetShowControlDescID (currentLevel, showControlID)) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION ); lodObject-> SetParameter (showControlID, false , DESCFLAGS_SET::NONE );

Dynamic Parameter IDs

Each level contains multiple parameters that configure that level. The DescID for these parameters can be obtained with these functions.

In every mode a level defines various display parameters:

The IDs of the shading modes and styles are defined in tdisplay.h .

// This example configures the display settings for each level. const Int32 maxLevel = lodObject-> GetLevelCount (); for ( Int32 level = 0; level < maxLevel; ++level) { DescID descID;

// enable backface culling if (!lodObject-> GetDisplayBFCDescID (level, descID)) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION ); lodObject-> SetParameter (descID, true , DESCFLAGS_SET::NONE );

// use "Lines" shading if (!lodObject-> GetDisplayShModeDescID (level, descID)) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION ); lodObject-> SetParameter (descID, DISPLAYTAG_SDISPLAY_NOSHADING , DESCFLAGS_SET::NONE );

// use "Wireframe" style if (!lodObject-> GetDisplayStModeDescID (level, descID)) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION ); lodObject-> SetParameter (descID, DISPLAYTAG_WDISPLAY_WIREFRAME , DESCFLAGS_SET::NONE ); }

In "Manual Groups" mode a list of objects can be accessed:

// This example configures the given LodObject to use "Manual Groups". // The objects referenced in the "objects" AtomArray are moved under // the LodObject and are referenced in each group.

// use "Manual Groups" and a manually defined number of groups lodObject-> SetParameter ( LOD_MODE , LOD_MODE_MANUAL_GROUPS , DESCFLAGS_SET::NONE ); lodObject-> SetParameter ( LOD_CRITERIA , LOD_CRITERIA_MANUAL , DESCFLAGS_SET::NONE ); lodObject-> SetParameter ( LOD_LEVEL_COUNT_DYN , objectCount, DESCFLAGS_SET::NONE );

// add objects to groups for ( Int32 level = 0; level < objectCount; ++level) { // get object C4DAtom * const atom = objects-> GetIndex (level); BaseObject * const baseObject = static_cast< BaseObject * > (atom); if (baseObject == nullptr ) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION );

// make object a child object of the LOD object baseObject-> 移除 (); doc-> InsertObject (baseObject, lodObject, nullptr );

// insert into "Objects" list of the given level DescID listID; if (!lodObject-> GetManualModeObjectListDescID (level, listID)) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION );

// create InEx data GeData data( CUSTOMDATATYPE_INEXCLUDE_LIST , DEFAULTVALUE ); CustomDataType * const customData = data. GetCustomDataType ( CUSTOMDATATYPE_INEXCLUDE_LIST ); InExcludeData * const inExData = static_cast< InExcludeData * > (customData); if (inExData == nullptr ) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION );

// insert object into list inExData-> InsertObject (baseObject, 1); // set parameter lodObject-> SetParameter (listID, data, DESCFLAGS_SET::NONE ); }

In "Simplify" mode these settings are available:

The null display mode setting IDs are defined in onull.h .

// This example configures the given LodObject to use the "Simplify" mode. // The first level uses the "Convex Hull" mode, the second the "Null" mode.

// use "Simplify" mode and a manual number of levels lodObject-> SetParameter ( LOD_MODE , LOD_MODE_SIMPLIFY , DESCFLAGS_SET::NONE ); lodObject-> SetParameter ( LOD_CRITERIA , LOD_CRITERIA_MANUAL , DESCFLAGS_SET::NONE ); lodObject-> SetParameter ( LOD_LEVEL_COUNT_DYN , 2, DESCFLAGS_SET::NONE ); DescID descID;

// first level

// set mode to "Convex Hull" if (!lodObject-> GetSimplifyModeDescID (0, descID)) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION ); lodObject-> SetParameter (descID, LOD_SIMPLIFY_CONVEXHULL , DESCFLAGS_SET::NONE );

// set "Per Object" to true if (!lodObject-> GetPerObjectControlDescID (0, descID)) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION ); lodObject-> SetParameter (descID, true , DESCFLAGS_SET::NONE );

// second level

// set mode to "Null" if (!lodObject-> GetSimplifyModeDescID (1, descID)) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION ); lodObject-> SetParameter (descID, LOD_SIMPLIFY_NULL , DESCFLAGS_SET::NONE );

// set "Display" to "Circle" if (!lodObject-> GetNullDisplayDescID (1, descID)) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION ); lodObject-> SetParameter (descID, NULLOBJECT_DISPLAY_CIRCLE , DESCFLAGS_SET::NONE );

Dirty Checksums

The dirty checksum of levels and the cache can be obtained with:

延伸阅读

LodObject::GetDisplayBFCDescID
Bool GetDisplayBFCDescID(Int32 level, DescID &resultId) const
BaseDocument::InsertObject
void InsertObject(BaseObject *op, BaseObject *parent, BaseObject *pred, Bool checknames=false)
LodObject::GetNullDisplayDescID
Bool GetNullDisplayDescID(Int32 level, DescID &resultId) const
LodObject::GetPerObjectControlDescID
Bool GetPerObjectControlDescID(Int32 level, DescID &resultId) const
BaseObject
定义: c4d_baseobject.h:224
LOD_CRITERIA
@ LOD_CRITERIA
定义: olod.h:7
DescID
定义: lib_description.h:327
LodObject::GetDisplayShModeDescID
Bool GetDisplayShModeDescID(Int32 level, DescID &resultId) const
LOD_CURRENT_LEVEL
@ LOD_CURRENT_LEVEL
定义: olod.h:9
MAXON_SOURCE_LOCATION
#define MAXON_SOURCE_LOCATION
定义: memoryallocationbase.h:66
DISPLAYTAG_WDISPLAY_WIREFRAME
@ DISPLAYTAG_WDISPLAY_WIREFRAME
定义: tdisplay.h:31
LodObject
定义: lib_lodobject.h:37
LodObject::GetShowControlDescID
Bool GetShowControlDescID(Int32 level, DescID &resultId) const
DESCFLAGS_SET::NONE
@ NONE
None.
CUSTOMDATATYPE_INEXCLUDE_LIST
#define CUSTOMDATATYPE_INEXCLUDE_LIST
InExclude custom data type ID.
定义: customgui_inexclude.h:25
LodObject::GetDisplayStModeDescID
Bool GetDisplayStModeDescID(Int32 level, DescID &resultId) const
InExcludeData
InExclude custom data type (CUSTOMDATATYPE_INEXCLUDE_LIST).
定义: customgui_inexclude.h:111
C4DAtom::SetParameter
Bool SetParameter(const DescID &id, const GeData &t_data, DESCFLAGS_SET flags)
InExcludeData::InsertObject
Bool InsertObject(BaseList2D *pObject, Int32 lFlags)
GeData::GetInt32
Int32 GetInt32(void) const
定义: c4d_gedata.h:427
LodObject::Alloc
static LodObject * Alloc()
LodObject::GetCurrentLevel
Int32 GetCurrentLevel() const
LodObject::GetLevelCount
Int32 GetLevelCount() const
LodObject::GetSimplifyModeDescID
Bool GetSimplifyModeDescID(Int32 level, DescID &resultId) const
LOD_MODE_SIMPLIFY
@ LOD_MODE_SIMPLIFY
定义: olod.h:26
GeData
定义: c4d_gedata.h:82
C4DAtom
定义: c4d_baselist.h:1331
BaseList2D::SetName
void SetName(const maxon::String &name)
定义: c4d_baselist.h:2324
Int32
maxon::Int32 Int32
定义: ge_sys_math.h:58
LodObject::GetManualModeObjectListDescID
Bool GetManualModeObjectListDescID(Int32 level, DescID &resultId) const
GeListNode::Remove
void Remove()
定义: c4d_baselist.h:1854
DEFAULTVALUE
@ DEFAULTVALUE
Dummy value for the default value GeData constructor.
定义: c4d_gedata.h:65
CustomDataType
Base class for custom data types.
定义: c4d_customdatatype.h:50
DESCFLAGS_GET::NONE
@ NONE
None.
LOD_SIMPLIFY_NULL
@ LOD_SIMPLIFY_NULL
定义: olod.h:40
GeData::GetCustomDataType
CustomDataType * GetCustomDataType(Int32 datatype) const
定义: c4d_gedata.h:507
LOD_MODE
@ LOD_MODE
定义: olod.h:6
LOD_CRITERIA_MANUAL
@ LOD_CRITERIA_MANUAL
定义: olod.h:28
LOD_SIMPLIFY_CONVEXHULL
@ LOD_SIMPLIFY_CONVEXHULL
定义: olod.h:38
LOD_LEVEL_COUNT_DYN
@ LOD_LEVEL_COUNT_DYN
定义: olod.h:13
NULLOBJECT_DISPLAY_CIRCLE
@ NULLOBJECT_DISPLAY_CIRCLE
定义: onull.h:9
LOD_MODE_MANUAL_GROUPS
@ LOD_MODE_MANUAL_GROUPS
定义: olod.h:25
DISPLAYTAG_SDISPLAY_NOSHADING
@ DISPLAYTAG_SDISPLAY_NOSHADING
定义: tdisplay.h:13
C4DAtom::GetParameter
Bool GetParameter(const DescID &id, GeData &t_data, DESCFLAGS_GET flags)
AtomArray::GetIndex
C4DAtom * GetIndex(Int32 idx) const
定义: c4d_baselist.h:1634

Copyright  © 2014-2025 乐数软件    

工业和信息化部: 粤ICP备14079481号-1