zoukankan      html  css  js  c++  java
  • Revit API选择三维视图上一点

    start
    [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    public class cmdPickPointIn3d : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
        {
            UIApplication app = commandData.Application;
            Document doc = app.ActiveUIDocument.Document;

            XYZ point_in_3d;

            if (PickFaceSetWorkPlaneAndPickPoint( app.ActiveUIDocument, out point_in_3d))
            {
                TaskDialog.Show("3D Point Selected",
                    "3D point picked on the plane"
                    + " defined by the selected face: "
                    + PointString(point_in_3d));

                return Result.Succeeded;
            }
            else
            {
                messages = "3D point selection failed";
                return Result.Failed;
            }

            return Result.Succeeded;
        }
        string PointString(XYZ p)
        {
            return string.Format("({0},{1},{2})",
                RealString(p.X),
                RealString(p.Y),
                RealString(p.Z));
        }
        string PointString(UV p)
        {
            return string.Format("({0},{1})",
                RealString(p.U),
                RealString(p.V));
        }
        string RealString(double a)
        {
            return a.ToString("0.##");
        }
        bool PickFaceSetWorkPlaneAndPickPoint(UIDocument uidoc, out XYZ point_in_3d)
        {
            point_in_3d = null;

            Document doc = uidoc.Document;

            Reference r = uidoc.Selection.PickObject(
                ObjectType.Face,
                "Please select a planar face to define work plane");

            Element e = doc.get_Element(r.ElementId);

            if (null != e)
            {
                PlanarFace face
                    = e.GetGeometryObjectFromReference(r)
                    as PlanarFace;

                if (face != null)
                {
                    Plane plane = new Plane(
                        face.Normal, face.Origin);

                    Transaction t = new Transaction(doc);

                    t.Start("Temporarily set work plane"
                        + " to pick point in 3D");

                    SketchPlane sp = doc.Create.NewSketchPlane(
                        plane);

                    uidoc.ActiveView.SketchPlane = sp;
                    uidoc.ActiveView.ShowActiveWorkPlane();

                    try
                    {
                        point_in_3d = uidoc.Selection.PickPoint(
                            "Please pick a point on the plane"
                            + " defined by the selected face");
                    }
                    catch (OperationCanceledException)
                    {
                    }

                    t.RollBack();
                }
            }
            return null != point_in_3d;
        }
    }
    url:http://greatverve.cnblogs.com/p/pick-a-point-in-3d.html
  • 相关阅读:
    用于创建和管理 Azure 虚拟机的常用 PowerShell 命令
    在 Azure Resource Manager 中为虚拟机设置密钥保管库
    使用 Azure 资源管理器向 Windows VM 应用策略
    Azure 门户中基于角色的访问控制入门
    为 Azure Resource Manager 中的虚拟机设置 WinRM 访问权限
    如何加密 Windows VM 上的虚拟磁盘
    适用于 Windows VM 的 Azure 示例基础结构演练
    Azure 中虚拟机的备份和还原选项
    1.1 基本算法和记号
    tomcat的class加载的优先顺序
  • 原文地址:https://www.cnblogs.com/greatverve/p/pick-a-point-in-3d.html
Copyright © 2011-2022 走看看