Грани/поверхности помещений у наружной стены

Главная Форумы Python Помогите с питон кодом Грани/поверхности помещений у наружной стены

Просмотр 15 сообщений - с 1 по 15 (из 30 всего)
  • Автор
    Сообщения
  • #1835 Score: 0
    Alexandr Popov
    Модератор
    44 pts

    Всем здравствуйте! Решаю задачу по вытаскиванию наружных площадей стен из ревитовской модели в ексель. Некоторые примеры уже скидывал сюда в DOWNLOAD. Основная проблема в том, что стены не граничат одна с одним помещением, а обычно идут сразу на много помещений, а ещё как в моем случае одна стена на 9 этажей (т.е. не режется по вертикали). Так же вместо окон встречаются витражи, да и встречаются модели, где все наружные стены выполнены витражами.

    На мой взгляд есть несколько способов решения этой задачи:

    1. В лоб, найдя все грани помещения по основанию, найти грани по основанию стены (предварительно проверив что эта стена граничит с помещением), и найти кратчайшее расстояние от всех граней помещения до наибольшей грани стены и взять только те грани помещения, от которых скажем расстояние до стены меньше 300мм. В таком случае проблема в том, что у меня не получается найти кратчайшее расстояние правильно

     

    1.   import clr
      clr.AddReference('ProtoGeometry')
      from Autodesk.DesignScript.Geometry import *
      #Введенные в этом узле данные сохраняется в виде списка в переменных IN.
      pA = IN[2]
      pB = IN[1]
      pC = IN[0]
      curveroom = IN[3]
      room = IN[4]
      high = IN[5]
      dist = []
      list1 = []
      count=pC.Count
      i=0
      while i<count:
      count2=curveroom[i][0].Count
      if count2==1:
      j=0
      dist=[]
      count1=pC[i][0][0].Count
      while j<count1:
      BC=Line.ByStartPointEndPoint(pC[i][0][0][j],pB[i])
      AC=Line.ByStartPointEndPoint(pC[i][0][0][j],pA[i])
      AB=Line.ByStartPointEndPoint(pA[i],pB[i])
      a=AC.Length
      b=BC.Length
      c=AB.Length
      p=a+b+c/2
      h=2*((p*(p-a)*(p-b)*(p-c))**0.5)/c
      dist.append(h)
      if j==0:
      min=dist[0]
      if j>0:
      if dist[j]<min:
      min=dist[j]
      j=j+1
      k=0
      while k<count1:
      if dist[k]==min:
      Swall=curveroom[i][0][0][k].Length*high[i]/1000000
      list1.append([room[i],Swall])
      k=k+1
      i=i+1
      #Назначьте вывод переменной OUT.
      OUT = list1
    2. На вход подаются 3 точки (середина каждой грани помещения) и начало и конец стены.

    в таком случае dist (расстояние от грани до стены) почему-то выдается по 48890 63884 и т.п.

    1. Через какую-то функцию/нод сразу вытащить поверхность помещения, граничащую со стеной, но я не знаю такой функции/нода =(
    2. Попробовать задать Пространства и вытащить поверхности помещений, граничащие с наружными стенами из стандартного ревитовского теплотехнического расчета. Но я не нашел какие это категории или как их вытащить.
    #1836 Score: 0
    Legantmar
    Хранитель
    474 pts

    Александр, я тоже думал сделать теплотехнический расчет.
    Решение представляю себе примерно так:

    #1837 Score: 0
    Legantmar
    Хранитель
    474 pts

    пока отложил..
    если интересно вот скрипт, может быть сам быстрее доделаешь.

    #1839 Score: 0
    Alexandr Popov
    Модератор
    44 pts

    Дак мой скрипт по такой же логике и считает :)

    #1840 Score: 0
    Legantmar
    Хранитель
    474 pts

    вот набросал посмотри:
    https://yadi.sk/d/vAS8qrwYj76xH

    будут вопросы, задавай.

    #1842 Score: 0
    Alexandr Popov
    Модератор
    44 pts

    Legantmar, мне кажется я в этой задаче подальше ушел, решая по той же логике.

    https://cloud.mail.ru/public/7h6j/Kdgyi5feJ

    Основная проблема в том, что очень часто встречаются витражи и ноды Tool.GetSurround… не работают =( не находят элементы. И ещё у помещений с колоннами из-за большого количества граней не строятся Solid’ы.

    #1843 Score: 0
    Legantmar
    Хранитель
    474 pts

    1) витраж это стена со свойством окна.
    если он идет на высоту этажа или больше (а не как маленькое окно), то не вижу проблем.

    2) для колонн нужно снять галочку

    #1844 Score: 0
    Alexandr Popov
    Модератор
    44 pts

    Эх, если бы так все просто =\ У меня в модели около 3000 помещений, постоянно какие-нибудь 30 да выдадут ошибки, то это не так, то там не замкнутый PolyСurve.

    А по поводу витражей, из них не создать Solid и приходится делать солид по каждой панели и чекать граничит ли помещение с ней. И когда начинает список из 21000 элементов прогоняться 3000 раз – комп либо выключается, либо зависает, а в лучшем случае ревит закрывается.

    #1845 Score: 0
    Legantmar
    Хранитель
    474 pts

    ты поиграйся сначала на кошках простых моделях, чтобы понять как это работает.
    про солид я  не понял, я сделал по другому. (извини, но твои накрученные скрипты с пользовательскими узлами, нет желания смотреть и вникать).

    p.s. а так я тебе сочувствую, особенно если архитекторы там накрутили (незамкнутые полилинии и 3000 помещений )))
    проблемы лучше дробить на маленькие.

    тебе сперва нужен проверяющий скрипт, который проверял бы наличие всех “косяков” в модели перед запуском “вычислителя чистой площади”

    update: я бы тебе посоветовал скопировать модель и руками ее доработать (для личных целей, все равно на выходе тебе нужен только эксель файл):
    1) удалить все что внутри – колонны, мебель и пр.
    2) если витражи типовые, то заменить их на окна
    3) упростить здание (заметно, что есть похожие секции или этажи)
    и пр.

    #1846 Score: 0
    Alexandr Popov
    Модератор
    44 pts

    На простых моделях у меня мои скрипты работали исправно.

    Ну я на самом деле начинаю привыкать. Помещения по этажам нарезал, постоянно нулевые элементы чищу и пустые списки удаляю. Жаль правда что потом многих помещений не досчитаемся и от ручного счета не уйти.

    update: а есть скрипт замены витражей на окна? вручную очень уж долго будет (быстрее площади посчитать). А замену не делаю, т.к. такую выгрузку надо будет делать при каждом изменении в модели и каждый раз модель чистить не то чтобы гуд.

    #1848 Score: 0
    Legantmar
    Хранитель
    474 pts

    еще мысли (может повторюсь):
    – отключать в витраже импосты (чтобы весь витраж был одной панелью)
    – для создания solid из витража использовать bounding box по элементу (витражу), засада с векторами, нужно будет настраивать для разных сторон здания
    – для внешних стен помещения создавать surface с помощью Curve.extrude линий стен (это отдельные линии стен, а не замкнутая полилиния) по вектору Z
    далее как-то их вычитать друг из друга и получать площадь стен за вычетом solid’ов.

    p.s. а витраж как вставлен в модель? я не понимаю, как его архитекторы создавали, если он не на всю высоту этажа..))

    update: я не фанат через геометрию и пересечения вычислять площади…

    #1854 Score: 0
    Alexandr Popov
    Модератор
    44 pts

    У архитекторов в модели которую я скидывал чуть выше витражами выполнены окна и цветные панели над ними, причем и окна и панели сидят в одном витраже, т.ч. обединить их поменяв тип витража не получится. Есть ещё несколько моделей, там наружные стены полностью выполнены из витражей, в которых вставлены вразнобой стеновые панели и стекло.

    Про BoundingBox, как я понял он в системе координат XYZ коробку создает, т.е. если стена не перпендикулярна то бокс по ней будет очень уж некорректный. Пересчитывать постоянно вектор и поворачивать бокс? для этого нужно всеравно определить ориентацию панели, для чего потребуется создание солида.

    #1863 Score: 0
    Евгений Колчин
    Участник
    11 pts

    Александр, это у вас в одном файле столько геометрии и 3000 помещений? Я на практике разделяю такие модели на части для повышения производительности,  собираю уже линками. И нужно на каждое помещение наружную стену рассчитать для теплотехнического расчета? У меня инженеры только по всему фасаду запрашивали цифры(думаю я чего-то не знаю). Но помоему как-то все очень усложнено. Я сейчас работал над скриптом по подсчету отделки, но там подсчет основан создание солидов помещений, и считать нужна такую модель точно частями, и выгружаь в Excel для проверки и консолидации.

    #1864 Score: 0
    Alexandr Popov
    Модератор
    44 pts

    Да в одном файле. По идеологии BIM я не должен выполнять разовые операции, как например разрезка здания на части, а должен брать работу архитекторов и использовать в следующей работе (например ОВ), так вот если архитекторы не режут здание, то после каждого их сброса модели мне заново выполнять ряд операций по разрезке здания не целесообразно (я только этим и буду заниматься). Площадь наружной стены да для каждого помещения надо знать и площадь окон. Если не просят, значит вручную видимо считают =)

    У меня вчера возникла идея, я создал BoundingBox у элементов и по начальной точке бокса нарезал выборки по этажам и блокам, теперь могу запускать в анализ по частям, а потом да в екселе объединять.

    #2020 Score: 0
    Евгений Колчин
    Участник
    11 pts

    Это не идеология BIM) это модель у архитекторов не рационально выстроена и не оптимизирована. Я не в курсе же кто её моделировал) С такой моделью жутко работать. Для анализа геометрии таких вообще ещё можно использовать NavisWorks, хотя для этой задачи врятли это подходит…

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