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

Квартирография с 2мя общими площадями

В предыдущей версии квартирографии не было общей площади без учета летних помещений.
Да бы это исправить , вносим общий параметр для помещений "Площадь квартиры Общая 2"
Далее меняем нашу квартирографию в Dynamo:
1) Копируем все то что было в предыдущей версии и удаляем ноды по переписи всех параметров кроме Площадь квартиры Общая
2) Колдуем надо нодами , подчищаем ненужное

3) Получаем нечто такое 
4) Меняем скрипт в Pythone  у скопированной и подчищенной части на следующее :
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
        elif uroom.Parameter[parAptTip].AsInteger()==4:#Тип помещения 4
            koeff = 0
        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" меняем среднюю метку на новый параметр " Площадь квартиры Общая 2" 




радуемся жизни)



понедельник, 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