Get and Set the Active View
Demonstrates how to determine and set the active view in Rhino.
partial class Examples
{
public static Result SetActiveView(RhinoDoc doc)
{
// view and view names
var active_view_name = doc.Views.ActiveView.ActiveViewport.Name;
var non_active_views =
doc.Views
.Where(v => v.ActiveViewport.Name != active_view_name)
.ToDictionary(v => v.ActiveViewport.Name, v => v);
// get name of view to set active
var gs = new GetString();
gs.SetCommandPrompt("Name of view to set active");
gs.AcceptNothing(true);
gs.SetDefaultString(active_view_name);
foreach (var view_name in non_active_views.Keys)
gs.AddOption(view_name);
var result = gs.Get();
if (gs.CommandResult() != Result.Success)
return gs.CommandResult();
var selected_view_name =
result == GetResult.Option ? gs.Option().EnglishName : gs.StringResult();
if (selected_view_name != active_view_name)
if (non_active_views.ContainsKey(selected_view_name))
doc.Views.ActiveView = non_active_views[selected_view_name];
else
RhinoApp.WriteLine("\"{0}\" is not a view name", selected_view_name);
return Rhino.Commands.Result.Success;
}
}
Partial Friend Class Examples
Public Shared Function SetActiveView(ByVal doc As RhinoDoc) As Result
' view and view names
Dim active_view_name = doc.Views.ActiveView.ActiveViewport.Name
Dim non_active_views = doc.Views.Where(Function(v) v.ActiveViewport.Name <> active_view_name).ToDictionary(Function(v) v.ActiveViewport.Name, Function(v) v)
' get name of view to set active
Dim gs = New GetString()
gs.SetCommandPrompt("Name of view to set active")
gs.AcceptNothing(True)
gs.SetDefaultString(active_view_name)
For Each view_name In non_active_views.Keys
gs.AddOption(view_name)
Next view_name
Dim result = gs.Get()
If gs.CommandResult() <> Result.Success Then
Return gs.CommandResult()
End If
Dim selected_view_name = If(result Is GetResult.Option, gs.Option().EnglishName, gs.StringResult())
If selected_view_name IsNot active_view_name Then
If non_active_views.ContainsKey(selected_view_name) Then
doc.Views.ActiveView = non_active_views(selected_view_name)
Else
RhinoApp.WriteLine("""{0}"" is not a view name", selected_view_name)
End If
End If
Return Rhino.Commands.Result.Success
End Function
End Class
from Rhino import *
from Rhino.Commands import *
from Rhino.Input import *
from Rhino.Input.Custom import *
from scriptcontext import doc
def RunCommand():
# view and view names
active_view_name = doc.Views.ActiveView.ActiveViewport.Name
non_active_views = [(view.ActiveViewport.Name, view) for view in doc.Views if view.ActiveViewport.Name != active_view_name]
# get name of view to set active
gs = GetString()
gs.SetCommandPrompt("Name of view to set active")
gs.AcceptNothing(True)
gs.SetDefaultString(active_view_name)
for view_name, _ in non_active_views:
gs.AddOption(view_name)
result = gs.Get()
if gs.CommandResult() != Result.Success:
return gs.CommandResult()
selected_view_name = "{0}".format(gs.StringResult())
if gs.Option() != None:
selected_view_name = gs.Option().EnglishName
if selected_view_name != active_view_name:
if selected_view_name in [seq[0] for seq in non_active_views]:
doc.Views.ActiveView = [seq[1] for seq in non_active_views if seq[0] == selected_view_name][0]
else:
print "\"{0}\" is not a view name".format(selected_view_name)
return Result.Success
if __name__ == "__main__":
RunCommand()