Пересечение помещения с потолком (Revit)
Главная › Форумы › Задать вопрос › Пересечение помещения с потолком (Revit)
Помечено: Clash, Intersection, Пересечения
- В этой теме 0 ответов, 1 участник, последнее обновление 2 года, 10 месяцев назад сделано Stibus.
-
АвторСообщения
-
StibusУчастник
Приветствую товарищи.
Прошу помощи в редактировании/дополнении текста кода Python-скрипта. Конечная задача в том, чтобы передать информацию из потолка в помещение и наоборот (из помещения в потолок). Предполагаю решать через анализ на пересечение элементов, в случае пересечения (касания) запускать процедуру передачи информации.
Прилагаю свой код (без указания подгруженных библиотек для краткости):
doc = DocumentManager.Instance.CurrentDBDocument
opt = Options()Levels=FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).WhereElementIsNotElementType().ToElements()
Rooms=FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Rooms).WhereElementIsNotElementType().ToElements()
Ceilings=FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Ceilings).WhereElementIsNotElementType().ToElements()n=0
while n<len(Rooms):
if Rooms[n].get_Parameter(BuiltInParameter.ROOM_AREA).AsDouble()==0: del Rooms[n]
#Rooms.remove(Room)
n=n+1for Ceiling in Ceilings:
if Ceiling.get_Parameter(BuiltInParameter.HOST_AREA_COMPUTED).AsDouble()==0: Ceilings.remove(Ceiling)RoomsAtLevels=[]
CeilingsAtLevels=[]
n=0
for Level in Levels:
RoomsAtLevels.Insert(n,[])
for Room in Rooms:
if Room.get_Parameter(BuiltInParameter.ROOM_LEVEL_ID).AsElementId()==Level.Id: RoomsAtLevels[n].append(Room)
CeilingsAtLevels.Insert(n,[])
for Ceiling in Ceilings:
if Ceiling.get_Parameter(BuiltInParameter.LEVEL_PARAM).AsElementId()==Level.Id: CeilingsAtLevels[n].append(Ceiling)
n=n+1
for rooms, ceilings in zip(RoomsAtLevels, CeilingsAtLevels):
for room in rooms:
Rg=room.get_Geometry(opt)
for ceiling in ceilings:
Cg=ceiling.get_Geometry(opt)
intersection = BooleanOperationsUtils.ExecuteBooleanOperation(Rg, Cg, BooleanOperationsType.Intersect)На последней строчке ошибка при выполнении:
Изначально задумка была в том чтобы обойтись без геометрии Dynamo, но теперь я готов на любое решение, но для оптимизации всё-так нужно остаться в границах единого Python-скрипта.
При выводе на OUT элементов анализа получаются списки с единственными элементами …Solid:
которые не обрабатываются закоментированной строкой. Попытки взять сами элементы списков (Rg[0] и Cg[0]) тоже выдают ошибку:
Суть: как пересечь элементы по возможности без использования геометрии Dynamo, в крайнем случае через неё, но в рамках Python-скрипта.
Читал статью Jeremy Tammik, он говорит что прямого конфликта геометрий Revit через API сделать нельзя (нет пока методов), но можно сделать это косвенным путём, но пример на C#, в котором я не разбираюсь.
С другой стороны меня мучает вопрос как это делается в самом Revit:
Надеюсь на вашу помощь.
-
АвторСообщения
- Для ответа в этой теме необходимо авторизоваться.