Найти в Дзене
Академия BIM

Dynamo 2.0 и что дальше

Оглавление

Максим Степанников, Мария Девятова, Евгения Энгель
Перевод статьи
Racel Williams "To Dynamo 2.0 and Beyond"

Сегодня — особенный день! По прошествии многих дней, наконец появилась долгожданная версия Dynamo 2.0.

Dynamo 2.0 — особенный и значимый релиз для нашей команды, поскольку это одно из крупных обновлений программы. Но, что самое важное, данный релиз вобрал в себя те изменения и новый функционал, который в будущем сделает возможным процессы передачи данных из десктопной версии программы в web.

Итак, что же такого «крупного» в этом релизе?

В предыдущих публикациях мы уже писали о том, что в Dynamo версии 2.0 произойдет масштабное обновление программы. И это означает следующее:

  • Файлы формата DYN и DYF теперь сохраняются в формате, который больше не совместим с предыдущими версиями Dynamo. Скрипты и пользовательские узлы Dynamo 2.0 не могут быть открыты в версиях 1.x.
  • Dynamo 2.0 можно устанавливать параллельно с текущей версией 1.x, что позволит вам переключаться между версиями, с которыми вы хотите работать в текущем проекте. В Dynamo для Revit при первом запуске Dynamo вам необходимо будет выбрать версию программы во всплывающем окне. Данный выбор будет сохраняться только в текущей сессии работы Revit. И после его повторного запуска может быть изменен на другую версию.
-2
  • Начиная с Dynamo 1.0, мы следовали правилам семантического управления версиями программы, что означает, что в этот релиз были внесены критические изменения в API программы, а это может повлиять на корректную работу текущих пакетов и скриптов, совместимых с версиями 1.x. Более подробную информацию о версиях — см. версии Dynamo.

Будет ли Dynamo 2.0 наконец устанавливаться вместе с Revit?

Нет, не будет. Оно будет доступно для скачивания отдельно на dynamobuilds.com и будет совместимо с 2017, 2018, и 2019-ми версиями Revit.

Будет ли мой пакет нодов версии 1.x работать с версией 2.0?

При том, что большинство пакетов версии 1.x будут прекрасно работать и на версии 2.0, вполне возможно, что из-за критических изменений в API программы в работе некоторых из них могут возникнуть сложности. Мы советуем заново протестировать ваши алгоритмы и пакеты, чтобы убедиться в их совместимости с новой версией программы. Как мы уже говорили ранее, разработчикам следует взять за правило публиковать версию своего пакета в сопоставлении с версией сборки Dynamo, для которой он был выпущен (в качестве примера можно взять пакет нодов «Mesh Toolkit», в котором очень ясно прослеживается история версий пакета в сопоставлении с версиями сборок Dynamo). Несколько замечаний для разработчиков пакетов нодов:

  • В целом, данный релиз Dynamo не повлиял на работу нодов типа «zero-touch». Но если внутри ваших узлов данного типа есть ссылки на библиотеки Dynamo Core (которые изменились), то вам возможно потребуется обновить ссылки и перекомпилировать файлы.
  • Ноды NodeModel UI могут потребовать дополнительных конструкторов JSON.
  • Из-за измененного синтаксиса словарей и списков могут возникнуть проблемы с входными слотами узлов ZeroTouch, в особенности, со значениями по умолчанию. При открытии скриптов версии 1.x их синтаксис будет, в большинстве случаев, обновляться до нового, но синтаксис значений по умолчанию в нодах Zero Touch обновляться не будет.
  • Пользовательские узлы версий 1.x, созданные в XML-формате, по всей видимости, продолжат работать и в версии 2.0. Тем не менее, советуем протестировать данные узлы на предмет потери функциональности и переводить их по возможности в JSON для дальнейшей совместимости с будущими версиями Dynamo.

Подробнее см. список изменений в API Dynamo 2.0.

Возможны ли на сегодняшний день процессы передачи данных из настольной версии Dynamo в web?

