Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

developer:sdksamples:printinstancedefinitiontree [2015/09/14]
developer:sdksamples:printinstancedefinitiontree [2020/08/14] (current)
Line 1: Line 1:
 +====== Print Instance Definition Tree ======
 +> **Developer:** //[[developer:cplusplusplugins|C++]], [[developer:dotnetplugins|.NET]]//
 +> **Summary:** //Demonstrates how to print the names of all instance definitions, including objects and sub-instances, in a tree-style format.//
 +> **NOTICE:** //The Rhino.NET SDK is deprecated in Rhino 5.  This example adapted for the new RhinoCommon SDK is [[developer:rhinocommonsamples:printinstancedefinitiontree|here]]//
 +===== Question =====
 +How can I print the names of all instance definitions, including their objects and sub-instances, in a tree-style format?
  
 +===== Answer =====
 +See the following example code:
 +
 +==== C++ ====
 +<code c++>
 +CRhinoCommand::result CCommandTest::RunCommand( const CRhinoCommandContext& context )
 +{
 +  const CRhinoInstanceDefinitionTable& idef_table = context.m_doc.m_instance_definition_table;
 +  int idef_count = idef_table.InstanceDefinitionCount();
 +  if (idef_count == 0)
 +  {
 +    RhinoApp().Print("No instance definitions found.\n");
 +    return CRhinoCommand::nothing;
 +  }
 +
 +  ON_wString writer;
 +  ON_TextLog dump( writer );
 +  dump.SetIndentSize( 4 );
 +
 +  for (int i = 0; i < idef_count; i++)
 +    DumpInstanceDefinition( idef_table[i], dump, true );
 +
 +  RhinoApp().Print( L"%s\n", writer );
 +
 +  return CRhinoCommand::success;
 +}
 +
 +void CCommandTest::DumpInstanceDefinition( const CRhinoInstanceDefinition* idef, ON_TextLog& dump, bool bRoot )
 +{
 +  if( idef && ! idef->IsDeleted() )
 +  {
 +    ON_wString node;
 +    if( bRoot )
 +      node = L"\u2500";
 +    else
 +      node = L"\u2514";
 +    dump.Print(L"%s Instance definition %d = %s\n", node, idef->Index(), idef->Name() );
 +
 +    const int idef_object_count = idef->ObjectCount();
 +    if( idef_object_count )
 +    {
 +      dump.PushIndent();
 +      for( int i = 0; i < idef->ObjectCount(); i++ )
 +      {
 +        const CRhinoObject* obj = idef->Object( i );
 +        if( obj )
 +        {
 +          const CRhinoInstanceObject* iref = CRhinoInstanceObject::Cast( obj );
 +          if( iref )
 +            DumpInstanceDefinition( iref->InstanceDefinition(), dump, false ); // Recursive...
 +          else
 +            dump.Print(L"\u2514 Object %d = %s\n", i, obj->ShortDescription(false) );
 +        }
 +      }
 +      dump.PopIndent();
 +    }
 +  }
 +}
 +</code>
 +
 +==== C# ====
 +<code c#>
 +public override IRhinoCommand.result RunCommand(IRhinoCommandContext context)
 +{
 +  MRhinoInstanceDefinitionTable idef_table = context.m_doc.m_instance_definition_table;
 +  int idef_count = idef_table.InstanceDefinitionCount();
 +  if (idef_count == 0)
 +  {
 +    RhUtil.RhinoApp().Print("No instance definitions found.\n");
 +    return IRhinoCommand.result.nothing;
 +  }
 +
 +  StringWriter writer = new StringWriter();
 +  OnTextLog dump = new OnTextLog(writer);
 +  dump.SetIndentSize(4);
 +
 +  for (int i = 0; i < idef_count; i++)
 +    DumpInstanceDefinition(idef_table[i], ref dump, true);
 +
 +  RhUtil.RhinoApp().Print(String.Format("{0}\n", writer.ToString()));
 +
 +  return IRhinoCommand.result.success;
 +}
 +
 +private void DumpInstanceDefinition(IRhinoInstanceDefinition idef, ref OnTextLog dump, bool bRoot)
 +{
 +  if (idef != null && idef.IsDeleted() == false)
 +  {
 +    string node;
 +    if (bRoot)
 +      node = "\u2500";
 +    else
 +      node = "\u2514";
 +    dump.Print(String.Format("{0} Instance definition {1} = {2}\n", node, idef.Index(), idef.Name()));
 +
 +    int idef_object_count = idef.ObjectCount();
 +    if (idef_object_count > 0)
 +    {
 +      dump.PushIndent();
 +      for (int i = 0; i < idef_object_count; i++)
 +      {
 +        IRhinoObject obj = idef.Object(i);
 +        if (obj != null)
 +        {
 +          IRhinoInstanceObject iref = MRhinoInstanceObject.ConstCast(obj);
 +          if (iref != null)
 +            DumpInstanceDefinition(iref.InstanceDefinition(), ref dump, false); // Recursive...
 +          else
 +            dump.Print(String.Format("\u2514 Object {0} = {1}\n", i, obj.ShortDescription(false)));
 +        }
 +      }
 +      dump.PopIndent();
 +    }
 +  }
 +}
 +</code>
 +
 +==== VB.NET ====
 +<code vb>
 +Public Overrides Function RunCommand(ByVal context As RMA.Rhino.IRhinoCommandContext) As RMA.Rhino.IRhinoCommand.result
 +  
 +  Dim idef_table As MRhinoInstanceDefinitionTable = context.m_doc.m_instance_definition_table
 +  Dim idef_count As Integer = idef_table.InstanceDefinitionCount()
 +  If (idef_count = 0) Then
 +    RhinoApp().Print("No instance definitions found." + vbCrLf)
 +    Return IRhinoCommand.result.nothing
 +  End If
 +
 +  Dim writer As New System.IO.StringWriter()
 +  Dim dump As New OnTextLog(writer)
 +  dump.SetIndentSize(4)
 +
 +  For i As Integer = 0 To idef_count - 1
 +    DumpInstanceDefinition(idef_table(i), dump, True)
 +  Next
 +
 +  RhUtil.RhinoApp().Print(writer.ToString() + vbCrLf)
 +
 +  Return IRhinoCommand.result.success
 +
 +End Function
 +
 +Private Sub DumpInstanceDefinition(ByVal idef As IRhinoInstanceDefinition, ByRef dump As OnTextLog, ByVal bRoot As Boolean)
 +
 +  If (idef IsNot Nothing AndAlso idef.IsDeleted() = False) Then
 +
 +    Dim node As String
 +    If (bRoot = True) Then
 +      node = ChrW(&H2500)
 +    Else
 +      node = ChrW(&H2514)
 +    End If
 +    dump.Print(String.Format("{0} Instance definition {1} = {2}" + vbCrLf, node, idef.Index(), idef.Name()))
 +
 +    Dim idef_object_count As Integer = idef.ObjectCount()
 +    If (idef_object_count > 0) Then
 +      dump.PushIndent()
 +      For i As Integer = 0 To idef_object_count - 1
 +        Dim obj As IRhinoObject = idef.Object(i)
 +        If (obj IsNot Nothing) Then
 +          Dim iref As IRhinoInstanceObject = MRhinoInstanceObject.ConstCast(obj)
 +          If (iref IsNot Nothing) Then
 +            DumpInstanceDefinition(iref.InstanceDefinition(), dump, False) ' Recursive...
 +          Else
 +            dump.Print(String.Format("{0} Object {1} = {2}" + vbCrLf, ChrW(&H2514), i, obj.ShortDescription(False)))
 +          End If
 +        End If
 +      Next
 +      dump.PopIndent()
 +    End If
 +
 +  End If
 +
 +End Sub
 +</code>
 +
 +
 +\\
 +
 +{{tag>Developer cplusplus dotnet}}
developer/sdksamples/printinstancedefinitiontree.txt ยท Last modified: 2020/08/14 (external edit)