Dynamo – Русский – только для чтения
Раздел для программистов и специалистов, использующих Dynamo
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Программирование на Python в Dynamo for Revit. Вебинар 22 ноября 2018 года

18 REPLIES 18
SOLVED
Reply
Message 1 of 19
lena.talkhina
8168 Views, 18 Replies

Программирование на Python в Dynamo for Revit. Вебинар 22 ноября 2018 года

Друзья,

приглашаем вас на вебинар "Программирование на 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.



Лена Талхина/Lena Talkhina
Менеджер Сообщества - Русский/Community Manager - Russian

18 REPLIES 18
Message 2 of 19
sashtet
in reply to: lena.talkhina

Жду видео, к сожалению не смог прийти вовремя...

Message 3 of 19
lena.talkhina
in reply to: sashtet

Рады сообщить, что сегодняшний вебинар прошел без накладок со звуком и все прошло идеально.

Запись в скором времени будет доступна!

Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям! | Do you find the posts helpful? "LIKE" these posts!
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.



Лена Талхина/Lena Talkhina
Менеджер Сообщества - Русский/Community Manager - Russian

Message 4 of 19

А вот и видео: 

Повідомлення корисне? Поставте "ВПОДОБАЙКУ" цим повідомленням! | 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

Message 5 of 19
sashtet
in reply to: Dmytro.Mukhin

Огромное спасибо за вебинар!Особенно, конечно Александру Попову!

Поднял для меня штору этого черного окна -питона....

У меня вопрос: почему не работает свойство .Name и работает свойство .Number после добавления библиотеки RevitAPI  и раскрытия UnwrapElement()?

На скринах все показал.

 

Message 6 of 19
sashtet
in reply to: sashtet

Вот скрины:

2018-12-01 02-17-52 Dynamo.jpg

Message 7 of 19
Anonymous
in reply to: sashtet

Ответ потому-что)) да .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()

 

32.png33.png

Message 8 of 19
sashtet
in reply to: Anonymous

Спасибо.

А не проще через цикл?

list_nam=[]
for room in list_rooms:
    nam=room.LookupParameter("Имя").AsString()
    list_nam.append(nam)

OUT = list_nam

Message 9 of 19
Anonymous
in reply to: sashtet

Если для помещения и в Name надо получить его имя то да так проще, но если надо стабильнее, чтобы и на английской версии, то LookupParameter("Имя") можно заменить на get_Parameter(BuiltInParameter.ROOM_NAME)

Message 10 of 19
sashtet
in reply to: Anonymous

Спасибо,с нетерпением ждём второй серии для pyton и вообще пора сериал написать...

Message 11 of 19
alexey.lobanov
in reply to: Anonymous


@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

Message 12 of 19
sashtet
in reply to: alexey.lobanov

Вроде написал понятно,спасибо.

Но как делать , то именно в скрипте?

И если стоит задача получить имя типа стены, то можно напрямую вызвать,как понял этот метод для стен открыт.

А как правильно применить метод именно для помещений 

wt = wall.WallType
name = Autodesk.Revit.DB.Element.Name.__get__(wt)

как не пытался прописать,постоянно ошибка...

Имя типа для стенИмя типа для стен

Message 13 of 19
Anonymous
in reply to: sashtet

@alexey.lobanov, спасибо, понятно.

@sashtet, можно через get_Parameter(BuiltInParameter. а дальше посмотреть в Revit Lookup как Тип взять и Имя типа.

 

Message 14 of 19
sashtet
in reply to: Anonymous

Этот метод я уже сделал,поэтому и не задавал вопроса после твоего поста,спасибо.

А вот как предложил Лобанов ,именно для помещений не получается.Поэтому и приложил скрины для стен, результат проще достигается для имя типа стен- напрямую,или я не прав?

Message 15 of 19
alexey.lobanov
in reply to: sashtet

Вы путаете развернутые элементы и завернутые. Это разные абсолютно объекты с разным набором свойств и функций, которые по сути не имеют друг к другу никакого отношения (кроме того что завернутый ссылается на развернутый).

 

Завернутое помещение имеет одни свойства а развернутое другие. Если у обоих берется свойство 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

Message 16 of 19
alexey.lobanov
in reply to: sashtet

На скриншоте вы берете ИМЯ ЗАВЕРНУТОЙ СТЕНЫ и оно выдает вам имя типа этой стены в ревите, просто потому что так спроектирован объект завернутой стены в динамо.

 

в своем примере я показывал взятие ИМЕНИ ТИПА РАЗВЕРНУТОЙ СТЕНЫ, тоесть нативного обьекта Ревит, свойства которого лукап и показывает


Alexey Lobanov / Алексей Лобанов
Revit Architecture Certified Professional | Autodesk Certified Instructor | Autodesk Expert Elite
PRORUBIM | YouTube channel | LinkedIn profile

Message 17 of 19
sashtet
in reply to: alexey.lobanov

Спасибо.

Я когда вебинар прорабатывал , специально сравнил параметры элемента до и после разворачивания.

Вот и неправильно сформировалось это понимание...

=>Видео 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 -другие правила ,но элемент тот же.

Message 18 of 19
alexey.lobanov
in reply to: sashtet

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

Message 19 of 19
sashtet
in reply to: alexey.lobanov

Спасибо, насчет обертки классно сказано.А с такими парнями как вы ни какое болото не страшно,выберемся...

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

Autodesk Design & Make Report