Creating Sublayers
C++, .NET
Summary: Demonstrates how to create sublayers using the Rhino SDK.
Question
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?
Answer
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:
C++
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; }
C#
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; }
VB.NET
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