Revit二次开发,已知ab直线求经过a点并垂直于ab的垂线
文章插图
如上图 , 有abcd四个点 , 求经过ab直线上的a点的垂线 。
然后求该垂线与cd直线的交点e 。
//cd直线 , 注意要使用线段 , 否则获取交点e将偏差Autodesk.Revit.DB.Line cd = Autodesk.Revit.DB.Line.CreateBound(c, d);//求ab直线上经过a点的垂线var dir = (b - a).Normalize();var vdir = dir.CrossProduct(XYZ.BasisZ);//生成垂线 , 注意 , 垂线必须是无限延长线var ver = Autodesk.Revit.DB.Line.CreateUnbound(a, vdir);//得到交点evar e = LineUtil.GetIntersectionPoint(ver, cd);
1.先求ab线以a点为圆心的单位向量:
var dir = (b - a).Normalize();
【Revit二次开发,已知ab直线求经过a点并垂直于ab的垂线】2.求得经过a点的法线:
var vdir = dir.CrossProduct(XYZ.BasisZ);
原理是使用叉乘Z轴 。 根据右手定则 , 可以得到他的法线 。
3.有了法线 , 又已知起点a , 那么作一条垂直于ab线 , 且经过a点的垂线ver:
var ver = Autodesk.Revit.DB.Line.CreateUnbound(a, vdir);
4.然后求交点e , ver线与cd线进行相交后得到e点:
var e = LineUtil.GetIntersectionPoint(ver, cd);
5.特别提醒: cd线必须是线段 , 而ver线必须是无限延长线 , 否则得到的交点在三维下将有偏差 。
实际应用的效果图如下:
文章插图
?
源码下载:
- 化石|迄今为止已知的最大的蛇是泰坦巨蟒,它是最危险的生物吗?
- 科学家|人类已知最可怕的理论是什么?科学家:宁愿没有发现它
- 太阳系|宇宙中已知最大的天体,太阳在它面前就像个细胞
- 瓜聊科学|是一场火山爆发,突破声音极限会怎样?已知最大声音传播4800公里
- 全球神兽名录|《全球神兽名录》揭示了全世界范围内所有已知的著名神兽
- 黑洞|宇宙中发生了自大爆炸以来最大的已知爆炸
- 讲点工业设计|打造测绘CAD解决方案,中望软件携手法国最大土木二次开发商