понедельник, 10 августа 2015 г.

Квартирографии

Квартирография больной вопрос для любого архитектора, есть несколько решений данного вопроса:
1) Взять платный плагин
2) Вручную составлять спецификации
3) Воспользоватся Динамо


1) путь самый простой, но мы теряем деньги + приложения работают довольнро специфично в вашем файле общих данных появляются странные параметры и в целом работа таких вещей не отшлифована до идеала.
2) прокатит если у вас немного квартир разных видов
3) самый пожалуй гибкий способ, но нужно понимать динамо к счастью за вас уже все сделано http://rvtmaster.blogspot.ru/2014/12/revit-2015-dynamo-074.html ,  но для пользователей  динамо последних версий (от 0.8.1.1052) стоит переписать скрипт Питона.
Как это сделать?
все делаем так как написано в блоге
http://rvtmaster.blogspot.ru/2014/12/revit-2015-dynamo-074.html
Но заменяем текст в скрипте питона(дабл клик по скрипту )

и заменяем на текст приведенный ниже;


import clr


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

5 комментариев:

  1. Не получается:

    Предупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
    Traceback (most recent call last):
    File "", line 21, in
    TypeError: expected BuiltInParameter, got str

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

      p.s. Спасибо, благодаря вам вообще понял где искать этот скрипт и что дело именно в скрипте!

      Удалить
    2. Не за что :) чтобы работало нужно точно добавить параметры и внимательно заполнить поля семейств. Это лучше сделать через спецификации для экономии времени нраммотно сгрупировав.. А идея про смена значений верна. Предыдущие динамо версии видимо браои значения в дюймах или в чем то подобном поэтому был понижающий коэфицент. Я ничего глобального не менял:) прос о убрал коэффы не нужные

      Удалить
    3. Не за что :) чтобы работало нужно точно добавить параметры и внимательно заполнить поля семейств. Это лучше сделать через спецификации для экономии времени нраммотно сгрупировав.. А идея про смена значений верна. Предыдущие динамо версии видимо браои значения в дюймах или в чем то подобном поэтому был понижающий коэфицент. Я ничего глобального не менял:) прос о убрал коэффы не нужные

      Удалить
    4. Да точно коэфициент перевода в дюймах Алексей Лобанов советовал, тогда без него неработало: " alexey lobanov 9 месяцев назад
      вы правы, но только одного округления будет мало, так как внутри Ревита все хранится в футах......при конвертации тоже накапливаются некоторые ошибки видимо.
      Поэтому алгоритм следующий:
      получаем площадь, конвертируем в м. кв., затем округляем до двух знаков, затем суммируем и в конце получившееся значение снова преобразуем в футы.
      примерно вот так:
      http://joxi.ru/812MBKpSMajQAJ "

      Удалить