在项目中,我们一般是用使用点先投影到线上面,然后再用这个点去和端点去算距离。
但是如果那个点不能投影到线上面时,就会出现一些计算不准确的问题。
也让我们尽量的避开RevitAPI中的一些坑。而且基本适用于所有点求点到直线距离的情况。
这次教给大家一个用几何的方法计算点A到线BC的距离。代码如下:

方法示例

public double GetPointToLineDistance(XYZ aPoint, Curve l){//先分别得到点的坐标XYZ bPoint = l.GetEndPoint(0);XYZ cPoint = l.GetEndPoint(1);//分别计算a、b、c值double a = l.Length;double b = aPoint.DistanceTo(cPoint);double c = aPoint.DistanceTo(bPoint);//计算周长double p = (a + b + c) / 2;//计算面积double s = Math.Sqrt(p * (p - a) * (p - b) * (p - c));//需要判断s值if (s < 0 || s == 0) return 0.0; //说明三点不能形成三角形,点在线的延长线上或者在点在线上//计算距离double ha = 2 * s / a;return ha;}

这里使用的是海伦公式去计算面积然后返回来推出高度的方法,这个方法再自己加以改变的话,可以用来判断点是否位于线段上,或者延长线上。

主程序调用

try{UIDocument uidoc = commandData.Application.ActiveUIDocument;Document doc = uidoc.Document;//选择点XYZ xyz = uidoc.Selection.PickPoint(ObjectSnapTypes.Endpoints, "Select Point");TaskDialog.Show("Point", xyz.ToString());//选择线Reference refer = uidoc.Selection.PickObject(ObjectType.Edge, "Select edge");Edge curv = doc.GetElement(refer).GetGeometryObjectFromReference(refer) as Edge;Curve cur = curv.AsCurve();TaskDialog.Show("Curve", curv.ToString());//计算double d = GetPointToLineDistance(xyz, cur);TaskDialog.Show("1", d.ToString());}catch (Exception ex){message = ex.Message;return Result.Failed;}

求空间中点到线的最短距离(Revit二次开发)相关推荐

  1. Android 高德地图计算 Circle 计算上下左右四个点经纬度,Circle和Polygon是否全部包含,计算地图中点到线的最短距离

    /*** 假设地球为一半径为R的表面光滑圆球体,* 表面上同一经线圈上相差1"两点间的距离为 2πR/360/3600* 表面上同一纬线圈上相差1"两点间的距离为 2πR×cos( ...

  2. Revit二次开发对于BIM正向设计的帮助

    Revit提供非常丰富的API给工程师使用,使用这些API可以解决繁琐操作,提高效率.国内对于Revit二次开发的书籍较少,建议开发者多参考RevitSDK中的示例,学习Revit二次开发.

  3. java点到直线的投影点到经纬度_12分高考答题必刷题型,“空间向量分析点到线的距离问题”...

    12分高考答题必刷题型,"空间向量分析点到线的距离问题" 立体几何大题 立体几何在各地高考中,基本都占据20分以上的比例,在解答方法上,小题技巧相对比较丰富,但大题解答上有明显的规 ...

  4. 点到直线的投影公式_12分高考答题必刷题型,“空间向量分析点到线的距离问题”...

    12分高考答题必刷题型,"空间向量分析点到线的距离问题" 立体几何大题 立体几何在各地高考中,基本都占据20分以上的比例,在解答方法上,小题技巧相对比较丰富,但大题解答上有明显的规 ...

  5. 求空间中两条直线的交点

    求空间中两条直线的交点 求交点坐标的问题完全可以用数学的方法求得结果的表达公式来解决啊 设P1(x1,y1,z1),P2(x2,y2,z2) L2:P3(x3,y3,z3),P4(x4,y4,z4) ...

  6. Revit二次开发 如何获得链接CAD中所有的多段线PolyLine?

    项目场景: 最近做的这个项目,涉及到提取链接CAD中的所有多段线,并根据这些多段线的几何信息做一些分析,但是产生了一些意想不到的问题. 问题描述 通过网上流传的提取手段,并不能完全提取CAD中的所有多 ...

  7. Revit二次开发——引用dynamo中的几何库

    前沿 dynamo的几何库其实是非常强大的,如果自己靠着RevitAPI去写还是非常费劲的.所以想引用dynamo的几何库来做一些工作.主要参考的就是这篇文章.Revit二次开发--不开启Dynamo ...

  8. 【Revit二次开发】“附加模块”中添加“外部工具”AND外部工具中添加新建插件

    写在前面,今天第一次接触Revit二次开发,要做的两件事情 第一,搭建环境(安装的是破解版2017的Revit软件.下载SDK2017的并安装.还有开发平台VS2015). 第二,首先就是运行Hell ...

  9. revit二次开发之多梁夸跨断(就是拆分梁啦)

    2018.7.17.南京.外面36°,宜烧烤,感谢麻老师,k神.喵的Leo周*(本人)好饿.早知道不学C#了... 环境:revit2018 首先先介绍几个比较重要的先行条件.如果知道最好,不知道我接 ...

最新文章

  1. jvm优化_镜像镜像–使用反射在运行时查看JVM内部
  2. 【原创】DevExpress控件GridControl中的布局详解
  3. 虚拟机中的solaris无法通过putty连接(网络模式为桥接模式)
  4. Libra白皮书解读
  5. Unity ToLua 中Update的调用流程
  6. 【BZOJ-1097】旅游景点atr SPFA + 状压DP
  7. mysql_num_rows
  8. 自走棋服务器没有响应,从爆火到凉凉,多多自走棋宣布停服,加入腾讯属于无奈?...
  9. SteamVR 2.x手部模型、控制器的替换(12)
  10. 世界上最遥远的距离就是?
  11. Single Scale Retinex 增强 matlab 实现
  12. Springboot健康饮食小程序的设计的实现毕业设计源码280920
  13. 微信h5获取用户openid:基于vue3+springBoot
  14. 不知道如何裁剪视频画面尺寸?这篇文章告诉你如何视频裁剪画面
  15. Lycn 2013 with SQL AlwaysOn 「二」偷梁换柱装Lync
  16. Ebox终于到了,高兴
  17. [推荐] 经典健康谚语100句
  18. 模型常用评估指标详解
  19. 运维和shell工具的使用
  20. 常用邮箱smtp的设置

热门文章

  1. 强制关闭无法关闭的进程的方法
  2. [精]Oracle 内存结构详解
  3. wireshark分析实战
  4. 瀚高CEO苗健:用开源软件改变中国基础软件产业格局
  5. 配置teamviewer远程无显示器ubuntu工控机实操
  6. 制作机顶盒CM311-1a的armbian img文件
  7. chp2-2-2_fmm_word_seg通过最大正向匹配算法对句子进行切分
  8. 个人或企业网站建设备案不备案有区别?如何备案?
  9. linux + colmap 错误汇总
  10. 用python计算残差等