Процесс разработки большинства проектов включает в себя построение визуальных, системных и геометрических связей между элементами. В подавляющем большинстве случаев для создания этих связей используются рабочие процессы, в которых переход от концепции к конечному результату осуществляется за счет применения правил. Таким образом, процесс работы (возможно, непреднамеренно) строится по алгоритмическому принципу, в основе которого лежит использование пошагового набора действий, следующих стандартной логике: ввод данных, их обработка и, наконец, вывод. Инструменты программирования позволяют формализовать эти алгоритмические процессы и повысить эффективность их использования.
Алгоритмы являются мощными инструментами, однако само понятие алгоритм часто толкуется не совсем правильно. Безусловно, с помощью алгоритмов можно добиться самых неожиданных и поразительных результатов, однако не стоит искать в этом какой-то волшебный секрет. На самом деле алгоритмы по своей сути весьма и весьма ординарны. В качестве наглядного примера можно привести процесс создания бумажного журавлика. Мы берем квадратный лист бумаги (ввод), складываем его определенным образом (действия по обработке) и в результате получаем журавлика (вывод).
Итак, что же такое алгоритм? Это абстрактный набор шагов, которые можно представить либо в текстовой, либо в графической форме.
Текстовые инструкции
Возьмем квадратный лист бумаги и повернем его цветной стороной вверх. Сложим лист пополам, развернем, затем сложим его пополам в другом направлении и снова развернем.
Перевернем лист белой стороной вверх, сложим пополам, тщательно разгладим, развернем, затем сложим в другом направлении и опять развернем.
Следуя созданным сгибам, сложим лист так, чтобы совместить три верхних угла с нижним, и разгладим полученную конструкцию.
Сложим боковые углы верхнего квадрата к центру, затем развернем их обратно.
Сложим верхний угол модели книзу, тщательно разгладим и также развернем обратно.
Следуя созданным сгибам, раскроем верхний квадрат, потянув нижний угол вверх и сложив боковые стороны к центру. Тщательно разгладим полученную конструкцию.
Перевернем конструкцию и повторим шаги 4–6 с другой стороны.
Сложим боковые углы верхней части конструкции к центру.
Перевернем конструкцию и повторим это действие с другой стороны.
Согнем обе «ножки» конструкции в направлении вверх и развернем их обратно.
Следуя только что созданным сгибам, согнем обе «ножки» внутрь и вверх.
Проделаем аналогичную процедуру с концом одной из «ножек», чтобы сделать клюв, и опустим крылья вниз.
Получился журавлик.
Графические инструкции
Выполнение обоих представленных наборов инструкций приводит к одному и тому же результату — бумажному журавлику. Если вы следовали инструкциям и сделали журавлика, то вы только что применили алгоритм. Единственное различие между этими наборами инструкций заключается в их формальном выражении, что подводит нас к понятию программирование. Программирование (а точнее, компьютерное программирование) представляет собой создание исполняемой программы для обработки последовательности действий путем их формализации. Если преобразовать приведенные выше инструкции по созданию бумажного журавлика в формат, который сможет прочитать и выполнить компьютер, это и будет программированием.
Первое правило и первая трудность программирования заключается в том, что для эффективного взаимодействия с компьютером человеку приходится прибегать к той или иной форме абстракции. Абстракция достигается за счет использования языков программирования, таких как JavaScript, Python или C. Если у нас есть повторяемый набор инструкций, например для создания бумажного журавлика, то от нас требуется лишь перевести его на язык компьютера. В результате мы сможем создать с помощью компьютера нужного нам журавлика или целое множество журавликов, различающихся между собой по тем или иным параметрам. Таким образом, компьютер позволяет многократно выполнять отдельную задачу или набор задач без задержек и ошибок, возникающих в связи с человеческим фактором. В этом и заключается сила программирования.
Определение процесса визуального программирования
Скачайте файл примера, щелкнув указанную ниже ссылку.
Полный список файлов примеров можно найти в приложении.
Если бы вам было нужно написать инструкцию по созданию бумажного журавлика, что бы вы использовали: графику, текст или их сочетание?
Если вы решили использовать графику, то вам следует обратить внимание на визуальное программирование. Процессы текстового и визуального программирования по сути своей ничем не отличаются. И там, и там используется одна и та же платформа формализации, однако при визуальном программировании инструкции и связи в программе определяются посредством графического (т. е. визуального) пользовательского интерфейса и вместо ввода текста, ограниченного возможностями синтаксиса, создается цепочка из готовых к использованию узлов. Для сравнения рассмотрим один и тот же алгоритм рисования окружности через точку, заданный с помощью узлов и с помощью кода.
Визуальная программа
Текстовая программа
Результаты алгоритма
Визуальная наглядность этого способа программирования делает его более простым и понятным для программистов. Приложение Dynamo относится к средствам визуального программирования, но, как будет показано далее, оно также поддерживает возможности текстового программирования.
В этом разделе указаны дополнительные ресурсы, которые позволят перейти на новый уровень владения Dynamo. Кроме того, мы добавили в это руководство индекс важных узлов, набор полезных пакетов и хранилище файлов примеров. Мы будем рады, если вы примете участие в пополнении этого раздела. Портал Dynamo Primer открыт для всех.
Ниже приведен список пакетов, наиболее популярных среди пользователей Dynamo. Разработчики, не стесняйтесь пополнять этот список! Помните, что Dynamo Primer — это ресурс с открытым с исходным кодом.
Коллекция archi-lab — это более 50 пользовательских пакетов, которые позволяют существенно расширить возможности взаимодействия Dynamo с Revit. Пакеты archi-lab включают в себя как узлы для выполнения базовых операций со списками, так и узлы визуальной среды расчетов для Revit с расширенными возможностями. Пакеты archi-lab доступны в Package Manager.
BimorphNodes — это универсальная коллекция мощных вспомогательных узлов. Среди них можно найти высокоэффективные узлы для выявления конфликтов и управления пересечениями геометрии, узлы преобразования кривых ImportInstance (САПР) и средства для сбора связанных элементов, решающие проблему ограничений в API Revit. Чтобы подробнее узнать о всех доступных узлах, ознакомьтесь с каталогом BimorphNodes. Коллекция BimorphNodes доступна в Package Manager.
Bumblebee — это подключаемый модуль для обеспечения взаимодействия между Excel и Dynamo, значительно расширяющий возможности Dynamo в плане чтения и записи файлов Excel.
Clockwork — это коллекция пользовательских узлов для среды визуального программирования Dynamo. В ней представлено множество узлов для работы с Revit и решения других задач, например управления списками, выполнения математических и строковых операций, преобразования единиц измерения, выполнения геометрических операций (преимущественно ограничивающие рамки, сетки, плоскости, точки, поверхности, UV и векторы) и разбивки на панели.
DataShapes — это пакет для расширения пользовательских функций в сценариях Dynamo. Основным назначением пакета является увеличение спектра функциональных возможностей проигрывателя Dynamo. Подробности см. на странице https://data-shapes.net/. Если вы ходите создавать мощные рабочие процессы для проигрывателя Dynamo, рекомендуем обратить внимание на этот пакет.
DynamoSAP — это параметрический интерфейс для SAP2000, встраиваемый в Dynamo. Этот проект позволяет инженерам осуществлять генеративное проектирование и анализ строительных систем в SAP, используя Dynamo для управления моделью SAP. Проект содержит несколько типовых рабочих процессов, описанных в прилагаемых файлах примеров, а также предоставляет возможности для автоматизации типовых задач в SAP.
Это библиотека, расширяющая функциональные возможности Dynamo/Revit, которая позволяет осуществлять развертывание геометрии обычных и сложных поверхностей. Библиотека позволяет пользователям сначала преобразовывать поверхности в плоскую мозаичную топологию, а затем выполнять их развертку с помощью инструментов Protogeometry в Dynamo. В этом пакете также содержится несколько экспериментальных узлов и стандартных файлов с примерами.
Импортируйте векторные изображения из Illustrator или интернета в формате SVG. Этот инструмент позволяет импортировать созданные вручную чертежи в модуль Dynamo для выполнения параметрических операций.
Energy Analysis for Dynamo позволяет выполнять параметрическое моделирование энергопотребления и создавать рабочие процессы для расчета энергопотребления всего здания в Dynamo 0.8. Пакет Energy Analysis for Dynamo позволяет настроить модель энергопотребления в Autodesk Revit, отправить ее в Green Building Studio для расчета энергопотребления DOE2 и изучить полученные результаты. Пакет разрабатывается компанией Thornton Tomasetti в рамках проекта CORE Studio.
Firefly — это коллекция узлов, позволяющих Dynamo обмениваться данными с устройствами ввода/вывода, такими как микроконтроллер Arduino. Поскольку поток данных передается в реальном времени, пользователи Firefly получают множество возможностей для интерактивного создания прототипов на стыке между цифровыми и физическими системами с помощью веб-камер, мобильных телефонов, игровых контроллеров, датчиков и т. д.
Genius Loci — это компиляция узлов для Dynamo. Она содержит узлы, полезные для пользователей Revit. Установите этот пакет для ознакомления с его функциями, в частности с удобными процессами взаимодействия со связанными файлами и документами Revit.
Mantis Shrimp — это проект по развитию совместимости, который позволяет легко импортировать геометрию Grasshopper и/или Rhino в Dynamo.
Пакет Dynamo Mesh Toolkit содержит множество полезных инструментов для работы с геометрией сети. В этом пакете имеются возможности для импорта сетей из внешних файлов в других форматах, формирования сетей из существующих геометрических объектов Dynamo и построения сетей вручную на основе данных о вершинах и соединениях. Кроме того, в пакет входят инструменты для изменения и восстановления геометрии сети.
🧐 MONOCLE
Monocle — это расширение вида для Dynamo 2.0.x. Monocle содержит набор полезных инструментов для идентификации пакетов, очистки графиков и многих других операций. Monocle позволяет добавлять функциональные возможности в пользовательский интерфейс Dynamo так, что у пользователей создается впечатление, будто эти функции встроены в программу. Расширение Monocle доступно в Package Manager.
Optimo предоставляет пользователям Dynamo возможности для оптимизации решения определенных ими проектных задач с помощью различных адаптируемых алгоритмов. Пользователи могут определять одну или несколько целей для поставленных задач, а также отдельные функции пригодности.
Библиотека узлов Rhynamo предоставляет пользователям возможность чтения и записи файлов Rhino 3DM из Dynamo. Rhynamo преобразует геометрию Rhino в пригодную к использованию геометрию Dynamo с помощью библиотеки OpenNURBS от компании McNeel, позволяя создавать новые рабочие процессы для беспрепятственного обмена геометрией и данными между Rhino и Revit. Этот пакет также содержит несколько экспериментальных узлов, которые обеспечивают прямой доступ к командной строке Rhino.
Rhythm — это набор полезных узлов, поддерживающих эффективное взаимодействие между проектом Revit и Dynamo, что может действительно помочь пользователям в работе. Rhythm — это приложение с открытым исходным кодом, созданное преимущественно на базе C#. С его помощью в Dynamo можно добавить узлы Revit, базовые узлы и расширение вида. Пакет Rhythm доступен в Package Manager.
Узлы в составе коллекции Spring Nodes в первую очередь предназначены для улучшения взаимодействия между Dynamo и Revit. Их более общая цель — изучение всех средств, которые помогают ускорить рабочие процессы, ориентированные на BIM. Во многих узлах используются средства IronPython или DesignScript, что может послужить хорошей отправной точкой для изучения синтаксиса и тонких моментов этих языков программирования. Коллекция Spring Nodes доступна в Package Manager.
«Справка Wiki, посвященная методам разработки с помощью API Dynamo, вспомогательных библиотек и инструментов».
В этом блоге собраны наиболее актуальные статьи разработчиков Dynamo, посвященные новым функциям, рабочим процессам и всему, что связано с Dynamo.
Языки программирования служат для выражения идей, обычно включающих в себя логику и вычисления. Помимо этого, текстовый язык программирования Dynamo (ранее известный как DesignScript) также создавался для выражения проектных замыслов. Машинное проектирование носит исследовательский характер, и приложение Dynamo призвано поддерживать работу в этом направлении. Мы надеемся, что вы оцените гибкость этого языка и то, как он позволяет реализовывать проектные замыслы, быстро переходя от разработки концепции к итоговой форме. В этом руководстве пользователь, не имеющий опыта программирования или использования геометрии архитектурных объектов, найдет максимально полную информацию по этим двум взаимосвязанным дисциплинам.
Dynamo Primer — проект с открытым исходным кодом, который был инициирован Мэттом Йежиком (Matt Jezyk) и рабочей группой по разработке Dynamo в компании Autodesk. Первая версия этого руководства была разработана в Mode Lab. Если вы хотите внести свой вклад в разработку этого проекта, создайте Fork-копию репозитория, добавьте в нее содержимое и отправьте запрос на внесение изменений.
На этой странице описывается процесс разработки пользовательского узла Dynamo на C#, использующего интерфейс Zero Touch. В большинстве случаев статические методы и классы C# можно импортировать без модификации. Если для библиотеки требуются только функции вызова без создания новых объектов, этого можно легко добиться с помощью статических методов. Когда приложение Dynamo загружает DLL, оно отделяет пространство имен классов и отображает все статические методы как узлы.
Python — это интерпретируемый, интерактивный, объектно-ориентированный язык программирования. Он включает в себя модули, исключения, динамический ввод, динамические типы данных очень высокого уровня и классы. Python сочетает в себе высокую мощность и понятный синтаксис. Он включает интерфейсы для взаимодействия с различными системными вызовами и библиотеками, а также с различными оконными системами. Кроме того, он поддерживает расширение с использованием C или C++. Его можно использовать как язык расширения для приложений, которым требуется программируемый интерфейс. Наконец, язык Python является переносимым: он работает на множестве вариантов Unix, компьютерах Mac, на платформах Windows 2000 и более поздних версий. В руководстве по Python для начинающих приведены ссылки на другие ознакомительные учебные пособия и ресурсы для обучения программированию на Python.
AForge.NET — это платформа C# с открытым исходным кодом, предназначенная для разработчиков и исследователей в сферах компьютерного зрения и искусственного интеллекта: обработка изображений, нейронные сети, генетические алгоритмы, нечеткая логика, машинное обучение, робототехника и т. д.
MathWorld — это математический онлайн-ресурс, составленный Эриком В. Вайсстайном с помощью тысяч соавторов. С момента первой публикации в 1995 г. MathWorld стал лидирующим информационным ресурсом по математике как в математическом, так и в образовательном сообществах. На публикации MathWorld ссылается огромное количество журналов и книг разных степеней научности.
«Эти публикации в основном посвящены платформе Revit и помогают пользователям работать с ней с удовольствием».
«Эти записи призваны устранить ряд пробелов в ресурсах для изучения и применения API Revit в контексте рабочего процесса проектирования».
«RevitPythonShell добавляет в Autodesk Revit и Vasari модуль IronPython, интерпретирующий данные». Этот проект возник до появления Dynamo и является отличным источником информации по разработке на Python. Проект RPS:
https://github.com/architecture-building-systems/revitpythonshell
Блог разработчика:
Исчерпывающий каталог рабочих процессов на основе API Revit от одного из ведущих специалистов по BIM.
ARCHI-LAB
BIMORPH NODES
BUMBLEBEE FOR DYNAMO
CLOCKWORK FOR DYNAMO
DATA|SHAPES
DYNAMO SAP
DYNAMO UNFOLD
DYNASTRATOR
ENERGY ANALYSIS FOR DYNAMO
FIREFLY FOR DYNAMO
GENIUS LOCI
MANTIS SHRIMP
MESH TOOLKIT
OPTIMO
RHYNAMO
RHYTHM
Spring Nodes