Пересечение помещения с потолком (Revit)

Главная Форумы Задать вопрос Пересечение помещения с потолком (Revit)

Просмотр 1 сообщения - с 1 по 1 (всего 1)
  • Автор
    Сообщения
  • #10725 Score: 0
    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+1

    for 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:

    Надеюсь на вашу помощь.

Просмотр 1 сообщения - с 1 по 1 (всего 1)
  • Для ответа в этой теме необходимо авторизоваться.