Dynamo – Русский – только для чтения
Раздел для программистов и специалистов, использующих Dynamo
отмена
Отображаются результаты для 
Показать  только  | Вместо этого искать 
Вы имели в виду: 

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

18 ОТВЕТ 18
РЕШЕНО
Ответить
Сообщение 1 из 19
lena.talkhina
7668 просмотров, 18 ответов

Программирование на 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 ОТВЕТ 18
Сообщение 2 из 19
sashtet
в ответ: lena.talkhina

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

Сообщение 3 из 19
lena.talkhina
в ответ: 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

Сообщение 4 из 19
Dmytro.Mukhin
в ответ: lena.talkhina

А вот и видео: 

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

Сообщение 5 из 19
sashtet
в ответ: Dmytro.Mukhin

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

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

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

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

 

Сообщение 6 из 19
sashtet
в ответ: sashtet

Вот скрины:

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

Сообщение 7 из 19
Anonymous
в ответ: 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

Сообщение 8 из 19
sashtet
в ответ: Anonymous

Спасибо.

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

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

OUT = list_nam

Сообщение 9 из 19
Anonymous
в ответ: sashtet

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

Сообщение 10 из 19
sashtet
в ответ: Anonymous

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

Сообщение 11 из 19
alexey.lobanov
в ответ: 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

Сообщение 12 из 19
sashtet
в ответ: alexey.lobanov

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

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

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

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

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

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

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

Сообщение 13 из 19
Anonymous
в ответ: sashtet

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

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

 

Сообщение 14 из 19
sashtet
в ответ: Anonymous

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

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

Сообщение 15 из 19
alexey.lobanov
в ответ: 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

Сообщение 16 из 19
alexey.lobanov
в ответ: sashtet

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

 

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


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

Сообщение 17 из 19
sashtet
в ответ: 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 -другие правила ,но элемент тот же.

Сообщение 18 из 19
alexey.lobanov
в ответ: 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

Сообщение 19 из 19
sashtet
в ответ: alexey.lobanov

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

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

Новая тема  

Autodesk Design & Make Report