Dynamo
Primer for v2.0
Português (Brasil)
Português (Brasil)
  • Sobre
  • Introdução
    • O que é o Dynamo e como ele funciona?
    • Guia do Usuário do Primer, Comunidade e plataforma do Dynamo
  • Configuração do Dynamo
  • Interface do usuário
    • Área de trabalho
    • Biblioteca
  • Nós e fios
  • Nós e conceitos essenciais
    • Índice de nós
    • Geometria do projeto computacional
      • Visão geral da geometria
      • Vetor, plano e sistema de coordenadas
      • Pontos
      • Curvas
      • Superfícies
      • Sólidos
      • Malhas
    • Os blocos de construção de programas
      • Dados
      • Matemática
      • Lógica
      • Sequências de caracteres
      • Cor
    • Projetar com listas
      • O que é uma lista?
      • Trabalhar com listas
      • Listas de listas
      • Listas n-dimensionais
    • Dicionários no Dynamo
      • O que é um dicionário
      • Nós de dicionário
      • Dicionários em blocos de código
      • Casos de uso do Revit
  • Nós e pacotes personalizados
    • Nós personalizados
      • Introdução ao nó personalizado
      • Criar um nó personalizado
      • Publicar na biblioteca
    • Pacotes
      • Introdução aos pacotes
      • Estudo de caso do pacote – Kit de ferramentas de malha
      • Desenvolver um pacote
      • Publicar um pacote
      • Importação sem toque
  • Dynamo para Revit
    • A conexão do Revit
    • Selecionar
    • Editar
    • Criar
    • Personalizar
    • Documentação
  • Dynamo for Civil 3D
    • Conexão do Civil 3D
    • Guia de Introdução
    • Biblioteca de nós
    • Exemplos de fluxos de trabalho
      • Estradas
        • Posicionamento de postes de luz
      • Terra
        • Posicionamento de serviço
      • Utilitários
        • Renomear estruturas
      • Ferrovia
        • Estrutura da altura livre
      • Levantamento topográfico
        • Gerenciamento de grupo de pontos
    • Tópicos avançados
      • Vinculação de objetos
      • Python e Civil 3D
    • Dynamo Player
    • Pacotes úteis
    • Recursos
  • Dynamo no Forma Beta
    • Configurar o Dynamo Player no Forma
    • Adicionar e compartilhar gráficos no Dynamo Player
    • Executar gráficos no Dynamo Player
    • O Dynamo calcula diferenças de serviço com o Dynamo Desktop
  • Codificação no Dynamo
    • Blocos de código e DesignScript
      • O que é um bloco de código
      • Sintaxe do DesignScript
      • Abreviação
      • Funções
    • Geometria com o DesignScript
      • Conceitos básicos da geometria DesignScript
      • Primitivas geométricas
      • Matemática de vetores
      • Curvas: interpoladas e pontos de controle
      • Transformações de conversão, de rotação e outras
      • Superfícies: interpoladas, pontos de controle, elevação, revolução
      • Parametrização geométrica
      • Interseção e aparar
      • Booleanos geométricos
      • Geradores de pontos do Python
    • Python
      • Nós do Python
      • Python e Revit
      • Configurar seu próprio modelo Python
    • Alterações de linguagem
  • Práticas recomendadas
    • Estratégias de gráfico
    • Estratégias de script
    • Referência dos scripts
    • Gerenciar o programa
    • Trabalhar de forma eficiente com grandes conjuntos de dados no Dynamo
  • Exemplos de fluxos de trabalho
    • Fluxos de trabalho de introdução
      • Vaso paramétrico
      • Pontos de atração
    • Índice conceitual
  • Manual do Desenvolvedor
    • Compilar o Dynamo da origem
      • Compilar o DynamoRevit da origem
      • Gerenciar e atualizar dependências no Dynamo
    • Desenvolvimento do Dynamo
      • Guia de Introdução
      • Estudo de caso sem toque – Nó de grade
      • Executar scripts Python em nós Sem toque (C#)
      • Aprofundar o conhecimento sobre o nó Sem toque
      • Personalização avançada de nós do Dynamo
      • Usar tipos COM (interoperabilidade) em pacotes do Dynamo
      • Estudo de caso do NodeModel – Interface do usuário personalizada
      • Atualizar os pacotes e as bibliotecas do Dynamo para Dynamo 2.x
      • Atualizar os pacotes e as bibliotecas do Dynamo para Dynamo 3.x
      • Extensões
      • Definir a organização de pacotes personalizados no Dynamo 2.0 e superior
      • Interface de linha de comando do Dynamo
      • Integração do Dynamo
      • Desenvolvimento do Dynamo para Revit
      • Publicar um pacote
      • Compilar um pacote do Visual Studio
      • Extensões como pacotes
    • Solicitações de extração
    • Expectativas de testes
    • Exemplos
  • Apêndice
    • Perguntas frequentes
    • Programação visual e Dynamo
    • Recursos
    • Notas de versão
    • Pacotes úteis
    • Arquivos de exemplo
    • Mapa de integração do hospedeiro
    • Fazer o download do PDF
    • Atalhos de teclado do Dynamo
Powered by GitBook
On this page
  • Documentação das APIs
  • Modelo de código
  • Exemplo
  • Objetivo
  • Conjunto de dados
  • Visão geral da solução
  • Revisar a documentação da API
  • Obter todas as áreas de contribuição
  • Expandir objetos
  • Script Python
  • Criar PolyCurves
  • Resultado
  • IronPython versus CPython
Edit on GitHub
Export as PDF
  1. Dynamo for Civil 3D
  2. Tópicos avançados

Python e Civil 3D

PreviousVinculação de objetosNextDynamo Player

Last updated 1 month ago

Embora o Dynamo seja extremamente poderoso como uma ferramenta de programação visual, também é possível ir além dos nós e fios e escrever código em forma textual. Há duas maneiras de fazer isso:

  1. Escrever DesignScript usando um bloco de código

  2. Escrever Python usando um nó Python

Esta seção se concentrará em como aproveitar o Python no ambiente do Civil 3D para tirar proveito das APIs .NET do AutoCAD e do Civil 3D.

Dê uma olhada na seção Python para obter informações mais gerais sobre como usar o Python no Dynamo.

Documentação das APIs

O AutoCAD e o Civil 3D têm várias APIs disponíveis que permitem que desenvolvedores como você estendam o produto principal com funcionalidade personalizada. No contexto do Dynamo, são as APIs .NET gerenciadas que são relevantes. Os links a seguir são essenciais para entender a estrutura das APIs e como elas funcionam.

Guia do Desenvolvedor da API .NET do AutoCAD

Guia de Referência da API .NET do AutoCAD

Guia do Desenvolvedor de API .NET do Civil 3D

Guia de Referência da API .NET do Civil 3D

Ao longo desta seção, pode haver alguns conceitos com os quais você não está familiarizado, como bancos de dados, transações, métodos, propriedades etc. Muitos desses conceitos são fundamentais para trabalhar com as APIs .NET e não são específicos do Dynamo ou do Python. Está além do escopo desta seção do Manual discutir esses itens em detalhes; portanto, recomendamos consultar os links acima com frequência para obter mais informações.

Modelo de código

Quando você editar um novo nó Python pela primeira vez, ele será preenchido previamente com o código do modelo para começar. Veja a seguir um detalhamento do modelo com explicações sobre cada bloco.

  1. Importa os módulos sys e clr, que são necessários para que o interpretador Python funcione corretamente. Em particular, o módulo clr permite que os namespaces .NET sejam tratados essencialmente como pacotes Python.

  2. Carrega as montagens padrão (ou seja, DLLs) para trabalhar com as APIs .NET gerenciadas para o AutoCAD e o Civil 3D.

  3. Adiciona referências aos namespaces padrão do AutoCAD e do Civil 3D. Isso é equivalente às diretivas using ou Imports em C# ou VB.NET (respectivamente).

  4. As portas de entrada do nó são acessíveis usando uma lista predefinida chamada IN. É possível acessar os dados em uma porta específica usando seu número de índice, por exemplo, dataInFirstPort = IN[0].

  5. Obtém o documento e o editor ativos.

  6. Bloqueia o documento e inicia uma transação do banco de dados.

  7. Aqui você deve colocar a maior parte da lógica do script.

  8. Retire o comentário dessa linha para confirmar a transação após seu trabalho principal ter sido concluído.

  9. Se desejar gerar dados do nó, atribua-os à variável OUT no final do script.

Deseja personalizar? É possível modificar o modelo Python padrão editando o arquivo PythonTemplate.py localizado em C:\ProgramData\Autodesk\C3D <versão>\Dynamo.

Exemplo

Vamos analisar um exemplo para demonstrar alguns dos conceitos essenciais de escrever scripts Python no Dynamo for Civil 3D.

Objetivo

🎯 Obter a geometria de limite de todas as áreas de contribuição em um desenho.

Conjunto de dados

Veja a seguir arquivos de exemplos que você pode consultar para este exercício.

Visão geral da solução

Apresentamos a seguir uma visão geral da lógica no gráfico.

  1. Revisar a documentação da API do Civil 3D

  2. Selecionar todas as áreas de contribuição no documento por nome de camada

  3. “Expandir” os objetos do Dynamo para acessar os membros internos da API do Civil 3D

  4. Criar pontos do Dynamo com base em pontos do AutoCAD

  5. Criar PolyCurves com base em pontos

Vamos começar

Revisar a documentação da API

Antes de começarmos a criar nosso gráfico e escrever código, é uma boa ideia dar uma olhada na documentação da API do Civil 3D e ter uma ideia do que a API disponibiliza para nós. Neste caso, há uma propriedade na classe Área de contribuição que retornará os pontos de limite da área de contribuição. Observe que essa propriedade retorna um objeto Point3dCollection, que o Dynamo não saberá como tratar. Em outras palavras, não poderemos criar uma PolyCurve com base em um objeto Point3dCollection; portanto, acabaremos precisando converter tudo em pontos do Dynamo. Haverá mais informações sobre isso mais tarde.

Obter todas as áreas de contribuição

Agora podemos começar a criar nossa lógica do gráfico. A primeira coisa a fazer é obter uma lista de todas as áreas de contribuição no documento. Há nós disponíveis para isso; portanto, não precisamos incluí-los no script Python. O uso de nós oferece uma melhor visibilidade para outra pessoa que possa ler o gráfico (em vez de encher o script Python de código) e também mantém o script Python focado em uma coisa: retornar os pontos de limite das áreas de contribuição.

Observe aqui que a saída do nó Todos os objetos na camada é uma lista de CivilObjects. Isso ocorre porque o Dynamo for Civil 3D não tem nós atualmente para trabalhar com áreas de contribuição, o que é a razão pela qual precisamos acessar a API por meio do Python.

Expandir objetos

Antes de avançarmos, temos de abordar brevemente um conceito importante. Na seção Biblioteca de nós, discutimos como Objetos e CivilObjects são relacionados. Para adicionar um pouco mais de detalhes a isso, um Objeto do Dynamo é um wrapper em torno de uma Entidade do AutoCAD. De forma similar, um CivilObject do Dynamo é um wrapper em torno de uma Entidade do Civil 3D. É possível “expandir” um objeto acessando suas propriedades InternalDBObject ou InternalObjectId.

Tipo do Dynamo
Pacotes

Objeto Autodesk.AutoCAD.DynamoNodes.Object

Entidade Autodesk.AutoCAD.DatabaseServices.Entity

CivilObject Autodesk.Civil.DynamoNodes.CivilObject

Entidade Autodesk.Civil.DatabaseServices.Entity

Como regra geral, é mais seguro obter a ID de objeto usando a propriedade `InternalObjectId` e, em seguida, acessar o objeto empacotado em uma transação. Isso ocorre porque a propriedade `InternalDBObject` retornará um DBObject do AutoCAD que não está em um estado gravável.

Script Python

Aqui está o script Python completo que faz o trabalho de acessar os objetos de área de contribuição internos que estão obtendo seus pontos de limite. As linhas realçadas representam as que são modificadas/adicionadas do código do modelo padrão.

Clique no texto sublinhado no script para obter uma explicação sobre cada linha.

# Carregar as bibliotecas Standard e do DesignScript do Python
import sys
import clr

# Adicionar montagens para o AutoCAD e o Civil 3D
clr.AddReference('AcMgd')
clr.AddReference('AcCoreMgd')
clr.AddReference('AcDbMgd')
clr.AddReference('AecBaseMgd')
clr.AddReference('AecPropDataMgd')
clr.AddReference('AeccDbMgd')



# Importar referências do 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 *

# Importar referências do Civil3D
from Autodesk.Civil.ApplicationServices import *
from Autodesk.Civil.DatabaseServices import *



# As entradas para esse nó serão armazenadas como uma lista nas variáveis IN.
 = 

 


    


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

with adoc.LockDocument():
    with adoc.Database as db:
        
        with db.TransactionManager.StartTransaction() as t:
                          
                
                                
                
                    
                                        
                    
                    
                        
                        
                    
            
            # Confirmar antes de finalizar a transação
            
            pass
            
# Atribua a saída à variável OUT.

Como regra geral, é recomendável incluir a maior parte da lógica do script dentro de uma transação. Isso garante o acesso seguro aos objetos que o script está lendo/gravando. Em muitos casos, a omissão de uma transação pode causar um erro fatal.

Criar PolyCurves

Nesta fase, o script Python deve gerar uma lista de pontos do Dynamo que você pode ver na visualização do plano de fundo. A última etapa é simplesmente criar PolyCurves com base nos pontos. Observe que isso também pode ser feito diretamente no script Python, mas nós o colocamos intencionalmente fora do script em um nó para que ele fique mais visível. Veja a seguir a aparência final do gráfico.

Resultado

E aqui está a geometria final do Dynamo.

🎉 Missão cumprida.

IronPython versus CPython

Apenas uma rápida observação aqui antes de finalizarmos. Dependendo de qual versão do Civil 3D você está usando, o nó Python pode ser configurado de forma diferente. No Civil 3D 2020 e 2021, o Dynamo usava uma ferramenta chamada IronPython para mover dados entre objetos .NET e scripts Python. No entanto, no Civil 3D 2022, o Dynamo fez a transição para usar o interpretador Python nativo padrão (também conhecido como CPython), que usa o Python 3. Os benefícios dessa transição incluem o acesso a bibliotecas modernas e populares, além de novos recursos de plataforma, manutenção essencial e patches de segurança.

Você pode ler mais sobre essa transição e sobre como atualizar os scripts herdados no Blog do Dynamo. Se você desejar continuar usando o IronPython, basta instalar o pacote DynamoIronPython2.7 usando o Dynamo Package Manager.

15KB
Python_Catchments.dyn
961KB
Python_Catchments.dwg
Modelo Python padrão no Civil 3D
Obtenção de todas as áreas de contribuição no documento por camada
Gráfico final
PolyCurves do Dynamo resultantes para os limites da área de contribuição