Быстрое получение данных о высоте внутри комнатыC#

Место общения программистов C#
Ответить
Anonymous
 Быстрое получение данных о высоте внутри комнаты

Сообщение Anonymous »

Есть ли что-то похожее на ElementIntersectsSolidFilter, которое я бы использовал для поиска всех ElevationMarkers или Views, существующих в определенной комнате?
Наш стандарт именования View для Elevations должен включать Название комнаты и номер комнаты, и я пытаюсь автоматизировать переименование этих фасадов, когда пользователь меняет имя комнаты.
Я написал DMU, ​​который работает путем создания временного плана этажа. Просмотр (tempView) и
с использованием FilteredElementCollector:

Код: Выделить всё

List markersMaybeInRoom = new FilteredElementCollector(doc, tempView.Id)
.OfClass(typeof(ElevationMarker))
.WhereElementIsNotElementType()
.Cast()
.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 для хранения уникального идентификатора комнаты при создании фасадов и настройки DMU для этих связанных идентификаторов. Однако я пытаюсь этого избежать, потому что это будет работать только с моделями, продвигающимися вперед, а не с FilteredElementCollector, который может работать с любой моделью.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ide-a-room
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»