Iterating the Geometry Table

This guide demonstrates how to use the C/C++ CRhinoObjectIterator class to iterate through the document.

Overview

The CRhinoGetObject class is useful when you need the user to interactively pick one or more objects. But, it is not too useful if you need to walk through the entire document looking for objects. This is where the CRhinoObjectIterator class comes in.

The CRhinoObjectIterator class is used to iterate through the objects in a CRhinoDoc object. You can limit the iteration by specifying one of five mutually exclusive object states and one of three mutually exclusive object categories.

Sample

CRhinoCommand::result CCommandTestIterator::RunCommand(
                  const CRhinoCommandContext& context )
{
  CRhinoObjectIterator it(
        CRhinoObjectIterator::undeleted_objects,
        CRhinoObjectIterator::active_and_reference_objects
        );
  it.IncludeLights( TRUE );
  it.IncludeGrips( false );
  int count = 0;
  for( CRhinoObject* pObject = it.First(); pObject; pObject = it.Next() )
  {
    if( pObject->IsSelected() )
      continue;
    if( !pObject->IsSelectable() )
      continue;
    pObject->Select();
    count++;
  }

  if( count )
    context.m_doc.Redraw();

  ::RhinoApp().Print( L"%d object(s) selected.\n", count );
  return CRhinoCommand::success;
}

For more information, see the rhinoSdkDoc.h SDK header file.