На данный момент — еще нет, но мы активно над этим работаем. За кулисами нашей команды уже давно ведется серьезная разработка технологий, поддерживающих распределенные облачные вычисления и взаимосвязанные процессы обмена данными между различными приложениями. Все эти разрабатываемые технологии могут кардинально изменить уровень производительности и эффективности скриптов, которые вы создаете, предоставят вам бо́льшую гибкость в совместной работе и управлении вашими скриптами внутри команды через режим совместной работы в реальном времени. Также они предоставят возможность иметь онлайн-хранилище разнообразных услуг, скриптов и прочих рабочих процессов. И, хотя мы еще не представляли данные разработки широкой публике, узлы Dynamo 2.0 уже сейчас содержат несколько функций, которые в будущем позволят вам с легкостью переключаться между настольной и интернет-средой разработки Dynamo и ее новыми онлайн-сервисами. Для достижения будущей совместимости с интернет-сервисами, в текущей версии Dynamo 2.0 уже внесены следующие изменения:

  • ФОРМАТ ФАЙЛОВ: Dynamo 2.0 сменила формат файлов с XML на JSON для облегчения разработки скриптов в более близких для web и не связанных с Windows средах. Одна из характерных особенностей подобного изменения заключается в том, что описание пользовательского интерфейса нода (где находится узел, как он выглядит) было отделено от описания его функциональной логики (что делает скрипт). В будущем это позволит создавать более чистые решения по использованию скриптов Dynamo вне его нодовой среды, например, при пакетном запуске скриптов или же в интерфейсах наподобие Dynamo Pleer.
  • БИБЛИОТЕКА НОДОВ: Библиотека нодов теперь представляет из себя веб-компонент, который можно будет использовать как в среде настольного приложения, так и веб-среде.
  • ИЗМЕНЕНИЯ В ЯЗЫКЕ DESIGNSСRIPT: Было внесено несколько изменений, целью которых являлось упрощение языка для его более легкого обслуживания и повышения удобочитаемости как на локальном компьютере, так и в распределенной облачной вычислительной системе. Список изменений смотрите на странице вики.

Что нового в Dynamo 2.0?

Формат файлов

Как отмечалось ранее, формат файлов скриптов Dynamo сменился с XML на JSON. Это было сделано для того, чтобы основной формат файлов соответствовал новой системе взаимодействия в наших облачных сервисах. Файлы, созданные в версиях 1.х, будут при открытии обновлены до версии 2.0, за исключением некоторых нодов, не поддающихся обновлению. Чтобы не допустить потери необходимой информации, копия файла, созданного в версии 1.х, будет сохранена в папку для хранения бэкапов под именем [оригинальное имя]_xml.dyn.

-3

Библиотека нодов

Возможно, вы заметили, что библиотека выглядит иначе, чем в предыдущих версиях программы. Помимо того, что она стала веб-совместимой, произошло еще несколько значительных обновлений пользовательского интерфейса. Изменился порядок того, как организованы узлы. Это, в свою очередь, облегчает поиск узлов как новым, так и опытным пользователями программы. Произошли следующие изменения:

  • Все нестандартные узлы (пользовательские узлы, пакеты, библиотеки DLL) отображаются в отдельном разделе под строкой с именем Add-ons.
  • Теперь можно менять размер боковой панели, а также полностью сворачивать ее, цепляя за край панели и уводя его справа налево.
  • Произошла значительная реорганизация структуры хранения нодов в библиотеке. Мы удалили сбивающие с толку категории, такие как «Core» и «BuiltIn», и организовали подкатегории и классы, чтобы отобразить взаимосвязи между узлами или облегчить восприятие того, как группируются узлы на панели.
-4

Автоматическое переплетение списков

Dynamo 2.0 вводит «Автоматический» вариант работы переплетения списков. Режим работы «кратчайший» теперь более строго подходит к переплетению, в котором участвует одиночный элемент в сопоставлении со списком элементов. Это позволяет более точно управлять структурой данных и более ясно указывать переплетение списка при помощи символов репликации на языке DesignScript. Новый режим автоматического переплетения будет, в свою очередь, вести себя примерно так, как в предыдущих версиях Dynamo вел себя режим «кратчайший». Во всех скриптах, написанных в версиях 1.х, при обновлении до версии на 2.0 будет изменен тип переплетения с «кратчайшего» на «автоматический». На картинке ниже показана разница в работе двух данных режимов переплетения списков.

-5

Обновленный код Python

