I understand how to create new layers in Rhino, using the Rhino SDK. But, it is unclear to me how to create sublayers. Can you explain?
Layers can be organized into a hierarchical structure, like file folders. If a layer has a parent layer, then the ON_Layer::m_parent_layer_id member will be set to the id, or ON_Layer::m_layer_id, of the parent layer. If the layer does not have a parent layer, then the ON_Layer::m_parent_layer_id member will be set to ON_nil_uuud;
For example:
CRhinoCommand::result CCommandTest::RunCommand( const CRhinoCommandContext& context )
{
CRhinoCommand::result rc = CRhinoCommand::failure;
CRhinoLayerTable& layer_table = context.m_doc.m_layer_table;
ON_Layer layer;
layer.m_name = L"MyTestLayer";
int layer_index = layer_table.AddLayer( layer );
if( layer_index >= 0 || layer_index < layer_table.LayerCount() )
{
const CRhinoLayer& rhino_layer = layer_table[layer_index];
ON_Layer sublayer;
sublayer.m_name = L"MyTestSubLayer";
sublayer.m_parent_layer_id = rhino_layer.m_layer_id;
layer_index = layer_table.AddLayer( sublayer );
if( layer_index >= 0 || layer_index < layer_table.LayerCount() )
rc = CRhinoCommand::success;
}
return rc;
}
public override IRhinoCommand.result RunCommand(IRhinoCommandContext context)
{
IRhinoCommand.result rc = IRhinoCommand.result.failure;
MRhinoLayerTable layer_table = context.m_doc.m_layer_table;
OnLayer layer = new OnLayer();
layer.m_name = "MyTestLayer";
int layer_index = layer_table.AddLayer( layer );
if( layer_index >= 0 || layer_index < layer_table.LayerCount() )
{
IRhinoLayer rhino_layer = layer_table[layer_index];
OnLayer sublayer = new OnLayer();
sublayer.m_name = "MyTestSubLayer";
sublayer.m_parent_layer_id = rhino_layer.m_layer_id;
layer_index = layer_table.AddLayer( sublayer );
if( layer_index >= 0 || layer_index < layer_table.LayerCount() )
rc = IRhinoCommand.result.success;
}
return rc;
}
Public Overrides Function RunCommand(ByVal context As RMA.Rhino.IRhinoCommandContext) As RMA.Rhino.IRhinoCommand.result
Dim rc As IRhinoCommand.result = IRhinoCommand.result.failure
Dim layer_table As MRhinoLayerTable = context.m_doc.m_layer_table
Dim layer As OnLayer = New OnLayer()
layer.m_name = "MyTestLayer"
Dim layer_index As Integer = layer_table.AddLayer(layer)
If (layer_index >= 0) And (layer_index < layer_table.LayerCount()) Then
Dim rhino_layer As IRhinoLayer = layer_table(layer_index)
Dim sublayer As OnLayer = New OnLayer()
sublayer.m_name = "MyTestSubLayer"
sublayer.m_parent_layer_id = rhino_layer.m_layer_id
layer_index = layer_table.AddLayer(sublayer)
If (layer_index >= 0) And (layer_index < layer_table.LayerCount()) Then
rc = IRhinoCommand.result.success
End If
End If
Return rc
End Function