Dynamo
Primer for v2.0
Русский
Русский
  • О программе
  • Введение
    • Что представляет собой программа Dynamo и как она работает?
    • Руководство пользователя Dynamo Primer, сообщество и платформа Dynamo
  • Настройка Dynamo
  • Пользовательский интерфейс
    • Рабочее пространство
    • Библиотека
  • Узлы и провода
  • Основные узлы и понятия
    • Указатель узлов
    • Геометрия для машинного проектирования
      • Обзор концепции геометрии
      • Вектор, плоскость и система координат
      • Точки
      • Кривые
      • Поверхности
      • Тела
      • Сети
    • Компоновочные блоки программ
      • Передача данных
      • Math
      • Logic
      • Строки
      • Цвет
    • Проектирование на основе списков
      • Что такое список
      • Работа со списками
      • Списки списков
      • Многомерные списки
    • Словари в Dynamo
      • Что такое словарь
      • Узлы Dictionary
      • Словари в узлах Code Block
      • Примеры использования Revit
  • Пользовательские узлы и пакеты
    • Пользовательские узлы
      • Пользовательские узлы: введение
      • Создание пользовательских узлов
      • Публикация узлов в библиотеку
    • Пакеты
      • Пакеты: введение
      • Практикум по работе с пакетом: Mesh Toolkit
      • Разработка пакетов
      • Публикация пакетов
      • Импорт Zero Touch
  • Dynamo для Revit
    • Подключение к Revit
    • Выбор
    • Редактирование
    • Создание
    • Адаптация
    • Выпуск документации
  • Dynamo for Civil 3D
    • Совместимость с Civil 3D
    • Начало работы
    • Библиотека узлов
    • Примеры рабочих процессов
      • Дороги
        • Размещение осветительных столбов
      • Землеустройство
        • Размещение коммуникаций
      • Инженерные сети
        • Переименование колодцев
      • Железная дорога
        • Границы зазора
      • Топосъемка
        • Управление группами точек
    • Дополнительные разделы
      • Привязка объекта
      • Python и Civil 3D
    • Проигрыватель Dynamo
    • Полезные пакеты
    • Ресурсы
  • Бета-версия Dynamo в Forma
    • Настройка Dynamo Player в Forma
    • Добавление графов и предоставление к ним общего доступа в Dynamo Player
    • Запуск графов в Dynamo Player
    • Отличия вычислительной службы Dynamo от классического приложения Dynamo
  • Создание кода в Dynamo
    • Узлы Code Block и DesignScript
      • Что такое Code Block
      • Синтаксис DesignScript
      • Сокращение
      • Функции
    • Создание геометрии с помощью DesignScript
      • Основы работы с геометрией посредством DesignScript
      • Геометрические примитивы
      • Векторная математика
      • Кривые: интерполяционные и по управляющим точкам
      • Перенос, поворот и другие преобразования
      • Поверхности: интерполяционные, лофтированные, по управляющим точкам и поверхности вращения
      • Параметризация геометрических объектов
      • Пересечение и обрезка
      • Логические операции с геометрическими объектами
      • Генераторы точек Python
    • Python
      • Узлы Python
      • Python и Revit
      • Настройка собственного шаблона Python
    • Изменения языка
  • Практические советы
    • Методы создания графиков
    • Методы создания сценариев
    • Справочник по созданию сценариев
    • Управление структурой программы
    • Эффективная работа с большими наборами данных в Dynamo
  • Примеры рабочих процессов
    • Процессы для начала работы
      • Параметрическая ваза
      • Точки притяжения
    • Индекс понятий
  • Руководство для разработчиков
    • Сборка Dynamo на основе исходного кода
      • Сборка DynamoRevit на основе исходного кода
      • Управление зависимостями и их обновление в Dynamo
    • Разработка для Dynamo
      • Начало работы
      • Пример использования узлов Zero-Touch — узел сетки
      • Выполнение сценариев Python в узлах Zero-Touch (C#)
      • Дальнейшая работа с Zero-Touch
      • Расширенная настройка узлов Dynamo
      • Использование типов COM (взаимодействие) в пакетах Dynamo
      • Пример использования NodeModel — настраиваемый пользовательский интерфейс
      • Обновление пакетов и библиотек Dynamo для Dynamo 2.x
      • Обновление пакетов и библиотек Dynamo для Dynamo 3.x
      • Расширения
      • Определение пользовательской организации пакетов для Dynamo 2.0 или более поздней версии
      • Интерфейс командной строки Dynamo
      • Интеграция с Dynamo
      • Разработка для Dynamo for Revit
      • Публикация пакета
      • Создание пакета из Visual Studio
      • Расширения в виде пакетов
    • Запросы на слияние
    • Ожидания от тестирования
    • Примеры
  • Приложение
    • Вопросы и ответы
    • Визуальное программирование и Dynamo
    • Ресурсы
    • Примечания к выпуску
    • Полезные пакеты
    • Файлы примеров
    • Таблица интеграции с основной программой
    • PDF для скачивания
    • Сочетания клавиш Dynamo
Powered by GitBook
On this page
  • Документация по API
  • Шаблон кода
  • Пример
  • Цель
  • Набор данных
  • Обзор решения
  • Изучение документации по API
  • Получение всех водосборов
  • Развертка объектов
  • Сценарий Python
  • Создание сложных кривых
  • Результат
  • IronPython и CPython
Edit on GitHub
Export as PDF
  1. Dynamo for Civil 3D
  2. Дополнительные разделы

Python и Civil 3D

PreviousПривязка объектаNextПроигрыватель Dynamo

Last updated 1 month ago

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

  1. Написать код DesignScript с помощью Code Block.

  2. Написать код Python с помощью узла Python.

В этом разделе рассматривается использование Python в среде Civil 3D для работы с .NET API программ AutoCAD и Civil 3D.

Общие сведения об использовании Python в Dynamo см. в разделе Python.

Документация по API

В AutoCAD и Civil 3D есть несколько API-интерфейсов, которые позволяют разработчикам расширять базовые возможности этих программ за счет пользовательских функций. В отношении Dynamo для этого применяются управляемые .NET API. По ссылкам ниже можно ознакомиться со сведениями, необходимыми для понимания структуры API-интерфейсов и принципа их работы.

(англ.)

(англ.)

(англ.)

(англ.)

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

Шаблон кода

Когда вы впервые откроете новый узел Python для его редактирования, он будет по умолчанию заполнен шаблонным кодом. Ниже приводится описание данного шаблона с пояснениями по каждому блоку.

  1. Импорт модулей sys и clr, необходимых для правильной работы интерпретатора Python. В частности, модуль clr позволяет обрабатывать пространства имен .NET как пакеты Python.

  2. Загрузка стандартных сборок (например, файлов DLL) для работы с управляемыми .NET API для AutoCAD и Civil 3D.

  3. Добавление ссылок на стандартные пространства имен AutoCAD и Civil 3D. Эквивалентно директивам using и Imports в C# и VB.NET, соответственно.

  4. Доступ к входным портам узла осуществляется с помощью предварительно определенного списка IN. Для доступа к данным в определенном порте можно использовать его порядковый номер, например: dataInFirstPort = IN[0].

  5. Получение активных документа и редактора.

  6. Блокировка документа и запуск транзакции базы данных.

  7. Здесь размещается основная часть логики сценария.

  8. Раскомментируйте эту строку, чтобы зафиксировать транзакцию после выполнения основного объема работы.

  9. Если требуется вывести какие-либо данные из узла, назначьте их переменной OUT в конце сценария.

Хотите адаптировать шаблон? Шаблон Python по умолчанию можно изменить, отредактировав файл PythonTemplate.py, расположенный в папке C:\ProgramData\Autodesk\C3D <version>\Dynamo.

Пример

Чтобы ознакомиться с некоторыми из основных понятий, относящихся к написанию сценариев Python в Dynamo for Civil 3D, рассмотрим пример.

Цель

Набор данных

Ниже приведены файлы примеров, которые можно использовать в этом упражнении.

Обзор решения

Ниже представлен обзор логики, используемой в этом графике.

  1. Изучить документацию по API Civil 3D.

  2. Выбрать все водосборы в документе по имени слоя.

  3. «Развернуть» объекты Dynamo для доступа ко внутренним элементам API Civil 3D.

  4. Создать точки Dynamo на основе точек AutoCAD.

  5. Создать сложные кривые по точкам.

Приступим!

Изучение документации по API

Получение всех водосборов

Теперь можно приступить к выстраиванию логики графика. Сначала необходимо получить список всех водосборов в документе. Для решения этой задачи можно использовать узлы, поэтому мы не будем включать ее в сценарий Python. Использование узлов упрощает визуальное восприятие графика (не нужно пробираться через большой объем кода Python), а также позволяет посвятить сценарий Python выполнению одной задачи: получение точек контура водосборов.

Обратите внимание, что выходные данные узла All Objects on Layer представляют собой список элементов CivilObjects. Это связано с тем, что в Dynamo for Civil 3D в данный момент нет узлов для работы с водосборами, и именно поэтому нам требуется получить доступ к API через Python.

Развертка объектов

Прежде чем продолжить, кратко рассмотрим одну важную концепцию. В разделе Библиотека узлов была рассмотрена взаимосвязь элементов Object и CivilObject. Если рассмотреть эту взаимосвязь чуть глубже, можно увидеть, что каждый элемент Object Dynamo представляет собой оболочку для элемента Entity AutoCAD. Аналогичным образом, элемент CivilObject Dynamo представляет собой оболочку для элемента Entity Civil 3D. Эту оболочку можно снять, «развернув» элемент Object путем доступа к его свойствам InternalDBObject или InternalObjectId.

Тип Dynamo
Оболочка для

Object Autodesk.AutoCAD.DynamoNodes.Object

Entity Autodesk.AutoCAD.DatabaseServices.Entity

CivilObject Autodesk.Civil.DynamoNodes.CivilObject

Entity Autodesk.Civil.DatabaseServices.Entity

На практике в большинстве случаев надежнее сначала получить идентификатор объекта с помощью свойства InternalObjectId , а затем получить доступ к объекту-оболочке в транзакции. Причина в том, что свойство InternalDBObject возвращает элемент DBObject AutoCAD, недоступный для записи.

Сценарий Python

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

Для просмотра пояснений щелкните подчеркнутые строки сценария.

# Загрузка стандартной библиотеки Python и библиотеки DesignScript
import sys
import clr

# Добавление сборок для AutoCAD и Civil 3D
clr.AddReference('AcMgd')
clr.AddReference('AcCoreMgd')
clr.AddReference('AcDbMgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')



# Импорт ссылок из AutoCAD
from Autodesk.AutoCAD.Runtime import *
from Autodesk.AutoCAD.ApplicationServices import *
from Autodesk.AutoCAD.EditorInput import *
from Autodesk.AutoCAD.DatabaseServices import *
from Autodesk.AutoCAD.Geometry import *

# Импорт ссылок из Civil 3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *



# Входные данные для этого узла будут храниться в виде списка в переменных IN.
 = 

 


    


    
    
adoc = Application.DocumentManager.MdiActiveDocument
editor = adoc.Editor

with adoc.LockDocument():
    with adoc.Database as db:
        
        with db.TransactionManager.StartTransaction() as t:
                          
                
                                
                
                    
                                        
                    
                    
                        
                        
                    
            
            # Фиксация перед завершением транзакции
            
            pass
            
# Назначение выходных данных переменной OUT

На практике основной объем логики сценария рекомендуется размещать внутри транзакции. Это обеспечивает безопасный доступ к объектам, которые сценарий считывает или записывает. Если пропустить транзакцию, во многих случаях это может привести к неустранимой ошибке.

Создание сложных кривых

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

Результат

А вот итоговая геометрия Dynamo.

IronPython и CPython

Небольшой комментарий перед завершением данного раздела. Настройка узла Python может выполняться по-разному в зависимости от используемой версии Civil 3D. В Civil 3D 2020 и 2021 в Dynamo использовался инструмент IronPython , который позволял переносить данные между объектами .NET и сценариями Python. Однако в Civil 3D 2022 в Dynamo применяется стандартный встроенный интерпретатор Python (CPython), в котором используется Python 3. Переход на этот вариант обеспечивает ряд преимуществ, в том числе доступ к популярным современным библиотекам и новым возможностям платформы, а также установку обновлений и исправлений для системы безопасности.

Получение геометрии границ всех водосборов на чертеже.

Прежде чем приступить к созданию графика и написанию кода, ознакомьтесь с документацией по API Civil 3D, чтобы получить представление о доступных возможностях. В данном случае нас интересует , которое возвращает точки контура водосбора. Обратите внимание, что это свойство возвращает объект Point3dCollection, но программа Dynamo не умеет обрабатывать такие объекты. Другими словами, мы не сможем создать сложную кривую на основе Point3dCollection, поэтому нам придется преобразовать все полученные данные в точки Dynamo. Позже мы рассмотрим этот процесс подробнее.

Миссия выполнена!

Подробные сведения об этом переходе и обновлении сценариев предыдущих версий можно найти в . Если вы хотите и дальше работать с IronPython, установите пакет DynamoIronPython2.7 с помощью Dynamo Package Manager.

🎯
🎉
свойство в классе Catchment
блоге Dynamo
визуального программирования
Руководство разработчика .NET API AutoCAD
Справочное руководство по .NET API AutoCAD
Руководство разработчика .NET API Civil 3D
Справочное руководство по .NET API Civil 3D
15KB
Python_Catchments.dyn
961KB
Python_Catchments.dwg
Шаблон Python по умолчанию в Civil 3D
Получение всех водосборов в документе по слоям
Итоговый график
Полученные сложные кривые Dynamo для границ водосборов