diff --git a/ConnectorRevit/ConnectorRevit/UI/ConnectorBindingsRevit2/ConnectorBindingsRevit2.Events.cs b/ConnectorRevit/ConnectorRevit/UI/ConnectorBindingsRevit2/ConnectorBindingsRevit2.Events.cs index 45a2800ccf..a29f4e2948 100644 --- a/ConnectorRevit/ConnectorRevit/UI/ConnectorBindingsRevit2/ConnectorBindingsRevit2.Events.cs +++ b/ConnectorRevit/ConnectorRevit/UI/ConnectorBindingsRevit2/ConnectorBindingsRevit2.Events.cs @@ -318,7 +318,10 @@ await RevitTask.RunAsync(app => if (views.Any()) { var viewPhase = views.First().get_Parameter(BuiltInParameter.VIEW_PHASE); - perspView.get_Parameter(BuiltInParameter.VIEW_PHASE).Set(viewPhase.AsElementId()); + if (viewPhase != null) + { + perspView.get_Parameter(BuiltInParameter.VIEW_PHASE).Set(viewPhase.AsElementId()); + } } t.Commit(); diff --git a/ConnectorRhino/ConnectorRhino/ConnectorRhinoShared/UI/ConnectorBindingsRhino.cs b/ConnectorRhino/ConnectorRhino/ConnectorRhinoShared/UI/ConnectorBindingsRhino.cs index 888846e344..ee855acd9e 100644 --- a/ConnectorRhino/ConnectorRhino/ConnectorRhinoShared/UI/ConnectorBindingsRhino.cs +++ b/ConnectorRhino/ConnectorRhino/ConnectorRhinoShared/UI/ConnectorBindingsRhino.cs @@ -1150,5 +1150,40 @@ public override List GetCustomStreamMenuItems() #endregion + public override bool CanOpen3DView => true; + + public override async Task Open3DView(List viewCoordinates, string viewName = "") + { + // Create positional objects for camera + Point3d cameraLocation = new Point3d(viewCoordinates[0], viewCoordinates[1], viewCoordinates[2]); + Point3d target = new Point3d(viewCoordinates[3], viewCoordinates[4], viewCoordinates[5]); + Vector3d direction = target - cameraLocation; + + if (!Doc.Views.Any(v => v.ActiveViewport.Name == "SpeckleCommentView")) + { + // Get bounds from active view + Rectangle bounds = Doc.Views.ActiveView.ScreenRectangle; + Doc.Views.Add("SpeckleCommentView", DefinedViewportProjection.Perspective, bounds, false); + } + + await Task.Run(() => + { + IEnumerable views = Doc.Views.Where(v => v.ActiveViewport.Name == "SpeckleCommentView"); + if (views.Any()) + { + RhinoView speckleCommentView = views.First(); + speckleCommentView.ActiveViewport.SetCameraDirection(direction, false); + speckleCommentView.ActiveViewport.SetCameraLocation(cameraLocation, true); + speckleCommentView.Maximized = true; + + if (Doc.Views.ActiveView.ActiveViewport.Name != "SpeckleCommentView") + { + Doc.Views.ActiveView = speckleCommentView; + } + } + + Doc.Views.Redraw(); + }); + } } }