start

  1. [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]
  2. public class cmdPickPointIn3d : IExternalCommand
  3. {
  4.     public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
  5.     {
  6.         UIApplication app = commandData.Application;
  7.         Document doc = app.ActiveUIDocument.Document;
  8.  
  9.         XYZ point_in_3d;
  10.  
  11.         if (PickFaceSetWorkPlaneAndPickPoint( app.ActiveUIDocument, out point_in_3d))
  12.         {
  13.             TaskDialog.Show("3D Point Selected",
  14.                 "3D point picked on the plane"
  15.                 + " defined by the selected face: "
  16.                 + PointString(point_in_3d));
  17.  
  18.             return Result.Succeeded;
  19.         }
  20.         else
  21.         {
  22.             messages = "3D point selection failed";
  23.             return Result.Failed;
  24.         }
  25.  
  26.         return Result.Succeeded;
  27.     }
  28.     string PointString(XYZ p)
  29.     {
  30.         return string.Format("({0},{1},{2})",
  31.             RealString(p.X),
  32.             RealString(p.Y),
  33.             RealString(p.Z));
  34.     }
  35.     string PointString(UV p)
  36.     {
  37.         return string.Format("({0},{1})",
  38.             RealString(p.U),
  39.             RealString(p.V));
  40.     }
  41.     string RealString(double a)
  42.     {
  43.         return a.ToString("0.##");
  44.     }
  45.     bool PickFaceSetWorkPlaneAndPickPoint(UIDocument uidoc, out XYZ point_in_3d)
  46.     {
  47.         point_in_3d = null;
  48.  
  49.         Document doc = uidoc.Document;
  50.  
  51.         Reference r = uidoc.Selection.PickObject(
  52.             ObjectType.Face,
  53.             "Please select a planar face to define work plane");
  54.  
  55.         Element e = doc.get_Element(r.ElementId);
  56.  
  57.         if (null != e)
  58.         {
  59.             PlanarFace face
  60.                 = e.GetGeometryObjectFromReference(r)
  61.                 as PlanarFace;
  62.  
  63.             if (face != null)
  64.             {
  65.                 Plane plane = new Plane(
  66.                     face.Normal, face.Origin);
  67.  
  68.                 Transaction t = new Transaction(doc);
  69.  
  70.                 t.Start("Temporarily set work plane"
  71.                     + " to pick point in 3D");
  72.  
  73.                 SketchPlane sp = doc.Create.NewSketchPlane(
  74.                     plane);
  75.  
  76.                 uidoc.ActiveView.SketchPlane = sp;
  77.                 uidoc.ActiveView.ShowActiveWorkPlane();
  78.  
  79.                 try
  80.                 {
  81.                     point_in_3d = uidoc.Selection.PickPoint(
  82.                         "Please pick a point on the plane"
  83.                         + " defined by the selected face");
  84.                 }
  85.                 catch (OperationCanceledException)
  86.                 {
  87.                 }
  88.  
  89.                 t.RollBack();
  90.             }
  91.         }
  92.         return null != point_in_3d;
  93.     }
  94. }

url:http://greatverve.cnblogs.com/p/pick-a-point-in-3d.html

