Revit二次开发,已知ab直线求经过a点并垂直于ab的垂线


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线必须是无限延长线 , 否则得到的交点在三维下将有偏差 。
实际应用的效果图如下:
Revit二次开发,已知ab直线求经过a点并垂直于ab的垂线文章插图
?
源码下载: