예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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");
        }
예제 #5
0
        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);
        }
예제 #6
0
        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);
        }