Как многие знают, ноды на языке Python могут играть значительную роль в работе скрипта Dynamo, позволяя легко и быстро расширять его функционал. В Dynamo 2.0 добавлены новые методы взаимодействия, которые позволят облегчить вашу работу с Python:

  • Теперь вы можете открыть несколько окон редактирования кода Python, чтобы упростить одновременную работу с несколькими нодами на этом языке.
  • В окно редактирования кода Python добавлена кнопка «Выполнить» для того, чтобы вы смогли перезапустить код Python и все ноды, которые идут перед ним, без повторного открытия окна Python.
  • Название окна редактирования кода Python теперь совпадает с названием самого нода.
  • Теперь поддерживаются шаблоны скриптов на Python, которые могут использоваться любыми нодами Python, добавленными в рабочую область. Dynamo ищет в пользовательском расположении %appdata%/Dynamo/Core/{version}/ файл под названием «PythonTemplate.py», чтобы найти в нем пригодный к применению шаблон.

Изменения в языке DesignScript

В языке произошли следующие изменения, которые позволили сделать DesignScript более понятным, предсказуемым и легким при поддержке:

  • Унифицирован синтаксис задания уровня работы списка List@Level для того, чтобы он стал более похож на интерфейс нодов, их панелей Preview и нодов Watch. Например, @-2 теперь необходимо писать как @L2.
  • Чтобы свести к минимуму возможность неоднозначной трактовки того, какую функцию необходимо вызвать программе, вам следует быть более точным с тем, какой тип данных вы подаете в узел. Раньше функции, которые использовали одинаковые методы, например такие как Geometry.Translate и FamilyInstance.Translate, смотрели на первый элемент в подаваемом списке и пытались подобрать корректный метод исполнения. После этого они повторяли этот метод для всех элементов списка. Это приводило к проблемам при подаче списков с неоднородными данными. Например, до этих изменений, FamilyInstance.Translate брал любую геометрию и транслировал ее. Теперь же вам придется более пристально следить за типом данных, которые вы подаете в этот нод.
  • Ноды, которые раньше совпадали по имени с каким-то еще методом и отличались лишь уровнями работы со списками, были вычищены. Например, если было два узла с именем «foo», и один из них принимал на вход список, а другой — один элемент, тот, который принимал всего лишь один элемент мы убирали как устаревший. Мы это делали для того, чтобы очистить библиотеку от повторяющихся нодов и упростить поддержку библиотеки в будущем.
  • При написании функций и императивных блоков больше нет необходимости писать знак «=» в переменной возврата данных. Это сделано с целью упростить процесс написания скриптов на языке DesignScript и упрощения работы с его синтаксисом. Например, вы теперь элементарно можете написать return x; вместо return=х.
  • Переменные внутри Code Block стали неизменяемыми. Если вы, к примеру, используете переменную «х» в Code Block, вы не можете переопределить ее заново в другой части этого же Code Block.
  • Переменные, определенные внутри императивного блока, ограничены рамками действия этого блока. Взаимодействие переменных, заданных внутри и вне императивных блоков больше не допускается, поскольку в прошлом это приводило к непредсказуемому поведению и нестабильности в работе нода.
  • Одиночные элементы больше не превращаются автоматически в отдельный список. Это сделано для того, чтобы избавиться от генерации избыточных и ненужных структур списка. Например, если вы используете список из числовых значений в переплетении с одним числовым значением, выбрав опцию «векторное произведение», теперь на выходе вы получите плоский список значений вместо дополнительных вложенных структур списка.
-6

Словари

Dynamo 2.0 вводит новую концепцию структур данных, разделяя понятия «словарь» и «список» в две отдельные структуры. Это изменение может существенно повлиять на то, по какому алгоритму вы генерируете и работаете с данными в своих скриптах. До выхода версии 2.0 словари и списки были единым типом данных. По сути, списки были словарями с ключами в виде целых чисел.

  • Что из себя представляет словарь? Словарь — это структура данных, состоящая из из парных данных типа «ключ-значение», где ключ — всегда уникальный, неповторяющийся элемент в рамках одной коллекции. Элементы в словаре не расположены в строгом порядке, как в списках, и любой элемент вы можете найти напрямую по его ключу вместо того, чтобы указывать его индекс. В Dynamo 2.0 ключи могут быть представлены только типом данных «строка».
  • Что такое список? Список — структура данных, состоящая из упорядоченных значений. В Dynamo списки используют целые числа в качестве значений индексов элементов в списке.
  • Зачем нужны эти изменения и какое мне до них дело? Отделением словарей от списков мы хотели обратить ваше особенное внимание на данную структуру данных как на первоочередную, поскольку с ее помощью вы можете легко и быстро накапливать и извлекать значения без нужды того, чтобы помнить значение индексов элементов и без нужды постоянного соблюдения строгой структуры списков в своих скриптах. Тестирования показали, что использование словарей позволяет значительно уменьшить объем и сложность скриптов в сравнении с теми, что были написаны без их использования с применением обычных методов List.GetItemAtIndex.
  • Что же изменилось? Изменился синтаксис написания словарей и списков внутри Code Block. Словари теперь используют синтаксис {ключ:значение}. Списки используют синтаксис [элемент1, элемент2, элемент3]. В библиотеке нодов появились новые узлы по работе со словарями (создание, изменение, получение значений). При обновлении скриптов с версии 1.х до версии 2.0 все фигурные скобки, использовавшиеся в прошлом для обозначения списков, автоматически заменятся на квадратные скобки.

