public View3D ViewToSpeckle(ViewInfo view) { // get orientation vectors var up = view.Viewport.CameraUp; var forward = view.Viewport.CameraDirection; up.Unitize(); forward.Unitize(); var _view = new View3D(); _view.name = view.Name; _view.upDirection = new Vector(up.X, up.Y, up.Z, "none"); _view.forwardDirection = new Vector(forward.X, forward.Y, forward.Z, "none"); _view.origin = PointToSpeckle(view.Viewport.CameraLocation); _view.target = PointToSpeckle(view.Viewport.TargetPoint); _view.isOrthogonal = (view.Viewport.IsParallelProjection) ? true : false; _view.units = ModelUnits; // get view bounding box var near = view.Viewport.GetNearPlaneCorners(); var far = view.Viewport.GetFarPlaneCorners(); if (near.Length > 0 && far.Length > 0) { var box = new RH.Box(new BoundingBox(near[0], far[3])); _view.boundingBox = BoxToSpeckle(box); } // attach props AttachViewParams(_view, view); return(_view); }
public View ViewToSpeckle(DB.View revitView) { switch (revitView.ViewType) { case ViewType.FloorPlan: break; case ViewType.CeilingPlan: break; case ViewType.Elevation: break; case ViewType.Section: break; case ViewType.ThreeD: break; default: break; } var speckleView = new View(); if (revitView is DB.View3D rv3d) { // some views have null origin, not sure why, but for now we just ignore them and don't bother the user if (rv3d.Origin == null) { return(null); } // get orientation var forward = rv3d.GetSavedOrientation().ForwardDirection; // this is unit vector var up = rv3d.GetSavedOrientation().UpDirection; // this is unit vector // get target var target = PointToSpeckle(CalculateTarget(rv3d, forward)); speckleView = new View3D { origin = PointToSpeckle(rv3d.Origin), forwardDirection = VectorToSpeckle(forward, Speckle.Core.Kits.Units.None), upDirection = VectorToSpeckle(up, Speckle.Core.Kits.Units.None), target = target, isOrthogonal = !rv3d.IsPerspective, boundingBox = BoxToSpeckle(rv3d.CropBox), name = revitView.Name }; // set props AttachViewParams(speckleView, rv3d); } GetAllRevitParamsAndIds(speckleView, revitView); //Report.Log($"Converted View {revitView.ViewType} {revitView.Id}"); return(speckleView); }
public View ViewToSpeckle(DB.View revitView) { switch (revitView.ViewType) { case ViewType.FloorPlan: break; case ViewType.CeilingPlan: break; case ViewType.Elevation: break; case ViewType.Section: break; case ViewType.ThreeD: break; default: break; } var speckleView = new View(); if (revitView is DB.View3D rv3d) { //some views have null origin, not sure why, but for now we just ignore them and don't bother the user if (rv3d.Origin == null) { return(null); } speckleView = new View3D { origin = PointToSpeckle(rv3d.Origin), forwardDirection = VectorToSpeckle(rv3d.ViewDirection), upDirection = VectorToSpeckle(rv3d.UpDirection), isOrthogonal = !rv3d.IsPerspective }; } speckleView.name = revitView.Name; GetAllRevitParamsAndIds(speckleView, revitView); return(speckleView); }
public string ViewToNative(View3D view) { Rhino.RhinoApp.InvokeOnUiThread((Action) delegate { RhinoView _view = Doc.Views.ActiveView; RhinoViewport viewport = _view.ActiveViewport; viewport.SetProjection(DefinedViewportProjection.Perspective, null, false); var origin = PointToNative(view.origin).Location; var forward = new Vector3d(view.forwardDirection.x, view.forwardDirection.y, view.forwardDirection.z); if (view.target != null) { viewport.SetCameraLocations(PointToNative(view.target).Location, origin); // this changes viewport.CameraUp. works for axon from revit if after, for perspective from revit if before } else { viewport.SetCameraLocation(origin, true); viewport.SetCameraDirection(forward, true); } viewport.CameraUp = new Vector3d(view.upDirection.x, view.upDirection.y, view.upDirection.z); viewport.Name = view.name; /* TODO: debug this and see if it helps better match views from revit * // set bounding box * var box = BoxToNative(view.boundingBox); * BoundingBox boundingBox = new BoundingBox(box.X.Min, box.Y.Min, box.Z.Min, box.X.Max, box.Y.Max, box.Z.Max); * viewport.SetClippingPlanes(boundingBox); */ // set rhino view props if available SetViewParams(viewport, view); if (view.isOrthogonal) { viewport.ChangeToParallelProjection(true); } var commitInfo = GetCommitInfo(); var viewName = $"{commitInfo } - {view.name}"; Doc.NamedViews.Add(viewName, viewport.Id); }); //ConversionErrors.Add(sdfasdfaf); return("baked"); }
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); }
public View ViewToSpeckle(DB.View revitView) { switch (revitView.ViewType) { case ViewType.FloorPlan: break; case ViewType.CeilingPlan: break; case ViewType.Elevation: break; case ViewType.Section: break; case ViewType.ThreeD: break; default: break; } var speckleView = new View(); if (revitView is DB.View3D rv3d) { // some views have null origin, not sure why, but for now we just ignore them and don't bother the user if (rv3d.Origin == null) { return(null); } // get orientation var forward = rv3d.GetSavedOrientation().ForwardDirection; // this is unit vector var up = rv3d.GetSavedOrientation().UpDirection; // this is unit vector /* not accurate, will result in distorted camera axes if sent to rhino NOTE!! TRY USING THIS FOR ISO ONLY * // get target * var target = PointToSpeckle(CalculateTarget(rv3d, forward)); */ speckleView = new View3D { origin = PointToSpeckle(rv3d.Origin), forwardDirection = new Geometry.Vector(forward.X, forward.Y, forward.Z, "none"), upDirection = new Geometry.Vector(up.X, up.Y, up.Z, "none"), //target = target, isOrthogonal = !rv3d.IsPerspective, boundingBox = BoxToSpeckle(rv3d.CropBox) }; // set props AttachViewParams(speckleView, rv3d); } speckleView.name = revitView.Name; GetAllRevitParamsAndIds(speckleView, revitView); return(speckleView); }