private XYZ CalculateTarget(DB.View3D view, XYZ forward) { var target = view.Origin.Add(forward * (view.CropBox.Max.Z - view.CropBox.Min.Z)); var targetElevation = view.get_Parameter(BuiltInParameter.VIEWER_TARGET_ELEVATION).AsDouble(); if (target.Z != targetElevation) // check if target matches stored elevation { double magnitude = (targetElevation - view.Origin.Z) / forward.Z; target = view.Origin.Add(forward * magnitude); } return(target); }
public DB.View ViewToNative(View3D speckleView) { // get view3d type ViewFamilyType viewType = new FilteredElementCollector(Doc) .WhereElementIsElementType().OfClass(typeof(ViewFamilyType)) .ToElements().Cast <ViewFamilyType>() .Where(o => o.ViewFamily == ViewFamily.ThreeDimensional) .FirstOrDefault(); // get orientation var up = new XYZ(speckleView.upDirection.x, speckleView.upDirection.y, speckleView.upDirection.z).Normalize(); //unit vector var forward = new XYZ(speckleView.forwardDirection.x, speckleView.forwardDirection.y, speckleView.forwardDirection.z).Normalize(); if (Math.Round(up.DotProduct(forward), 3) != 0) // will throw error if vectors are not perpendicular { return(null); } var orientation = new ViewOrientation3D(PointToNative(speckleView.origin), up, forward); // create view var docObj = GetExistingElementByApplicationId(speckleView.applicationId); DB.View3D view = null; if (speckleView.isOrthogonal) { view = DB.View3D.CreateIsometric(Doc, viewType.Id); } else { view = DB.View3D.CreatePerspective(Doc, viewType.Id); } // set props view.SetOrientation(orientation); view.SaveOrientationAndLock(); if (view != null && view.IsValidObject) { SetInstanceParameters(view, speckleView); } view = SetViewParams(view, speckleView); // set name last due to duplicate name errors view.Name = EditViewName(speckleView.name, "SpeckleView"); return(view); }
private DB.View3D SetViewParams(DB.View3D view, Base speckleView) { // display var display = speckleView["display"] as string; if (display != null) { var style = Enum.Parse(typeof(DisplayStyle), display); view.DisplayStyle = (style != null) ? (DisplayStyle)style : DisplayStyle.Wireframe; } // crop var crop = speckleView["cropped"] as string; if (crop != null) { if (bool.TryParse(crop, out bool IsCropped)) { view.CropBoxActive = IsCropped; } } return(view); }