Beispiel #1
0
        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);
        }
Beispiel #2
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);
        }
Beispiel #3
0
        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);
        }