revit二次开发:求点到面的距离

假设知道一条线的向量和中心点坐标,通过映射获取到该线下的到某一构件的垂直距离。

 

 //采用射线法,计算预留洞与楼板的高差值
            Func<View3D, bool> isNotTemplate = v3 => !(v3.IsTemplate);
            View3D _view3D = collector.OfClass(typeof(View3D)).Cast<View3D>().First<View3D>(isNotTemplate);
            XYZ curve_dir = (_curve as Line).Direction;
            XYZ rayDirection = new XYZ(0, 0, -10000);
            //过滤出当前文档的楼板
            ElementClassFilter floorFilter = new ElementClassFilter(typeof(Floor));
            ReferenceIntersector refIntersector = new ReferenceIntersector(floorFilter, FindReferenceTarget.Face, _view3D);
            ReferenceWithContext refWithContext = refIntersector.FindNearest(newp, rayDirection);
            if (refWithContext == null)
            {
                return 0;
            }
            Reference _ref = refWithContext.GetReference();
            var aaa = docST.GetElement(_ref);
//获取到射到的元素的面,就是碰到的第一个面,
            Face downFace = aaa.GetGeometryObjectFromReference(_ref) as Face;
//通过提供的face.project(xyz)获取到一个数据集,调用distance,就是点到面的直线距离
            var a= downFace.Project(newp);
            double length = 0;
            if (a != null)
            {
               length = a.Distance;
            }
            return Math.Round(length*304.8);

 

 

 

 

 

 

 

 

 

posted on 2019-11-18 16:01  siy_cst  阅读(1383)  评论(0)    收藏  举报

导航