Sdk Sub Layer
Last changed: dale@mcneel.com-204.177.179.113

.
DeveloperC++, .NET
SummaryDemonstrates 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