O Dynamo for Civil 3D contém um mecanismo muito poderoso para “lembrar” os objetos que são criados por cada nó. Esse mecanismo é chamado de Vinculação de objetos e permite que um gráfico do Dynamo produza resultados consistentes sempre que for executado no mesmo documento. Embora isso seja altamente desejável em muitas situações, há outras situações em que você pode desejar ter mais controle sobre o comportamento do Dynamo. Esta seção ajudará a entender como funciona a vinculação de objetos e como você pode tirar proveito dela.
Considere este gráfico que cria um círculo no espaço do modelo na camada atual.
Observe o que acontece quando o raio é alterado.
É a vinculação de objetos em ação. O comportamento padrão do Dynamo é modificar o raio do círculo, em vez de criar um novo círculo sempre que a entrada do raio é alterada. Isso ocorre porque o nó Object.ByGeometry “lembra” que criou esse círculo específico sempre que o gráfico é executado. Além disso, o Dynamo armazenará essas informações de modo que, na próxima vez que você abrir o documento do Civil 3D e executar o gráfico, ele tenha exatamente o mesmo comportamento.
Vamos examinar um exemplo no qual você pode desejar alterar o comportamento da vinculação de objetos padrão do Dynamo. Digamos que você deseje criar um gráfico que posicione o texto no meio de um círculo. No entanto, sua intenção com esse gráfico é que ele possa ser executado repetidamente e posicionar novo texto sempre que qualquer círculo for selecionado. Veja a seguir a aparência do gráfico.
No entanto, isso é o que acontece quando um círculo diferente é selecionado.
Parece que o texto é excluído e recriado a cada execução do gráfico. Na realidade, a posição do texto está sendo modificada, dependendo de qual círculo está selecionado. Portanto, é o mesmo texto, só que em um lugar diferente. Para criar um novo texto a cada vez, é necessário modificar as configurações de vinculação de objetos do Dynamo para que nenhum dado de vinculação seja mantido (consulte #binding-settingsabaixo).
Depois de fazer essa alteração, temos o comportamento que procuramos.
O Dynamo for Civil 3D permite modificar o comportamento padrão da vinculação de objetos por meio das configurações Armazenamento de dados de vinculação no menu do Dynamo.
Observe que as opções de Armazenamento de dados de vinculação estão disponíveis no Civil 3D 2022.1 e versões posteriores.
Todas as opções estão ativadas por padrão. Veja a seguir um resumo do que cada opção faz.
Quando essa opção está ativada, o Dynamo “esquecerá” os objetos que criou na última vez que o gráfico foi executado. Assim, o gráfico pode ser executado em qualquer desenho em qualquer situação e criará novos objetos a cada vez.
Quando usar
Use essa opção quando desejar que o Dynamo “esqueça” tudo sobre o que fez em execuções anteriores e crie novos objetos todas as vezes.
Essa opção significa que os metadados da vinculação de objetos serão serializados no gráfico (arquivo .dyn) quando ele for salvo. Se você fechar/reabrir o gráfico e executá-lo no mesmo desenho, tudo deverá funcionar da mesma forma que você deixou. Se o gráfico for executado em um desenho diferente, os dados de vinculação serão removidos do gráfico e novos objetos serão criados. Isso significa que, se você abrir o desenho original e executar o gráfico novamente, serão criados novos objetos além dos antigos.
Quando usar
Use essa opção quando desejar que o Dynamo “lembre-se” dos objetos que criou na última vez que foi executado em um desenho específico.
Essa opção é mais adequada para situações em que é possível manter uma relação 1:1 entre um desenho específico e um gráfico do Dynamo. As opções 1 e 3 são mais adequadas para gráficos projetados para execução em vários desenhos.
Essa opção é semelhante à Opção 2, exceto que os dados de vinculação de objetos são serializados no desenho em vez de serem no gráfico (arquivo .dyn). Se você fechar/reabrir o gráfico e executá-lo no mesmo desenho, tudo deverá funcionar da mesma forma que você deixou. Se o gráfico for executado em um desenho diferente, os dados de vinculação ainda serão preservados no desenho original, já que ele é salvo no desenho e não no gráfico.
Quando usar
Use essa opção quando desejar usar o mesmo gráfico em vários desenhos e que o Dynamo “lembre” do que fez em cada um deles.
A primeira coisa a observar com essa opção é que ela não tem efeito sobre como o gráfico interage com o desenho ao executar o gráfico através da interface principal do Dynamo. Essa opção somente se aplica quando o gráfico é executado usando o Reprodutor do Dynamo.
Se o Reprodutor do Dynamo for algo novo para você, veja a seção Reprodutor do Dynamo.
Se o gráfico for executado usando a interface principal do Dynamo e, em seguida, fechar e executar o mesmo gráfico usando o Reprodutor do Dynamo, ele criará novos objetos além dos que criou antes. No entanto, quando o Reprodutor do Dynamo executar o gráfico uma vez, ele serializará os dados da vinculação de objetos no desenho. Portanto, se o gráfico for executado várias vezes através do Reprodutor do Dynamo, ele atualizará os objetos em vez de criar novos. Se o gráfico for executado através do Reprodutor do Dynamo em um desenho diferente, os dados de vinculação ainda serão preservados no desenho original, já que ele será salvo no desenho e não no gráfico.
Quando usar
Use essa opção quando desejar executar um gráfico usando o Reprodutor do Dynamo em vários desenhos e que ele “lembre” o que fez em cada um deles.
Com o tempo, você pode precisar ir além dos conceitos básicos e se aprofundar no funcionamento interno do Dynamo. As páginas desta seção fornecerão um esquema para conhecer funcionalidades avançadas no Dynamo for Civil 3D, para que você possa levar seus gráficos a um novo patamar.
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:
Escrever DesignScript usando um bloco de código
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.
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.
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.
Importa os módulos
sys
eclr
, que são necessários para que o interpretador Python funcione corretamente. Em particular, o móduloclr
permite que os namespaces .NET sejam tratados essencialmente como pacotes Python.Carrega as montagens padrão (ou seja, DLLs) para trabalhar com as APIs .NET gerenciadas para o AutoCAD e o Civil 3D.
Adiciona referências aos namespaces padrão do AutoCAD e do Civil 3D. Isso é equivalente às diretivas
using
ouImports
em C# ou VB.NET (respectivamente).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]
.Obtém o documento e o editor ativos.
Bloqueia o documento e inicia uma transação do banco de dados.
Aqui você deve colocar a maior parte da lógica do script.
Retire o comentário dessa linha para confirmar a transação após seu trabalho principal ter sido concluído.
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
.
Vamos analisar um exemplo para demonstrar alguns dos conceitos essenciais de escrever scripts Python no Dynamo for Civil 3D.
Veja a seguir arquivos de exemplos que você pode consultar para este exercício.
Apresentamos a seguir uma visão geral da lógica no gráfico.
Revisar a documentação da API do Civil 3D
Selecionar todas as áreas de contribuição no documento por nome de camada
“Expandir” os objetos do Dynamo para acessar os membros internos da API do Civil 3D
Criar pontos do Dynamo com base em pontos do AutoCAD
Criar PolyCurves com base em pontos
Vamos começar
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.
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.
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
.
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.
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.
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.
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.
E aqui está a geometria final do Dynamo.
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.
Essa linha obtém a classe específica que precisamos da biblioteca de geometria do Dynamo. Observe que especificamos import Point as DynPoint
aqui em vez de import *
, pois introduziria interferências de nomenclatura.
Aqui especificamos exatamente qual porta de entrada contém os dados que desejamos em vez do padrão IN
, que faz referência à lista inteira de todas as entradas.
Obter a geometria de limite de todas as áreas de contribuição em um desenho.
Tipo do Dynamo | Pacotes |
---|---|
Missão cumprida.
Objeto Autodesk.AutoCAD.DynamoNodes.Object
Entidade Autodesk.AutoCAD.DatabaseServices.Entity
CivilObject Autodesk.Civil.DynamoNodes.CivilObject
Entidade Autodesk.Civil.DatabaseServices.Entity