是否有类似于 ElementIntersectsSolidFilter 的东西,我可以用它来查找特定房间内存在的所有 ElevationMarkers 或视图?
我们的立面视图命名标准应包括房间名称和房间编号,当用户更改房间名称时,我正在尝试自动重命名这些立面。
我编写了一个 DMU,它通过创建临时平面图视图 (tempView) 和 使用 FilteredElementCollector:
List<ElevationMarker> markersMaybeInRoom = new FilteredElementCollector(doc, tempView.Id)
.OfClass(typeof(ElevationMarker))
.WhereElementIsNotElementType()
.Cast<ElevationMarker>()
.Where(e => e.HasElevations())
.ToList();
foreach (ElevationMarker marker in markersMaybeInRoom)
{
BoundingBoxXYZ emBB = marker.get_BoundingBox(tempView);
double x = emBB.Max.X - offset;
double y = emBB.Max.Y - offset;
XYZ markerLocation = new XYZ(x, y, tempView.GenLevel.ProjectElevation);
Room markerRoom = doc.GetRoomAtPoint(markerLocation, roomPhase);
if (markerRoom == null)
continue; // ElevationMarker is not in a Room
if (markerRoom.Id != room.Id)
continue; // ElevationMarker is not in the modified Room
markersInRoom.Add(marker);
}
但是,由于我们模型中元素的数量,这实在是太慢了。 我知道一种更快的方法是在创建立面时使用 ExtensibleStorage 来存储房间的唯一 ID,并为这些关联 ID 设置 DMU。 不过,我试图避免这种情况,因为它只适用于向前发展的模型,而 FilteredElementCollector 可以适用于any模型。
我建议采用一种完全不同的方法,希望更有效:
[bottomZ,topZ]
间隔与 A 中的哪些条目重叠。