developer:sdksamples:setactiveview


How To: Get and Set the Active View

C++, .NET

Summary: Demonstrates how to get and set the active view using the Rhino SDK.

The following code sample demonstrates how to get and set the active view using the Rhino SDK.

C++

CRhinoCommand::result CCommandTest::RunCommand( const CRhinoCommandContext& context )
{
  // Get the active view
  CRhinoView* active_view = ::RhinoApp().ActiveView();
  if( !active_view )
    return CRhinoCommand::failure;
 
  // Get the name of the active view
  ON_wString active_view_name = active_view->Viewport().Name();
 
  // Get a list of all views
  ON_SimpleArray<CRhinoView*> view_list;
  context.m_doc.GetViewList( view_list );
 
  // Build a list of view names
  ON_ClassArray<ON_wString> view_names;
  int i;
 
  for( i = 0; i < view_list.Count(); i++ )
  {
    CRhinoView* view = view_list[i];
    if( view && view != active_view )
      view_names.Append( view->Viewport().Name() );
  }
 
  // Prompt the user for the view to set active
  CRhinoGetString gs;
  gs.SetCommandPrompt( L"Name of view to set active" );
  gs.AcceptNothing();
  gs.SetDefaultString( active_view_name );
  // Add view names as pickable command options
  for( i = 0; i < view_names.Count(); i++ )
    gs.AddCommandOption( RHCMDOPTNAME(view_names[i]) );
 
  // Do the getstring
  CRhinoGet::result res = gs.GetString();
 
  // User pressed ESC
  if( res == CRhinoGet::cancel )
    return CRhinoCommand::cancel;
 
  // User pressed ENTER
  if( res == CRhinoGet::nothing )
    return CRhinoCommand::nothing;
 
  ON_wString new_view_name;
 
  // New typed a string
  if( res == CRhinoGet::string )
    new_view_name = gs.String();
 
  // User clicked or typed an option
  if( res == CRhinoGet::option )
  {
    const CRhinoCommandOption* option = gs.Option();
    if( !option )
      return CRhinoCommand::failure;
 
    int option_index = option->m_option_index;
    if( option_index < 1 && option_index > view_names.Count() )
      return CRhinoCommand::failure;
 
    new_view_name = view_names[option_index-1];
  }
 
  // Compare view names
  if( new_view_name.CompareNoCase(active_view_name) == 0 )
    return CRhinoCommand::nothing;
 
  // Find the specified view by name
  active_view = 0;
  for( i = 0; i < view_list.Count(); i++ )
  {
    CRhinoView* view = view_list[i];
    if( view && view != active_view )
    {
      if( new_view_name.CompareNoCase(view->Viewport().Name()) == 0 )
      {
        active_view = view;
        break;
      }
    }
  }
 
  // Set the new active view
  if( active_view )
    ::RhinoApp().SetActiveView( active_view );
  else
    ::RhinoApp().Print( L"The \"%s\" view was not found.\n", new_view_name );
  return CRhinoCommand::success;
}

VB.NET

Public Overrides Function RunCommand(ByVal context As IRhinoCommandContext) _
  As IRhinoCommand.result
  ' Get the active view
  Dim active_view As MRhinoView = RhUtil.RhinoApp.ActiveView
  If (active_view Is Nothing) Then Return IRhinoCommand.result.failure
 
  ' Get the name of the active view
  Dim active_view_name As String = active_view.MainViewport().Name()
  ' Get a list of all views
  Dim view_list As MRhinoView() = Nothing
  context.m_doc.GetViewList(view_list, True, False)
  If (view_list Is Nothing) Then Return IRhinoCommand.result.failure
 
  ' Build a list of view names
  Dim view_names As New System.Collections.Generic.List(Of String)
  For Each view As MRhinoView In view_list
    Dim name As String = view.MainViewport().Name()
    If (name <> active_view_name) Then view_names.Add(name)
  Next
 
  ' Prompt the user for the view to set active
  Dim gs As New MRhinoGetString()
  gs.SetCommandPrompt("Name of view to set active")
  gs.AcceptNothing()
  gs.SetDefaultString(active_view_name)
  ' Add view names as pickable command options
  For Each name As String In view_names
    gs.AddCommandOption(New MRhinoCommandOptionName(name, name))
  Next
 
  ' Do the getstring
  Dim res As IRhinoGet.result = gs.GetString()
 
  ' User pressed ESC
  If (res = IRhinoGet.result.cancel) Then Return IRhinoCommand.result.cancel
  ' User pressed ENTER
  If (res = IRhinoGet.result.nothing) Then Return IRhinoCommand.result.nothing
 
  Dim new_name As String = 
  ' New typed a string
  If (res = IRhinoGet.result.string) Then new_name = gs.String()
 
  ' User clicked or typed an option
  If (res = IRhinoGet.result.option) Then
    Dim get_option As IRhinoCommandOption = gs.Option()
    If (get_option Is Nothing) Then Return IRhinoCommand.result.failure
    Dim option_index As Integer = get_option.m_option_index
    If (option_index < 1 And option_index > view_names.Count) Then
      Return IRhinoCommand.result.failure
    End If
    new_name = view_names(option_index - 1)
  End If
 
  ' Compare view names
  If (new_name.Equals(active_view_name, StringComparison.OrdinalIgnoreCase)) Then
    Return IRhinoCommand.result.nothing
  End If
 
  ' Find the specified view by name
  active_view = Nothing
  For Each view As MRhinoView In view_list
    If (new_name.Equals(view.MainViewport().Name(), _
                        StringComparison.OrdinalIgnoreCase)) Then
      active_view = view
      Exit For
    End If
  Next
 
  If (active_view IsNot Nothing) Then
    RhUtil.RhinoApp().SetActiveView(active_view)
  Else
    RhUtil.RhinoApp().Print("The " + new_name + " view was not found" + vbCrLf)
  End If
  Return IRhinoCommand.result.success
