Revit二次开发---碰撞检测

本文提供了一种在Revit API中实现碰撞检测的方法,通过使用快速过滤器和慢速过滤器结合的方式,提高了检测效率并减少了资源消耗。

记录一下,写的比较简单 核心代码就这点。

没仔细测,反正目前检测的都是和rvt自带碰撞检测结果一样的。

List<ElementId> left;//要检测碰撞的元素id
List<ElementId> right;//要检测碰撞的元素id
string sResult="";
foreach(ElementId eid left)
{
    Element elem = doc.GetElement(eid);
    FilteredElementCollector collector = new FilteredElementCollector(doc,right);//创建收集器,指定收集范围
    ElementIntersectsElementFilter filter = new ElementIntersectsElementFilter(elem);//用API过滤相交元素
    List<Element> lstElem = collector.WherePasses(filter).ToElements().ToList();
    if(lstElem.Count > 0)
    {
        foreach(Element collision_elem lstElem)
        {
            sInfo += elem.Name+" Id:"+elem.Id+" ----- "+collision_elem.Name+" Id:"+collision_elem.Id +"\n";
        }
        //处理两个集合具有相同id时,防止重复检测
        if(right.Contains(eid))
            right.Remove(eid);
    }
}
TaskDialog.Show("result",sInfo);

纯手敲,可能有误,大家自行修改或回复。

-----------更新---------------

如果检测一个很大的模型,List<

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘿呦嘿呦嘿呦嘿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值