Layer Manual
Layers are used to organize a Cinema 4D scene. A layer is represented by a LayerObject , its settings are stored in a LayerData 对象。
// This example creates new layers with distinct colors.// create 10 layers with variations for ( Int32 i = 0; i < 20; ++i) { LayerObject * const newLayer = LayerObject::Alloc (); if (newLayer == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION );
// new color const 向量 hsv { Float (i) * 0.05, 1.0, 1.0 }; const 向量 rgb = HSVToRGB (hsv);
// define layerData LayerData layerData; layerData. color = rgb; layerData. solo = false ;
// set layer settings newLayer-> SetLayerData (doc, layerData); newLayer-> SetName ( "Layer " + String::IntToString (i));
// insert layer root-> InsertLast (newLayer); }
A LayerObject represents a layer of a Cinema 4D scene. It is used to assign an element to this layer and to edit the layer.
LayerObject
objects are an instance of
Olayer
.
The LayerObject assigned to an element can be accessed and set with these BaseList2D functions:
nullptr
.
Layers are organized in a tree. The root element of that tree is stored in the BaseDocument :
LayerObject objects are created with the usual tools:
// assign object ->SetLayerObject(newLayer);
LayerObject objects are based on GeListNode and are organized in a tree. This tree can be navigated with:
// search for topmost layer while (parentLayer-> GetUp ()) { parentLayer = parentLayer-> GetUp (); }
// assign parent layer object -> SetLayerObject (parentLayer); }
A LayerData object represents the settings of a layer.
The applied layer settings of an element are accessed with these BaseList2D functions:
These functions can be used on the given element or on a LayerObject 对象。
// This example get the object's LayerData and prints the color to the console. const LayerData * const layerData = object ->GetLayerData(doc, true ); if (layerData != nullptr ) { ApplicationOutput ( "Color: " + String::VectorToString (layerData-> color )); }These are the properties of a layer stored in a LayerData object. These properties define how a layer changes the behavior of an element that is assigned to that layer:
// create layer GeListHead * const root = doc-> GetLayerObjectRoot (); if (root == nullptr ) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION ); LayerObject * const newLayer = LayerObject::Alloc (); if (newLayer == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION );
// setup layer and add it to the layer list LayerData layerData; layerData. locked = true ; layerData. solo = false ; newLayer-> SetLayerData (doc, layerData); newLayer-> SetName ( "Locked" _s); root-> InsertLast (newLayer);
// get object selection AutoAlloc<AtomArray> objects; if (objects == nullptr ) return maxon::OutOfMemoryError( MAXON_SOURCE_LOCATION ); doc-> GetActiveObjects (objects, GETACTIVEOBJECTFLAGS::NONE );
// check every objects for ( Int32 i = 0; i < objects-> GetCount (); ++i) { BaseObject * const object = static_cast< BaseObject * > (objects-> GetIndex (i)); if ( object == nullptr ) return maxon::UnexpectedError( MAXON_SOURCE_LOCATION ); object ->SetLayerObject(newLayer); }