コード例 #1
0
        void ReconstructView3DByPlane
        (
            DB.Document doc,
            ref DB.View3D view,

            Rhino.Geometry.Plane plane,
            Optional <DB.ElementType> type,
            Optional <string> name,
            Optional <bool> perspective
        )
        {
            SolveOptionalType(ref type, doc, DB.ElementTypeGroup.ViewType3D, nameof(type));

            var orientation = new DB.ViewOrientation3D
                              (
                plane.Origin.ToXYZ(),
                plane.YAxis.ToXYZ(),
                plane.ZAxis.ToXYZ()
                              );

            if (view is null)
            {
                var newView = perspective.IsNullOrMissing ?
                              DB.View3D.CreatePerspective
                              (
                    doc,
                    type.Value.Id
                              ) :
                              DB.View3D.CreateIsometric
                              (
                    doc,
                    type.Value.Id
                              );

                var parametersMask = new DB.BuiltInParameter[]
                {
                    DB.BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM,
                    DB.BuiltInParameter.ELEM_FAMILY_PARAM,
                    DB.BuiltInParameter.ELEM_TYPE_PARAM
                };

                newView.SetOrientation(orientation);
                view.get_Parameter(DB.BuiltInParameter.VIEWER_CROP_REGION).Set(0);
                ReplaceElement(ref view, newView, parametersMask);
            }
            else
            {
                view.SetOrientation(orientation);

                if (perspective.HasValue)
                {
                    view.get_Parameter(DB.BuiltInParameter.VIEWER_PERSPECTIVE).Set(perspective.Value ? 1 : 0);
                }

                ChangeElementTypeId(ref view, type.Value.Id);
            }

            if (name.HasValue && view is object)
            {
                try { view.Name = name.Value; }
                catch (Autodesk.Revit.Exceptions.ArgumentException e)
                {
                    AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, $"{e.Message.Replace($".{Environment.NewLine}", ". ")}");
                }
            }
        }
コード例 #2
0
ファイル: View3D.cs プロジェクト: vtaran/Dynamo
        /// <summary>
        /// Make a single element appear in a particular view
        /// </summary>
        /// <param name="view"></param>
        /// <param name="element"></param>
        protected static void IsolateInView(Autodesk.Revit.DB.View3D view, Autodesk.Revit.DB.Element element)
        {
            var fec = GetVisibleElementFilter();

            view.CropBoxActive = true;

            var all    = fec.ToElements();
            var toHide =
                fec.ToElements().Where(x => !x.IsHidden(view) && x.CanBeHidden(view) && x.Id != element.Id).Select(x => x.Id).ToList();

            if (toHide.Count > 0)
            {
                view.HideElements(toHide);
            }

            DocumentManager.Regenerate();

            if (view.IsPerspective)
            {
                var farClip = view.get_Parameter("Far Clip Active");
                farClip.Set(0);
            }
            else
            {
                var pts = new List <XYZ>();

                GetPointCloud(element, pts);

                var bounding     = view.CropBox;
                var transInverse = bounding.Transform.Inverse;
                var transPts     = pts.Select(transInverse.OfPoint);

                //ingore the Z coordindates and find
                //the max X ,Y and Min X, Y in 3d view.
                double dMaxX = 0, dMaxY = 0, dMinX = 0, dMinY = 0;

                bool bFirstPt = true;
                foreach (var pt1 in transPts)
                {
                    if (true == bFirstPt)
                    {
                        dMaxX    = pt1.X;
                        dMaxY    = pt1.Y;
                        dMinX    = pt1.X;
                        dMinY    = pt1.Y;
                        bFirstPt = false;
                    }
                    else
                    {
                        if (dMaxX < pt1.X)
                        {
                            dMaxX = pt1.X;
                        }
                        if (dMaxY < pt1.Y)
                        {
                            dMaxY = pt1.Y;
                        }
                        if (dMinX > pt1.X)
                        {
                            dMinX = pt1.X;
                        }
                        if (dMinY > pt1.Y)
                        {
                            dMinY = pt1.Y;
                        }
                    }
                }

                bounding.Max = new XYZ(dMaxX, dMaxY, bounding.Max.Z);
                bounding.Min = new XYZ(dMinX, dMinY, bounding.Min.Z);
                view.CropBox = bounding;
            }

            view.CropBoxVisible = false;
        }