End Function

C#

public override IRhinoCommand.result RunCommand(IRhinoCommandContext context)
{
  // Get the active view
  MRhinoView active_view = RhUtil.RhinoApp().ActiveView();
  if (active_view == null)
    return IRhinoCommand.result.failure;
 
  // Get the name of the active view
  string active_view_name = active_view.MainViewport().Name();
  // Get a list of all views
  MRhinoView[] view_list = null;
  context.m_doc.GetViewList(ref view_list, true, false);
  if (view_list == null)
    return IRhinoCommand.result.failure;
 
  // Build a list of view names
  System.Collections.Generic.List<string> view_names =
    new System.Collections.Generic.List<string>();
  for (int i = 0; i < view_list.Length; i++)
  {
    MRhinoView view = view_list[i];
    if (view != null)
    {
      string name = view.MainViewport().Name();
      if( name != active_view_name)
        view_names.Add(name);
    }
  }
 
  // Prompt the user for the view to set active
  MRhinoGetString gs = new MRhinoGetString();
  gs.SetCommandPrompt( "Name of view to set active" );
  gs.AcceptNothing();
  gs.SetDefaultString(active_view_name);
  // Add view names as pickable command options
  for (int i = 0; i < view_names.Count; i++)
    gs.AddCommandOption(new MRhinoCommandOptionName(view_names[i], view_names[i]));
 
  // Do the getstring
  IRhinoGet.result res = gs.GetString();
 
  // User pressed ESC
  if (res == IRhinoGet.result.cancel)
    return IRhinoCommand.result.cancel;
  // User pressed ENTER
  if (res == IRhinoGet.result.nothing)
    return IRhinoCommand.result.nothing;
 
  string new_name = ;
  // New typed a string
  if (res == IRhinoGet.result.@string)
    new_name = gs.String();
 
  // User clicked or typed an option
  if (res == IRhinoGet.result.option)
  {
    IRhinoCommandOption option = gs.Option();
    if (option == null)
      return IRhinoCommand.result.failure;
 
    int option_index = option.m_option_index;
    if (option_index < 1 && option_index > view_names.Count)
      return IRhinoCommand.result.failure;
    new_name = view_names[option_index - 1];
  }
 
  // Compare view names
  if (new_name.Equals(active_view_name, StringComparison.OrdinalIgnoreCase))
    return IRhinoCommand.result.nothing;
 
  // Find the specified view by name
  active_view = null;
  for (int i = 0; i < view_list.Length; i++)
  {
    MRhinoView view = view_list[i];
    if (view != null)
    {
      if (new_view_name.Equals(view.MainViewport().Name(),
                               StringComparison.OrdinalIgnoreCase))
      {
        active_view = view;
        break;
      }
    }
  }
  if (active_view != null)
    RhUtil.RhinoApp().SetActiveView(active_view);
  else
    RhUtil.RhinoApp().Print("The " + new_view_name + " view was not found\n");
  return IRhinoCommand.result.success;
}
developer/sdksamples/setactiveview.txt · Last modified: 2010/01/26 16:37 (external edit) Driven by DokuWiki Recent changes RSS feed

 © 1997-2012 

McNeel North America Europe Latin AmericaAsia