Dynamo: Продвинутый уровеньСредний

Dynamo — это бесплатное дополнение для Autodesk Revit. В нем можно «научить» Revit новым функциям без написания сложного кода. Dynamo ускоряет работу и автоматически делает то, что Revit не умеет: переименовывает помещения, оси, кусты свай, экспортирует данные в Excel и импортирует из него, считает теплопотери здания, сравнивает файлы, подсчитывает квартирографию, ведомость отделки и множество других вещей.

В бесплатном видеокурсе по Dynamo вы научитесь всем нюансам написания дополнений. Изучив материал, вы ускорите свою производительность на 15-200%. Главная ценность курса — отдельная глава с написанием дополнений для ежедневных задач: поиск элементов, перенумерация элементов, случайная расстановка объектов и другое.

Автор: Сергей Кривой
Макс. длительность: 4 часа 6 минут

Примеры задач

Урок
Блоки можно проходить в любом порядке
Длительность
Минут
Удобный поиск элементов модели
Длительность: 5 мин.
Создание скрипта, который находит элемент модели по его категории, параметру и значению параметра. В качестве примера представлен поиск помещения по его номеру. На примере данного скрипта показаны общие правила оформления скриптов.

Ноды: Categories, All Elements of Category, Element.GetParameterValueByName, String, List.FilterByBoolMask, ==, Watch

Создание скрипта, который меняет марки элементов модели исходя из заданных стандартов. Например, добавляет к маркам дверей префикс “Д-”. Скрипт так же оформляется.

Ноды: Categories, All Elements of Category, Element.GetParameterValueByName, String, Element.SetParameterByName, Code Block, Watch

Перемаркировка типов окон
Длительность: 3 мин.
Модификация предыдущего скрипта для применения к маркировке типоразмеров окон.

Ноды: Categories, All Elements of Category, Element.GetParameterValueByName, String, Element.SetParameterByName, Code Block, Watch, FamilyInstance.Type, List.UniqueItems

Создание скрипта, маркирующего элементы в зависимости от их геометрического расположения. В качестве примера представлена перемаркировка дверей в проекте. Процесс разделён на 2 части.

Ноды: All Elements at Level, Levels, Watch, Element.GetCategory, Code Block, ==, String from Object, List.FilterByBoolMask, FamilyInstance.LocationGeometry.BoundingBox, BoundingBox.MinPoint, BoundingBox.MaxPoint

Продолжение разработки предыдущего скрипта. Оформление скрипта.

Ноды: Code Block, List.SortByKey, Element.SetParameterByName, String, Count, String from Object

Модификация предыдущего скрипта для перемарикровки помещений на всех уровнях от заданного угла.

Ноды: Categories, All Elements of Category, List.GroupByKey, Element.GetParameterValueByName, Code Block, Room.Location, List.SortByKey, Element.SetParameterByName, Count, String from Object

Нюансы при разработке предыдущего скрипта. Учёт неразмещённых помещений.

Ноды: Room.Area, >, List.FilterByBoolMask

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

Ноды: Categories, All Elements of Category, Mirror, Element.position-rotation-mirrored, Python Script, Element.GetLocation, List.FilterByBoolMask, ObjectIsNull

Продолжение разработки предыдущего скрипта. Внесение информации о стороне открывания двери в её параметр для корректного отображения в спецификации.

Ноды: List.FilterByBoolMask, Element.SetParameterByName, Code Block, FamilyInstance.Type, Element.Name

Создание скрипта, который перемещает марки со значением площади в правый нижний угол помещений. Скрипт основывается на получении у элемента помещений Bounding Box (рамки выбора). В первой части происходит фильтрация нужных марок.

Ноды: Categories, All Elements of Category, Watch, List.FilterByBoolMask, Element.GetParameterValueByName, Code Block, Element.Name, ==

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

Ноды: Tag.TaggedElement, Python Script

Продолжение разработки предыдущего скрипта. Непосредственно перемещение марок и назначение допуска от угла.

Ноды: Geometry.BoundingBox, BoundingBox.MaxPoint, BoundingBox.MinPoint, Code Block, Element.SetLocation помещение, Bounding Box, точка, координаты, Location, перемещение, допуск, алгоритм

Построение стены по сплайну
Длительность: 6 мин.
Создание скрипта, который позволяет формировать стены по сплайну. Пример того, как можно оптимизировать стандартный функционал Revit

Ноды: Select Model Element, Element.Geometry, Wall.ByCurveAndHeight, Code Block, Levels, Wall Types, Curve.ApproximateWithArcAndLineSegments, Point.PruneDuplicates, Curve.EndPoint, Number Slider, PolyCurve.ByPoints, PolyCurve.Curves

Создание параметрической синусоиды (с изменяемыми длиной, амплитудой, частотой, точностью) и стены на её основе. Пример создания параметрической геометрии.

Ноды: Math.Sin, Code Block, Math.DegreesToRadians, Point.BeCoordinates, PolyCurve.ByPoints, PolyCurve.Curves, Wall.ByCurveAndHeight, Levels, Wall Types

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

Ноды: Circle,ByCenterPointRadius, Point.ByCoordinates, Code Block, Floor.ByOutlineTypeAndLevel, Floor Types, Levels, Curve.SplitByParameter

Создание скрипта, который формирует произвольные комбинации элементов. В качестве примера рассмотрено пакетное создание деревьев наподобие того, как это сделано в программе Lumion.

Ноды: Select Model Element, Family Types, Code Block, List.Create, List.Cycle, List.Shuffle, FamilyInstance.ByPoint, Element.Geometry

Продолжение разработки предыдущего скрипта. Приём для постоянного обновления случайных чисел.

Ноды: Curve.PointAtParameter, Code Block, Math.Rand, Math.Random, Math.RandomList, Curve.Length

Пакетное создание полов
Длительность: 6 мин.
Создание скрипта, моделирующего полы заданного типа для всех помещений проекта.

Ноды: Floor.ByOutlineTypeAndLevel, Floor Types, All Elements at Level, Ctegories, All Elements of Category, Watch, RemoveIfNot, Code Block, Room.FinishBoundary, Geometry.Translate

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

Ноды: Categories, All Elements of Category, Element.GetParameterValueByName, Code Block, Element.SetParameterByName

Продолжение разработки предыдущего скрипта. Определение помещений для каждого проёма.

Ноды: Get To-From Room, Python Script, List.Joint

Продолжение разработки предыдущего скрипта. Группирование проёмов по помещениям. Получение суммы площадей проёмов для каждого помещения

Ноды: List.GroupByKey, List.Transpose, Code Block, Python Script, Watch, Element.GetParameterValueByName, Math.Sum