在项目中创建的实体图元均包含 BoundingBox 属性
在Revit软件中使用的是
轴对齐包围盒(AABB,Axis Aligned Bounding Box)
顾名思义就是无论对象如何旋转
它的包围盒永远都是平行于XYZ轴
图片
Element 包含属性 BoundingBox
我们获取它并在项目中创建展示
图片
示例
首先在项目中随意创建了一些图元
获取他们的包围盒
然后创建展示出来
using Autodesk.Revit.Attributes;
using Autodesk.Revit.DB;
using Autodesk.Revit.UI.Selection;
using RevitAPI.Toolkit.Attributes;
using RevitAPI.Toolkit.Extensions;
using RevitAPI.Toolkit.Utils;
using System.Collections.Generic;
using System.Linq;
namespace Hybh.CmdElementBox
{
[Xml("范围框", "Element范围框")]
[Transaction(TransactionMode.Manual)]
public class Cmd : XmlRevitCommand
{
protected override void Execute(ref string message, ElementSet elements)
{
var doc = uidoc.Document;
if (
XmlSelection.PickObjectsOutReferences(
uidoc,
ObjectType.Element,
out var references,
doc.FilterElement(o => o.get_BoundingBox(null) != null)
)
)
{
var els = references.ToElements<Element>(doc);
var shapes = new List<GeometryObject>();
foreach (var el in els)
{
var lines = el.get_BoundingBox(doc.ActiveView).GetBoxLines();
shapes.AddRange(lines);
}
if (shapes.Any())
{
doc.Transaction(
t =>
{
var ds = DirectShape.CreateElement(
doc,
new ElementId(BuiltInCategory.OST_GenericModel)
);
ds.SetName("Revit二次开发教程");
ds.SetShape(shapes);
},
"范围框"
);
}
}
}
}
}
可以看到这些包围盒都与视图方向是对齐的
我们有了这些包围盒就可以做碰撞核查
而且是非常快速的!
Revit中可用的边界框过滤器:
BoundingBoxIntersectsFilter
此过滤器可用于查找其边界框与指定轴对齐的矩形棱柱体相交的元素
BoundingBoxIsInsideFilter
此过滤器可用于查找其边界框完全包含在指定轴对齐的矩形棱柱体内的元素
BoundingBoxContainsPointFilter
此过滤器可用于查找其边界框包含指定点的元素