Друзья,
приглашаем вас на вебинар "Программирование на Python в Dynamo for Revit", который пройдет 22 ноября 2018 года с 11:00 до 12:00 по московскому времени.
Основы программирования на языке python в привязке к Dynamo. С помощью этих знаний, вы сможете писать свои ноды для Dynamo и реализовывать сложные логические конструкции.
- Нод Python Script
- Простые математические операции в python
- Операторы for, if, while
- Рассмотрение реального скрипта (импорт библиотек, функции)
Докадчик Александр Попов @Anonymous, ФСК Лидер
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
Solved! Go to Solution.
Solved by Dmytro.Mukhin. Go to Solution.
Рады сообщить, что сегодняшний вебинар прошел без накладок со звуком и все прошло идеально.
Запись в скором времени будет доступна!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
А вот и видео:
Повідомлення корисне? Поставте "ВПОДОБАЙКУ" цим повідомленням! | Do you find the posts helpful? "LIKE" these posts!
На ваше питання відповіли? Нажміть кнопку 'ЗАТВЕРДИТИ РІШЕННЯ' | Have your question been answered successfully? Click 'ACCEPT SOLUTION' button.
Дмитро Мухін | Dmytro Mukhin Facebook | Instagram | InventorInUa
Експерт по рішенням Autodesk | Autodesk Solutions Expert
Сертифікований інструктор Autodesk | Autodesk Certified Instructor
Огромное спасибо за вебинар!Особенно, конечно Александру Попову!
Поднял для меня штору этого черного окна -питона....
У меня вопрос: почему не работает свойство .Name и работает свойство .Number после добавления библиотеки RevitAPI и раскрытия UnwrapElement()?
На скринах все показал.
Ответ потому-что)) да .Name не работает у некоторых элементов, несмотря на то, что в Revit Lookup напротив него есть значение. Я думаю, что в данном случае разработчик лукапа (Джереми Таммик) схитрил и подал туда BuiltInParameter взятый через get_Parameter( из Типа и подсмотренный по Имя типа в ParameterSet Типоразмера, а нам этого не сказал.
Т.е. именно поэтому я не пользуюсь командой .Name это было удобнее конечно, меньше кода писать, но приходится делать так:
doc.GetElement(el.get_Parameter(BuiltInParameter.ELEM_TYPE_PARAM).AsElementId()).get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM).AsString()
Спасибо.
А не проще через цикл?
list_nam=[]
for room in list_rooms:
nam=room.LookupParameter("Имя").AsString()
list_nam.append(nam)
OUT = list_nam
Если для помещения и в Name надо получить его имя то да так проще, но если надо стабильнее, чтобы и на английской версии, то LookupParameter("Имя") можно заменить на get_Parameter(BuiltInParameter.ROOM_NAME)
@Anonymous написал (-а):
Ответ потому-что)) да .Name не работает у некоторых элементов, несмотря на то, что в Revit Lookup напротив него есть значение. Я думаю, что в данном случае разработчик лукапа (Джереми Таммик) схитрил и подал туда BuiltInParameter взятый через get_Parameter( из Типа и подсмотренный по Имя типа в ParameterSet Типоразмера, а нам этого не сказал.
Вот Таммик хитрец, обманывает нас всех, скрывает неработающие свойства))))
На самом деле, конечно, все совсем не так.
Спецификация языка c# позволяет делать перегрузку свойств классов в наследуемых классах, чем некоторые классы в Revit API и пользуются, перегружая свойство Name базового класса Element, которое доступно для чтения и записи.
Например класс WallType перегружает это свойство, заменяя его аналогичным, но доступным только для записи.
В если в с# идет обращение к перегруженному свойству, которое не имеет каких-то возможностей, то компилятор обращается к родительскому сам.
В Python нет такого механизма. Поэтому когда вы пытаетесь взять перегруженное свойство Name, в которое можно только писать, то питон говорит, что такого свойства у объекта нет, так как не понимает, что оно перегружено.
В питоне в этой ситуации надо брать значение свойства с помощью механизма рефлексии с прямым указанием на родительский класс.
wt = wall.WallType name = Autodesk.Revit.DB.Element.Name.__get__(wt) #Autodesk.Revit.DB можно опустить, если это пространство было импортировано ранее
Alexey Lobanov / Алексей Лобанов
Revit Architecture Certified Professional | Autodesk Certified Instructor | Autodesk Expert Elite
PRORUBIM | YouTube channel | LinkedIn profile
Вроде написал понятно,спасибо.
Но как делать , то именно в скрипте?
И если стоит задача получить имя типа стены, то можно напрямую вызвать,как понял этот метод для стен открыт.
А как правильно применить метод именно для помещений
wt = wall.WallType
name = Autodesk.Revit.DB.Element.Name.__get__(wt)
как не пытался прописать,постоянно ошибка...
@alexey.lobanov, спасибо, понятно.
@sashtet, можно через get_Parameter(BuiltInParameter. а дальше посмотреть в Revit Lookup как Тип взять и Имя типа.
Этот метод я уже сделал,поэтому и не задавал вопроса после твоего поста,спасибо.
А вот как предложил Лобанов ,именно для помещений не получается.Поэтому и приложил скрины для стен, результат проще достигается для имя типа стен- напрямую,или я не прав?
Вы путаете развернутые элементы и завернутые. Это разные абсолютно объекты с разным набором свойств и функций, которые по сути не имеют друг к другу никакого отношения (кроме того что завернутый ссылается на развернутый).
Завернутое помещение имеет одни свойства а развернутое другие. Если у обоих берется свойство Number, то это просто означает что одно одно и тоже у них. Если у завернутого типа стен берется имя а у развернутого не берется, то это значит что у развернутого его или нет или оно имеет другие права доступа.
чтобы взять имя развернутого помещения надо сделать то, что я писал ранее.
room = UnwrapElement(IN[0]) name = Element.Name.__get__(room)
Alexey Lobanov / Алексей Лобанов
Revit Architecture Certified Professional | Autodesk Certified Instructor | Autodesk Expert Elite
PRORUBIM | YouTube channel | LinkedIn profile
На скриншоте вы берете ИМЯ ЗАВЕРНУТОЙ СТЕНЫ и оно выдает вам имя типа этой стены в ревите, просто потому что так спроектирован объект завернутой стены в динамо.
в своем примере я показывал взятие ИМЕНИ ТИПА РАЗВЕРНУТОЙ СТЕНЫ, тоесть нативного обьекта Ревит, свойства которого лукап и показывает
Alexey Lobanov / Алексей Лобанов
Revit Architecture Certified Professional | Autodesk Certified Instructor | Autodesk Expert Elite
PRORUBIM | YouTube channel | LinkedIn profile
Спасибо.
Я когда вебинар прорабатывал , специально сравнил параметры элемента до и после разворачивания.
Вот и неправильно сформировалось это понимание...
=>Видео 44 минута про применение метода UnwrapElement.
?=>Говориться о "распознавании элемента", а вы применяете термин "разворачивания элемента".
-что правильно?
=>Время 45.05 -"...после команды dir для "не распознанных" элементов (по автору) есть методы с подчеркиванием (_get_) и эти методы , как бы временные и используются разработчиками,эти методы у нас обычно не работают..."
-оказывается работают и эти методы важны...
-кстати там есть метод .Name , и будет вывод Помещение 1,т.е имя и номер сразу одной строкой-так и показано в LookApp
?=>после применения UnwrapElement я так и не увидел (dir(room)) метод _get_
До команды UnwrapElement у элемента помещение 66 методов,после 112.Я так понял из видео, что методы добавляются.Потом решил проверить какие методы добавились. И после сравнения увидел, что то то появилось,что то осталось, но и что то пропало из методов.Значит разворачиваются не правильно говорить.
?=>Так что правильно все же говорить, что после команды UnwrapElement мы работаем с тем же элементами,но у же по другим правилам (правилам Api)-это верно или нет?
До "развертывания" было 66 методов,после 112. Если развернули, то как бы добавили еще 46 методов.Но после сравнения разница не подтвердилась. Одинаковых метода 33, а не одинаковых(но в списке развернутых) 79,сумма 112.Значит 46-33=13 шт не присутствуют в развернутых методах.
?=>И какой вывод можно сделать из этого?
На данный момент у меня такое понятие сложилось:
-смотришь на возможности до UnwrapElement - это одни правила,элемент тот же
-если не хватает методов,значит вариант новых правил после UnwrapElement -другие правила ,но элемент тот же.
1. Правильно разворачивание. Unwrap с английского так и переводится. Смысл тоже в этом. Ревитовский элемент завернут в обертку соответствующего Dynamo элемента.
2. не успел посмотреть вебинар поэму затрудняюсь скачать что там Саша имел ввиду под временными. __get__ это стандартный метод-расширение питона для любого объекта. Им могут пользоваться все кто хочет и когда хочет (как и dir, кстати). Name, это не метод а свойство. и метод __get__ пишется с двумя прочерками в начале и в конце, а не с одним как у вас.
3. Неверное понимание. Методы и свойства не добавляются или убавляются. Разворачивая элемент мы получаем уже другой элемент со своим набором методов и свойств. В неразвернутом элементы мы видим свойства обертки. В развернутом, свойства элемента, который лежал внутри обертки.
4. Так нельзя говорить. см. пункт 3.
5. Вам надо разобраться вообще что такое заворачивание и разворачивание, зачем в динамо это нужно и в чем смысл этого механизма и как он работает. Это же не просто так сделано. А то у вас сейчас каша в голове и вы рискуете еще глубже увязнуть.
Alexey Lobanov / Алексей Лобанов
Revit Architecture Certified Professional | Autodesk Certified Instructor | Autodesk Expert Elite
PRORUBIM | YouTube channel | LinkedIn profile
Спасибо, насчет обертки классно сказано.А с такими парнями как вы ни какое болото не страшно,выберемся...
Can't find what you're looking for? Ask the community or share your knowledge.