понедельник, 1 декабря 2014 г.

Квартиры в Revit 2015 +Dynamo 0.7.4

На днях наш коллега-ревитчик Дмитрий Дмитриев из г. Барнаула на основе видеоурока Алексея Лобанова дополнил скрипт для Dynamo возможностью расчета площадей квартир с учетом коэффициентов (для балконов и лоджий).


Скрипт Dynamo Скачать
Файл с примером Скачать
Марки квартир Скачать

Инструкция по применению


Итак, вы работаете в своем проекте и у вас уже установлен Dynamo. Чтобы дополнение работало, в первую очередь необходимо из файла с примером скопировать в ваш проект параметры проекта:

Далее, копируем спецификации:

Теперь необходимо проставить номера квартир для этого выбрать помещения одной квартиры и в свойствах заполнить параметр "Номер квартиры".
Для более наглядного представления можно создать цветовую схему, которая будет закрашивать помещения, в зависимости от номера квартиры:

Далее, необходимо назначить помещениям тип (параметр "Тип помещения), для этого была принята следующая условная классификация:
Значение параметра "1" - жилое, "2" - нежилое, "3" - лоджия, "4" - балкон, "5" - общее. 

В зависимости от значения этого параметра Dynamo будет считать показатели по квартирам, например, в жилую площадь попадут только помещения типа "1", а помещения типов "3" и "4" будут включаться в общую площадь квартиры с понижающими коэффициентами 0,5 и 0,3 соответственно.

Типы помещений можно заполнить через спецификацию "Имя - Тип помещения", коэффициент площади заполнять не нужно, это сделает Dynamo:

Можно сделать это и на плане этажа, создав для удобства цветовую схему "Типы помещений".
Параметр "Тип помещения" должен быть заполнен обязательно, иначе Dynamo выдаст ошибку.

Запускаем Dynamo (Надстройки->Dynamo 0.7), открываем скрипт и нажимаем Run.
Площади посчитались, осталось разместить марки квартир ("Архитектура"-> "Маркировать помещение"), предварительно загрузив их в свой проект.
PS: в данном скрипте площади помещений округляются до двух знаков после запятой, что исключает довольно распространенный случай расхождения суммы площадей помещений и площади квартиры на сотые доли.

Если у Вас есть какие-то замечания или предложения, просьба писать в комментариях.

UPDATE: Ссылка обновлена на квартирографию для Revit 2016 и Dynamo 1.0

41 комментарий:

  1. Добрый день. Спасибо за вашу квартирографию!
    Выполнил все по вашей инструкции, но получил не совсем корректный результат. Всем помещениям применен какой-то скрытый коэффициент 10.76. Я его определил поделив площадь с коэффициентом на реальную площадь помещения, при этом коэффициенты для балконов и комнат применены 0,3 и 1 соответственно. Предположил что ошибка может быть в моем файле, открыл ваш файл - Dim Подсчет площадей 16.rvt слегка подвигал стены и запустил расчет в динамо - результат тот же, показатели по квартирам увеличены на коэффициент 10.76
    Возможно проблема в том что я использую 8-ой динамо?
    Буду признателен за любую подсказку в решении проблемы
    Спасибо

    ОтветитьУдалить
  2. Установил динамо 7.4 и все заработало! :)

    ОтветитьУдалить
    Ответы
    1. Дмитрий, спасибо, что сообщили)) Получается для 8-го динамо надо дописывать скрипт.

      Удалить
  3. Добрый день! Проверьте почему у меня не получается ((.

    В окошке PythonScript:

    Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed.
    Traceback (most recent call last):
    File "", line 70, in
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

    ОтветитьУдалить
    Ответы
    1. Добрый день, Азамат! У всех помещений должны быть заполнены параметры "Номер квартиры" и "Тип помещения", и, чтобы не было неразмещенных помещений. Удобнее всего это сделать через спецификацию.

      Удалить
  4. Здравствуйте. Подскажите пожалуйста почему в Dynamo 0.7.4 скрипт работает а в Dynamo 0.8.2 нет?

    ОтветитьУдалить
  5. Здравствуйте! Скажите пожалуйста, будет ли допилен скрипт для ревит 2016 и динамо 0,8,0? Спасибо.

    ОтветитьУдалить
  6. Здравствуйте. В Dynamo 0.8.2 скрипт выдает такую ошибку. В чем может быть проблема?
    Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed.
    Traceback (most recent call last):
    File "", line 22, in
    TypeError: expected BuiltInParameter, got str

    ОтветитьУдалить
    Ответы
    1. В строке 22 блока питона, проблемма с типом бутылкового параметра.

      Удалить
  7. Добрый день.Большое спасибо за скрипт! Есть пожелание: можно ли как-то выделить студии отдельно от однокомнатных квартир?

    ОтветитьУдалить
    Ответы
    1. Добрый день! Надо подумать)

      Удалить
    2. а собственно чем марка у студии отличается от 1комнатной?

      Удалить
  8. На Динамо 0.8 действительно скрипт не работает, будем доделывать в ближайшее время)

    ОтветитьУдалить
    Ответы
    1. переписал скрипт немного ) с этим текстом работать будет :



      import clr
      #Выполнено по уроку Алексея Лобанова:
      #http://www.youtube.com/watch?v=CR9CTBNg6Mk

      #Выполнил и доработал - Дмитриев Дмитрий, с вопросами и предложениями пишите - dimdiad@mail.ru
      #Доработка скрипта - Мария

      #Скрипт для Revit 2015 + Dinamo 0.7.3

      #Сбор параметров из Revit: Площадь помещения, Тип помещения, Номер квартиры

      #Расчет в динамо:
      #"Площадь квартиры Общая";
      #"Площадь квартиры Жилая";
      #"Число комнат";
      #"Категория помещения";
      #"Коэффициент площади";
      #"Площадь с коэффициентом";
      #г. Барнаул 2014.11.22

      apartNumbers = [] #Массив номеров квартир
      aparts = [] #Массив квартир
      roomsAreaCoeff = []
      roomsAreaMultipliedByCoeff = []
      roomsArea = []
      #Переменная списка комнат
      outRooms=[] #Массив списка комнат на выход


      rooms = IN[0]
      parAptNumber = IN[1] # № КВАРТИРЫ
      parAptTip = IN[2] #Это Тип помещения
      roundCount = IN[3] #Это Округление площади


      for room in rooms:
      uroom = UnwrapElement(room) #Находим нативный элемент комнаты Ревита
      aptNum = uroom.Parameter[parAptNumber].AsString()
      area = round(uroom.Area*0.0929026438919894,roundCount) #
      karea = area #Area multiplied by coefficient
      if area:
      contains = apartNumbers.IndexOf(aptNum)
      koeff = 1
      if uroom.Parameter[parAptTip].AsInteger()==5: #Тип помещения 3
      koeff = 0
      elif uroom.Parameter[parAptTip].AsInteger()==3: #Тип помещения 3
      koeff = 0.5
      elif uroom.Parameter[parAptTip].AsInteger()==4:#Тип помещения 4
      koeff = 0.3
      if contains>-1:
      if uroom.Parameter[parAptTip].AsInteger()==1: #Тип помещения 1
      aparts[contains][0]+=1 #По индексу квартиры добавляем еще одну комнату
      aparts[contains][2]+=area #Прибавляем площадь к Жилой площади квартиры
      karea = round(koeff *area,roundCount)
      aparts[contains][1]+=karea #Прибавляем площадь к Общей площади квартиры
      else:
      apartNumbers.append(aptNum)
      aptRoomsCount = 0
      uarea=0
      if uroom.Parameter[parAptTip].AsInteger() == 1:
      aptRoomsCount = 1
      uarea = area
      karea = round(koeff *area,roundCount)
      aparts.append([aptRoomsCount,karea,uarea])
      roomsAreaCoeff.append(koeff);
      roomsAreaMultipliedByCoeff.append(karea)
      roomsArea.append(area)


      for room in rooms:
      uroom = UnwrapElement(room)
      aptNum = uroom.Parameter[parAptNumber].AsString()
      aptPos = apartNumbers.IndexOf(aptNum)
      indx = rooms.IndexOf(room)
      if aptPos>-1 and uroom.Area:
      apt = aparts[aptPos]
      outRooms.append([room,aptNum+"_"+str(uroom.Parameter[parAptTip].AsInteger()),
      apt[0],apt[1],apt[2],roomsAreaCoeff[indx],roomsAreaMultipliedByCoeff[indx],roomsArea[indx]])

      OUT = outRooms

      Удалить
    2. Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed.
      File "", line 37
      uroom = UnwrapElement(room) #Находим нативный элемент комнаты Ревита

      ^
      SyntaxError: expected an indented block

      выдает

      Удалить
    3. В связке Revit 2015 + Dynamo 0.8.1 покопавшись (благодаря Владу Хон), пришел к тому, что просто достаточно в исходном скрипте (из "Dim Подсчет площадей 16.dyn") во втором блоке "for room in rooms:" удалить деление на 0.09290304 у всех значений. Тогда вроде все работает :)
      Для Revit 2016 + Dynamo 0.8.1 этот же скрипт выдает ошибку, так-что осталось адаптировать для 2016.

      Удалить
    4. :(. Revit2016 не при делах?. Только начал изучать Dynamo и сразу нужно изучать Phyton? Разве нельзя както проще. Взять параматры у комнат и...

      Удалить
    5. Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
      File "", line 37
      uroom = UnwrapElement(room) #Находим нативный элемент комнаты Ревита

      ^
      SyntaxError: expected an indented block

      на динамо 1.0.0.1180 ревит 2016.
      ёлки-палки, неужели нигде нет списка изменённых команд от версии к версии ревита (или это в динамо проблема?), чтобы отследить и внести правки?

      Удалить
  9. самая нужная функция сцепление параметров отсутствует в ревите, это вообще косячище разработчиков или задумка для будущ версий, динамо сможет объединить не сколько параметров???

    ОтветитьУдалить
  10. Тема ещё живая? Для динамо 9.0 запилили скрипт? А, то что-то не могу найти где скачать 8-ю версию, на офсайте только 9.0

    ОтветитьУдалить
    Ответы
    1. Нашёл. Не буду даже восьмую скачивать, скачаю 0.7.4 Ссыль на билд кому надо если что http://dynamobuilds.com/

      Удалить
    2. А то картография 3.0 платная, а мне сейчас надо. Барыги банчат )))

      Удалить
  11. А на 14 ревит файла нет? А то нет возможности ставить 15, нужно подобное на 14 :(

    ОтветитьУдалить
  12. Слушайте скрипт просто прелесть!!! спасибо огромное!!)

    ОтветитьУдалить
  13. Этот комментарий был удален автором.

    ОтветитьУдалить
  14. Для 9 Динамо. Первая часть скрипта.
    Причины обновления:
    1. Оператор if не выдаёт -1 при неудачном сравнении. Из-за этого невозможно проверить, задействована ли комната или нет. Удаляем лишние комнаты вручную.
    2. Не работает IndexOf. Заменен на index



    for room in rooms:
    uroom = UnwrapElement(room)
    aptNum = uroom.Parameter[parAptNumber].AsString()
    area = round(uroom.Parameter["Fläche"].AsDouble()*0.09290304,2)
    if aptNum not in apartNumbers: #проверка, есть ли имя квартиры в списке квартир
    #Если нет, то создаём имя комнаты в конце списка
    apartNumbers.append(aptNum)
    #задаём параметры комнат
    if uroom.Parameter[parIsUse].AsInteger(): #Если жилая
    aptRoomsCount = 1
    uarea = area

    else: #если не жилая
    aptRoomsCount = 0
    uarea = 0

    aparts.append([aptRoomsCount,area,uarea]) #формируем список-информацию о квартире
    else: #имя квартиры уже создано в списке
    count = apartNumbers.index(aptNum) #Проверка, на каком месте
    if uroom.Parameter[parIsUse].AsInteger(): #Если жилая
    aparts[count][0] += 1 #добавление счётчика жилых комнат
    aparts[count][2] += area #добавление жилой площади
    aparts[count][1] += area #Добавление общей площади

    ОтветитьУдалить
  15. добрый день! не работал раньше ни с многоэтажным жильём, ни с динамо. сейчас скачиваю, опробую ваши скрипты. пока вам вопрос - существует т.н. "шахматка", таблица-спецификация, в которой совмещены поэтажно и посекционно квартиры с номерами квартир по подъезду и копией марки квартиры (кол-во комнат+площади). позволяет ли ваш скрипт создать эту шахматку? или есть какой-то другой способ? (ну кроме ручного, разумеется))

    ОтветитьУдалить
    Ответы
    1. хмм... не работает скрипт. динамо 1.0.0.1180 ревит 2016. ошибки в скрипте. возможно, там какие-то команды изменились в новом билде, но как это отследить? не знаю, может, списки изменений есть, или что-то подобное, чтобы разобраться?

      Удалить
  16. Окай. Проблема решена для динамо 1.0. По ссылке файл динамо, можно пользоваться.
    Dim Подсчет площадей 2016.dyn - найден на просторах ВК, но выводные параметры были несвязаны
    Dim Подсчет площадей 2016 - связанные ноды.dyn - соответственно связаны, готово к употреблению

    https://drive.google.com/folderview?id=0BxOxcFPzI2TGbDBXU2U0LWw0TDA&usp=sharing

    ОтветитьУдалить
  17. Спасибо огромное!!! Revit 15 и Динамо стоял 0.7, а тут скачала 1.2, и слетала вся квартирография, все площади увеличились чуть ли не в сто раз, работаю с многоэтажками и очень запаниковала, но благодаря комментам и ссылкам все проблемы решились)

    ОтветитьУдалить
  18. Добрый день. Отличный скрипт, но не всегда работает. Почему-то в стандартном шаблоне все работает, а в шаблоне моей фирмы выдает такую ошибку -
    Warning: IronPythonEvaluator.EvaluateIronPythonScript operation failed.
    Traceback (most recent call last):
    File "", line 66, in
    NameError: name 'koeff' is not defined
    Подскажите, из-за чего это может быть?) Я так понимаю проблема с коэффициентом каким-то...

    ОтветитьУдалить
    Ответы
    1. Ипортируйте в проект данные из проекта который идет как шаблон.
      Вам пишут ошибку что нет параметра koeff

      Удалить
    2. а если проект в шаблоне сделан? все перепроверила несколько раз, ревит 2018 динамо 1

      Удалить
  19. Аналогичная ошибка NameError: name 'koeff' is not defined проект сделан в шаблоне АР

    ОтветитьУдалить
  20. Добрый день! Сделано все по инструкции, коэффициенты проставились, площади не посчитались в таблице, ошибку не выдает. Как вбить площади в таблицу?

    ОтветитьУдалить
  21. revit 2017 русская версия. Данный скрипт у кого-нибудь работал в этой версии?

    ОтветитьУдалить
  22. Здравствуйте. Помогите не работпет данный скрипт на ревите 2015. пишет проблемы (Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
    Traceback (most recent call last):
    File "", line 29, in
    IndexError: index out of range: 13

    ОтветитьУдалить