记录一下,写的比较简单 核心代码就这点。
没仔细测,反正目前检测的都是和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<

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

被折叠的 条评论
为什么被折叠?



