Квартирография больной вопрос для любого архитектора, есть несколько решений данного вопроса:
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
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].
area = round(uroom.Area*0.
karea = area #Area multiplied by coefficient
if area:
contains = apartNumbers.IndexOf(aptNum)
koeff = 1
if uroom.Parameter[
koeff = 0
elif uroom.Parameter[
koeff = 0.5
elif uroom.Parameter[
koeff = 0.3
if contains>-1:
if uroom.
aparts[
aparts[
karea = round(koeff *area,roundCount)
aparts[contains][1
else:
apartNumbers.appen
aptRoomsCount = 0
uarea=0
if uroom.
aptRoomsCount = 1
uarea = area
karea = round(koeff *area,roundCount)
aparts.append([
roomsAreaCoeff.append(
roomsArea.append(area)
for room in rooms:
uroom = UnwrapElement(room)
aptNum = uroom.Parameter[parAptNumber].
aptPos = apartNumbers.IndexOf(aptNum)
indx = rooms.IndexOf(room)
if aptPos>-1 and uroom.
apt = aparts[aptPos]
outRooms.append([room,
apt[0],apt[1],apt[2],
OUT = outRooms
Не получается:
ОтветитьУдалитьПредупреждение:IronPythonEvaluator.EvaluateIronPythonScript операция не выполнена.
Traceback (most recent call last):
File "", line 21, in
TypeError: expected BuiltInParameter, got str
Предыдущий ком. верен для 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. Спасибо, благодаря вам вообще понял где искать этот скрипт и что дело именно в скрипте!
Не за что :) чтобы работало нужно точно добавить параметры и внимательно заполнить поля семейств. Это лучше сделать через спецификации для экономии времени нраммотно сгрупировав.. А идея про смена значений верна. Предыдущие динамо версии видимо браои значения в дюймах или в чем то подобном поэтому был понижающий коэфицент. Я ничего глобального не менял:) прос о убрал коэффы не нужные
УдалитьНе за что :) чтобы работало нужно точно добавить параметры и внимательно заполнить поля семейств. Это лучше сделать через спецификации для экономии времени нраммотно сгрупировав.. А идея про смена значений верна. Предыдущие динамо версии видимо браои значения в дюймах или в чем то подобном поэтому был понижающий коэфицент. Я ничего глобального не менял:) прос о убрал коэффы не нужные
УдалитьДа точно коэфициент перевода в дюймах Алексей Лобанов советовал, тогда без него неработало: " alexey lobanov 9 месяцев назад
Удалитьвы правы, но только одного округления будет мало, так как внутри Ревита все хранится в футах......при конвертации тоже накапливаются некоторые ошибки видимо.
Поэтому алгоритм следующий:
получаем площадь, конвертируем в м. кв., затем округляем до двух знаков, затем суммируем и в конце получившееся значение снова преобразуем в футы.
примерно вот так:
http://joxi.ru/812MBKpSMajQAJ "