developer:sdksamples:sublayer


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
developer/sdksamples/sublayer.txt · Last modified: 2010/01/26 16:37 (external edit) Driven by DokuWiki Recent changes RSS feed

 © 1997-2010 

McNeel North America Europe Latin AmericaAsia