Ждите обновления справочной документации, посвященной словарям, которая скоро должна появиться на нашем сайте!

-7

Новые ноды и их обновленные версии

Благодаря многим участникам нашего сообщества мы добавили несколько новых нодов и обновили функционал некоторых старых, например:

  • Color Picker (спасибо Adam Sheather за его разработку).
  • File.AppendText (спасибо Radu Gidei за его разработку).
  • GetDirectoryContents с рекурсивным доступом к подпапкам (спасибо Radu Gidei за его разработку).
  • Обновленный узел ImportExcel, позволяющий регулировать всплытие окна Excel (спасибо Dimitar Venkov за улучшение).
  • Оператор математического остатка (%) теперь ведет себя так, как привычно пользователям Python, Excel и Google calculator, следуя знаку делителя при выполнении операции.
-8

Возвращение версии Sandbox

Для тех, кто скучал по Dynamo Sandbox: после установки вы сможете найти его в расположении Program Files\Dynamo\Dynamo Core\2.

Что мы убрали из Dynamo 2.0?

К сожалению, каждый релиз не обходится без списка функций, от которых пришлось отказаться ради ясности, удобства и простоты использования программы. С прискорбием сообщаем, что данных функций, когда-то очень крутых, больше с нами нет. Мы будем по ним очень скучать и объявляем минуту молчания в их память:

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

Просмотр предшествующих элементов (честно, мы даже и не знаем, что делала данная опция... шутка).

Сохранения опции прикрепления в элементе предварительного просмотра нода. В скриптах версии 2.0 нельзя сохранить эту настройку, скрипт каждый раз будет открываться с открепленными элементами предварительного просмотра.

Из корневой библиотеки Dynamo исключены следующие элементы: NewtonRootFind1DNoDeriv, NewtonRootFind1DWithDeriv.

Исключена опция Drag and Drop, позволявшая раньше перетащить нод с боковой панели на холст (теперь только кликом).

Избавились от дублирующих узлов (например, теперь всего один нод List.Flatten и List.Count).

Пользовательские узлы теперь не могут располагаться в одном месте со стандартными нодами и их категориями.

Геометрия линий модели, линий детализации, марок и текста больше не прорисовывается автоматически в окне предварительного просмотра Dynamo при их выборе. Это изменение было сделано для того, чтобы сделать поведение этих элементов более похожим на другие элементы и предотвратить вылет программы. Пользователи по-прежнему могут получить геометрию данных элементов через узлы Element.Geometry и Element.Curve. При этом марки и текст не будут иметь никакой геометрии, поскольку это аннотативные объекты.

Итак, вы готовы?

Я даже немного устала... Вот что в целом представляет из себя Dynamo 2.0. Естественно, кое что я пропустила. Для получения дополнительной информации о некоторых изменениях, исправлениях, известных ошибках и багах, с которыми вы можете столкнуться при использовании Dynamo 2.0, вы можете ознакомиться в примечаниях к релизу.

Кроме того, обратите внимание на дополнительную документацию по новым функциям и разработке в среде Dynamo 2.0, которая вскоре должна появиться.

Еще раз спасибо всем, кто внес свой вклад в релиз и всему сообществу Dynamo за то, что продолжаете поддерживать нашу работу. Надеемся, вам удастся опробовать Dynamo 2.0. И, как обычно, дайте нам знать, если у вас появятся какие-либо вопросы и предложения!