The following code sample demonstrates how to get and set the active view using the Rhino SDK.
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;
}
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
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;
}