Creating Sublayers
Windows only

Problem

You would like to create a “sublayer” (or a “child layer”) of a parent layer.

Solution

All layers have a layer id field, returned by ON_Layer::Id(), that uniquely identifies that layer. Layers also maintain a parent id field, returned by ON_Layer::ParentLayerId(), that identifies the layer’s parent. If a layer’s parent id is a null UUID, then the layer does not have a parent and, thus, is considered a root layer.

Sample

The following sample demonstrates how to add a parent layer then then add a child layer to that parent.

CRhinoCommand::result CCommandTest::RunCommand(const CRhinoCommandContext& context)
{
CRhinoLayerTable& layer_table = context.m_doc.m_layer_table;
// Define parent layer
ON_Layer parent_layer;
parent_layer.SetName(L"Parent");
// Add parent layer
int parent_layer_index = layer_table.AddLayer(parent_layer);
if (parent_layer_index >= 0)
{
// Get the layer we just added
const CRhinoLayer& layer = layer_table[parent_layer_index];
// Define child layer
ON_Layer child_layer;
child_layer.SetName(L"Child");
// Assign parent layer's id as child's parent id
child_layer.SetParentLayerId(layer.Id());
// Add child layer
layer_table.AddLayer(child_layer);
}
return CRhinoCommand::success;
}