About
Layers are used to organize a Cinema 4D scene. A layer is represented by a LayerObject, its settings are stored in a LayerData object.
if (root == nullptr)
for (
Int32 i = 0; i < 20; ++i)
{
if (newLayer == nullptr)
}
LayerObject
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
.
Access
The LayerObject assigned to an element can be accessed and set with these BaseList2D functions:
Layers are organized in a tree. The root element of that tree is stored in the BaseDocument:
if (layers == nullptr)
if (layer != nullptr)
- Note
- To check if a given LayerObject is currently selected in the Layer Manager, read the bit BIT_ACTIVE.
Allocation/Deallocation
LayerObject objects are created with the usual tools:
if (root == nullptr)
if (newLayer == nullptr)
newLayer->
SetName(
"This is a new layer"_s);
object->SetLayerObject(newLayer);
Navigation
LayerObject objects are based on GeListNode and are organized in a tree. This tree can be navigated with:
if (object == nullptr)
if (layer != nullptr)
{
while (parentLayer->
GetUp())
{
parentLayer = parentLayer->
GetUp();
}
}
- Note
- If a layer is folded in the Layer Manager is controlled with the bit BIT_OFOLD.
LayerData
A LayerData object represents the settings of a layer.
Access
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 object.
const LayerData*
const layerData =
object->GetLayerData(doc,
true);
if (layerData != nullptr)
{
}
Properties
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:
if (root == nullptr)
if (newLayer == nullptr)
if (objects == nullptr)
{
if (object == nullptr)
object->SetLayerObject(newLayer);
}
- Note
- When one edits the solo bit it is also necessary to change the NBIT::SOLO_LAYER of the BaseDocument with GeListNode::ChangeNBit() either using NBITCONTROL::SET or NBITCONTROL:: CLEAR.
Utility
- IsObjectEnabled(): Checks if the given object should be visible in the viewport, including checking the layers.
Further Reading