Revit API选择三维视图上一点的更多相关文章

  1. Revit API切换三维视图

    切换视图必须在事务结束之后,这个困惑了半天,记录一下. , , -));//斜视45度             ts.Commit();             //切换视图必须在事务结束后,否则会提 ...

  2. Revit如何修改三维视图背景色

    Revit中默认的三维视图背景色为白色,有时候为了让现实效果更佳逼真,需要将三维视图背景色设置为天空色,只需在三维视图属性中打开"图形显示选项"即可对三维视图背景色进行设置.

  3. Revit API创建详图视图

    start //创建详图视图 Transaction ts = new Transaction(doc, "http://greatverve.cnblogs.com"); ts. ...

  4. Revit API 判断一个构件在某个视图中的可见性

    查看 Revit API.发现有Element::IsHidden这个方法.通过UI创建一个element,注意要使得这个element在某些视图可见,但是在另一些视图不可见.运行下面的方法,你会发现 ...

  5. threejs构建web三维视图入门教程

    本文是一篇简单的webGL+threejs构建web三维视图的入门教程,你可以了解到利用threejs创建简单的三维图形,并且控制图形运动.若有不足,欢迎指出. 本文使用的框架是three.js gi ...

  6. Revit API射线法读取空间中相交的元素

    Revit API提供根据射线来寻找经过的元素.方法是固定模式,没什么好说.关键代码:doc.FindReferencesWithContextByDirection(ptStart, (ptEnd  ...

  7. 图片上传插件ImgUploadJS:用HTML5 File API 实现截图粘贴上传、拖拽上传

    一 . 背景及效果 当前互联网上传文件最多的就是图片文件了,但是传统web图片的截图上传需要:截图保存->选择路径->保存后再点击上传->选择路径->上传->插入. 图片 ...

  8. AGS API for JavaScript 图表上地图

    原文:AGS API for JavaScript 图表上地图 图1 图2 图3 -------------------------------------华丽丽的分割线--------------- ...

  9. js移动端/H5同时选择多张图片上传并使用canvas压缩图片

    最近在做一个H5的项目,里边涉及到拍照上传图片的功能以及识别图片的功能,这里对识别图片的功能不做赘述,不属本文范畴.我在做完并上线项目后,同事跟我提了一个要求是可不可以同时选择多张图片上传,我做的时候 ...

随机推荐

  1. MacOS 下提示APP 损坏 无法安装 解决方法

    sudo spctl --master-disable

  2. flask基础之Response响应对象(九)

    前言 Response对象负责对客户端的响应,每一个请求都会有一个Response对象,那么它在一个请求的声明周期内是怎么发挥作用的呢? Response对象 响应发生的位置 先回顾一下http请求的 ...

  3. OpenWRT开发之——对C++的支持(解决库依赖问题)【转】

    转自:https://my.oschina.net/hevakelcj/blog/411944 摘要: 本文尝试用C++来开发一个cpp-demo包 遇到打包库依赖的问题,分析打包过程并解决了这个问题 ...

  4. [转]使用 mitmproxy + python 做拦截代理

    使用 mitmproxy + python 做拦截代理   本文是一个较为完整的 mitmproxy 教程,侧重于介绍如何开发拦截脚本,帮助读者能够快速得到一个自定义的代理工具. 本文假设读者有基本的 ...

  5. 打包部署到tomcat

    部署到tomcat的方法 注意:在eclipse 或 idea 上需要引入外部tomcat 1.将程序打成war包启动tomcat 2.将target 文件下内容压缩城zip,发布到tomcat RO ...

  6. 如何将java项目转化为web项目

    1.修改工程文件 找到项目工作空间目录,打开.project文件,找到:<natures> </natures>代码段,在代码段中加入如下内容并保存:<nature> ...

  7. 七、vue语法补充二(动态组件 & 异步组件、访问元素 & 组件、混入)

    1..sync 修饰符 2.3.0+ 新增 vue 修饰符sync的功能是:当一个子组件改变了一个 prop 的值时,这个变化也会同步到父组件中所绑定.类似于v-model的效果 例子: this.$ ...

  8. 网络抓包神器-Charles使用指南

    http://blog.csdn.net/liulanghk/article/details/46342205 目录 概述 安装 显示模式 PC端抓包 移动应用抓包 其他技能 charles使用问题汇 ...

  9. linux后端诊断与调试技术

    本文不是liunx命令使用教程,也不打算全方面阐明其用法,互联网公司项目很多,服务程序之间相互依赖调用很复杂,各种因素会影响线程服务正常运行,特别是基础服务组件更是如此,当出现各种问题时,如何诊断li ...

  10. KnockoutJs学习笔记(八)

    with binding用于创建一个新的绑定环境(binding context),包含with binding的元素的所有子元素都将处于指定的object的环境限定内. 下面是一个简单的使用with ...