RevitNet 调用 Revit API 中射线法求模型同一个构件出现两个不同值的问题记录

文章讨论了在使用射线法进行三维模型的碰撞检测和间距测量时遇到的问题,即当target设置为element时,可能会得到重复的交点值。作者发现这可能是因为射线法对两个face进行了判定。为了解决这个问题,作者尝试了两种方法:一是对context的值进行重新筛选,二是改用FindNearest方法获取最近的面,从而避免了重复值的出现。这两种方法都在特定情况下有效,但可能不适用于所有情况。
摘要由CSDN通过智能技术生成

射线法求交是很多三维模型求碰撞和测量间距最常用的节点,但是再使用射线法将target设置为element的时候会发现会出现两个相同的值。
下面用楼板距离,下图中会出现两个不同的值,在我修改板厚之后发现正好是板厚的距离,可以猜测射线法会对两个face进行判定相交,但是与我们需要的每个element输出一个值不符,这里需要重新做一次判定或者直接取最小值获得净高。

var intersector = new ReferenceIntersector(classFilter, FindReferenceTarget.Element, modelView);
                intersector.FindReferencesInRevitLinks = true;

                var result = intersector.Find(origin, -XYZ.BasisZ);

                foreach (var context in result)
                {
                    var ele = context.GetReference();
                    var revitLinkInstance = _document.GetElement(ele) as RevitLinkInstance;
                    var linkDoc = revitLinkInstance.GetLinkDocument();
                    
                    var eleName = linkDoc.GetElement(ele.LinkedElementId);
                    
                    var eleNmae = _document.GetElement(ele).Name;
            
                    
                    MessageBox.Show(result.Count.ToString() + "-" + eleNmae + $"{eleName.GetType()}" + "-" + context.Proximity * 304.8);
                }

在这里插入图片描述
在这里插入图片描述
后面我将方法改为获取最近的面才避免这种情况发生,但是碰到其他情况,可能需要循环一下context的值进行重新筛选


            var result = intersector.FindNearest(origin, -XYZ.BasisZ);


            var stringbuild = new StringBuilder();

            var ele = result.GetReference();
            var revitLinkInstance = _document.GetElement(ele) as RevitLinkInstance;
            var linkDoc = revitLinkInstance?.GetLinkDocument();

            var eleName = linkDoc?.GetElement(ele.LinkedElementId);

            stringbuild.Append(
                $"ElementType : {eleName?.GetType()} , ElementLinkId:{ele.LinkedElementId} ,Proximity : {result.Proximity * 304.8} \r\n");

            MessageBox.Show(stringbuild.ToString());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值