Only this pageAll pages
Powered by GitBook
Couldn't generate the PDF for 147 pages, generation stopped at 100.
Extend with 50 more pages.
1 of 100

Português (Brasil)

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Sobre

Para o Dynamo v2.13 e mais recente

Logotipo do Dynamo

O Dynamo é uma plataforma de programação visual de código aberto para projetistas.

Bem-vindo

Você acabou de abrir o Dynamo Primer, um guia abrangente para a programação visual no Autodesk Dynamo. Este manual é um projeto contínuo para compartilhar os fundamentos da programação. Os tópicos incluem trabalhar com geometria computacional, as melhores práticas para projetos baseados em regras, aplicativos de programação interdisciplinar e muito mais com a plataforma Dynamo.

O poder do Dynamo pode ser encontrado em uma ampla variedade de atividades relacionadas ao projeto. O Dynamo permite uma lista ampliada de maneiras prontamente acessíveis para você começar:

  • Explorar a programação visual pela primeira vez

  • Conectar fluxos de trabalho em vários softwares

  • Envolver uma comunidade ativa de usuários, colaboradores e desenvolvedores

  • Desenvolver uma plataforma de código aberto para aprimoramento contínuo

No âmbito dessa atividade e da empolgante oportunidade de trabalhar com o Dynamo, precisamos de um documento do mesmo calibre, o Dynamo Primer.

Consulte o Guia do Usuário do Primer para saber o que você pode esperar aprender com este manual.

Estamos continuamente aprimorando o Dynamo; portanto, alguns recursos podem parecer diferentes da representação neste manual. No entanto, todas as alterações de funcionalidade serão representadas corretamente.

Código aberto

O projeto Dynamo Primer é de código aberto. Estamos empenhados em fornecer conteúdo de qualidade e agradecemos se enviar seus comentários sobre o projeto. Se você quiser reportar um problema, publique a questão na página de problemas do GitHub: https://github.com/DynamoDS/DynamoPrimer/issues

Se você desejar contribuir com uma nova seção, edições ou qualquer outra coisa para este projeto, confira o repositório GitHub para começar: https://github.com/DynamoDS/DynamoPrimer.

Projeto Dynamo Primer

O Dynamo Primer é um projeto de código aberto, iniciado por Matt Jezyk e a equipe de desenvolvimento do Dynamo na Autodesk.

A Mode Lab foi contratada para elaborar a primeira edição do manual. Agradecemos por todos seus esforços no estabelecimento desse recurso valioso.


A John Pierson of Parallax Team foi contratada para atualizar o manual para refletir as revisões do Dynamo 2.0.


A Matterlab foi contratada para atualizar o manual para refletir as revisões do Dynamo 2.13.


A Archilizer foi contratada para atualizar o manual para refletir as revisões do Dynamo 2.17.


A Wood Rodgers foi contratada para atualizar o manual com conteúdo para o Dynamo for Civil 3D.

Agradecimentos

Um agradecimento especial a Ian Keough por iniciar e orientar o projeto do Dynamo.

Obrigado a Matt Jezyk, Ian Keough, Zach Kron, Racel Amour e Colin McCrone pela colaboração entusiástica e pela oportunidade de participar de uma grande variedade de projetos do Dynamo.

Software e recursos

Dynamo Consulte os seguintes sites para obter a versão estável mais atual do Dynamo.

http://dynamobim.com/download/ ou http://dynamobuilds.com

*Observação: A partir do Revit 2020, o Dynamo é fornecido com as versões do Revit; portanto, não é necessário fazer a instalação manual. Mais informações estão disponíveis neste post do blog.

DynamoBIM A melhor fonte para obter informações adicionais, conteúdo de aprendizagem e fóruns é o site do DynamoBIM.

http://dynamobim.org

Dynamo GitHub O Dynamo é um projeto de desenvolvimento de código aberto no GitHub. Para contribuir, confira o DynamoDS.

https://github.com/DynamoDS/Dynamo

Contato Informe-nos sobre quaisquer problemas com este documento.

[email protected]

Licença

Copyright 2023 Autodesk

Licenciado com base na licença Apache, versão 2.0 (“Licença”); não é possível usar esse arquivo, exceto em conformidade com a licença. Você pode obter uma cópia da licença em:

http://www.apache.org/licenses/LICENSE-2.0

A menos que seja exigido pela lei aplicável ou estabelecido em acordo por escrito, o software distribuído sob a Licença é distribuído NO ESTADO EM QUE SE ENCONTRA, SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a licença para o idioma específico que controla as permissões e limitações sob a licença.

Introdução

Desde as suas origens como um complemento para o BIM (Building Information Modeling – Modelagem de informações de construção) no Revit, o Dynamo se tornou muitas coisas. Acima de tudo, tornou-se uma plataforma que permite aos designers explorar a programação visual, resolver problemas e criar suas próprias ferramentas. Vamos começar nossa jornada com o Dynamo contextualizando um pouco: o que é o Dynamo e qual é a abordagem correta para usá-lo?

O que é o Dynamo e como ele funciona?

O Dynamo é um aplicativo de que pode ser obtido por download e executado no modo independente “Sandbox” ou como um plug-in para outros softwares como o Revit, o FormIt ou o Civil 3D.

Saiba mais sobre a

O processo

O Dynamo permite trabalhar em um processo de programação visual, no qual conectamos os elementos para definir as relações e as sequências de ações que compõem os algoritmos personalizados. Podemos usar nossos algoritmos para uma ampla gama de aplicativos, desde o processamento de dados até a geração de geometria, tudo em tempo real e sem escrever nenhum código.

Conectar nós e fios

Os nós e fios são os componentes principais do Dynamo para oferecer suporte ao processo de . Eles ajudam a estabelecer relações visuais e sistêmicas fortes entre as partes de um projeto. Com um simples clique do mouse, conecte os nós com facilidade, enquanto desenvolve e otimiza o fluxo de trabalho do projeto.

O que o Dynamo pode fazer?

Desde o uso da programação visual para fluxos de trabalho do projeto até o desenvolvimento de ferramentas personalizadas, o Dynamo é um aspecto essencial de uma ampla variedade de aplicativos interessantes.

Ecossistema do Dynamo
programação visual
diferença entre Dynamo Core/Revit/Sandbox.
programação visual
Siga o quadro O Dynamo em ação no Pinterest.

Terra

Geometria do projeto computacional

Como um ambiente de programação visual, o Dynamo permite criar a forma como os dados são processados. Os dados são números ou texto, mas também a geometria. Conforme entendido pelo computador, a geometria (ou às vezes chamada Geometria computacional) são os dados que podemos usar para criar modelos bonitos, intrincados ou orientados para o desempenho. Para fazer isso, precisamos compreender os pontos de entrada e saída dos diferentes tipos de geometria que podemos usar.

Nós e pacotes personalizados

Logo de início, o Dynamo tem uma grande quantidade de funções armazenadas em sua Biblioteca de nós. Para as rotinas usadas com frequência ou aquele gráfico especial que você deseja compartilhar com a comunidade, os pacotes e nós personalizados são uma ótima maneira de estender o Dynamo ainda mais.

Os blocos de construção de programas

Quando estivermos prontos para nos aprofundar no desenvolvimento de programas visuais, precisaremos de uma compreensão mais profunda dos blocos de construção que usaremos. Este capítulo apresentará os conceitos fundamentais em torno dos dados: o que percorre os fios do nosso programa Dynamo.

Dicionários em blocos de código

O Dynamo 2.0 não só apresenta os nós anteriormente discutidos dos dicionários, como também existe uma nova funcionalidade nos blocos de código para isso.

É possível usar a sintaxe como indicado abaixo ou as representações com base em DesignScript dos nós.

Como um dicionário é um tipo de objeto no Dynamo, podemos confirmar as seguintes ações sobre ele.

Manter esse tipo de interações é especialmente útil ao relacionar dados do Revit com sequências de caracteres. A seguir, vamos examinar alguns casos de uso do Revit.

Pacotes

Depois de criar alguns nós personalizados, a próxima etapa é começar a organizá-los e publicá-los por meio de pacotes: uma forma conveniente de armazenar e compartilhar os nós com a Comunidade do Dynamo.

Dynamo para Revit

Embora o Dynamo seja um ambiente flexível, projetado para criar uma ampla gama de programas, ele foi originalmente criado para uso com o Revit. Um programa visual cria opções robustas para o BIM (Building Information Model – Modelo de informações de construção). O Dynamo oferece um conjunto completo de nós especificamente projetados para o Revit, bem como bibliotecas de terceiros de uma comunidade AEC em evolução. Este capítulo foca nos conceitos básicos do uso do Dynamo no Revit.

Geometria com o DesignScript

Nesta seção, você encontrará uma série de aulas sobre a criação de geometria com o DesignScript. Acompanhe copiando o DesignScript de exemplo para os blocos de código do Dynamo.

// copy this code into a Code Block
// to start writing DesignScript

x = "Let's create some geometry!";
IMAGEM

Nós e conceitos essenciais

Nesta seção, apresentamos os nós essenciais disponíveis na biblioteca do Dynamo que ajudarão você a criar seu próprio programa visual como um profissional.

  • Geometria do projeto computacional: Como posso trabalhar com elementos geométricos no Dynamo? Explore várias maneiras de criar geometrias simples ou complexas com base em primitivos.

  • Blocos de construção de programas: O que são os “Dados” e quais são alguns tipos fundamentais que posso começar a usar em meus programas? Além disso, saiba mais sobre como incorporar operações de matemática e lógica no fluxo de trabalho do projeto.

  • Projetar com listas: Como posso gerenciar e coordenar minhas estruturas de dados? Entenda mais sobre o conceito de lista e use-a para gerenciar os dados do projeto com eficiência.

  • Dicionários no Dynamo: O que são dicionários? Descubra como usar dicionários para procurar dados e valores específicos nos resultados existentes.

Tópicos avançados

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.

Ferrovia

Levantamento topográfico

Utilitários

Dynamo for Civil 3D

Embora o Dynamo tenha sido originalmente criado com o Revit em mente, sua versatilidade como ferramenta de programação visual se estende além do Revit. O Dynamo também está integrado no Civil 3D, permitindo que os usuários criem rotinas de automação poderosas para projetos de infraestrutura civil. É uma ferramenta extremamente útil para processar qualquer tarefa, desde as comuns até os fluxos de trabalho de projeto mais complexos, ajudando, em última análise, a economizar tempo, otimizar os projetos e tomar melhores decisões de projeto. O Dynamo oferece um conjunto completo de nós especificamente projetados para o Civil 3D, bem como bibliotecas de terceiros de uma comunidade consolidada.

Este capítulo do manual se concentrará no Dynamo for Civil 3D, começando com os conceitos básicos e chegando até tópicos mais avançados.

Vídeo promocional do Dynamo

Dicionários no Dynamo

Os dicionários representam uma coleção de dados relacionados com outros dados conhecidos como chave. Os dicionários expõem a capacidade de procurar, excluir e inserir dados em uma coleção.

Essencialmente, podemos pensar em um dicionário como uma forma realmente inteligente de buscar algo.

Embora a funcionalidade de dicionário já esteja disponível no Dynamo há algum tempo, o Dynamo 2.0 apresenta uma nova forma de gerenciar esse tipo de dados.

Cortesia de imagem original de: sixtysecondrevit.com

Projetar com listas

As listas são a forma como organizamos os dados. No sistema operacional do computador, você tem arquivos e pastas. No Dynamo, podemos considerá-las como itens e listas, respectivamente. Como no sistema operacional, há muitas formas de criar, modificar e consultar os dados. Neste capítulo, veremos como as listas são gerenciadas no Dynamo.

Nós personalizados

O Dynamo oferece muitos nós principais para uma ampla gama de tarefas de programação visual. Às vezes, uma solução mais rápida, mais elegante ou compartilhada com mais facilidade consiste em construir seus próprios nós. Eles podem ser reusados em diferentes projetos e tornam os gráficos mais claros e limpos, além de poderem ser enviados para o gerenciador de pacotes e compartilhados com a comunidade global do Dynamo.

Python

​O Python é uma linguagem de programação amplamente usada, cuja popularidade tem muito a ver com seu estilo de sintaxe. É altamente legível, o que a torna mais fácil de aprender do que muitas outras linguagens. O Python oferece suporte a módulos e pacotes e pode ser incorporado em aplicativos existentes. Para obter informações sobre como começar a usar o Python, um bom recurso é a página “Getting Started” (Introdução) em Python.org.

Blocos de código e DesignScript

O bloco de código é um recurso exclusivo no Dynamo que vincula dinamicamente um ambiente de programação visual com um baseado em texto. O bloco de código tem acesso a todos os nós do Dynamo e pode definir um gráfico completo em um nó. Leia este capítulo com atenção, já que o bloco de código é um bloco de construção fundamental do Dynamo.

Guia do Usuário do Primer, Comunidade e plataforma do Dynamo

Este manual inclui capítulos desenvolvidos com a Mode Lab. Esses capítulos têm como foco os elementos essenciais que você precisará para começar a trabalhar desenvolvendo seus próprios programas visuais com o Dynamo e informações importantes sobre como tirar o máximo proveito do Dynamo.

Guia do Usuário do Primer

Esse guia foi projetado para atender aos leitores de diferentes níveis de conhecimento e experiência. Uma introdução geral sobre a configuração do Dynamo, a interface do usuário e os principais conceitos pode ser encontrada nas seções a seguir. Recomendamos que os novos usuários consultem os seguintes tópicos:

Para os usuários que desejam desenvolver uma compreensão mais profunda de cada elemento, como um nó específico e o conceito por trás dele, abordamos os fundamentos em um capítulo próprio.

Se você quiser ver a demonstração dos fluxos de trabalho do Dynamo, incluímos alguns gráficos na seção Exemplos de fluxos de trabalho. Siga as instruções anexadas para criar seus próprios gráficos do Dynamo.

Há mais exercícios específicos de tópicos que podem ser encontrados em capítulos posteriores, pois abordamos diferentes tópicos sobre o Dynamo. Os exercícios podem ser encontrados normalmente na última seção de cada página.

A Comunidade

O Dynamo não seria o que é sem um forte grupo de usuários ávidos e colaboradores ativos. Participe da comunidade seguindo o , adicionando seu trabalho à galeria ou discutindo o Dynamo no .

A plataforma

O Dynamo é idealizado como uma ferramenta de programação visual para os designers, permitindo-nos criar ferramentas que usam bibliotecas externas ou qualquer produto da Autodesk que tenha uma API. Com o Dynamo Sandbox, podemos desenvolver programas em um aplicativo estilo “Sandbox”, mas o ecossistema do Dynamo continua a crescer.

O código-fonte do projeto é de código aberto, o que nos permite estender a funcionalidade conforme desejarmos. Confira o projeto no GitHub e procure os trabalhos em andamento dos usuários personalizando o Dynamo.

Pesquise e comece a estender o Dynamo de acordo com suas necessidades

Exemplos de fluxos de trabalho

Estradas, ferrovias, terras, serviços públicos, levantamento topográfico, GIS etc.

A infraestrutura civil é tudo isso e muito mais. Esta seção contém diversos gráficos de exemplo práticos e relevantes para ajudar a orientar você a dominar o Dynamo e revelar todo o potencial do Dynamo for Civil 3D. Cada gráfico é fornecido completo com descrições detalhadas da lógica que foi usada para criá-lo, para que você possa não apenas usá-lo, mas entendê-lo.

Além disso, esses exemplos incorporam práticas recomendadas, que já passaram pelo teste do tempo, para a construção de gráficos sólidos. À medida que você trabalha nos exemplos, recomendamos que se familiarize também com a seção para obter mais ideias sobre como criar gráficos poderosos, flexíveis e sustentáveis.

O que é um bloco de código

Os blocos de código são uma janela localizada no DesignScript, a linguagem de programação principal do Dynamo. Desenvolvido do zero para suportar fluxos de trabalho de projeto exploratório, o DesignScript é uma linguagem legível e concisa que oferece comentários imediatos a pequenos bits de código e também é dimensionado para interações grandes e complexas. O DesignScript também forma a espinha dorsal do mecanismo que motiva a maioria dos aspectos do Dynamo “essenciais”. Como quase todas as funções encontradas nos nós e nas interações do Dynamo têm uma relação estreita com a linguagem de scripts, há oportunidades únicas para alternar o uso entre as interações baseadas em nós e os scripts de uma forma fluida.

Para iniciantes, os nós podem ser convertidos automaticamente em sintaxe de texto para ajudar a aprender o DesignScript ou simplesmente para reduzir o tamanho de seções maiores de gráficos. Isso é feito usando um processo denominado “Nó para código”, que é descrito com mais detalhes na seção . Os usuários mais experientes podem usar os blocos de código para criar mashups personalizados de relacionamentos existentes de usuários e funcionalidades, usando muitos paradigmas de codificação padrão. Entre o usuário iniciante e o avançado, há um grande número de atalhos e fragmentos de código que aceleram seus projetos. Embora o termo “bloco de código” possa ser um pouco intimidador para não programadores, é fácil de usar e robusto. Um iniciante pode usar o bloco de código de forma eficiente com codificação mínima, e um usuário avançado pode definir definições de script para serem chamadas em outro lugar em uma definição do Dynamo.

Bloco de código: uma breve visão geral

Em resumo, os blocos de código são uma interface de scripts de texto em um ambiente de scripts visuais. Eles podem ser usados como números, sequências de caracteres, fórmulas e outros tipos de dados. O bloco de código é projetado para o Dynamo, portanto, é possível definir variáveis arbitrárias no bloco de código, e essas variáveis são automaticamente adicionadas às entradas do nó:

Com os blocos de código, um usuário tem a flexibilidade de decidir como especificar as entradas. Confira a seguir várias maneiras de criar um ponto básico com coordenadas (10, 5, 0):

À medida que você aprende mais sobre as funções disponíveis na biblioteca, lembre-se de que digitar “Point.ByCoordinates” é mais rápido do que pesquisar na biblioteca e localizar o nó apropriado. Quando você digita “Point.”, por exemplo, o Dynamo exibirá uma lista de possíveis funções para aplicar a um ponto. Isso torna o script mais intuitivo e ajudará no processo de aprendizagem de como aplicar funções no Dynamo.

Criar nós de bloco de código

O bloco de código pode ser encontrado em Core>Input>Actions>Code Block. Mas existe um modo mais rápido: basta clicar duas vezes na tela e o bloco de código aparece. Esse nó é usado com tanta frequência que recebeu o privilégio de ser acionado com duplo clique.

Números, sequências de caracteres e fórmulas

Os blocos de código também são flexíveis em relação aos tipos de dados. O usuário pode definir rapidamente os números, as sequências e as fórmulas, e o bloco de código fornecerá o resultado desejado.

Na imagem abaixo, é possível ver que a forma de fazer as coisas “à moda antiga” é um pouco demorada: o usuário procura o nó desejado na interface, adiciona o nó à tela e insere os dados. Com o bloco de código, o usuário pode clicar duas vezes na tela para abrir o nó e digitar o tipo de dados correto com sintaxe básica.

Os nós número e sequência de caracteres são dois exemplos de nós do Dynamo que são provavelmente obsoletos em comparação ao bloco de código.

  1. “Tradicional”

  2. Blocos de código

Codificação no Dynamo

O Dynamo é uma ótima porta de entrada para a escrita de códigos para o mundo AEC. Você pode ter interesse em algumas destas seções para iniciar sua jornada de codificação:

Dynamo no Forma Beta

O Dynamo está disponível como uma extensão no Forma. No momento, ele é fornecido com duas opções: uma versão conectada ao desktop e uma integração baseada na nuvem como um beta fechado. Leia mais sobre a versão desktop nesta e sobre a integração na nuvem beta fechada nesta .

O que é o Autodesk Forma?

O Autodesk Forma é um software na nuvem que oferece ferramentas avançadas, mas fáceis de usar, alimentadas por IA para pré-projeto e projeto esquemático. Os arquitetos e os projetistas usam o Forma para modelar projetos complexos em 3D em minutos, otimizar a qualidade de vida e a sustentabilidade por meio de análises ambientais em tempo real e continuar o processo de projeto conectando-se com fluidez ao Revit, Rhino e Dynamo. Saiba mais e inicie a avaliação gratuita ou compre aqui: . O Forma está incluído como parte da AEC Collection.

O que é Dynamo Player no Forma?

O Dynamo Player é uma extensão que traz uma variedade de recursos de automação de projeto para os usuários do Forma. Algumas das principais vantagens de usar o Dynamo Player com o Forma:

  • Automação simplificada: o Dynamo Player simplifica o processo de automatizar tarefas repetitivas e fluxos de trabalho no Forma. Os gráficos personalizados criados com o ambiente de programação visual do Dynamo podem ser executados diretamente no Forma com apenas alguns cliques. Os gráficos são exibidos como uma lista no Dynamo Player, facilitando sua seleção e execução sempre que necessário. Esse processo simplificado permite executar rapidamente tarefas repetitivas, reduzindo erros e aumentando a eficiência.

  • Interface fácil de usar: o Dynamo Player fornece uma interface amigável que o torna acessível a usuários do Forma, sem a necessidade de experiência com o Dynamo. No futuro, planejamos lançar mais gráficos de amostra que dão acesso a automações baseadas no Dynamo sem precisar depender de desenvolvedores ou habilidades avançadas de codificação.

  • Parâmetros personalizáveis: o Dynamo Player permite definir parâmetros de entrada para os gráficos de automação, possibilitando personalizar o comportamento dos gráficos com base nos requisitos específicos do projeto. É possível definir opções e valores que podem ser facilmente modificados sempre que o gráfico é executado, fornecendo flexibilidade e adaptabilidade a diferentes cenários.

  • Reutilização e compartilhamento: o Dynamo Player promove a colaboração e o compartilhamento de conhecimento entre usuários do Forma. Os gráficos de automação podem ser salvos e reutilizados em vários sites, garantindo consistência e eficiência. Além disso, é possível compartilhar os scripts com outras pessoas na comunidade do Forma, permitindo que elas se beneficiem de suas soluções de automação e vice-versa.

Executar gráficos no Dynamo Player

Quando você abre um gráfico, os nós marcados como Is Input (É entrada) aparecem no Player e você pode interagir com eles.

Para algumas entradas, você será levado para um modo de seleção no qual é possível selecionar elementos na cena. Clique em Confirm selection (Confirmar seleção) para aceitar a seleção e voltar para visualizar as entradas do gráfico.

Clique em Run (Executar) no Player para executar o gráfico. Depois de concluído, os nós Watch e Watch 3D marcados como Is Output (É saída) serão exibidos da seguinte maneira:

Os gráficos que geram geometria oferecem a opção de visualizar e adicionar a geometria ao site. Clique no ícone de olho para ativar ou desativar a visualização e, em seguida, clique em Add (Adicionar) para adicionar a geometria ao site.

postagem de blog
postagem de blog
Autodesk Forma
O que é o Dynamo e como ele funciona?
Configuração do Dynamo
Interface do usuário
Nós e fios
Nós e conceitos essenciais
Vaso paramétrico
Pontos de atração
blog
fórum
O fórum
O repositório
Práticas recomendadas
Sintaxe do DesignScript
Blocos de código e DesignScript
Geometria com o DesignScript
Python

Estradas

Biblioteca de nós

Mencionamos anteriormente que os nós são os principais blocos de construção de um gráfico do Dynamo e eles são organizados em grupos lógicos na biblioteca. No Dynamo for Civil 3D, há duas categorias (ou prateleiras) na biblioteca que contêm nós dedicados para trabalhar com objetos do AutoCAD e do Civil 3D, como alinhamentos, perfis, corredores, referências de bloco etc. O restante da biblioteca contém nós que são mais genéricos por natureza e são consistentes em todas as “versões” do Dynamo (por exemplo, Dynamo para Revit, Dynamo Sandbox etc.).

Confira a seção Biblioteca para obter mais informações sobre como os nós da biblioteca principal do Dynamo são organizados.

Biblioteca de nós do Dynamo for Civil 3D
  1. Nós específicos para trabalhar com objetos do AutoCAD e do Civil 3D

  2. Nós para uso geral

  3. Nós de pacotes de terceiros que você pode instalar separadamente

Se você usar os nós encontrados nas prateleiras do AutoCAD e do Civil 3D, o gráfico do Dynamo funcionará somente no Dynamo for Civil 3D. Se um gráfico do Dynamo for Civil 3D for aberto em outro lugar (no Dynamo para Revit, por exemplo), esses nós serão sinalizados com um aviso e não serão executados.

Por que há duas prateleiras separadas para o AutoCAD e o Civil 3D?

Essa organização distingue os nós de objetos nativos do AutoCAD (linhas, polilinhas, referências de bloco etc.) dos nós de objetos do Civil 3D (alinhamentos, corredores, superfícies etc.). E, do ponto de vista técnico, o AutoCAD e o Civil 3D são dois itens separados – o AutoCAD é o aplicativo base e o Civil 3D é construído com base nele.

Hierarquia de nós

Para trabalhar com os nós do AutoCAD e do Civil 3D, é importante ter uma compreensão sólida da hierarquia de objetos em cada prateleira. Você se lembra da taxonomia da biologia? Reino, Filo, Classe, Ordem, Família, Gênero, Espécie? Os objetos do AutoCAD e do Civil 3D são categorizados de forma semelhante. Vamos analisar alguns exemplos para explicar.

Objetos do Civil

Vamos usar um alinhamento como exemplo.

Digamos que seu objetivo seja alterar o nome do alinhamento. A partir daqui, o próximo nó que você adicionaria é um nó CivilObject.SetName.

No início, isso pode não parecer muito intuitivo. O que é um CivilObject e por que a biblioteca não tem um nó Alignment.SetName? A resposta está relacionada à reutilização e à simplicidade. Se você parar para pensar, o processo de alterar o nome de um objeto do Civil 3D será o mesmo quer o objeto seja um alinhamento, corredor, perfil ou outra coisa. Assim, em vez de ter nós repetitivos que essencialmente fazem a mesma coisa (por exemplo, Alignment.SetName, Corridor.SetName, Profile.SetName etc.), faria sentido combinar essa funcionalidade em um único nó. É exatamente isso que CivilObject.SetName faz.

Outra maneira de pensar sobre isso é com base em relacionamentos. Um alinhamento e um corredor são tipos de Objetos do Civil, assim como uma maçã e uma pera são tipos de frutas. Os nós de Objeto do Civil se aplicam a qualquer tipo de Objeto do Civil, da mesma forma que você pode desejar usar um único descascador para remover as cascas de uma maçã e de uma pera. Sua cozinha ficaria bem bagunçada se você tivesse um descascador separado para cada tipo de fruta. Nesse sentido, a biblioteca de nós do Dynamo é como sua cozinha.

Objetos

Agora, vamos aprofundar essa ideia. Digamos que você deseje alterar a camada do alinhamento. Você usaria o nó Object.SetLayer.

Por que não há um nó chamado CivilObject.SetLayer? Os mesmos princípios de reutilização e simplicidade que discutimos anteriormente aplicam-se aqui. A propriedade layer é algo que é comum a qualquer objeto no AutoCAD que possa ser desenhado ou inserido, como linha, polilinha, texto, referência de bloco etc. Os objetos do Civil 3D, como alinhamentos e corredores, estão na mesma categoria, e, portanto, qualquer nó que se aplica a um Objeto também pode ser usado com qualquer Objeto do Civil.

Recursos

Este manual é apenas o início de sua jornada com o Dynamo for Civil 3D. Há uma grande variedade de conhecimentos disponíveis em uma comunidade consolidada de usuários do Dynamo. Veja alguns desses recursos à medida que aprende.

Ajuda do Civil 3D

Fórum do Dynamo

Autodesk University

Livros

Geradores de pontos do Python

Os seguintes scripts Python geram matrizes de pontos para diversos exemplos. Elas devem ser coladas em um nó de script do Python da seguinte forma:

python_points_1

out_points = []

for i in range(11):
	sub_points = []
	for j in range(11):
		z = 0
		if (i == 5 and j == 5):
			z = 1
		elif (i == 8 and j == 2):
			z = 1
		sub_points.append(Point.ByCoordinates(i, j, z))
	out_points.append(sub_points)

OUT = out_points

python_points_2

out_points = []

for i in range(11):
	z = 0
	if (i == 2):
		z = 1
	out_points.append(Point.ByCoordinates(i, 0, z))

OUT = out_points

python_points_3

out_points = []

for i in range(11):
	z = 0
	if (i == 7):
		z = -1
	out_points.append(Point.ByCoordinates(i, 5, z))

OUT = out_points

python_points_4

out_points = []

for i in range(11):
	z = 0
	if (i == 5):
		z = 1
	out_points.append(Point.ByCoordinates(i, 10, z))

OUT = out_points

python_points_5

out_points = []

for i in range(11):
	sub_points = []
	for j in range(11):
		z = 0
		if (i == 1 and j == 1):
			z = 2
		elif (i == 8 and j == 1):
			z = 2
		elif (i == 2 and j == 6):
			z = 2
		sub_points.append(Point.ByCoordinates(i, j, z))
	out_points.append(sub_points)

OUT = out_points

Pacotes úteis

Os pacotes do Dynamo são conjuntos de ferramentas desenvolvidos por terceiros para estender a funcionalidade principal do Dynamo. Eles podem ser acessados por todos e prontos para download com o clique do botão.

Consulte a seção Pacotes para obter mais informações sobre como começar a usar pacotes.

Veja a seguir uma lista de alguns dos pacotes mais populares que podem levar seus gráficos do Dynamo for Civil 3D a um novo patamar.

Kit de ferramentas do Civil 3D

O Kit de ferramentas do Civil 3D é um pacote do Dynamo for Civil 3D que fornece aprimoramentos significativos aos recursos do Dynamo por meio de um grande inventário de nós adicionais.

Feedback

Aulas relacionadas da Autodesk University

Camber

O Camber é um pacote de código aberto do Dynamo for Civil 3D que inclui centenas de nós para trabalhar com legendas, refexs, atalhos de dados, estilos etc.

Feedback

Código-fonte

CivilConnection

O CivilConnection é um pacote do Dynamo para Revit de código aberto que permite a troca de informações entre o Civil 3D, o Dynamo e o Revit.

Aulas relacionadas da Autodesk University

Código-fonte

Arkance Systems Nodes

O Arkance Systems Nodes é um pacote do Dynamo for Civil 3D com uma grande variedade de nós úteis para trabalhar com cotas, tabelas, vistas, controle de perfuração etc.

Feedback

Documentação

Dynamo Player

Executar o gráfico usando o Reprodutor do Dynamo e ver os resultados no Civil 3D

O Reprodutor do Dynamo fornece uma forma simplificada para executar gráficos do Dynamo no Civil 3D. Após a criação dos gráficos, não é necessário nenhum conhecimento do Dynamo para usar o Reprodutor e executar os gráficos. Isso facilita o compartilhamento de gráficos com outras pessoas que podem não estar interessadas em analisar os detalhes de nós e fios.

Para obter mais informações sobre o Reprodutor do Dynamo no Civil 3D, consulte a documentação fornecida no site Ajuda do Civil 3D.

Adicionar e compartilhar gráficos no Dynamo Player

Depois de configurar o Dynamo Player, será possível abrir os arquivos no Player. Se você estiver usando a versão para desktop, também precisará ter o Dynamo aberto.

Abrir um gráfico conectado no Dynamo Desktop

Se você estiver usando o Dynamo Desktop, o Player reconhecerá um gráfico que está aberto no momento no Dynamo e oferecerá a opção de abri-lo no Player.

Nas guias Service (Serviço) e Desktop, você encontrará uma área rotulada Upload graph (Carregar gráfico) [ 1 ] na qual é possível arrastar e soltar arquivos .dyn para adicioná-los ao Player. Como alternativa, clique na área para abrir uma caixa de diálogo para procurar e adicionar arquivos.

Os gráficos que você carregar aparecem em Uploaded graphs (Gráficos carregados) [ 2 ]. É possível abrir o gráfico ou clicar no menu de opções (três pontos) para remover, fazer o download ou compartilhar o gráfico.

É possível compartilhar os gráficos com um site ou um hub [ 3 ]. Um hub inclui vários sites. Para compartilhar um gráfico, clique em Share graph (Compartilhar gráfico) e insira os detalhes do gráfico. Você pode escolher se deseja compartilhar o gráfico com o site ou o hub. Quando você clicar em Share (Compartilhar), o gráfico ficará disponível para outros usuários com acesso a esse site ou hub.

Compartilhar um gráfico

O Dynamo Player é fornecido com vários gráficos pré-criados na seção Graphs provided by Autodesk (Gráficos fornecidos pela Autodesk) [ 4 ]. Eles são um ótimo ponto de partida para exploração e experimentação.

Casos de uso do Revit

Alguma vez você já quis procurar algo no Revit por um dado que ele possui?

É provável que você tenha feito algo como o seguinte exemplo.

Na imagem abaixo, estamos coletando todos os ambientes no modelo do Revit, obtendo o índice do ambiente desejado (por número do ambiente) e, por fim, selecionando o ambiente no índice.

  1. Colete todos os ambientes no modelo.

  2. Número do ambiente a ser localizado.

  3. Obtenha o número do ambiente e encontre em que índice ele se encontra.

  4. Obtenha o ambiente no índice.

Exercício: Dicionário de ambiente

Parte I: Criar o dicionário de ambiente

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Agora, vamos recriar essa ideia usando dicionários. Primeiro, precisamos coletar todos os ambientes em nosso modelo do Revit.

  1. Escolhemos a categoria do Revit com a qual queremos trabalhar (neste caso, estamos trabalhando com ambientes).

  2. Dizemos ao Dynamo para coletar todos esses elementos.

Em seguida, precisamos decidir quais chaves usaremos para examinar esses dados. (Para obter informações sobre as chaves, consulte a seção ).

  1. Os dados que usaremos são o número do ambiente.

Agora, criaremos o dicionário com as chaves e os elementos indicados.

  1. O nó Dictionary.ByKeysValues criará um dicionário com as entradas apropriadas.

  2. Keys precisa ser uma sequência de caracteres, enquanto values pode ser uma variedade de tipos de objetos.

Por último, é possível recuperar um ambiente do dicionário com seu número de ambiente atual.

  1. String será a chave que vamos usar para pesquisar um objeto no dicionário.

  2. Dictionary.ValueAtKey obterá o objeto do dicionário.

Parte II: Pesquisa de valores

Usando a mesma lógica de dicionário, também é possível criar dicionários com objetos agrupados. Se quiséssemos examinar todos os ambientes em um determinado nível, poderíamos modificar o gráfico acima, da seguinte forma.

  1. Em vez de usar o número do ambiente como a chave, podemos usar um valor de parâmetro (neste caso, usaremos o nível).

  1. Agora, é possível agrupar os ambientes pelo nível em que residem.

  1. Com os elementos agrupados pelo nível, agora podemos usar as chaves compartilhadas (chaves exclusivas) como a nossa chave para o dicionário e as listas de ambientes como os elementos.

  1. Por fim, usando os níveis no modelo do Revit, podemos procurar quais ambientes residem naquele nível no dicionário. Dictionary.ValueAtKey coleta o nome do nível e retorna os objetos do ambiente naquele nível.

As oportunidades de uso do dicionário são realmente infinitas. A capacidade de relacionar seus dados do BIM no Revit com o próprio elemento apresenta uma variedade de casos de uso.

Conexão do Civil 3D

O Dynamo for Civil 3D traz o paradigma da programação visual para engenheiros e projetistas que trabalham em projetos de infraestrutura civil. Você pode pensar no Dynamo como uma espécie de multiferramenta digital para usuários do Civil 3D, seja qual for a tarefa, ele tem a ferramenta certa para o trabalho. Sua interface intuitiva permite criar rotinas poderosas e personalizáveis sem escrever uma única linha de código. Não é necessário ser um programador para usar o Dynamo, mas é preciso pensar na lógica de um programador. Juntamente com os outros capítulos do manual, este capítulo ajudará você a desenvolver suas habilidades lógicas para que você possa lidar com qualquer tarefa com uma mentalidade de projeto computacional.

História

O Dynamo foi introduzido pela primeira vez no Civil 3D 2020 e continuou a evoluir desde então. Inicialmente instalado separadamente por meio de uma atualização de software, agora é fornecido com todas as versões do Civil 3D. Dependendo de qual versão do Civil 3D você esteja usando, você poderá observar que a interface do Dynamo tem aparência ligeiramente diferente dos exemplos mostrados neste capítulo. Isso ocorre porque houve uma revisão significativa da interface no Civil 3D 2023.

É recomendável dar uma olhada no para obter as informações mais atualizadas sobre o desenvolvimento do Dynamo. A tabela abaixo resume os principais marcos de vida do Dynamo for Civil 3D.

Versão do Civil 3D
Versão do Dynamo
Observações

Nós de dicionário

O Dynamo 2.0 expõe uma variedade de nós de dicionário para serem usados. Isso inclui os nós criar, ação e consulta.

Criar

  1. Dictionary.ByKeysValues criará um dicionário com os valores e chaves fornecidos. (O número de entradas será o da lista de entradas mais curta)

Ação

  1. Dictionary.Components produzirá os componentes do dicionário de entrada. (Isso é o inverso do nó criar)

  2. Dictionary.RemoveKeys produzirá um novo objeto de dicionário com as chaves de entrada removidas.

  3. Dictionary.SetValueAtKeys produzirá um novo dicionário com base nas chaves de entrada e nos valores para substituir o valor atual nas chaves correspondentes.

  4. Dictionary.ValueAtKey retornará o valor na chave de entrada.

Consulta

  1. Dictionary.Count informará quantos pares de valores-chave estão no dicionário.

  2. Dictionary.Keys retornará quais chaves estão atualmente armazenadas no dicionário.

  3. Dictionary.Values retornará quais valores estão armazenados no momento no dicionário.

A relação global de dados com dicionários é uma ótima alternativa ao método antigo de trabalho com índices e listas.

12KB
roomDictionary.dyn
O que é um dicionário?

2024.1

2.18

2024

2.17

Atualização da interface do usuário do Reprodutor do Dynamo

2023.2

2.15

2023

2.13

Atualização da interface do usuário do Dynamo

2022.1

2.12

  • Foram adicionadas configurações de armazenamento de dados de vinculação de objetos

  • Novos nós para controlar a vinculação de objetos

2022

2.10

  • Incluído na instalação principal do Civil 3D

  • Transição do IronPython para o Python.NET

2021

2.5

2020.2

2.4

2020 Update 2

2.4

Novos nós adicionados

2020.1

2.2

2020

2.1

Versão inicial

Blog do Dynamo
Interface do Dynamo, Civil 3D 2020 – 2022
Interface do Dynamo, Civil 3D 2023 – presente

Interface do usuário

Visão geral da interface do usuário

A interface do usuário (IU) do Dynamo é organizada em cinco regiões principais. Abordaremos brevemente a visão geral aqui e explicaremos melhor sobre o espaço de trabalho e a biblioteca nas seções a seguir.

  1. Menus

  2. Barra de ferramentas

  3. Biblioteca

  4. Área de trabalho

  5. Barra de execução

Menus

Confira aqui os menus para a funcionalidade básica do aplicativo Dynamo. Como a maioria dos softwares do Windows, os dois primeiros menus estão relacionados ao gerenciamento de arquivos, às operações de seleção e à edição de conteúdos. Os menus restantes são mais específicos do Dynamo.

Menus do Dynamo

As informações gerais e configurações podem ser encontradas no menu suspenso do Dynamo.

  1. Sobre – Descubra a versão do Dynamo instalada no computador.

  2. Contrato para coletar dados de usabilidade – Isso permite que você aceite, ou não, o compartilhamento dos dados de usuário para aprimorar o Dynamo.

  3. Preferências – Inclui configurações como a definição da precisão decimal do aplicativo e a qualidade de renderização da geometria.

  4. Sair do Dynamo

Ajuda

Se você tiver dúvidas, confira o menu Ajuda. Você pode acessar um dos sites de referência do Dynamo através do navegador da Internet.

  1. Introdução – Uma breve introdução sobre o uso do Dynamo.

  2. Guias interativos –

  3. Amostras – Arquivos de exemplo de referência.

  4. Dicionário do Dynamo – Recurso com a documentação sobre todos os nós.

  5. Site do Dynamo – Visualizar o projeto do Dynamo no GitHub.

  6. Wiki do projeto do Dynamo – Visite a wiki para saber como desenvolver usando a API do Dynamo, com suporte a bibliotecas e ferramentas.

  7. Exibir a página inicial – Retorna para a página inicial do Dynamo quando dentro de um documento.

  8. Relatório de um bug – Abre um problema no GitHub.

Barra de ferramentas

A barra de ferramentas do Dynamo contém uma série de botões para acesso rápido ao trabalho com arquivos, bem como os comandos Desfazer [Ctrl + Z] e Refazer [Ctrl + Y]. Na parte mais à direita, há outro botão que exporta um instantâneo do espaço de trabalho, o que é extremamente útil para fins de documentação e compartilhamento.

  • Novo – Criar um novo arquivo .dyn

  • Abrir – Abrir um arquivo .dyn (espaço de trabalho) ou .dyf (nó personalizado) existente

  • Salvar/Salvar como – Salvar o arquivo .dyn ou .dyf ativo

  • Desfazer – Desfaz a última ação

  • Refazer – Refaz a próxima ação

  • Exportar espaço de trabalho como imagem – Exporta o espaço de trabalho visível como um arquivo PNG

Biblioteca

A biblioteca do Dynamo é um conjunto de bibliotecas funcionais e cada biblioteca contém nós agrupados por categoria. Trata-se de bibliotecas básicas que são adicionadas durante a instalação padrão do Dynamo. À medida que desenvolvemos seu uso, demonstraremos como estender a funcionalidade básica com nós personalizados e pacotes adicionais. A seção Biblioteca oferece uma orientação mais detalhada sobre esse uso.

Área de trabalho

O espaço de trabalho é onde desenvolvemos nossos programas visuais. Também é possível alterar aqui a configuração de visualização para visualizar as geometrias 3D. Consulte Área de trabalho para obter mais detalhes.

Barra de execução

Execute o script do Dynamo daqui. Clique no ícone do menu suspenso no botão Executar para alternar entre os diferentes modos.

  • Automático: executa o script automaticamente. As alterações são atualizadas em tempo real.

  • Manual: o script somente é executado ao clicar no botão “Executar”. Isso é útil para fazer alterações em scripts “pesados” e complicados.

  • Periódico: essa opção está desativada por padrão. Somente está disponível quando o nó DateTime.Now é usado. É possível definir o gráfico para ser executado automaticamente em um intervalo especificado.

Área de trabalho

Espaço de trabalho principal

O espaço de trabalho do Dynamo consiste em quatro elementos principais.

  1. Todas as guias ativas.

  2. Modo de visualização

  3. Controles de zoom/pan

  4. Nó no espaço de trabalho

Todas as guias ativas

Quando você abre um novo arquivo, um novo espaço de trabalho inicial será aberto por padrão.

Você pode criar um nó personalizado e abri-lo em um espaço de trabalho de nó personalizado.

Somente um espaço de trabalho inicial é permitido em cada janela do Dynamo, mas você pode ter vários espaços de trabalho de nós personalizados abertos em guias.

Modo de visualização

Há três métodos para alternar entre diferentes visualizações:

a. Use os ícones na parte superior direita

  • Visualização de gráfico

  • Visualização 3D

b. Clique com o botão direito do mouse no espaço de trabalho

  • Alterne a visualização 3D para a visualização de gráfico

  • Alterne a visualização de gráfico para a visualização 3D

c. c. Use o atalho de teclado (Ctrl+B)

Controles de zoom/pan

Você pode usar ícones ou um mouse para navegar em qualquer espaço de trabalho.

a. No modo de Visualização de gráfico

  • Com ícones:

    • Zoom para ajustar

    • Aumentar o zoom

    • Diminuir o zoom

    • Efetuar panorâmica

  • Com o mouse:

    • Clique com o botão esquerdo do mouse – Selecionar

    • Clique com o botão esquerdo e arraste a caixa Seleção para selecionar vários pontos.

    • Role com botão do meio do mouse para cima e para baixo – Aproximar/afastar o zoom

    • Clique com o botão do meio do mouse e arraste – Pan

    • Clique com o botão direito do mouse em qualquer lugar na tela – Abrir pesquisa na tela

b. No modo de Visualização 3D

  • Com ícones:

    • Zoom para ajustar

    • Aumentar o zoom

    • Diminuir o zoom

    • Efetuar panorâmica

    • Orbitar

  • Com o mouse:

    • Role com botão do meio do mouse para cima e para baixo – Aproximar/afastar o zoom

    • Clique com o botão do meio do mouse e arraste – Pan

    • Clique com o botão direito do mouse e arraste – Órbita

Nó no espaço de trabalho

Clique com o botão esquerdo do mouse para selecionar qualquer nó.

Para selecionar vários nós, clique e arraste para criar uma caixa de seleção.

Pontos

Pontos no Dynamo

O que é um ponto?

Um ponto é definido por nada mais que um ou mais valores chamados coordenadas. A quantidade de valores de coordenadas que precisamos para definir o ponto depende do sistema de coordenadas ou do contexto em que ele se encontra.

Ponto 2D/3D

O tipo mais comum de ponto no Dynamo existe em nosso Sistema de coordenadas universais tridimensional e tem três coordenadas [X,Y,Z] (Ponto 3D no Dynamo).

Um ponto 2D no Dynamo tem duas coordenadas [X,Y].

Ponto em curvas e superfícies

Os parâmetros para curvas e superfícies são contínuos e se estendem além da aresta da geometria fornecida. Como as formas que definem o espaço paramétrico residem em um Sistema de coordenadas universais tridimensional, sempre podemos converter uma coordenada paramétrica em uma coordenada “Universal”. O ponto [0,2; 0,5] na superfície, por exemplo, é o mesmo que o ponto [1,8; 2,0; 4,1] nas coordenadas universais.

  1. Ponto em coordenadas XYZ universais assumidas

  2. Ponto relativo a um determinado sistema de coordenadas (cilíndrico)

  3. Ponto como coordenada UV em uma superfície

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

7KB
Geometry for Computational Design - Points.dyn

Análise abrangente de...

Se a geometria é o idioma de um modelo, então os pontos são o alfabeto. Os pontos são a fundação na qual todas as outras geometrias são criadas: precisamos de ao menos dois pontos para criar uma curva, precisamos de ao menos três pontos para criar um polígono ou uma face de malha, e assim por diante. A definição de posição, ordem e relação entre os pontos (tente uma função de seno) nos permite definir uma geometria de ordem superior como as coisas que reconhecemos como círculos ou curvas.

Ponto para curva
  1. Um círculo que usa as funções x=r*cos(t) e y=r*sin(t)

  2. Uma curva senoidal que usa as funções x=(t) e y=r*sin(t)

Ponto como Coordenadas

Os pontos também podem existir em um sistema de coordenadas bidimensional. A convenção tem uma notação de letra diferente dependendo do tipo de espaço com que estamos trabalhando: podemos usar [X,Y] em um plano ou [U,V] se estivermos em uma superfície.

Ponto como coordenadas
  1. Um ponto no Sistema de coordenadas euclidianas: [X,Y,Z]

  2. Um ponto em um sistema de coordenadas de parâmetro de curva: [t]

  3. Um ponto em um sistema de coordenadas de parâmetro de superfície: [U,V]

Booleanos geométricos

Intersect, Trim e SelectTrim são principalmente usados na geometria bidimensional menor como Pontos, Curvas e Superfícies. A geometria sólida, por outro lado, tem um conjunto adicional de métodos para modificar a forma após sua construção, subtraindo o material de uma forma similar a Trim e combinando elementos para formar um todo maior.

Union

O método Union usa dois objetos sólidos e cria um único objeto sólido fora do espaço coberto por ambos os objetos. O espaço sobreposto entre os objetos é combinado na forma final. Este exemplo combina uma esfera e um cuboide em uma única forma sólida de cubo de esfera:

s1 = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin, 6);

s2 = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin.Translate(4, 0,
    0), 6);

combined = s1.Union(s2);

Difference

O método Difference, como Trim, subtrai o conteúdo do sólido da ferramenta de entrada do sólido base. Neste exemplo, nós colocamos um pequeno recuo fora de uma esfera:

s = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin, 6);

tool = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin.Translate(10, 0,
    0), 6);

result = s.Difference(tool);

Intersect

O método Intersect retorna o sólido sobreposto entre duas entradas de sólidos. No exemplo a seguir, o método Difference foi alterado para Intersect, e o sólido resultante é o vazio ausente inicialmente entalhado:

s = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin, 6);

tool = Sphere.ByCenterPointRadius(
    CoordinateSystem.Identity().Origin.Translate(10, 0,
    0), 6);

result = s.Intersect(tool);

O que é um dicionário

O Dynamo 2.0 apresenta o conceito de separar o tipo de dados de dicionários do tipo de dados de listas. Essa alteração pode representar algumas alterações significativas na forma como você cria e trabalha com os dados em seus fluxos de trabalho. Antes da versão 2.0, os dicionários e as listas eram combinados como um tipo de dados. Em resumo, as listas eram, na verdade, dicionários com chaves de número inteiro.

O que é um dicionário?

Um dicionário é um tipo de dados formado por um conjunto de pares de valores-chave onde cada chave é exclusiva em cada conjunto. Um dicionário não tem ordem e, basicamente, é possível “procurar por coisas” usando uma chave em vez de um valor de índice, como em uma lista. No Dynamo 2.0, as chaves somente podem ser sequências de caracteres.

O que é uma lista?

Uma lista é um tipo de dados formado por um conjunto de valores ordenados. No Dynamo, as listas usam números inteiros como valores de índice.

Por que essa mudança foi feita e por que é importante para mim?

A separação dos dicionários das listas apresenta os dicionários como um elemento de primeira classe que você pode usar para armazenar e pesquisar valores de maneira rápida e fácil, sem precisar lembrar um valor de índice ou manter uma estrutura de lista rigorosa em todo o fluxo de trabalho. Durante o teste dos usuários, vimos uma redução significativa no tamanho do gráfico quando os dicionários eram usados em vez de vários nós GetItemAtIndex.

Quais são as mudanças?

  • Ocorreram alterações na sintaxe que alteram a forma como você inicializará e trabalhará com dicionários e listas em blocos de código.

    • Os dicionários usam a seguinte sintaxe {key:value}

    • As listas usam a seguinte sintaxe [value,value,value]

  • Novos nós foram introduzidos na biblioteca para ajudar a criar, modificar e consultar dicionários.

  • As listas criadas em blocos de código v1.x migrarão automaticamente durante o carregamento do script com a nova sintaxe de lista que usa colchetes [ ] em vez de chaves { } \



Por que isso é importante para mim? Para que você usaria isso?

Em ciência de computação, os dicionários, como as listas, são conjuntos de objetos. Embora as listas estejam em uma ordem específica, os dicionários são conjuntos não ordenados. Eles não dependem de números sequenciais (índices); em vez disso, usam chaves.

Na imagem abaixo, demonstramos um caso de uso potencial de um dicionário. Muitas vezes, os dicionários são usados para relacionar duas partes dos dados que podem não ter uma correlação direta. No nosso caso, estamos ligando a versão em espanhol de uma palavra à versão em inglês para uma pesquisa posterior.

  1. Crie um dicionário para relacionar as duas partes dos dados.

  2. Obtenha o valor com a chave fornecida.

Curvas

Curvas no Dynamo

O que é uma curva?

As são o primeiro tipo de dados geométricos que abordamos e que tem um conjunto mais familiar de propriedades descritivas de forma: em que medida elas são mais curvas ou retas? Longas ou curtas? E lembre-se de que os Pontos ainda são os nossos blocos de construção para definir qualquer coisa, desde uma linha a uma spline e todos os tipos de curva entre elas.

  1. Linha

  2. Polilinha

  3. Arco

  4. Circle

  5. Elipse

  6. Curva NURBS

  7. PolyCurve

Linha

é composta por um conjunto de pontos, cada linha tem ao menos dois pontos. Um dos modos mais comuns de criar linhas no Dynamo é usando Line.ByStartPointEndPoint para criar uma linha no Dynamo.

Curva NURBS

é um modelo usado para representar curvas e superfícies com precisão. Uma curva senoidal no Dynamo usando dois métodos diferentes para criar curvas NURBS para comparar os resultados.

  1. NurbsCurve.ByControlPoints usa a lista de pontos como pontos de controle

  2. NurbsCurve.ByPoints desenha uma curva através da lista de pontos

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Análise abrangente de...

Curvas

O termo Curve é um termo mais abrangente que engloba todas as diferentes formas curvas (mesmo se forem retas). A curva capital “C” é a categorização principal para todos esses tipos de forma: linhas, círculos, splines, etc. Tecnicamente, uma curva descreve cada ponto possível que possa ser encontrado inserindo “t” em um conjunto de funções, que podem variar desde funções simples (x = -1.26*t, y = t) a funções que envolvam cálculos. Não importa com que tipo de curva estamos trabalhando, este Parâmetro chamado “t” é uma propriedade que podemos avaliar. Além disso, independentemente da aparência da forma, todas as curvas também têm um ponto inicial e um ponto final, que coincidem com os valores mínimo e máximo de “t” usados para criar a curva. Isso também nos ajuda a compreender sua direcionalidade.

É importante observar que o Dynamo assume que o domínio dos valores “t” de uma curva é compreendido entre 0,0 e 1,0.

Todas as curvas também possuem diversas propriedades ou características que podem ser usadas para descrever ou analisar. Quando a distância entre os pontos inicial e final for zero, a curva será "fechada". Além disso, cada curva tem vários pontos de controle, se todos esses pontos estão localizados no mesmo plano, a curva é "plana". Algumas propriedades se aplicam à curva como um todo, enquanto outras somente se aplicam a pontos específicos ao longo da curva. Por exemplo, a planaridade é uma propriedade global, enquanto um vetor tangente em um determinado valor "t" é uma propriedade local.

Linhas

As Linhas são a forma mais simples de Curvas. Podem não parecer curvas, mas na verdade são: apenas sem qualquer curvatura. Existem algumas maneiras diferentes de criar Linhas, sendo a mais intuitiva do ponto A ao ponto B. A forma da linha AB será desenhada entre os pontos, mas matematicamente ela se estende infinitamente em ambas as direções.

Quando nós conectamos duas linhas, temos uma Polilinha. Aqui temos uma representação simples do que é um Ponto de controle. Editar qualquer uma dessas localizações de ponto irá alterar a forma da D. Se a polilinha estiver fechada, temos um polígono. Se os comprimentos de aresta do polígono forem todos iguais, ele será descrito como normal.

Arcos, círculos, arcos de elipse e elipses

À medida que adicionamos mais complexidade às funções paramétricas que definem uma forma, podemos avançar mais uma etapa a partir de uma linha para criar um Arco, Círculo, Arco de elipse ou Ellipse descrevendo um ou dois raios. As diferenças entre a versão do arco e o círculo ou elipse são apenas se a forma está fechada.

NURBS + Policurvas

NURBS (Splines de base racional não uniforme) são representações matemáticas que podem modelar com precisão qualquer forma, desde uma linha simples bidimensional, um círculo, um arco ou um retângulo até a curva orgânica tridimensional mais complexa e de forma livre. Devido à sua flexibilidade (relativamente poucos pontos de controle, mas interpolação suave com base nas configurações de grau) e precisão (delimitado por uma matemática robusta), os modelos NURBS podem ser usados em qualquer processo, da ilustração e animação à fabricação.

Grau: o grau da curva determina o intervalo de influência que os pontos de controle têm em uma curva; quanto maior for o grau, maior será o intervalo. O grau é um número inteiro positivo. Este número é normalmente 1, 2, 3 ou 5, mas pode ser qualquer número inteiro positivo. As linhas e polilinhas NURBS são normalmente de grau 1 e a maioria das curvas de forma livre é de graus 3 ou 5.

Pontos de controle: os pontos de controle são uma lista de ao menos pontos de graus + 1. Uma das formas mais fáceis de alterar a forma de uma curva NURBS é mover seus Pontos de controle.

Peso: os pontos de controle têm um número associado denominado Peso. Os pesos são, normalmente, números positivos. Quando os Pontos de controle de uma curva têm o mesmo peso (normalmente 1), a Curva é chamada não racional, caso contrário, a Curva é chamada racional. A maioria das curvas NURBS é não racional.

Nós: os nós são uma lista de números (graus+N-1), em que N é o número de pontos de controle. Os nós são usados junto com os pesos para controlar a influência dos Pontos de controle na curva resultante. Um uso dos nós é a criação de pontos de inflexão em certos pontos da curva.

  1. Grau = 1

  2. Grau = 2

  3. Grau = 3

Observe que quanto maior for o valor do grau, mais pontos de controle serão usados para interpolar a curva resultante.

Publicar um pacote

Nas seções anteriores, analisamos os detalhes de como o pacote MapToSurface é configurado com nós personalizados e arquivos de exemplo. Mas como publicamos um pacote que foi desenvolvido localmente? Este estudo de caso demonstra como publicar um pacote de um conjunto de arquivos em uma pasta local.

Há diversas formas de publicar um pacote. Confira abaixo o processo que aconselhamos: publicar localmente, desenvolver localmente e publicar on-line. Vamos começar com uma pasta contendo todos os arquivos do pacote.

Desinstalar um pacote

Antes de passarmos para a publicação do pacote MapToSurface, se você instalou o pacote da lição anterior, desinstale-o para que não esteja trabalhando com pacotes idênticos.

Para começar, vá para a guia Pacotes > Package Manager > Pacotes instalados > ao lado de MapToSurface, clique no menu de pontos verticais > Excluir.

Em seguida, reinicie o Dynamo. Depois de reabrir, quando você verificar a janela “Gerenciar pacotes”, o MapToSurface não deverá mais estar lá. Agora estamos prontos para começar.

Publicar um pacote localmente

É possível publicar nós e pacotes personalizados do Dynamo Sandbox na versão 2.17 e mais recentes, desde que não tenham dependências de APIs do hospedeiro. Em versões anteriores, a publicação de nós e pacotes personalizados somente estava ativada no Dynamo for Revit e no Dynamo for Civil 3D.

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Este é o primeiro envio para o nosso pacote e colocamos todos os arquivos de exemplo e nós personalizados em uma pasta. Com essa pasta preparada, estamos prontos para carregar no Gerenciador de pacotes do Dynamo.

  1. Essa pasta contém cinco nós personalizados (.dyf).

  2. Essa pasta também contém cinco arquivos de exemplo (.dyn) e um arquivo de vetor importado (.svg). Esses arquivos servirão como exercícios introdutórios para mostrar ao usuário como trabalhar com os nós personalizados.

No Dynamo, comece clicando na guia Pacotes > Package Manager > Publicar novo pacote.

Na guia Publicar um pacote, preencha os campos relevantes no lado esquerdo da janela.

Em seguida, adicionaremos arquivos de pacote. É possível adicionar arquivos um a um ou todas as pastas selecionando Adicionar diretório (1). Para adicionar arquivos que não são arquivos .dyf, assegure-se de alterar o tipo de arquivo na janela do navegador para “Todos os arquivos (.)”. Observe que vamos adicionar indiscriminadamente cada arquivo, nó personalizado (.dyf) ou arquivo de exemplo (.dyn). O Dynamo categorizará esses itens quando o pacote for publicado.

Depois de selecionar a pasta MapToSurface, o Package Manager mostrará o conteúdo da pasta. Se você estiver carregando seu próprio pacote com uma estrutura de pastas complexa e não quiser que o Dynamo faça alterações na estrutura de pastas, poderá ativar a alternância “Manter estrutura de pastas”. Essa opção é para usuários avançados e, se o pacote não for configurado deliberadamente de uma forma específica, será melhor deixar essa alternância desativada e permitir que o Dynamo organize os arquivos conforme necessário. Clique em Avançar para continuar.

Aqui, você tem a chance de visualizar como o Dynamo organizará os arquivos do pacote antes da publicação. Clique em Concluir para continuar.

Publique clicando em “Publicar localmente” (1). Após completar esses passos, certifique-se de clicar em “Publicar localmente” e não em “Publicar on-line” para evitar ter um acúmulo de pacotes duplicados no Package Manager.

Após a publicação, os nós personalizados devem estar disponíveis no grupo “DynamoPrimer” ou na Biblioteca do Dynamo.

Agora, vamos examinar o diretório raiz para ver como o Dynamo formatou o pacote que acabamos de criar. Para fazer isso, vá para a guia Pacotes instalados > ao lado de MapToSurface, clique no menu de pontos verticais > selecione Mostrar diretório raiz.

Observe que o diretório raiz está na localização local do pacote (lembre-se de que publicamos o pacote “localmente”). O Dynamo está fazendo referência a esta pasta para ler nós personalizados. Portanto, é importante publicar localmente o diretório em uma localização de pasta permanente (ou seja, não na área de trabalho). Veja a seguir o detalhamento da pasta do pacote do Dynamo.

  1. A pasta bin contém os arquivos .dll criados com bibliotecas C# ou Sem toque. Não temos nenhum arquivo desse tipo nesse pacote; portanto, a pasta está em branco neste exemplo.

  2. A pasta dyf contém os nós personalizados. Depois de abrir essa pasta, serão exibidos todos os nós personalizados (arquivos .dyf) desse pacote.

  3. A pasta adicional contém todos os arquivos adicionais. É provável que esses arquivos sejam arquivos do Dynamo (.dyn) ou qualquer arquivo adicional necessário (.svg, .xls, .jpeg, .sat, etc.).

  4. O arquivo pkg é um arquivo de texto básico que define as configurações do pacote. Isso é automatizado no Dynamo, mas pode ser editado se você deseja entrar nos detalhes.

Publicar um pacote on-line

Observação: Siga estas etapas somente se você estiver realmente publicando um pacote próprio.

  1. Quando estiver pronto para publicar, na janela Pacotes > Package Manager > Pacotes instalados, selecione o botão à direita do pacote que deseja publicar e escolha Publicar.

  2. Se você estiver atualizando um pacote que já foi publicado, selecione “Publicar versão” e o Dynamo atualizará o pacote on-line com base nos novos arquivos no diretório raiz do pacote. Simples assim!

Publicar versão...

Ao atualizar os arquivos na pasta raiz do pacote publicado, também é possível publicar uma nova versão do pacote selecionando “Publicar versão...” na guia Meus pacotes. Essa é uma forma perfeita para fazer atualizações necessárias ao conteúdo e para compartilhar com a comunidade. A opção Publicar versão só funcionará se você for o administrador do pacote.

Transferir a propriedade de um pacote

No momento, não é possível transferir a propriedade do pacote por meio do Gerenciador de pacotes. É possível solicitar que a equipe do Dynamo adicione mais um proprietário. Observe que não podemos remover proprietários existentes, apenas adicionar mais mantenedores do pacote. Se você deseja adicionar uma conta como proprietária ao pacote existente, envie um e-mail para . Certifique-se de fornecer o nome do pacote e o nome da conta que deseja adicionar.

Desenvolver um pacote

O Dynamo oferece diversas formas de criar um pacote para seu uso pessoal ou para compartilhar com a comunidade do Dynamo. No estudo de caso abaixo, vamos analisar como um pacote é configurado desconstruindo um existente. Este estudo de caso baseia-se nas lições do capítulo anterior, fornecendo um conjunto de nós personalizados para o mapeamento de geometria, por coordenadas UV, de uma superfície do Dynamo para outra.

Pacote MapToSurface

Vamos trabalhar com um pacote de amostra que demonstra o mapeamento UV de pontos de uma superfície para outra. Já desenvolvemos os conceitos básicos da ferramenta na seção deste manual. Os arquivos abaixo demonstram como podemos usar o conceito de mapeamento UV e desenvolver um conjunto de ferramentas para uma biblioteca publicável.

Nessa imagem, mapeamos um ponto de uma superfície para outra usando as coordenadas UV. O pacote é baseado nesse conceito, mas com uma geometria mais complexa.

Instalar o pacote

No capítulo anterior, exploramos formas de criar painéis em uma superfície no Dynamo com base nas curvas definidas no plano XY. Este estudo de caso estende esses conceitos para mais cotas de geometria. Vamos instalar esse pacote conforme construído para demonstrar como ele foi desenvolvido. Na próxima seção, demonstraremos como esse pacote foi publicado.

No Dynamo, clique em Pacotes > Package Manager e procure o pacote “MapToSurface” (uma única palavra). Clique em Instalar para iniciar o download e adicionar o pacote à biblioteca.

Após a instalação, os nós personalizados devem estar disponíveis na seção Complementos > DynamoPrimer.

Com o pacote já instalado, vamos analisar como ele está configurado.

Nós personalizados

O pacote que estamos criando usa cinco nós personalizados que criamos para referência. Vamos examinar o que cada nó faz abaixo. Alguns nós personalizados são criados com base em outros nós personalizados, e os gráficos têm um layout para que outros usuários compreendam de forma simples.

Esse é um pacote simples com cinco nós personalizados. Nas etapas abaixo, falaremos brevemente sobre a configuração de cada nó personalizado.

PointsToSurface

Esse é um nó personalizado básico e no qual todos os outros nós de mapeamento estão baseados. Em termos simples, o nó mapeia um ponto de uma coordenada UV da superfície de origem para o local da coordenada UV a superfície de destino. Como os pontos são a geometria mais primitiva, a partir da qual se constrói uma geometria mais complexa, podemos usar essa lógica para mapear a geometria 2D e até mesmo a geometria 3D de uma superfície para outra.

PolygonsToSurface

A lógica de estender pontos mapeados da geometria 1D para a geometria 2D é demonstrada aqui simplesmente com polígonos. Observe que aninhamos o nó “PointsToSurface” nesse nó personalizado. Dessa forma, é possível mapear os pontos de cada polígono para a superfície e, em seguida, regenerar o polígono com base nesses pontos mapeados. Mantendo a estrutura de dados apropriada (uma lista de listas de pontos), podemos manter os polígonos separados após serem reduzidos a um conjunto de pontos.

NurbsCrvtoSurface

A mesma lógica do nó “PolygonsToSurface” se aplica aqui. Mas, em vez de mapear pontos poligonais, estamos mapeando pontos de controle de uma curva Nurbs.

OffsetPointsToSurface

Esse nó é um pouco mais complexo, mas o conceito é simples: como o nó “PointsToSurface”, esse nó mapeia pontos de uma superfície para outra. No entanto, ele também considera os pontos que não estão na superfície de origem, obtém sua distância até o parâmetro UV mais próximo e mapeia essa distância para a normal da superfície-alvo na coordenada UV correspondente. Isso fará mais sentido ao analisar os arquivos de exemplo.

SampleSrf

Esse é um nó simples que cria uma superfície paramétrica para mapear da grade de origem para uma superfície ondulada nos arquivos de exemplo.

Arquivos de exemplo

Os arquivos de exemplo podem ser encontrados na pasta raiz do pacote. Clique na guia Package Manager > Pacotes instalados.

Ao lado de MapToSurface, clique no menu de pontos verticais > Mostrar diretório raiz.

Em seguida, abra a pasta “extra”, que contém todos os arquivos do pacote que não são nós personalizados. Esse é o local onde os arquivos de exemplos (se existirem) são armazenados para pacotes do Dynamo. As capturas de tela abaixo apresentam os conceitos demonstrados em cada arquivo de exemplo.

01-PanelingWithPolygons

Esse arquivo de exemplo demonstra como “PointsToSurface” pode ser usado para criar painéis em uma superfície com base em uma grade de retângulos. Isso deve parecer familiar para você, pois demonstramos um fluxo de trabalho similar no .

02-PanelingWithPolygons-II

Usando um fluxo de trabalho semelhante, esse arquivo de exercício mostra uma configuração para o mapeamento de círculos (ou polígonos que representam círculos) de uma superfície para outra. Isso usa o nó “PolygonsToSurface”.

03-NurbsCrvsAndSurface

Esse arquivo de exemplo adiciona alguma complexidade ao trabalhar com o nó “NurbsCrvToSurface”. A superfície alvo é deslocada uma determinada distância e a curva Nurbs é mapeada para a superfície alvo original e para a superfície de deslocamento. A partir daí, as duas curvas mapeadas são elevadas para criar uma superfície, que então se torna mais espessa. Esse sólido resultante apresenta uma ondulação representativa das normais da superfície-alvo.

04-PleatedPolysurface-OffsetPoints

Esse arquivo de exemplo demonstra como mapear uma PolySurface plissada de uma superfície de origem para uma superfície-alvo. A superfície de origem e a de destino são uma superfície retangular que se estende pela grade e uma superfície de revolução, respectivamente.

A PolySurface de origem é mapeada da superfície de origem para a superfície de destino.

05-SVG-Import

Como os nós personalizados são capazes de mapear diferentes tipos de curvas, esse último arquivo faz referência a um arquivo SVG exportado do Illustrator e mapeia as curvas importadas para uma superfície-alvo.

Durante a análise da sintaxe de um arquivo .svg, as curvas são convertidas do formato .xml para policurvas do Dynamo.

As curvas importadas são mapeadas para uma superfície-alvo. Isso nos permite projetar explicitamente (apontar e clicar) uma panorâmica no Illustrator, importar para o Dynamo e aplicar a uma superfície de destino.

Gerenciamento de grupo de pontos

Trabalhar com pontos COGO e grupos de pontos no Civil 3D é um elemento central de muitos processos do campo à conclusão. O Dynamo realmente brilha quando se trata de gerenciamento de dados e demonstraremos um caso de uso potencial neste exemplo.

Objetivo

🎯 Criar um grupo de pontos para cada descrição de ponto COGO exclusiva.

Principais conceitos

  • Trabalhar com listas

  • Agrupar objetos similares com o nó List.GroupByKey

  • Mostrar a saída personalizada no Reprodutor do Dynamo

Compatibilidade de versão

Este gráfico será executado no Civil 3D 2020 e versões superiores.

Conjunto de dados

Comece fazendo o download dos arquivos de amostra abaixo e, em seguida, abrindo o arquivo DWG e o gráfico do Dynamo.

Solução

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

  1. Obter todos os pontos COGO no documento

  2. Agrupar os pontos COGO por descrição

  3. Criar os grupos de pontos

  4. Gerar a saída de um resumo para o Reprodutor do Dynamo

Vamos começar

Obter os pontos COGO

Nossa primeira etapa é obter todos os grupos de pontos no documento e, em seguida, obter todos os pontos COGO dentro de cada grupo. Isso nos fornecerá uma lista aninhada ou uma “lista de listas” com a qual será mais fácil trabalhar mais tarde se aplainarmos tudo em uma única lista com o nó List.Flatten.

Se você não estiver familiarizado com o trabalho com listas, veja a seção .

Agrupar os pontos por descrição

Agora que temos todos os pontos COGO, precisamos separá-los em grupos com base em suas descrições. É exatamente isso que o nó List.GroupByKey faz. Ele essencialmente agrupa todos os itens que compartilham a mesma chave.

Criar os grupos de pontos

O trabalho árduo está feito. A etapa final é criar novos grupos de pontos do Civil 3D com base em pontos COGO agrupados.

Resumo da saída

Quando você executa o gráfico, não há nada para ver na visualização do plano de fundo do Dynamo porque não estamos trabalhando com nenhuma geometria. Portanto, a única maneira de ver se o gráfico foi executado corretamente é verificar o espaço da ferramenta ou analisar as visualizações de saída do nó. No entanto, se executarmos o gráfico usando o Reprodutor do Dynamo, poderemos fornecer mais feedback sobre os resultados do gráfico, gerando um resumo dos grupos de pontos que foram criados. Tudo o que você precisa fazer é clicar com o botão direito do mouse em um nó e defini-lo como É saída. Neste caso, usamos um nó Inspeção renomeado para visualizar os resultados.

Resultado

Veja um exemplo de como executar o gráfico usando o Reprodutor do Dynamo.

Se o Reprodutor do Dynamo for algo novo para você, veja a seção .

🎉 Missão cumprida.

Ideias

Veja a seguir algumas ideias sobre como você pode expandir os recursos desse gráfico.

Modifique o agrupamento de pontos para que seja baseado na descrição completa em vez de na descrição original.

Agrupe os pontos em algumas outras categorias predefinidas que você escolher (por exemplo, “Instantâneos no nível do solo”, “Monumentos” etc.)

Cria automaticamente superfícies TIN para pontos em determinados grupos.

Vinculação de objetos

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.

Exemplo

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.

Outro exemplo

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 abaixo).

Depois de fazer essa alteração, temos o comportamento que procuramos.

Configurações de vinculação

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.

Opção 1: Nenhum dado de vinculação mantido

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.

Opção 2: Armazenar no desenho para o Dynamo

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.

Opção 3: Armazenar no desenho para o Dynamo

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.

Opção 4: Armazenar no desenho para o Reprodutor do Dynamo

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 .

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.

Primitivas geométricas

CoordinateSystem

Embora o Dynamo seja capaz de criar uma variedade de formas geométricas complexas, as primitivas geométricas simples formam a espinha dorsal de qualquer projeto de cálculo: expressas diretamente na forma final projetada ou usadas como pontos de partida dos quais é gerada uma geometria mais complexa.

Embora não seja estritamente uma geometria, o CoordinateSystem é uma ferramenta importante para construir a geometria. Um objeto CoordinateSystem mantém o controlo das transformações de posição e geométricas, como rotação, cisalhamento e escala.

Criar um CoordinateSystem centralizado em um ponto com x = 0, y = 0, z = 0, sem rotações, escala ou transformações de cisalhamento, requer simplesmente a chamada do construtor Identity:

Os CoordinateSystems com transformações geométricas estão fora do escopo deste capítulo, embora outro construtor permita criar um sistema de coordenadas em um ponto específico, CoordinateSystem.ByOriginVectors:

Ponto

A primitiva geométrica mais simples é um Ponto, representando uma localização de dimensão zero no espaço tridimensional. Como mencionado anteriormente, há diversas formas de criar um ponto em um determinado sistema de coordenadas: Point.ByCoordinates cria um ponto com as coordenadas x, y e x especificadas; Point.ByCartesianCoordinates cria um ponto com as coordenadas x, y e x especificadas em um sistema de coordenadas específico; Point.ByCylindricalCoordinates cria um ponto sobre um cilindro com o raio, o ângulo de rotação e a altura; e Point.BySphericalCoordinates cria um ponto sobre uma esfera com o raio e dois ângulos de rotação.

Este exemplo mostra pontos criados em vários sistemas de coordenadas:

Linha

A próxima primitiva dimensional superior do Dynamo é um segmento de linha, representando um número infinito de pontos entre dois pontos finais. É possível criar as linhas explicitamente especificando os dois pontos de limite com o construtor Line.ByStartPointEndPoint ou especificando um ponto inicial, uma direção e um comprimento nessa direção, Line.ByStartPointDirectionLength.

Primitivos 3D – cuboide, cone, cilindro, esfera etc.

O Dynamo tem objetos que representam os tipos mais básicos de primitivas geométricas em três dimensões: cuboides, criados com Cuboid.ByLengths; cones, criados com Cone.ByPointsRadius e Cone.ByPointsRadii; cilindros, criados com Cylinder.ByRadiusHeight; e esferas, criadas com Sphere.ByCenterPointRadius.

Matemática de vetores

Os objetos em projetos de cálculo raramente são criados explicitamente em sua posição e forma finais e são, na maioria das vezes, convertidos, rotacionados e posicionados de outra forma, com base na geometria existente. A matemática de vetores serve como um tipo de andaime geométrico para dar direção e orientação à geometria, bem como para conceituar movimentos através do espaço 3D sem representação visual.

Em seu nível mais básico, um vetor representa uma posição no espaço 3D e, muitas vezes, é considerado como o ponto final de uma seta da posição (0, 0, 0) para essa posição. É possível criar vetores com o construtor ByCoordinates, usando as posições x, y e z do objeto Vector recém-criado. Observe que os objetos Vector não são objetos geométricos e não aparecem na janela do Dynamo. No entanto, as informações sobre um vetor recém-criado ou modificado podem ser impressas na janela do console:

Um conjunto de operações matemáticas é definido em objetos Vector, permitindo adicionar, subtrair, multiplicar e mover objetos no espaço 3D, como você moveria os números reais no espaço 1D em uma linha de números.

Adição de vetor

A adição de vetores é definida como a soma dos componentes de dois vetores e poderá ser considerada como o vetor resultante se as duas setas de vetor dos componentes forem inseridas “ponta a ponta”. A adição de vetores é realizada com o método Add e é representada pelo diagrama à esquerda.

Subtração de vetores

De forma similar, dois objetos Vector podem ser subtraídos um do outro com o método Subtract. A subtração de vetores pode ser considerada como a direção do primeiro vetor para o segundo vetor.

Multiplicação de vetores

A multiplicação de vetores pode ser considerada como o ato de mover a extremidade de um vetor em sua própria direção com base em um determinado fator de escala.

Normalizar comprimento do vetor

Muitas vezes, ao dimensionar um vetor, é desejável que o comprimento resultante seja exatamente igual à quantidade dimensionada. Isso é facilmente conseguido pela normalização de um vetor, ou seja, definindo o comprimento do vetor como exatamente igual a um.

c ainda aponta na mesma direção que a (1, 2, 3), embora agora apresente comprimento exatamente igual a 5.

Produto transversal

Existem dois métodos adicionais na matemática de vetores que não têm paralelos claros com a matemática 1D, o produto vetorial e o produto escalar. O produto vetorial é um meio de gerar um vetor ortogonal (a 90 graus) a dois vetores existentes. Por exemplo, o produto vetorial dos eixos x e y é o eixo z, embora os dois vetores de entrada não precisem ser ortogonais entre si. Um vetor de produto vetorial é calculado com o método Cross.

Produto escalar

Uma função adicional, embora um pouco mais avançada da matemática vetorial, é o produto escalar. O produto escalar entre dois vetores é um número real (não um objeto Vector) que se relaciona, mas não é exatamente, o ângulo entre dois vetores. Uma propriedade útil do produto escalar é que o produto escalar entre dois vetores será 0 somente se eles forem perpendiculares. O produto escalar é calculado com o método Dot.

Publicar na biblioteca

Acabamos de criar um nó personalizado e aplicá-lo a um processo específico em nosso gráfico do Dynamo. Gostamos tanto desse nó, por isso queremos mantê-lo em nossa biblioteca do Dynamo para usar como referência em outros gráficos. Para fazer isso, vamos publicar o nó localmente. Este é um processo semelhante ao de publicar um pacote, que iremos mostrar em mais detalhes no próximo capítulo.

Quando publicar um nó localmente, o nó estará acessível na biblioteca do Dynamo quando você abrir uma nova sessão. Se nenhum nó for publicado, o gráfico do Dynamo que faz referência a um nó personalizado também deverá ter aquele nó personalizado em sua pasta (ou o nó personalizado deverá ser importado para o Dynamo usando Arquivo > Importar biblioteca).

É possível publicar nós e pacotes personalizados do Dynamo Sandbox na versão 2.17 e mais recentes, desde que não tenham dependências de APIs do hospedeiro. Em versões anteriores, a publicação de nós e pacotes personalizados somente estava ativada no Dynamo for Revit e no Dynamo for Civil 3D.

Exercício: Publicar um nó personalizado localmente

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Vamos avançar com o nó personalizado que criamos na seção anterior. Quando o nó personalizado PointsToSurface é aberto, vemos o gráfico no Editor de nós personalizados do Dynamo. Também é possível abrir um nó personalizado clicando duas vezes nele no Editor de gráficos do Dynamo.

Para publicar um nó personalizado localmente, basta clicar com o botão direito do mouse na tela e selecionar “Publicar este nó personalizado...”

Preencha as informações relevantes de forma similar à imagem acima e selecione “Publicar localmente”. Observe que o campo Grupo define o elemento principal acessível no menu do Dynamo.

Escolha uma pasta para armazenar todos os nós personalizados que você planeja publicar localmente. O Dynamo verificará essa pasta sempre que ela for carregada, portanto, certifique-se de que a pasta esteja em um local permanente. Navegue até essa pasta e escolha “Selecionar pasta”. O nó do Dynamo agora é publicado localmente e permanecerá na biblioteca do Dynamo cada vez que você carregar o programa.

Para verificar a localização da pasta de nós personalizados, vá para Dynamo > Preferências > Configurações do pacote > Caminhos de nós e pacotes.

Nessa janela, vemos uma lista de caminhos.

  1. Documentos\DynamoCustomNodes... refere-se à localização dos nós personalizados que publicamos localmente.

  2. AppData\Roaming\Dynamo... refere-se à localização padrão dos pacotes do Dynamo instalados on-line.

  3. Você pode desejar mover o caminho da pasta local para baixo na ordem da lista (clicando na seta para baixo à esquerda do nome do caminho). A pasta superior é o caminho padrão para a instalação do pacote. Portanto, mantendo o caminho de instalação do pacote do Dynamo padrão como a pasta padrão, os pacotes on-line serão separados dos nós publicados localmente.

Alteramos a ordem dos nomes de caminhos para que o caminho padrão do Dynamo seja o local de instalação do pacote.

Navegando para essa pasta local, poderemos encontrar o nó personalizado original na pasta “.dyf”, que é a extensão de arquivo de nós personalizados do Dynamo. Podemos editar o arquivo nessa pasta e o nó será atualizado na interface do usuário. Também é possível adicionar mais nós à pasta principal DynamoCustomNode e o Dynamo os adicionará à biblioteca ao ser reiniciado.

O Dynamo agora será carregado sempre com “PointsToSurface” no grupo “DynamoPrimer” da biblioteca do Dynamo.

27KB
MapToSurface.zip
archive
[email protected]
Criar um nó personalizado
capítulo anterior
33KB
Survey_CreatePointGroups.dyn
1MB
Survey_CreatePointGroups.dwg
Trabalhar com listas
Dynamo Player
Obter todos os grupos de pontos e pontos COGO
Agrupar os pontos COGO por descrição
Criar novos grupos de pontos
Definir um nó como É saída exibirá seu conteúdo na saída do Reprodutor do Dynamo
Execução do gráfico usando o Reprodutor do Dynamo e visualização dos resultados no espaço da ferramenta
// create a CoordinateSystem at x = 0, y = 0, z = 0,
// no rotations, scaling, or sheering transformations

cs = CoordinateSystem.Identity();
// create a CoordinateSystem at a specific location,
// no rotations, scaling, or sheering transformations
x_pos = 3.6;
y_pos = 9.4;
z_pos = 13.0;

origin = Point.ByCoordinates(x_pos, y_pos, z_pos);
identity = CoordinateSystem.Identity();

cs = CoordinateSystem.ByOriginVectors(origin,
    identity.XAxis, identity.YAxis, identity.ZAxis);
// create a point with x, y, and z coordinates
x_pos = 1;
y_pos = 2;
z_pos = 3;

pCoord = Point.ByCoordinates(x_pos, y_pos, z_pos);

// create a point in a specific coordinate system
cs = CoordinateSystem.Identity();
pCoordSystem = Point.ByCartesianCoordinates(cs, x_pos,
    y_pos, z_pos);

// create a point on a cylinder with the following
// radius and height
radius = 5;
height = 15;
theta = 75.5;

pCyl = Point.ByCylindricalCoordinates(cs, radius, theta,
    height);

// create a point on a sphere with radius and two angles

phi = 120.3;

pSphere = Point.BySphericalCoordinates(cs, radius,
    theta, phi);
p1 = Point.ByCoordinates(-2, -5, -10);
p2 = Point.ByCoordinates(6, 8, 10);

// a line segment between two points
l2pts = Line.ByStartPointEndPoint(p1, p2);

// a line segment at p1 in direction 1, 1, 1 with
// length 10
lDir = Line.ByStartPointDirectionLength(p1,
    Vector.ByCoordinates(1, 1, 1), 10);
// create a cuboid with specified lengths
cs = CoordinateSystem.Identity();

cub = Cuboid.ByLengths(cs, 5, 15, 2);

// create several cones
p1 = Point.ByCoordinates(0, 0, 10);
p2 = Point.ByCoordinates(0, 0, 20);
p3 = Point.ByCoordinates(0, 0, 30);

cone1 = Cone.ByPointsRadii(p1, p2, 10, 6);
cone2 = Cone.ByPointsRadii(p2, p3, 6, 0);

// make a cylinder
cylCS = cs.Translate(10, 0, 0);

cyl = Cylinder.ByRadiusHeight(cylCS, 3, 10);

// make a sphere
centerP = Point.ByCoordinates(-10, -10, 0);

sph = Sphere.ByCenterPointRadius(centerP, 5);
// construct a Vector object
v = Vector.ByCoordinates(1, 2, 3);

s = v.X + " " + v.Y + " " + v.Z;
a = Vector.ByCoordinates(5, 5, 0);
b = Vector.ByCoordinates(4, 1, 0);

// c has value x = 9, y = 6, z = 0
c = a.Add(b);
a = Vector.ByCoordinates(5, 5, 0);
b = Vector.ByCoordinates(4, 1, 0);

// c has value x = 1, y = 4, z = 0
c = a.Subtract(b);
a = Vector.ByCoordinates(4, 4, 0);

// c has value x = 20, y = 20, z = 0
c = a.Scale(5);
a = Vector.ByCoordinates(1, 2, 3);
a_len = a.Length;

// set the a's length equal to 1.0
b = a.Normalized();
c = b.Scale(5);

// len is equal to 5
len = c.Length;
a = Vector.ByCoordinates(1, 0, 1);
b = Vector.ByCoordinates(0, 1, 1);

// c has value x = -1, y = -1, z = 1
c = a.Cross(b);
a = Vector.ByCoordinates(1, 2, 1);
b = Vector.ByCoordinates(5, -8, 4);

// d has value -7
d = a.Dot(b);
6KB
PointsToSurface.dyf
Dynamo Player
Um gráfico simples para criar um círculo
Modificação da entrada de raio no Dynamo
Um gráfico simples que posiciona texto no centro de um círculo selecionado
Comportamento padrão do Dynamo ao selecionar um novo círculo
Configurações de vinculação de objetos
Comportamento com a vinculação de objetos desativada
Vinculação de objetos

O Dynamo calcula diferenças de serviço com o Dynamo Desktop

Esta página destaca as diferenças sobre as quais você deve estar ciente ao escrever programas do Dynamo para executar no contexto de nuvem de serviço de cálculo do Dynamo.

O que é o DaaS?

DaaS, Dynamo como serviço, serviço de cálculo do Dynamo etc. referem-se à mesma coisa: o tempo de execução principal do Dynamo em execução em um contexto de nuvem. Isso significa que o gráfico não está sendo executado no computador. Atualmente, só é possível acessar o DaaS por meio da extensão do Dynamo Player para Forma, na qual os usuários podem carregar e gerenciar arquivos .dyn criados no ambiente de desktop, executar arquivos .dyn compartilhados por seus colegas por meio da extensão ou usar rotinas .dyn pré-carregadas fornecidas pela Autodesk como exemplos.

Como os gráficos são executados nesse contexto de nuvem, e não no computador, o DaaS atualmente não pode usar diretamente contextos de hospedeiros tradicionais do Dynamo (Revit, Civil 3D etc.). Se você desejar usar tipos desses programas no gráfico, será necessário serializá-los (salvá-los) no gráfico usando o nó Data.Remember ou outras técnicas de serialização no gráfico. Esses fluxos de trabalho são semelhantes aos fluxos de trabalho que você precisa usar ao desenhar gráficos para o Projeto generativo no Revit.

Qual versão do Dynamo está executando meu código?

A versão é baseada na versão 3.x e é atualizada frequentemente com base na ramificação mestre de código aberto do Dynamo.

Quais pacotes/nós estão disponíveis nesta versão do Dynamo?

  • A maioria dos nós principais. Consulte a próxima seção para obter algumas limitações específicas.

  • Pacote DynamoFormaBeta para interagir com a API do Forma.

  • VASA para voxelização/análise eficiente.

  • MeshToolKit para manipulação de malha. O kit de ferramentas de malha também está disponível pronto para uso a partir do Dynamo 3.4.

  • RefineryToolkit para algoritmos úteis que permitem o teste de interferência, distância de visualização, caminho mais curto, isovista etc.

O que devo saber ao escrever gráficos para o DaaS?

  • Os nós do Python não funcionam. No momento, eles simplesmente não são executados.

  • Não é possível usar pacotes personalizados.

  • A camada de interface do usuário/vista dos nós da interface do usuário não será executada. Não prevemos que isso seja um problema com a funcionalidade principal, mas é bom ter em mente se você vir uma falha relacionada a um nó com a interface do usuário personalizada.

  • A funcionalidade exclusiva do Windows não funcionará. Por exemplo, se você tentar usar o Registro do Windows ou WPF, ocorrerá uma falha.

  • As extensões da vista não serão carregadas.

  • Os nós do sistema de arquivos não serão muito úteis. Os arquivos que você referenciar no computador local não existirão quando executados no DaaS.

  • Os nós de interoperabilidade do Excel/DSOffice não funcionarão. Os nós do Open XML deverão funcionar.

  • As solicitações de rede em geral não funcionarão, embora você possa fazer chamadas para a API do Forma.

Como vou me lembrar de tudo isso? E se isso mudar?

  • No futuro, pretendemos fornecer ferramentas dentro do Dynamo para desktop que tornarão mais fácil garantir que o gráfico seja executado da mesma forma em ambos os contextos.

Quanto isso custa?

  • Durante esta versão Beta, o tempo de cálculo não é cobrado no momento.

Como faço para começar?

Confira a postagem do blog, a série do YouTube ou os Exemplos na extensão do Forma para começar. Eles guiarão você para:

  • Obter acesso ao Autodesk Forma.

  • Instalar o DynamoFormaBeta para Dynamo em desktop e a extensão do Dynamo no Forma.

  • Escrever o primeiro gráfico.

Segurança

  • Lembre-se de que os gráficos compartilhados são armazenados no Forma.

  • Atualmente, o tempo máximo de execução do gráfico é inferior a 30 minutos. Esse valor pode mudar.

  • As solicitações de execução são limitadas em taxas; portanto, você poderá ver erros se fizer muitas solicitações de cálculo em um período muito curto.

curvas
Linha
NURBS
5KB
Geometry for Computational Design - Curves.dyn
Tipos de curvas
Parâmetro de curva
Linha
Polilinha + Polígono
Arcos + Círculos
Curva NURBS
Grau da curva NURBS

Malhas

Malha no Dynamo

O que é a malha?

No campo da modelagem de cálculo, as malhas são uma das formas mais difundidas de representar a geometria 3D. A geometria de malha é geralmente feita com um conjunto de quadriláteros ou triângulos, pode ser uma alternativa leve e flexível para trabalhar com NURBS. As malhas são usadas em tudo, desde renderização e visualizações até fabricação digital e impressão 3D.

Elementos de malha

O Dynamo define malhas usando uma estrutura de dados Face-Vértice. Em seu nível mais básico, esta estrutura é simplesmente uma coleção de pontos que são agrupados em polígonos. Os pontos de uma malha são chamados de vértices, enquanto os polígonos como a superfície são chamados de faces.

Para criar uma malha, precisamos de uma lista de vértices e um sistema de agrupamento desses vértices em faces, o que é denominado grupo de índice.

  1. Lista de vértices

  2. Lista de grupos de índice para definir faces

Kit de ferramentas de malha

Os recursos de malha do Dynamo podem ser estendidos instalando o pacote Kit de ferramentas de malha. O Kit de ferramentas de malha do Dynamo fornece ferramentas para importar malhas de formatos de arquivo externo, criar uma malha de objetos de geometria do Dynamo e criar manualmente malhas de acordo com seus vértices e índices.

A biblioteca também fornece ferramentas para modificar malhas, reparar malhas ou extrair fatias horizontais para uso na fabricação.

Consulte Estudos de caso do kit de ferramentas de malha, por exemplo, para saber como usar esse pacote.

Kit de ferramentas de malha

Análise abrangente de...

Malha

Uma Malha é uma coleção de quadriláteros e triângulos que representam uma geometria de superfície ou sólido. Como os sólidos, a estrutura de um objeto de malha inclui vértices, arestas e faces. Há propriedades adicionais que também tornam as Malhas exclusivas, como as normais.

Elementos de malha
  1. Vértices de malha

  2. Arestas de malha *Arestas com apenas uma face adjacente são chamadas "Naked". Todas as outras arestas são "Clothed"

  3. Faces de malha

Vértices + normais de vértice

Os vértices de uma malha são simplesmente uma lista de pontos. O índice dos vértices é muito importante ao construir uma malha ou obter informações sobre a estrutura de uma malha. Para cada vértice, há também uma normal de vértice correspondente (vetor) que descreve a direção média das faces anexadas e nos ajuda a compreender a orientação “dentro” e “fora” da malha.

Vértices + Normais
  1. Vértices

  2. Normais de vértice

Faces

Uma face é uma lista ordenada de três ou quatro vértices. A representação "superfície" de uma face de malha, portanto, é implícita de acordo com a posição dos vértices que estão sendo indexados. Já temos a lista de vértices que compõem a malha, por isso, em vez de fornecer pontos individuais para definir uma face, basta usar o índice dos vértices. Isso também nos permite usar o mesmo vértice em mais de uma face.

  1. Uma face de quadrados feita com índices 0, 1, 2 e 3

  2. Uma face de triângulo feita com índices 1, 4 e 2. Observe que os grupos de índice podem ser deslocados em sua ordem, desde que a sequência seja ordenada de forma anti-horária, a face será definida corretamente

Malhas versus superfícies NURBS

Como a geometria de malha é diferente da geometria NURBS? Em que casos é recomendado utilizar um e não o outro?

Parametrização

Em um capítulo anterior, vimos que as superfícies NURBS são definidas por uma série de curvas NURBS seguindo em duas direções. Essas direções são legendadas como U eV, e permitem que uma superfície NURBs seja parametrizada de acordo com um domínio de superfície bidimensional. As curvas em si são armazenadas como equações no computador, permitindo que as superfícies resultantes sejam calculadas para um grau arbitrariamente pequeno de precisão. No entanto, pode ser difícil combinar várias superfícies NURBS juntas. A união de duas superfícies NURBS resultará em uma polysurface, onde diferentes seções da geometria terão diferentes parâmetros UV e definições de curva.

Pontos de controle
  1. Superfície

  2. Curva isoparamétrica (Isoparm)

  3. Ponto de controle de superfície

  4. Polígono de controle de superfície

  5. Ponto isoparamétrico

  6. Estrutura da superfície

  7. Malha

  8. Aresta consolidada

  9. Rede de malha

  10. Arestas de malha

  11. Normal de vértice

  12. Face de malha/normal de face de malha

As malhas, por outro lado, são compostas de um número discreto de vértices e faces exatamente definidos. A rede de vértices geralmente não pode ser definida por coordenadas simples UV e, como as faces são separadas, a quantidade de precisão é incorporada à malha e só pode ser alterada refinando a malha e adicionando mais faces. A falta de descrições matemáticas permite que as malhas manipulem com mais flexibilidade a geometria complexa em uma única malha.

Influência local versus global

Outra diferença importante é a extensão para a qual uma alteração local na geometria de Malha ou NURBS afeta toda a forma. Mover um vértice de uma malha somente afeta as faces que são adjacentes a esse vértice. Em superfícies NURBS, a extensão da influência é mais complicada e depende do grau da superfície, bem como dos pesos e nós dos pontos de controle. Em geral, no entanto, mover um único ponto de controle em uma superfície NURBS cria uma alteração mais suave e mais extensa na geometria.

Editar
  1. Superfície NURBS: mover um ponto de controle tem influência que se estende através da forma

  2. Geometria de malha: mover um vértice tem influência somente em elementos adjacentes

Uma analogia que pode ser útil é para comparar uma imagem vetorial (composta de linhas e curvas) com uma imagem raster (composta de pixels individuais). Se você aproximar o zoom em uma imagem de vetor, as curvas permanecem definidas e claras, ao efetuar o zoom em uma imagem raster resulta em uma vista em que os pixels individuais se tornam maiores. Nesta analogia, as superfícies NURBS podem ser comparadas a uma imagem vetorial porque há uma relação matemática suave, enquanto uma malha se comporta de forma similar a uma imagem raster com uma resolução definida.

A conexão do Revit

O Dynamo para Revit estende a modelagem de informação da construção com o ambiente de dados e de lógica de um editor de algoritmo gráfico. Sua flexibilidade, juntamente com um banco de dados robusto do Revit, oferece uma nova perspectiva para o BIM.

Este capítulo é voltado para os fluxos de trabalho do Dynamo para o BIM. As seções são baseadas principalmente em exercícios, uma vez que saltar direto para um projeto é a melhor maneira de se familiarizar com um editor de algoritmos gráficos para BIM. Mas primeiro, vamos falar sobre o começo do programa.

Compatibilidade com a versão do Revit

À medida que o Revit e o Dynamo continuam a evoluir, você poderá notar que a versão do Revit com a qual você está trabalhando não é compatível com a versão do Dynamo para Revit instalada em seu computador. Abaixo estão descritas quais versões do Dynamo para Revit são compatíveis com o Revit.

Versão do Revit
Primeira versão estável do Dynamo
Última versão suportada do Dynamo para Revit

2013

2014

2015

2016

2017

/

2018

/

2019

/

2020 e versões posteriores

2.1.0 – O Revit 2020 e posterior agora inclui o Dynamo e recebe atualizações como faz o Revit.

N/D

História do Dynamo

História

Com uma equipe dedicada de desenvolvedores e uma comunidade entusiasmada, o projeto percorreu um longo caminho desde seu humilde começo.

O Dynamo foi originalmente criado para simplificar os fluxos de trabalho AEC no Revit. Embora o Revit crie um banco de dados robusto para cada projeto, pode ser difícil para um usuário intermediário acessar essas informações fora das restrições da interface. O Revit hospeda uma API (Interface de Programação de Aplicativo) abrangente, permitindo que desenvolvedores de terceiros criem ferramentas personalizadas. Os programadores têm usado essa API há anos, mas o script baseado em texto não está acessível a todos. O Dynamo busca democratizar os dados do Revit através de um editor de algoritmo gráfico acessível.

Usando os principais nós do Dynamo juntamente com os nós personalizados do Revit, um usuário pode expandir substancialmente os fluxos de trabalho paramétricos para interoperabilidade, documentação, análise e geração. Com o Dynamo, os fluxos de trabalho tediosos podem ser automatizados enquanto as explorações de projeto podem ser melhoradas.

Executar o Dynamo no Revit

Em um editor de família ou um projeto do Revit, navegue para Complementos e clique em Dynamo.*

*O Dynamo será executado somente no arquivo no qual foi aberto.

Quando o Dynamo é aberto no Revit, há uma nova categoria chamada “Revit”. Essa é uma adição abrangente à interface de usuário, oferecendo nós especificamente voltados para os fluxos de trabalho do Revit.*

*Usando a família de nós específica do Revit, o gráfico do Dynamo só funcionará quando for aberto no Dynamo para Revit. Se um gráfico do Dynamo para Revit for aberto no Dynamo Sandbox, por exemplo, os nós do Revit estarão ausentes.

Congelar nós

Como o Revit é uma plataforma que fornece um gerenciamento robusto de projetos, as operações paramétricas no Dynamo podem ser complexas e seu cálculo pode ser lento. Se o Dynamo estiver demorando muito para calcular os nós, será recomendável usar a funcionalidade do nó “congelar” para pausar a execução das operações do Revit enquanto desenvolve o gráfico.

Você pode obter mais informações sobre o congelamento de nós na seção Nós e fios.

Comunidade e blog do Dynamo

Desde que o Dynamo foi originalmente criado para o AEC, sua grande e crescente comunidade é um grande recurso para aprender e entrar em contato com especialistas no setor. A comunidade do Dynamo é formada por arquitetos, engenheiros, programadores e designers, apaixonados por compartilhar e criar.

O Dynamo é um projeto de código aberto que está em constante evolução e muitos desenvolvimentos são relacionados ao Revit. Se você não estiver familiarizado com essa área, entre no fórum de discussão e comece a fazer perguntas. Se você for um programador e quiser participar do desenvolvimento do Dynamo, confira o repositório do Github. Além disso, o gerenciador de pacotes do Dynamo é um ótimo recurso para as bibliotecas de terceiros. Muitos desses pacotes são feitos com o AEC em mente. Vamos também analisar os pacotes de terceiros para obter uma panorâmica neste capítulo.

O Dynamo também mantém um blog ativo. Leia os artigos recentes para saber mais sobre os últimos acontecimentos.

Blog

Interseção e aparar

Muitos dos exemplos até agora têm se concentrado na construção de geometria dimensional maior com base em objetos dimensionais menores. Os métodos de interseção permitem que essa geometria dimensional maior gere objetos dimensionais menores, enquanto os comandos Trim e Select Trim permitem que o script modifique fortemente as formas geométricas após a criação.

O método Intersect é definido em todas as partes da geometria no Dynamo, o que significa que, em teoria, qualquer parte da geometria pode fazer interseção com qualquer outra parte da geometria. Naturalmente, algumas interseções são sem sentido, como interseções envolvendo pontos, já que o objeto resultante será sempre o próprio ponto de entrada. As outras combinações possíveis de interseções entre objetos são descritas no gráfico a seguir. A tabela a seguir descreve o resultado de diversas operações de interseção:

Intersecionar

Com:

Superfície

Curva

Plano

Sólido

Superfície

Curva

Ponto

Ponto, Curva

Superfície

Curva

Ponto

Ponto

Ponto

Curva

Plano

Curva

Ponto

Curva

Curva

Sólido

Superfície

Curva

Curva

Sólido

O exemplo a seguir demonstra a interseção de um plano com uma NurbsSurface. A intersecção gera uma matriz NurbsCurve, que pode ser usada como qualquer outra NurbsCurve.

// python_points_5 is a set of Points generated with
// a Python script found in Chapter 12, Section 10

surf = NurbsSurface.ByPoints(python_points_5, 3, 3);

WCS = CoordinateSystem.Identity();

pl = Plane.ByOriginNormal(WCS.Origin.Translate(0, 0,
    0.5), WCS.ZAxis);

// intersect surface, generating three closed curves
crvs = surf.Intersect(pl);

crvs_moved = crvs.Translate(0, 0, 10);

O método Trim é muito similar ao método Intersect, pois é definido para quase todas as partes da geometria. No entanto, há muito mais limitações em Trim do que em Intersect.

Trim

Usando: Ponto

Curva

Plano

Superfície

Sólido

Em: curva

Sim

No

No

No

Não

Polígono

-

Não

Sim

No

Não

Superfície

-

Sim

Sim

Sim

Sim

Sólido

-

-

Sim

Sim

Sim

Algo a ser observado sobre os métodos Trim é o requisito de um ponto de “seleção”, um ponto que determina qual geometria será descartada e quais elementos devem ser mantidos. O Dynamo localiza e descarta a geometria recortada mais próxima do ponto selecionado.

// python_points_5 is a set of Points generated with
// a Python script found in Chapter 12, Section 10

surf = NurbsSurface.ByPoints(python_points_5, 3, 3);

tool_pts = Point.ByCoordinates((-10..20..10)<1>,
    (-10..20..10)<2>, 1);

tool = NurbsSurface.ByPoints(tool_pts);

pick_point = Point.ByCoordinates(8, 1, 3);

result = surf.Trim(tool, pick_point);

Editar

O Dynamo possui um recurso avançado para permitir editar os parâmetros em um nível paramétrico. Por exemplo, um algoritmo gerador ou os resultados de uma simulação podem ser usados para controlar os parâmetros de uma matriz de elementos. Desta forma, um conjunto de instâncias da mesma família pode ter propriedades personalizadas no projeto do Revit.

Parâmetros de tipo e instância

Exercise
  1. Os parâmetros de instância definem a abertura dos painéis na superfície de telhado, variando de um coeficiente de abertura de 0,1 a 0,4.

  2. Os parâmetros com base no tipo são aplicados a cada elemento na superfície porque são do mesmo tipo de família. O material de cada painel, por exemplo, pode ser controlado por um parâmetro com base no tipo.

Exercício
  1. Se você já tiver configurado uma família do Revit, lembre-se de que é preciso atribuir um tipo de parâmetro (sequência de caracteres, número, cota, etc.). Certifique-se de usar o tipo de dados correto ao atribuir parâmetros do Dynamo.

  2. Também é possível usar o Dynamo em combinação com restrições paramétricas, definidas nas propriedades de uma família do Revit.

Como uma revisão rápida dos parâmetros no Revit, lembramos que existem parâmetros de tipo e parâmetros de instância. Ambos podem ser editados no Dynamo, mas trabalharemos com parâmetros de instância no exercício abaixo.

Depois de descobrir a aplicação abrangente de edição de parâmetros, você poderá editar uma grande quantidade de elementos no Revit com o Dynamo. Essa operação pode exigir muitos cálculos computacionais , o que significa que pode ser lenta. Se estiver editando um grande número de elementos, poderá ser conveniente usar a funcionalidade do nó “congelar” para pausar a execução das operações do Revit enquanto você desenvolve o gráfico. Para obter mais informações sobre o congelamento de nós, consulte a seção “Congelar” no capítulo de sólidos.

Unidades

A partir da versão 0.8, o Dynamo tem como base a ausência de unidades. Isso permite que o Dynamo continue sendo um ambiente de programação visual abstrato. Os nós do Dynamo que interagem com as cotas do Revit farão referência às unidades do projeto do Revit. Por exemplo, se você estiver definindo um parâmetro de comprimento no Revit no Dynamo, o número no Dynamo para o valor corresponderá às unidades padrão no projeto do Revit. O exercício abaixo funciona em metros.

Para uma conversão rápida das unidades, use o nó “Converter entre unidades”. Essa é uma ferramenta útil para converter as unidades de Comprimento, Área e Volume em tempo real.

Exercício

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

5MB
Revit-Editing.zip
archive

O exercício abaixo funciona em metros.

Esse exercício se concentra na edição de elementos do Revit sem executar a operação geométrica no Dynamo. Não estamos importando a geometria do Dynamo aqui, apenas editando os parâmetros em um projeto do Revit. Este exercício é básico e para os usuários mais avançados do Revit, observe que estes são parâmetros de instância de uma massa, mas a mesma lógica pode ser aplicada a uma matriz de elementos para personalizar em grande escala. Tudo isso é feito com o nó “Element.SetParameterByName”.

Editar parâmetros de massa de construção

Comece com o arquivo de exemplo do Revit para esta seção. Removemos os elementos estruturais e as treliças adaptativas da seção anterior. Neste exercício, vamos nos concentrar em uma montagem paramétrica no Revit e manipulá-la no Dynamo.

Selecionando a construção em massa no Revit, vemos uma matriz de parâmetros de instância no painel Propriedades.

No Dynamo, podemos recuperar os parâmetros selecionando o elemento de destino.

  1. Selecione a massa da construção com o nó “Selecionar o elemento do modelo”.

  2. É possível consultar todos os parâmetros dessa massa com o nó “Element.Parameters”. Isso inclui os parâmetros de tipo e instância.

  1. Faça referência ao nó Element. Parameters para localizar os parâmetros alvo. Também é possível visualizar o painel Propriedades na etapa anterior para escolher quais nomes de parâmetros desejamos editar. Neste caso, estamos procurando os parâmetros que afetam os grandes movimentos geométricos na massa da construção.

  2. Faremos alterações no elemento do Revit usando o nó Element.SetParameterByName

  3. Use o B_loco de código para_ definir uma lista de parâmetros, com aspas em torno de cada item para indicar uma sequência de caracteres. Também podemos usar o nó List.Create com uma série de nós de "sequência de caracteres" conectados a várias entradas, mas o Bloco de código é mais rápido e fácil. Assegure-se de que a sequência de caracteres coincida com o nome exato no Revit, específico em relação ao uso de maiúsculas e minúsculas: {"BldgWidth","BldgLength","BldgHeight", "AtriumOffset", "InsideOffset","LiftUp"};

  1. Também queremos especificar valores para cada parâmetro. Adicione seis “controles deslizantes de números inteiros” na tela e renomeie-os de acordo com o parâmetro correspondente na lista. Além disso, defina os valores de cada controle deslizante para a imagem acima. Em ordem de cima para baixo: 62,92,25,22,8,12

  2. Defina outro bloco de código com uma lista do mesmo tamanho que os nomes de parâmetro. Neste caso, nomeamos variáveis (sem aspas) que criam entradas para o bloco de código. Conecte os controles deslizantes a cada entrada respectiva: {bw,bl,bh,ao,io,lu};

  3. Conecte o Bloco de código à entrada de valor “Element.SetParameterByName”*. Com a execução marcada automaticamente, veremos os resultados automaticamente.

*Esta demonstração funciona com parâmetros de instância, mas não com parâmetros de tipo.

Assim como no Revit, muitos desses parâmetros dependem uns dos outros. É claro que há combinações nas quais a geometria pode ser interrompida. Podemos solucionar esse problema com fórmulas definidas nas propriedades de parâmetro ou definir uma lógica semelhante às operações matemáticas no Dynamo (esse será um desafio adicional se você desejar expandir o exercício).

  1. Essa combinação oferece um novo projeto moderno para a massa da construção: 100, 92, 100, 25, 13, 51

Editar os parâmetros de fachada

Em seguida, vamos ver como podemos editar a fachada usando um processo semelhante.

  1. Copie o gráfico e foque na vidraça da fachada que abrigará o sistema de treliça. Isolamos quatro parâmetros neste caso: {"DblSkin_SouthOffset","DblSkin_MidOffset","DblSkin_NorthOffset","Facade Bend Location"};

  2. Adicionalmente, criamos controles deslizantes de número e os renomeamos com os parâmetros apropriados. Os três primeiros controles deslizantes de cima para baixo devem ser remapeados para um domínio de [0,10], enquanto o controle deslizante final, “Localização da vergadura da fachada”, deve ser remapeado para um domínio de [0,1]. Esses valores, de cima para baixo, devem começar com estes valores (embora sejam arbitrários): 2,68; 2,64; 2,29; 0,5

  3. Defina um novo bloco de código e conecte os controles deslizantes: {so,mo,no,fbl};

  1. Se os controles deslizantes forem alterados nesta parte do gráfico, poderemos tornar a vidraça da fachada muito mais substancial: 9,98; 10,0; 9,71; 0,31

Superfícies: interpoladas, pontos de controle, elevação, revolução

O análogo bidimensional de uma NurbsCurve é a NurbsSurface e, tal como a NurbsCurve de forma livre, as NurbsSurfaces podem ser construídas com dois métodos básicos: inserir um conjunto de pontos base e fazer interpolar o Dynamo entre eles e especificar explicitamente os pontos de controle da superfície. Também como as curvas de forma livre, as superfícies interpoladas são úteis quando um designer sabe com precisão a forma que uma superfície precisa ter ou se um projeto requer que a superfície passe pelos pontos de restrição. Por outro lado, as superfícies criadas por pontos de controle podem ser mais úteis para projetos exploratórios em vários níveis de suavização.

Superfície interpolada

Para criar uma superfície interpolada, basta gerar uma coleção bidimensional de pontos aproximando a forma de uma superfície. A coleção deve ser retangular, isto é, não irregular. O método NurbsSurface.ByPoints constrói uma superfície com base nesses pontos.

// python_points_1 is a set of Points generated with
// a Python script found in Chapter 12, Section 10

surf = NurbsSurface.ByPoints(python_points_1);

Superfície de pontos de controle

Também é possível criar as NurbsSurfaces de forma livre ao especificar os pontos de controle subjacentes de uma superfície. Tal como as NurbsCurves, os pontos de controle podem ser considerados como representando uma malha quadrilateral com segmentos retos que, dependendo do grau da superfície, é suavizada na forma da superfície final. Para criar uma NurbsSurface por pontos de controle, inclua dois parâmetros adicionais para NurbsSurface.ByPoints, indicando os graus das curvas subjacentes em ambas as direções da superfície.

// python_points_1 is a set of Points generated with
// a Python script found in Chapter 12, Section 10

// create a surface of degree 2 with smooth segments
surf = NurbsSurface.ByPoints(python_points_1, 2, 2);

É possível aumentar o grau da NurbsSurface para alterar a geometria da superfície resultante:

// python_points_1 is a set of Points generated with
// a Python script found in Chapter 12, Section 10

// create a surface of degree 6
surf = NurbsSurface.ByPoints(python_points_1, 6, 6);

Superfície elevada

Assim como as superfícies podem ser criadas por interpolação entre um conjunto de pontos de entrada, elas também podem ser criadas por interpolação entre um conjunto de curvas base. Isso é conhecido como elevação. Uma curva elevada é criada usando o construtor Surface.ByLoft, com um conjunto de curvas de entrada como o único parâmetro.

// python_points_2, 3, and 4 are generated with
// Python scripts found in Chapter 12, Section 10

c1 = NurbsCurve.ByPoints(python_points_2);
c2 = NurbsCurve.ByPoints(python_points_3);
c3 = NurbsCurve.ByPoints(python_points_4);

loft = Surface.ByLoft([c1, c2, c3]);

Superfície de revolução

As superfícies de revolução são um tipo adicional de superfície criada arrastando uma curva base em torno de um eixo central. Se as superfícies interpoladas são o análogo bidimensional das curvas interpoladas, as superfícies de revolução são o análogo bidimensional dos círculos e arcos.

As superfícies de revolução são especificadas por uma curva base, representando a “aresta” da superfície; uma origem de eixo, o ponto base da superfície; uma direção de eixo, a direção “principal” central; um ângulo inicial de varredura; e um ângulo final de varredura. Elas são usadas como a entrada para o construtor Surface.Revolve.

pts = {};
pts[0] = Point.ByCoordinates(4, 0, 0);
pts[1] = Point.ByCoordinates(3, 0, 1);
pts[2] = Point.ByCoordinates(4, 0, 2);
pts[3] = Point.ByCoordinates(4, 0, 3);
pts[4] = Point.ByCoordinates(4, 0, 4);
pts[5] = Point.ByCoordinates(5, 0, 5);
pts[6] = Point.ByCoordinates(4, 0, 6);
pts[7] = Point.ByCoordinates(4, 0, 7);

crv = NurbsCurve.ByPoints(pts);

axis_origin = Point.ByCoordinates(0, 0, 0);
axis = Vector.ByCoordinates(0, 0, 1);

surf = Surface.ByRevolve(crv, axis_origin, axis, 0,
    360);

Configurar seu próprio modelo Python

Com o Dynamo 2.0, podemos especificar um modelo padrão (.py extension) para usar ao abrir a janela do Python pela primeira vez. Essa foi uma solicitação muito desejada, pois isso acelera o uso do Python no Dynamo. Ter a capacidade de usar um modelo nos permite ter as importações padrão prontas para serem usadas quando quisermos desenvolver um script Python personalizado.

A localização desse modelo está em APPDATA da instalação do Dynamo.

Normalmente, é ( %appdata%\Dynamo\Dynamo Core\{version}\ ).

Configurar o modelo

Para usar essa funcionalidade, é necessário adicionar a seguinte linha em nosso arquivo DynamoSettings.xml. (Editar no bloco de notas)

Onde vemos <PythonTemplateFilePath />, basta substituir por:

<PythonTemplateFilePath>
<string>C:\Users\CURRENTUSER\AppData\Roaming\Dynamo\Dynamo Core\2.0\PythonTemplate.py</string>
</PythonTemplateFilePath>

Observação: Substitua CURRENTUSER por seu nome de usuário

Em seguida, precisamos criar um modelo com a funcionalidade que desejamos usar incorporada. Em nosso caso, vamos incorporar as importações relacionadas ao Revit e alguns dos outros itens típicos ao trabalhar com o Revit.

É possível iniciar um documento do bloco de notas em branco e colar o seguinte código:

import clr

clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

clr.AddReference('System')
from System.Collections.Generic import List

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

#Preparing input from dynamo to revit
element = UnwrapElement(IN[0])

#Do some action in a Transaction
TransactionManager.Instance.EnsureInTransaction(doc)

TransactionManager.Instance.TransactionTaskDone()

OUT = element

Uma vez feito isso, salve o arquivo como PythonTemplate.py na localização APPDATA.

Comportamento posterior do script Python

Após o modelo do Python ser definido, o Dynamo procurará esses dados sempre que um nó do Python for inserido. Se não forem encontrados, será semelhante à janela padrão do Python.

Se o modelo do Python for encontrado (como nosso modelo do Revit, por exemplo), será possível ver todos os itens padrão incorporados.

Você pode obter mais informações sobre esta grande inclusão (desenvolvida por Radu Gidei) aqui. https://github.com/DynamoDS/Dynamo/pull/8122

Configuração do Dynamo

Dynamo como extensão vs. Dynamo Sandbox

O Dynamo é um projeto ativo de desenvolvimento de código aberto. Descubra a lista de softwares compatíveis com o Dynamo.

Iniciar o Dynamo como extensão

O Dynamo vem pré-instalado com softwares como o Revit3D, o FormIt, o Civil3D etc.

Para começar a usar, inicie-o no painel da barra de ferramentas. Dependendo do software que você está usando, o ícone de inicialização normalmente pode ser encontrado na guia Menu > Gerenciar. Clique no ícone do Dynamo para iniciá-lo.

Para obter mais orientações sobre o uso do Dynamo com um software específico, recomendamos consultar as seguintes seções:

  • Dynamo para Revit

  • Dynamo for Civil 3D

Se você desejar usar o Dynamo como um aplicativo independente, continue lendo para obter orientações sobre como fazer o download do Sandbox.

Obter o Dynamo Sandbox

Fazer o download

O aplicativo do Dynamo está disponível no site do Dynamo. As versões oficiais, anteriores ou de pré-lançamento, estão disponíveis na página de download. Visite a página Como obter o Dynamo e clique em Download para obter a versão oficial lançada.

Se você estiver procurando versões de desenvolvimento anteriores ou as mais avançadas, todas as versões poderão ser encontradas na seção inferior da mesma página.

O desenvolvimento mais avançado pode incluir alguns recursos novos e experimentais que ainda não foram totalmente testados; portanto, pode ser instável. Se você usar esse desenvolvimento, poderá detectar erros ou problemas, e poderá nos ajudar a aprimorar o aplicativo informando os problemas à nossa equipe.

Recomenda-se que os iniciantes façam o download da versão estável oficial.

Descompactar

Antes de iniciar qualquer versão transferida por download, é necessário descompactar o conteúdo para a pasta escolhida.

Faça o download e instale o 7zip no computador para esta etapa.

Clique com o botão direito do mouse no arquivo zip e selecione Extrair tudo...

Escolha um destino para descompactar todos os arquivos.

Iniciar

Na pasta de destino, clique duas vezes em DynamoSandbox.exe para iniciá-lo

Você verá a tela de inicialização do DynamoSandbox, como mostrado a seguir.

Parabéns. Você terminou a configuração para usar o DynamoSandbox.

Geometria é uma funcionalidade adicional no Dynamo Sandbox que está disponível somente para usuários que têm uma assinatura ou licença atual para os seguintes softwares da Autodesk: Revit, Robot Structural Analysis, FormIt e Civil 3D. A funcionalidade Geometria permite que os usuários importem, criem, editem e exportem a geometria do Dynamo Sandbox.

Introdução ao nó personalizado

Os nós personalizados são construídos pelo agrupamento de outros nós e dos nós personalizados dentro de um “nó personalizado do Dynamo”, que podemos pensar conceitualmente como um contêiner. Quando esse nó de contêiner é executado no gráfico, tudo dentro dele será executado para permitir a reutilização e o compartilhamento de uma combinação útil de nós.

Adaptação às mudanças

Quando você tem várias cópias de um nó personalizado no gráfico, é possível atualizar todas elas editando o nó personalizado de base. Isso permite atualizar o gráfico sem problemas, adaptando-se a quaisquer alterações que possam ocorrer no fluxo de trabalho ou no projeto.

Compartilhamento de trabalho

O melhor recurso dos nós personalizados é a forma de compartilhamento de trabalho. Se um “usuário avançado” criar um gráfico do Dynamo complexo e o entregar a um designer iniciante no Dynamo, ele poderá condensar o gráfico para exibir o essencial para a interação do projeto. Será possível abrir o nó personalizado para editar o gráfico interno, mas o “contêiner” poderá ser mantido simples. Com esse processo, os nós personalizados permitem que os usuários do Dynamo projetem um gráfico limpo e intuitivo.

Muitas maneiras de criar um nó

Há uma ampla variedade de maneiras de criar nós personalizados no Dynamo. Nos exemplos neste capítulo, vamos criar nós personalizados diretamente na interface do usuário do Dynamo. Se você for um programador e tiver interesse na formatação C# ou Sem toque, poderá consultar esta página na Wiki do Dynamo para obter uma revisão mais aprofundada.

Ambiente de nó personalizado e criar o primeiro nó personalizado

Vamos para o ambiente de nó personalizado e criar um nó simples para calcular uma porcentagem. O ambiente de nó personalizado é diferente do ambiente gráfico do Dynamo, mas a interação é fundamentalmente a mesma. Com isso, vamos criar nosso primeiro nó personalizado.

Para criar um nó personalizado do zero, inicie o Dynamo e selecione Nó personalizado ou digite Ctrl + Shift + N na tela.

Atribua um nome, uma descrição e uma categoria na caixa de diálogo Propriedades de nó personalizado.

  1. Nome: porcentagem

  2. Descrição: calcula a porcentagem de um valor em relação a outro.

  3. Categoria: Math.Functions

Isso abrirá uma tela com um fundo amarelo, indicando que você está trabalhando dentro de um nó personalizado. Nessa tela, você tem acesso a todos os nós principais do Dynamo, bem como aos nós Input e Output, que rotulam os dados que fluem para dentro e para fora do nó personalizado. Eles podem ser encontrados em Entrada>Básico.

  1. Entradas: os nós de entrada criam portas de entrada no nó personalizado. A sintaxe para um nó de entrada é input_name : datatype = default_value(optional).

  2. Saídas: de forma semelhante às entradas, os nós de saída criam e nomeiam as portas de saída no nó personalizado. Considere a possibilidade de adicionar um Comentário personalizado às portas de entrada e saída para indicar os tipos de entrada e saída. Isso é discutido em mais detalhes na seção Criar nós personalizados.

É possível salvar esse nó personalizado como um arquivo .dyf (em oposição ao arquivo .dyn padrão) e ele será automaticamente adicionado à sua sessão e a sessões futuras. Você encontrará o nó personalizado na biblioteca na seção Complementos.

Seguindo em frente

Agora que criamos nosso primeiro nó personalizado, as próximas seções se aprofundarão na funcionalidade dos nós personalizados e como publicar fluxos de trabalho genéricos. Na seção a seguir, vamos analisar o desenvolvimento de um nó personalizado que transfere a geometria de uma superfície para outra.

Nós e fios

Nós

No Dynamo, os Nós são os objetos que você conecta para formar um programa visual. Cada Nó executa uma operação – às vezes pode ser tão simples quanto armazenar um número ou pode ser uma ação mais complexa, como criar ou consultar geometria.

Anatomia de um nó

A maioria dos nós no Dynamo são compostos de cinco partes. Embora existam exceções, como os nós de entrada, a anatomia de cada nó pode ser descrita da seguinte maneira:

  1. Nome – O nome do nó com uma convenção de nomenclatura Category.Name.

  2. Corpo principal – O corpo principal do nó: se clicar aqui com o botão direito do mouse, serão apresentadas opções de todo o nó

  3. Portas (entrada e saída) – Os destinatários dos fios que fornecem os dados de entrada para o nó, assim como os resultados da ação do nó

  4. Valor padrão – Clique com o botão direito do mouse em uma porta de entrada: alguns nós têm valores padrão que podem ser usados ou não.

  5. Ícone de amarra – Indica a especificada para as entradas de lista coincidentes (mais informações adiante)

Portas de entrada/saída de nós

As entradas e saídas nos nós são chamadas de portas e agem como receptores para os fios. Os dados entram o nó através das portas à esquerda e saem do nó após ele ter executado sua operação à direita.

As portas esperam receber dados de um determinado tipo. Por exemplo, ao conectar um número como 2.75 às portas em um nó Ponto por coordenadas, resultará na criação com êxito de um ponto; no entanto, se fornecermos “Vermelho” à mesma porta, resultará em um erro.

Dica: Passe o cursor do mouse sobre uma porta para ver uma dica de ferramenta contendo o tipo de dados esperado.

  1. Legenda da porta

  2. Dica de ferramenta

  3. Tipo de dados

  4. Valor padrão

Estados do nó

O Dynamo fornece uma indicação do estado da execução do programa visual ao renderizar os nós com diferentes esquemas de cores com base no status de cada nó. A hierarquia de estados segue esta sequência: Erro > Aviso > Informações > Visualização.

Quando você passa o cursor do mouse ou clica com o botão direito do mouse sobre o nome ou as portas, serão apresentadas informações e opções adicionais.

  1. Entradas satisfeitas – Um nó com barras verticais azuis sobre suas portas de entrada está bem conectado e tem todas as suas entradas conectadas com êxito.

  2. Entradas não satisfeitas – Um nó com uma barra vertical vermelha sobre uma ou mais portas de entrada precisa ter essas entradas conectadas.

  3. Função – Um nó que gera uma função e tem uma barra vertical cinza sobre uma porta de saída é um nó de função.

  4. Selecionado – Os nós atualmente selecionados têm um realce azul-claro em sua borda.

  5. Congelado – Um nó azul translúcido está congelado, suspendendo a execução do nó.

  6. Visualização desativada – Uma barra de status cinza abaixo do nó e um ícone de olho indicam que a visualização da geometria do nó está desativada.

  7. Aviso – Uma barra de status amarela abaixo do nó indica um estado de aviso, o que significa que o nó não tem dados de entrada ou pode ter tipos de dados incorretos.

  8. Erro – Uma barra de status vermelha abaixo do nó indica que o nó está em um estado de erro

  9. Informações – Uma barra de status azul abaixo do nó indica um estado de informações, que sinaliza informações úteis sobre os nós. Esse estado pode ser acionado ao se aproximar de um valor máximo suportado pelo nó, ao usar um nó de uma forma que tenha possíveis impactos no desempenho, etc.

Como lidar com nós com estado de erro ou de aviso

Se o programa visual tiver avisos ou erros, o Dynamo fornecerá informações adicionais sobre o problema. Qualquer nó exibido em amarelo também terá uma dica de ferramenta acima do nome. Passe o cursor do mouse sobre o ícone de dica de ferramenta de aviso ou erro para expandi-lo.

Dica: Com essa informação da dica de ferramenta, examine os nós a montante para ver se o tipo de dados ou a estrutura de dados necessários apresenta erro.

  1. Dica de ferramenta de aviso – “Nulo” ou nenhum dado não pode ser entendido como um Duplo, ou seja, um número

  2. Use o nó de inspeção para examinar os dados de entrada

  3. A montante do nó de número está indicando “Vermelho”, e não um número

Congelar nós

Em algumas situações, você pode desejar impedir a execução de nós específicos no programa visual. É possível fazer isso “congelando” o nó, que é uma opção no menu de contexto do nó.

Congelar um nó também congela os nós que estão a jusante dele. Em outras palavras, todos os nós que dependem da saída de um nó congelado também serão congelados.

Fios

Os fios se conectam entre os nós para criar relações e estabelecer o fluxo do nosso programa visual. Podemos pensar neles literalmente como fios elétricos que transmitem impulsos de dados de um objeto para o seguinte.

Fluxo do programa

Os fios conectam a porta de saída de um nó à porta de entrada de outro nó. Essa direcionalidade estabelece o Fluxo de dados no programa visual.

As portas de entrada estão no lado esquerdo e as portas de saída estão localizadas no lado direito dos nós; portanto, geralmente podemos dizer que o fluxo do programa se move da esquerda para a direita.

Criar fios

Crie um fio clicando com o botão esquerdo do mouse em uma porta e, em seguida, clicando com o botão esquerdo do mouse na porta de outro nó para criar uma conexão. Enquanto estamos no processo de criar uma conexão, o fio aparecerá a tracejado e se tornará numa linha contínua quando for conectado com êxito.

Os dados sempre fluirão por esse fio da saída para a entrada; no entanto, podemos criar o fio em qualquer direção em termos da sequência dos cliques nas portas conectadas.

Editar fios

Frequentemente, queremos ajustar o fluxo do programa em nosso programa visual editando as conexões representadas pelos fios. Para editar um fio, clique com o botão esquerdo do mouse na porta de entrada do nó que já está conectado. Você agora tem duas opções:

  • Para alterar a conexão em uma porta de entrada, clique com o botão esquerdo do mouse em outra porta de entrada

  • Para remover o fio, afaste o fio e clique com o botão esquerdo do mouse no espaço de trabalho

  • Reconecte vários fios usando Shift+clique com o botão esquerdo do mouse

  • Duplique um fio usando Ctrl+clique com o botão esquerdo do mouse

Fios padrão vs. realçados

Por padrão, nossos fios serão visualizados com um traço cinza. Quando um nó é selecionado, ele vai renderizar qualquer fio de conexão com o mesmo realce azul-claro do nó.

  1. Fio realçado

  2. Fio padrão

Ocultar fios por padrão

Caso você prefira ocultar os fios no gráfico, pode encontrar essa opção em Vista > Conectores > desmarque Mostrar conectores.

Com essa configuração, somente os nós selecionados e seus fios unidos serão mostrados no realce azul-claro.

Ocultar somente fio individual

Também é possível ocultar somente o fio selecionado clicando com o botão direito do mouse na saída Nós > e selecionando Ocultar fios

Guia de Introdução

Agora que você sabe um pouco mais sobre o quadro geral, vamos entrar e criar o primeiro gráfico do Dynamo no Civil 3D.

Este é um exemplo simples que deve demonstrar a funcionalidade básica do Dynamo. É recomendável seguir as etapas em um novo documento vazio do Civil 3D.

Abrir o Dynamo

A primeira coisa a fazer é abrir um documento vazio no Civil 3D. Depois disso, navegue até a guia Gerenciar na faixa de opções do Civil 3D e procure o painel Programação visual.

Clique no botão Dynamo, que iniciará o Dynamo em uma janela separada.

Qual é a diferença entre o Dynamo e o Reprodutor do Dynamo?

O Dynamo é a ferramenta usada para criar e executar gráficos. O Reprodutor do Dynamo é uma forma fácil de executar gráficos sem precisar abri-los no Dynamo.

Vá para a seção quando estiver tudo pronto para experimentá-lo.

Iniciar um novo gráfico

Quando o Dynamo estiver aberto, você verá a tela inicial. Clique em Novo para abrir um espaço de trabalho em branco.

E os exemplos?

O Dynamo for Civil 3D vem com alguns gráficos pré-criados que podem ajudar a estimular mais ideias sobre como você pode usar o Dynamo. Recomendamos que você dê uma olhada neles em algum momento, bem como nos aqui no manual.

Adicionar nós

Agora você deve estar olhando para um espaço de trabalho vazio. Vamos ver o Dynamo em ação. Este é nosso objetivo:

🎯 Criar um gráfico do Dynamo que inserirá texto no espaço do modelo.

Muito simples, certo? Mas antes de começarmos, precisamos abordar alguns conceitos básicos.

Os blocos de construção principais de um gráfico do Dynamo são chamados de nós. Um nó é como uma máquina pequena – você coloca dados nele, ele realiza algum trabalho nesses dados e gera um resultado. O Dynamo for Civil 3D tem uma biblioteca de nós que você pode conectar com fios para formar um gráfico que faz coisas maiores e melhores do que qualquer nó isolado pode fazer.

Espere, e se eu nunca tiver usado o Dynamo?

Alguns desses pontos podem ser novos para você, mas isso não é um problema. Estas seções ajudarão.

OK, vamos criar nosso gráfico. Veja a seguir uma lista de todos os nós que precisaremos.

Você pode encontrar esses nós digitando seus nomes na barra de pesquisa na biblioteca ou clicando com o botão direito do mouse em qualquer lugar na tela e pesquisando.

Como posso saber quais nós usar e onde encontrá-los?

Os nós da biblioteca são agrupados em categorias lógicas com base no que fazem. Dê uma olhada na seção para ver um tour mais aprofundado.

Veja a seguir como deve ser a aparência do gráfico final.

Vamos resumir o que fizemos aqui:

  1. Escolhemos em qual documento trabalhar. Neste caso (e em muitos casos), queremos trabalhar no documento ativo no Civil 3D.

  2. Definimos o bloco de destino onde o objeto de texto deve ser criado (neste caso, espaço do modelo).

  3. Usamos um nó String para especificar em qual camada o texto deve ser colocado.

  4. Criamos um ponto usando o nó Point.ByCoordinates para definir a posição em que o texto deve ser colocado.

  5. Definimos as coordenadas X e Y do ponto de inserção de texto usando dois nós Number Slider.

  6. Usamos outro nó String para definir o conteúdo do objeto de texto.

  7. E, por fim, criamos o objeto de texto.

Vamos ver os resultados do nosso novíssimo gráfico.

Veja o resultado

De volta ao Civil 3D, assegure-se de que a guia Modelo esteja selecionada. Você deve ver o novo objeto de texto que o Dynamo criou.

Se você não conseguir ver o texto, talvez seja necessário executar o comando ZOOM -> EXTENTS para efetuar o zoom no ponto certo.

Legal. Agora, vamos fazer algumas atualizações no texto.

De volta ao gráfico do Dynamo, vá em frente e altere alguns dos valores de entrada, como a sequência de texto, as coordenadas do ponto de inserção etc. Você deve ver o texto automaticamente atualizado no Civil 3D. Observe também que, se você desconectar uma das portas de entrada, o texto será removido. Se você conectar tudo de volta, o texto será criado novamente.

Por que o Dynamo não insere um novo objeto de texto cada vez que o gráfico é executado?

Por padrão, o Dynamo “lembrará” os objetos que criar. Se você alterar os valores de entrada do nó, os objetos no Civil 3D serão atualizados em vez de criar objetos novos. Você pode ler mais sobre esse comportamento na seção .

🎉 Missão cumprida.

Próximas etapas

Este exemplo apenas oferece uma pequena noção do que você pode fazer com o Dynamo for Civil 3D. Continue lendo para saber mais.

Configurar o Dynamo Player no Forma

Para usar o Dynamo com o Forma, existe duas opções: Dynamo como serviço (DaaS) na nuvem ou Dynamo no desktop. Cada um tem seus benefícios, dependendo do que você deseja fazer; portanto, antes de começar, considere qual opção melhor atende às suas necessidades. No entanto, lembre-se de que é possível alternar entre essas opções a qualquer momento.

Comparação entre o Dynamo como serviço e o Dynamo Desktop

Dynamo como serviço
Desktop

Nesta página, explicaremos como configurar as duas opções.

Configurar o Dynamo como um serviço

O Dynamo no Forma Beta está atualmente disponível como um beta aberto de acesso antecipado, o que significa que os recursos e a interface do usuário podem mudar com frequência.

Primeiro, vamos instalar o Dynamo Player no Forma.

  1. No site do Forma, vá para Extensions (Extensões) na barra lateral esquerda e clique em Add extension (Adicionar extensão). Isso abre a Autodesk App Store.

  2. Procure o Dynamo e adicione Dynamo Player Beta. Leia o aviso de isenção e clique em Agree (Concordo).

  1. Agora, o Dynamo Player está disponível nas extensões. Clique para abrir.

  2. Agora você está pronto para usar o Dynamo Player.

Configuração do Dynamo Desktop

Para usar o Dynamo Desktop, você precisará do Dynamo, como Sandbox independente ou conectado ao Revit ou ao Civil 3D. Você também precisará do pacote DynamoFormaBeta.

Revit

Siga estas instruções para configurar o Dynamo no Revit e no pacote DynamoFormaBeta.

  1. Verifique se você tem o Revit 2024.1 ou superior instalado.

  2. Abra o Dynamo no Revit acessando Gerenciar > Dynamo.

  3. No Dynamo, instale o pacote DynamoFormaBeta. Vá para Pacotes > Gerenciador de pacotes e, em seguida, procure DynamoFormaBeta.

    1. Se você tiver o Revit 2024, instale o pacote DynamoFormaBeta para 2.x.

    2. Se você tiver o Revit 2025, instale o pacote DynamoFormaBeta.

Civil 3D

Siga estas instruções para configurar o Dynamo no Civil 3D e o pacote DynamoFormaBeta.

  1. Verifique se você tem o Civil 3D 2024.1 ou superior instalado.

  2. Abra o Dynamo no Civil 3D acessando Gerenciar > Dynamo.

  3. No Dynamo, instale o pacote DynamoFormaBeta. Vá para Pacotes > Gerenciador de pacotes e, em seguida, procure DynamoFormaBeta.

    1. Se você tiver o Civil 3D 2024, instale o pacote DynamoFormaBeta para 2.x.

    2. Se você tiver o Civil 3D 2025, instale o pacote DynamoFormaBeta.

Dynamo Sandbox

Siga estas instruções para instalar o Dynamo Sandbox e o pacote DynamoFormaBeta.

  1. Faça o download do Dynamo 2.18.0 ou superior em . Para ter a melhor experiência, escolha a mais recente das versões mais estáveis, listada na parte superior.

    1. As versões diárias são versões de desenvolvimento e podem incluir recursos incompletos ou em andamento.

  2. Extraia o Dynamo usando para uma pasta de sua escolha.

  3. Execute DynamoSandbox.exe na pasta de instalação do Dynamo.

  4. No Dynamo, instale o pacote DynamoFormaBeta. Vá para Pacotes > Gerenciador de pacotes e, em seguida, procure DynamoFormaBeta.

    1. Se você tiver o Dynamo 2.x, instale o pacote DynamoFormaBeta para 2.x.

    2. Se você tiver o Dynamo 3.x, instale o pacote DynamoFormaBeta.

Quando Dynamo estiver instalado, você estará pronto para usá-lo com o Forma. Ao executar a opção de desktop do Dynamo no Forma, você precisará ter o Dynamo aberto para poder usar a extensão do Dynamo Player.

Acessar o Dynamo Desktop no Forma

Primeiro, vamos instalar o Dynamo Player no Forma.

  1. No site do Forma, vá para Extensions (Extensões) na barra lateral esquerda e clique em Add extension (Adicionar extensão). Isso abre a Autodesk App Store.

  2. Procure o Dynamo e adicione Dynamo Player Beta. Leia o aviso de isenção e clique em Agree (Concordo).

  1. Agora, o Dynamo Player está disponível nas extensões. Clique para abrir.

  2. Perto da parte superior, clique em Desktop para acessar o Dynamo Desktop.

  1. Agora você está pronto para usar o Dynamo Player. Se já tiver um gráfico aberto no Dynamo, clique em Open (Abrir) em Connected graph (Gráfico conectado) para visualizá-lo no Player.

Visão geral da geometria

Geometria no Dynamo Sandbox

Geometria é a linguagem da área de design. Quando uma linguagem de programação ou ambiente tem um kernel de geometria em seu núcleo, podemos explorar as possibilidades de projetar modelos precisos e robustos, automatizando rotinas de projeto e gerando iterações de projeto com algoritmos.

A compreensão dos tipos de geometria e permitirá navegar no conjunto de Nós de geometria disponíveis na biblioteca. Os nós de geometria são organizados em ordem alfabética, ao contrário da hierarquia; aqui eles são exibidos de forma similar ao layout na interface do Dynamo.

Além disso, a criação de modelos no Dynamo e conexão da visualização de plano fundo ao fluxo de dados em nosso gráfico são processos que devem se tornar mais intuitivos com o passar do tempo.

  1. Observe o sistema de coordenadas assumido renderizado pela grade e pelos eixos coloridos

  2. Os nós selecionados irão renderizar a geometria correspondente (se o nó criar geometria) no plano de fundo, a cor de realce

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Conceito de geometria

A geometria, tradicionalmente definida, é o estudo de forma, tamanho, posição relativa das imagens e as propriedades de espaço. Este campo tem uma história rica que remonta a milhares de anos. Com o advento e a popularização do computador, ganhamos uma poderosa ferramenta na definição, na exploração e na geração de geometria. Agora é muito fácil calcular o resultado de interações geométricas complexas, o fato de que estamos fazendo isso é quase transparente.

Se você tem curiosidade em descobrir como a geometria pode ser diversa e complexa com o poder do computador, faça uma pesquisa rápida pelo Stanford Bunny, um modelo tradicional usado para testar algoritmos.

Compreender a geometria no contexto de algoritmos, computação e complexidade pode parecer desafiador. No entanto, há alguns princípios-chave e relativamente simples que podemos estabelecer como fundamentos para começar a construção em aplicativos mais avançados:

  1. A geometria corresponde a dados: para o computador e o Dynamo, um modelo Bunny não é tão diferente de um número.

  2. A geometria depende da abstração: fundamentalmente, os elementos geométricos são descritos por números, relações e fórmulas em um determinado sistema de coordenadas espaciais

  3. A geometria possui uma hierarquia: os pontos são reunidos para criar linhas, as linhas se unem para criar superfícies, e assim por diante

  4. A geometria descreve simultaneamente a parte e o todo: quando uma curva é exibida, ela tem a forma e todos os pontos possíveis ao longo dela

Na prática, esses princípios significam que precisamos estar cientes do material com o qual estamos trabalhando (com que tipo de geometria, como ela foi criada, etc.) para que possamos compor, decompor e recompor de forma fluida diferentes geometrias à medida que desenvolvemos modelos mais complexos.

Etapas a seguir na hierarquia

Vamos separar um momento para analisar a relação entre as descrições de geometria abstrata e hierárquica. Como esses dois conceitos estão relacionados, mas nem sempre são óbvios no início, podemos chegar rapidamente a um bloco de estradas conceitual quando começamos a desenvolver fluxos de trabalho ou modelos mais profundos. Para começar, vamos usar a cotagem como um descritor fácil do "material" que modelamos. O número de cotas necessárias para descrever uma forma nos dá uma ideia sobre como a geometria é organizada hierarquicamente.

  1. Um Ponto (definido por coordenadas) não possui dimensões, apenas números que descrevem cada coordenada

  2. Uma Linha (definida por dois pontos) agora tem uma cota: é possível “navegar” na linha para frente (direção positiva) ou para trás (direção negativa)

  3. Um Plano (definido por duas linhas) tem duas dimensões: agora é possível andar mais para a esquerda ou mais para a direita

  4. Uma Caixa (definida por dois planos) tem três dimensões: podemos definir uma posição com relação para cima ou para baixo

A cotagem é uma forma conveniente de começar a classificar a geometria, mas não é necessariamente a melhor. Afinal, não modelamos apenas com pontos, linhas, planos e caixas; e se eu quiser algum modelo curvado? Além disso, há toda uma outra categoria de tipos de geometria que é completamente abstrata, ou seja, define propriedades como orientação, volume ou relações entre as peças. Não podemos considerar um vetor, e então como o definimos em relação ao que vemos no espaço? Uma categorização mais detalhada da hierarquia geométrica deve acomodar a diferença entre Tipos abstratos ou “Auxiliares”, cada um dos quais podemos agrupar pelo que eles ajudam a fazer e os tipos que ajudam a descrever a forma dos elementos do modelo.

Aprofundar a geometria

A criação de modelos no Dynamo não se limita ao que podemos gerar com Nós. Aqui estão algumas maneiras importantes de levar o processo para o próximo nível com a Geometria:

  1. O Dynamo permite importar arquivos: tente usar um CSV para nuvens de pontos ou SAT para trazer superfícies

  2. Quando trabalhamos com o Revit, podemos referenciar os elementos do Revit para usar no Dynamo

  3. O Dynamo Package Manager oferece funcionalidade adicional para tipos e operações estendidos de geometria: verifique o pacote

Dynamo Player
Exemplos de fluxos de trabalho
Interface do usuário
Nós e fios
Nós e conceitos essenciais
Biblioteca de nós
Vinculação de objetos
Tela inicial do Dynamo
É possível colocar os nós da biblioteca ou clicando com o botão direito do mouse na tela
O gráfico finalizado
O gráfico finalizado em ação

Fácil configuração

Processo de instalação com várias etapas

Não é necessário instalar o Dynamo ou abri-lo

Tem que ter o Dynamo aberto

Não reconhece um gráfico que já está aberto no Dynamo

Abra um gráfico no Player que esteja aberto no Dynamo com um clique de botão

Não pode usar Python

Pode usar Python

Só pode usar pacotes sancionados

Pode usar qualquer pacote

Compilações do Dynamo
7zip
como eles estão relacionados
4KB
Geometry for Computational Design - Geometry Overview.dyn
Kit de ferramentas de malha
Stanford Bunny
Geometria computacional
Hierarquia da geometria
opção de amarra
0.6.1
0.6.3
0.6.1
0.8.2
0.7.1
1.2.1
0.7.2
1.3.2
0.9.0
1.3.4
2.0.3
1.3.0
1.3.4
2.0.3
1.3.3
1.3.4
2.0.4

Parametrização geométrica

Em projetos de cálculo, as curvas e as superfícies são usadas com frequência como o esboço subjacente para construir a geometria subsequente. Para que esta geometria inicial seja usada como uma fundação para a geometria posterior, o script deve ser capaz de extrair qualidades como a posição e a orientação através de toda a área do objeto. As curvas e as superfícies suportam essa extração, que é chamada de parametrização.

Todos os pontos em uma curva podem ser considerados como tendo um parâmetro único variando de 0 a 1. Se fôssemos criar uma NurbsCurve com base em diversos pontos de controle ou interpolados, o primeiro ponto teria o parâmetro 0 e o último ponto teria o parâmetro 1. É impossível saber antecipadamente qual é o parâmetro exato que qualquer ponto intermediário representa, o que pode parecer uma limitação severa, embora seja atenuada por uma série de funções de utilitários. As superfícies têm uma parametrização semelhante às curvas, mas com dois parâmetros em vez de um, chamados u e v. Se criássemos uma superfície com os seguintes pontos:

pts = [ [p1, p2, p3],
        [p4, p5, p6],
        [p7, p8, p9] ];

p1 teria o parâmetro u = 0 v = 0, enquanto p9 teria os parâmetros u = 1 v = 1.

A parametrização não é particularmente útil ao determinar os pontos usados para gerar curvas, seu principal uso será determinar as localizações se os pontos intermediários forem gerados pelos construtores NurbsCurve e NurbsSurface.

As curvas têm um método PointAtParameter, que assume um único argumento duplo entre 0 e 1, e retorna o objeto de ponto naquele parâmetro. Por exemplo, esse script localiza os pontos nos parâmetros 0, .1, .2, .3, .4, .5, .6, .7, .8, .9 e 1:

pts = {};
pts[0] = Point.ByCoordinates(4, 0, 0);
pts[1] = Point.ByCoordinates(6, 0, 1);
pts[2] = Point.ByCoordinates(4, 0, 2);
pts[3] = Point.ByCoordinates(4, 0, 3);
pts[4] = Point.ByCoordinates(4, 0, 4);
pts[5] = Point.ByCoordinates(3, 0, 5);
pts[6] = Point.ByCoordinates(4, 0, 6);

crv = NurbsCurve.ByPoints(pts);

pts_at_param = crv.PointAtParameter(0..1..#11);

// draw Lines to help visualize the points
lines = Line.ByStartPointEndPoint(pts_at_param,
    Point.ByCoordinates(4, 6, 0));

De forma similar, as superfícies têm um método PointAtParameter que assume dois argumentos, os parâmetros u e v do ponto gerado.

Embora a extração de pontos individuais em uma curva e superfície possa ser útil, os scripts geralmente exigem o conhecimento das características geométricas específicas de um parâmetro, como a direção da curva ou da superfície. O método CoordinateSystemAtParameter localiza não somente a posição como também um CoordinateSystem orientado no parâmetro de uma curva ou superfície. Por exemplo, o script a seguir extrai o CoordinateSystems orientado ao longo de uma superfície de revolução e usa a orientação do CoordinateSystems para gerar linhas que se destacam normalmente na superfície:

pts = {};
pts[0] = Point.ByCoordinates(4, 0, 0);
pts[1] = Point.ByCoordinates(3, 0, 1);
pts[2] = Point.ByCoordinates(4, 0, 2);
pts[3] = Point.ByCoordinates(4, 0, 3);
pts[4] = Point.ByCoordinates(4, 0, 4);
pts[5] = Point.ByCoordinates(5, 0, 5);
pts[6] = Point.ByCoordinates(4, 0, 6);
pts[7] = Point.ByCoordinates(4, 0, 7);

crv = NurbsCurve.ByPoints(pts);

axis_origin = Point.ByCoordinates(0, 0, 0);
axis = Vector.ByCoordinates(0, 0, 1);

surf = Surface.ByRevolve(crv, axis_origin, axis, 90,
    140);

cs_array = surf.CoordinateSystemAtParameter(
    (0..1..#7)<1>, (0..1..#7)<2>);

def make_line(cs : CoordinateSystem) {
	lines_start = cs.Origin;
    lines_end = cs.Origin.Translate(cs.ZAxis, -0.75);

    return = Line.ByStartPointEndPoint(lines_start,
        lines_end);
}

lines = make_line(Flatten(cs_array));

Como mencionado anteriormente, a parametrização nem sempre é uniforme ao longo do comprimento de uma curva ou superfície, o que significa que o parâmetro 0,5 nem sempre corresponde ao ponto central, e 0,25 nem sempre corresponde ao ponto um quarto ao longo de uma curva ou superfície. Para contornar essa limitação, as curvas têm um conjunto adicional de comandos de parametrização que permite encontrar um ponto em comprimentos específicos ao longo de uma curva.

Estrutura da altura livre

O desenvolvimento de envelopes cinemáticos para validação da altura livre é uma parte importante do projeto de ferrovia. É possível usar o Dynamo para gerar sólidos para o envelope, em vez de criar e gerenciar submontagens complexas de corredor para fazer o trabalho.

Objetivo

🎯 Usar um bloco de perfil de veículo para gerar sólidos 3D de estrutura de altura livre ao longo de um corredor.

Principais conceitos

  • Trabalhar com linhas de recurso do corredor

  • Transformar a geometria entre sistemas de coordenadas

  • Criar sólidos por elevação

  • Controlar o comportamento do nó com configurações de amarra

Compatibilidade de versão

Este gráfico será executado no Civil 3D 2020 e versões superiores.

Conjunto de dados

Comece fazendo o download dos arquivos de amostra abaixo e, em seguida, abrindo o arquivo DWG e o gráfico do Dynamo.

185KB
Rail_ClearanceEnvelope (1).dyn
22MB
Rail_ClearanceEnvelope.dwg

Solução

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

  1. Obter linhas de recurso da linha base do corredor especificada

  2. Gerar sistemas de coordenadas ao longo da linha de recurso do corredor no espaçamento desejado

  3. Transformar a geometria do bloco do perfil para os sistemas de coordenadas

  4. Elevar um sólido entre os perfis

  5. Criar sólidos no Civil 3D

Vamos começar

Obter os dados do corredor

Nossa primeira etapa é obter os dados do corredor. Selecionaremos o modelo de corredor pelo nome, obteremos uma linha base específica dentro do corredor e, em seguida, obteremos uma linha de recurso dentro da linha base pelo código de ponto.

Seleção do corredor, da linha base e da linha de recurso

Gerar os sistemas de coordenadas

O que vamos fazer agora é gerar os Sistemas de coordenadas ao longo das linhas de recurso do corredor entre uma determinada estaca inicial e final. Esses sistemas de coordenadas serão usados para alinhar a geometria do bloco do perfil do veículo com o corredor.

Se os sistemas de coordenadas forem algo novo para você, veja a seção Vetor, plano e sistema de coordenadas.

Obtenção dos sistemas de coordenadas ao longo das linhas de recurso do corredor
  1. Observe os pequenos XXX no canto inferior direito do nó. Isso significa que as configurações de amarra do nó são definidas como Produto transversal, que é necessário para gerar os sistemas de coordenadas nos mesmos valores de estaca para ambas as linhas de recurso.

Se a amarra de nó for algo novo para você, veja a seção O que é uma lista?.

Transformar a geometria de bloco

Agora, precisamos de alguma forma criar uma matriz dos perfis de veículo ao longo das linhas do recurso. O que vamos fazer é transformar a geometria da definição do bloco do perfil do veículo usando o nó Geometry.Transform. Esse é um conceito complicado de visualizar, assim, antes de analisarmos os nós, veja a seguir um gráfico que mostra o que vai acontecer.

Visualização da transformação da geometria entre sistemas de coordenadas.

Basicamente, estamos usando a geometria do Dynamo de uma única definição de bloco e movendo-a/girando-a, tudo isso enquanto criamos uma matriz ao longo da linha do recurso. Que legal. Veja como é a aparência da sequência de nós.

  1. Isso obtém a definição de bloco do documento.

  2. Esses nós obtêm a geometria do Dynamo dos objetos dentro do bloco.

  3. Esses nós definem essencialmente o sistema de coordenadas com base no qual estamos transformando a geometria.

  4. E, por fim, esse nó faz o trabalho real de transformar a geometria.

  5. Observe a amarra Mais longa nesse nó.

E aqui está o que obtemos no Dynamo.

Geometria do bloco do perfil do veículo após a transformação

Gerar sólidos

Temos boas notícias. O trabalho árduo está feito. Tudo o que precisamos fazer agora é gerar sólidos entre os perfis. Isso é facilmente obtido com o nó Solid.ByLoft.

E aqui está o resultado. Lembre-se de que esses são sólidos do Dynamo – ainda precisamos criá-los no Civil 3D.

Sólidos do Dynamo após a transição

Sólidos de saída para o Civil 3D

Nossa última etapa é gerar os sólidos gerados no espaço do modelo. Também daremos a eles uma cor para torná-los muito fáceis de ver.

Geração de saída dos sólidos para o Civil 3D

Resultado

Veja um exemplo de como executar o gráfico usando o Reprodutor do Dynamo.

Execução do gráfico usando o Reprodutor do Dynamo e visualização dos resultados no Civil 3D

Se o Reprodutor do Dynamo for algo novo para você, veja a seção Dynamo Player.

🎉 Missão cumprida.

Ideias

Veja a seguir algumas ideias sobre como você pode expandir os recursos desse gráfico.

Adicione a capacidade de usar diferentes intervalos de estacas separadamente para cada trilha.

Divida os sólidos em segmentos menores que podem ser analisados individualmente para detectar interferências.

Verifique se os sólidos de envelope fazem interseção com recursos e colore os que apresentam interferência.

Vetor, plano e sistema de coordenadas

Vetor, plano e sistema de coordenadas no Dynamo

Vetor

Vetor é uma representação de magnitude e direção. É possível visualizá-lo como uma seta que acelera em uma determinada direção em uma velocidade especificada. É um componente-chave para os nossos modelos no Dynamo. Observe que, como eles estão na categoria Abstrata de “Auxiliares”, quando criamos um vetor, não veremos nada na Visualização do plano de fundo.

Vetores no Dynamo
  1. Podemos usar uma linha como suporte para uma visualização de Vetor.

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

6KB
Geometry for Computational Design - Vectors.dyn

Plano

Plano é uma superfície bidimensional. É possível imaginá-lo como uma superfície plana que se estende indefinidamente. Cada plano tem uma Origem, Direção X, Direção Y e uma Direção Z (para cima).

Planos no Dynamo
  1. Embora sejam abstratos, os planos têm uma posição de origem para que possam ser localizados no espaço.

  2. No Dynamo, os planos são renderizados na Visualização de plano de fundo.

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

7KB
Geometry for Computational Design - Plane.dyn

Sistema de coordenadas

Sistema de coordenadas é um sistema para determinar a localização de pontos ou outros elementos geométricos. A imagem abaixo explica como o sistema de coordenadas é exibido no Dynamo e o que cada cor representa.

Sistema de coordenadas no Dynamo
  1. Embora sejam abstratos, os sistemas de coordenadas também têm uma posição de origem para que possamos localizá-los no espaço.

  2. No Dynamo, os sistemas de coordenadas são renderizados na visualização do plano de fundo como um ponto (origem) e linhas que definem os eixos (X é vermelho, Y é verde e Z é azul, seguindo a convenção).

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

3KB
Geometry for Computational Design - Coordinate System.dyn

Análise abrangente de...

Vetores, Planos e Sistemas de coordenadas constituem o grupo principal de Tipos de geometria abstratos. Eles nos ajudam a definir a localização, a orientação e o contexto espacial para outra geometria que descreva as formas. Se eu disser que estou em Nova Iorque, na rua 42nd e Broadway (Sistema de Coordenadas), de pé no nível da rua (Plano), olhando para o norte (Vetor), acabei de usar essas "Ajudas" para definir onde estou. O mesmo vale para um produto de caso de telefone ou um arranha-céu. Precisamos desse contexto para desenvolver nosso modelo.

Vetores, planos e coordenadas

Vetor

Um vetor é uma quantidade geométrica que descreve a direção e a magnitude. Os vetores são abstratos; isto é, eles representam uma quantidade, e não um elemento geométrico. Os vetores podem ser facilmente confundidos com pontos porque ambos são compostos por uma lista de valores. No entanto, há uma diferença fundamental: os pontos descrevem uma posição em um determinado sistema de coordenadas, enquanto os vetores descrevem uma diferença relativa na posição, o que é o mesmo que dizer “direção”.

Detalhes do vetor

Se a ideia de diferença relativa for confusa, pense no vetor AB como “Estou de pé no ponto A, olhando em direção ao ponto B”. A direção, daqui (A) até lá (B), é o nosso vetor.

Dividindo os vetores em suas partes, usando a mesma notação AB:

Vetor
  1. O Ponto inicial do vetor é chamado Base.

  2. O Ponto final do vetor é chamado Ponta ou Sentido.

  3. O vetor AB não é o mesmo que o vetor BA, que apontaria na direção oposta.

Se você precisar de uma anedota no que diz respeito aos vetores (e sua definição abstrata), veja a comédia clássica Airplane e ouça o diálogo engraçado:

Roger, Roger. Qual é o nosso vetor, Victor?

Plano

Os planos são "Ajudas" abstratas bidimensionais. Mais especificamente, os planos são conceitualmente "planos", estendendo-se infinitamente em duas direções. Normalmente, eles são renderizados como um retângulo menor perto de sua origem.

Plano

Você pode estar pensando: “Espere um segundo. Origem? Isso parece um sistema de coordenadas... como o que eu uso para modelar no meu software CAD!"

E você está correto! A maioria dos softwares de modelagem aproveita os planos de construção ou “níveis” para definir um contexto de duas dimensões locais na qual a inclinação será desenhada. XY, XZ, YZ ou Norte, Sudeste, Plano pode parecer mais familiar. Todos esses são os Planos, definindo um contexto "plano" infinito. Os planos não têm profundidade, mas eles nos ajudam a descrever a direção também -

Sistema de coordenadas

Se estivermos confortáveis com o conceito de planos, estamos a um pequeno passo de entender os sistemas de coordenadas. Um plano tem todas as mesmas peças que um sistema de coordenadas, desde que seja um sistema de coordenadas padrão "Euclidean" ou "XYZ".

No entanto, há outros sistemas de coordenadas alternativos como Cilíndricos ou Esféricos. Como veremos em seções posteriores, os sistemas de coordenadas também podem ser aplicados a outros tipos de geometria para definir uma posição naquela geometria.

Sistema de coordenadas

Adicionar sistemas de coordenadas alternativos: cilíndricos, esféricos

Superfícies

Superfícies no Dynamo

O que é a superfície?

Usamos Superfície no modelo para representar objetos que vemos em nosso mundo tridimensional. Embora as curvas nem sempre sejam planas, ou seja, sejam tridimensionais, o espaço que elas definem estará sempre vinculado a uma cota. As superfícies proporcionam outra dimensão e um conjunto de propriedades adicionais que podemos usar em outras operações de modelagem.

Superfície no parâmetro

Importe e avalie uma superfície em um parâmetro no Dynamo para ver o tipo de informações que podemos extrair.

  1. Surface.PointAtParameter retorna o ponto em uma determinada coordenada UV

  2. Surface.NormalAtParameter retorna o vetor normal em uma determinada coordenada UV

  3. Surface.GetIsoline retorna a curva isoparamétrica em uma coordenada U ou V: observe a entrada isoDirection.

Faça o download dos arquivos de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

3KB
Surfaces.zip
archive

Análise abrangente de...

Superfície

Uma superfície é uma forma matemática definida por uma função e dois parâmetros. Em vez de t para curvas, usamos U e V para descrever o espaço de parâmetro correspondente. Isso significa que temos mais dados geométricos para desenhar ao trabalhar com este tipo de geometria. Por exemplo, as curvas apresentam vetores tangentes e planos normais (que podem ser rotacionados ou girados ao longo do comprimento da curva), enquanto as superfícies apresentam vetores normais e planos tangentes que são consistentes na sua orientação.

Superfície
  1. Superfície

  2. Isocurva U

  3. Isocurva V

  4. Coordenada UV

  5. Plano perpendicular

  6. Vetor normal

Surface Domain: um domínio de superfície é definido como o intervalo de parâmetros (U,V) que são avaliados em um ponto tridimensional naquela superfície. O domínio em cada cota (U ou V) normalmente é descrito como dois números (U mín a U máx) e (V mín a V máx).

Superfície

Embora a forma da superfície não pareça “retangular” e localmente possa haver um conjunto de isocurvas mais rígido ou mais solto, o “espaço” definido por seu domínio é sempre bidimensional. No Dynamo, as superfícies sempre são consideradas como tendo um domínio definido por um mínimo de 0,0 e um máximo de 1,0 nas direções U e V. As superfícies planas ou aparadas podem apresentar diferentes domínios.

Isocurva (ou curva isoparamétrica): uma curva definida por um valor U ou V constante na superfície e um domínio de valores para a outra direção U ou V correspondente.

Coordenada UV: o ponto no espaço de parâmetro UV definido por U, V e, às vezes, W.

Coordenada de superfície

Plano perpendicular: um plano que é perpendicular às Isocurvas U e V em uma determinada coordenada UV.

Vetor normal: um vetor que define a direção “para cima” em relação ao plano perpendicular.

Superfícies NURBS

As superfícies NURBS são muito similares às curvas NURBS. É possível considerar as superfícies NURBS como uma grade de curvas NURBS que estão em duas direções. A forma de uma superfície NURBS é definida por um número de pontos de controle e o grau da superfície nas direções U e V. Os mesmos algoritmos são usados para calcular a forma, as normais, as tangentes, as curvaturas e outras propriedades por meio de pontos de controle, espessuras e graus.

Superfície NURBS

No caso de superfícies NURBS, há duas direções implícitas pela geometria, porque as superfícies NURBS são, independentemente da forma que vemos, grades retangulares de pontos de controle. E, embora essas direções sejam muitas vezes arbitrárias em relação ao sistema de coordenadas universal, nós as usaremos com frequência para analisar nossos modelos ou gerar outra geometria com base na superfície.

Superfície NURBS
  1. Grau (U,V) = (3,3)

  2. Grau (U,V) = (3,1)

  3. Grau (U,V) = (1,2)

  4. Grau (U,V) = (1,1)

Polysurfaces

As Polysurfaces são compostas por superfícies que são unidas através de uma aresta. As Polysurfaces oferecem muito mais do que uma definição UV bidimensional, pois agora podemos percorrer as formas conectadas por meio de sua topologia.

Embora “Topologia” geralmente descreva um conceito sobre como as peças são conectadas e/ou relacionadas, a topologia no Dynamo também é um tipo de geometria. Especificamente, é uma categoria principal para Superfícies, Polysurfaces e Sólidos.

PolySurface

Às vezes chamada de patches, a união de superfícies dessa maneira permite criar formas mais complexas, além de definir detalhes na junção. Convenientemente, podemos aplicar uma operação de arredondamento ou chanfro às arestas de uma PolySurface.

Generating, Transforming, and Analyzing Railway Design Data in Civil 3D and Dynamo | Autodesk University
Civil3DDynamo
Optimize Road Design with Dynamo for Civil 3D and Generative Design | Autodesk University
Bridge Detailing 2.0: Computational modelling methods using Civil 3D, Revit & Dynamo | Autodesk University

Criar um nó personalizado

O Dynamo oferece vários métodos diferentes para criar nós personalizados. É possível criar nós personalizados do zero, com base em um gráfico existente ou explicitamente em C#. Nesta seção, vamos abordar a criação de um nó personalizado na IU do Dynamo com base em um gráfico existente. Este método é ideal para limpar o espaço de trabalho, bem como para empacotar uma sequência de nós para reutilização em outro lugar.

Exercício: Nós personalizados para mapeamento de UV

Parte I: Começar com um gráfico

Na imagem abaixo, é mapeado um ponto de uma superfície para outra usando as coordenadas UV. Usaremos esse conceito para criar uma superfície de painel que faz referência a curvas no plano XY. Criaremos painéis quadrados aqui, mas usando a mesma lógica, podemos criar uma ampla variedade de painéis com o mapeamento UV. Esta é uma ótima oportunidade para o desenvolvimento de nós personalizados, pois poderemos repetir um processo semelhante mais facilmente neste gráfico ou em outros fluxos de trabalho do Dynamo.

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Vamos começar criando um gráfico que desejamos aninhar em um nó personalizado. Neste exemplo, vamos criar um gráfico que mapeia os polígonos de uma superfície base para uma superfície alvo usando as coordenadas UV. Esse processo de mapeamento UV é algo que usamos com frequência, o que faz dele um bom candidato para um nó personalizado. Para obter mais informações sobre as superfícies e o espaço UV, consulte a página . O gráfico completo é UVmapping_Custom-Node.dyn do arquivo .zip obtido por download acima.

  1. Bloco de código: use essa linha para criar um intervalo de 10 números entre -45 e 45 45..45..#10;

  2. Point.ByCoordinates: conecte a saída do Bloco de código às entradas “x” e “y” e defina a amarra como referência cruzada. Agora, você deve ter uma grade de pontos.

  3. Plane.ByOriginNormal: conecte a saída “Ponto” à entrada “origem” para criar um plano em cada um dos pontos. Será usado o vetor normal padrão de (0,0,1).

  4. Rectangle.ByWidthLength: conecte os planos da etapa anterior à entrada “plano” e use um Bloco de código com um valor de 10 para especificar a largura e o comprimento.

Agora, você deve ver uma grade de retângulos. Vamos mapear esses retângulos para uma superfície-alvo usando as coordenadas UV.

  1. Polygon.Points: conecte a saída de Rectangle.ByWidthLength da etapa anterior à entrada “polígono” para extrair os pontos de canto de cada retângulo. Esses são os pontos que serão mapeados para a superfície-alvo.

  2. Rectangle.ByWidthLength: use um Bloco de código com um valor de 100 para especificar a largura e o comprimento de um retângulo. Esse será o limite da nossa superfície de base.

  3. Surface.ByPatch: conecte o Rectangle.ByWidthLength da etapa anterior à entrada “closedCurve” para criar uma superfície de base.

  4. Surface.UVParameterAtPoint: conecte a saída “Ponto” do nó Polygon.Points e a saída “Superfície” do nó Surface.ByPatch para retornar o parâmetro UV em cada ponto.

Agora que temos uma superfície de base e um conjunto de coordenadas UV, é possível importar uma superfície-alvo e mapear os pontos entre as superfícies.

  1. File Path: selecione o caminho do arquivo da superfície que você deseja importar. O tipo de arquivo deve ser .SAT. Clique no botão “Procurar...” e navegue até o arquivo UVmapping_srf.sat do arquivo .zip obtido por download acima.

  2. Geometry.ImportFromSAT: conecte o caminho do arquivo para importar a superfície. Você deve ver a superfície importada na visualização da geometria.

  3. UV: conecte a saída do parâmetro UV a um nó UV.U e a um nó UV.V.

  4. Surface.PointAtParameter: conecte a superfície importada, bem como as coordenadas u e v. Agora, você deve visualizar uma grade de pontos 3D na superfície-alvo.

A última etapa é usar os pontos 3D para construir as correções de superfícies retangulares.

  1. PolyCurve.ByPoints: conecte os pontos na superfície para construir uma policurva através dos pontos.

  2. Booleano: adicione um valor booleano ao espaço de trabalho, conecte-o à entrada “connectLastToFirst” e alterne para True para fechar as policurvas. Agora, você deve ver os retângulos mapeados para a superfície.

  3. Surface.ByPatch: conecte as policurvas à entrada “closedCurve” para construir as correções de superfícies.

Parte II: Do gráfico ao nó personalizado

Agora, vamos selecionar os nós que desejamos aninhar em um nó personalizado, pensando no que desejamos que sejam as entradas e saídas do nosso nó. Desejamos que nosso nó personalizado seja o mais flexível possível, para que possa mapear qualquer polígono, não apenas retângulos.

Selecione os seguintes nós (começando com Polygon.Points), clique com o botão direito do mouse no espaço de trabalho e selecione “Criar nó personalizado”.

Na caixa de diálogo Propriedades do nó personalizado, atribua um nome, uma descrição e uma categoria ao nó personalizado.

  1. Nome: MapPolygonsToSurface

  2. Descrição: Mapear polígonos de uma superfície base para a superfície alvo

  3. Categoria de complementos: Geometry.Curve

O nó personalizado limpou consideravelmente o espaço de trabalho. Observe que as entradas e saídas foram nomeadas com base nos nós originais. Vamos editar o nó personalizado para tornar os nomes mais descritivos.

Clique duas vezes no nó personalizado para editá-lo. Isso abrirá um espaço de trabalho com um fundo amarelo que representa o interior do nó.

  1. Entradas: altere os nomes das entradas para baseSurface e targetSurface.

  2. Saídas: adicione mais uma saída para os polígonos mapeados.

Salve o nó personalizado e volte para o espaço de trabalho inicial. Observe que o nó MapPolygonsToSurface reflete as alterações que acabamos de fazer.

Também é possível aumentar a robustez do nó personalizado adicionando Comentários personalizados. Os comentários podem ajudar a indicar os tipos de entrada e saída ou explicar a funcionalidade do nó. Os comentários aparecerão quando o usuário passar o cursor sobre uma entrada ou saída de um nó personalizado.

Clique duas vezes no nó personalizado para editá-lo. Isso reabrirá o espaço de trabalho de fundo amarelo.

  1. Comece editando o Bloco de código de entrada. Para iniciar um comentário, digite “//” seguido do texto do comentário. Digite qualquer coisa que possa ajudar a esclarecer o nó. Aqui, descreveremos a targetSurface.

  2. Também definiremos o valor padrão da inputSurface definindo o tipo de entrada igual a um valor. Aqui, definiremos o valor padrão como o conjunto Surface.ByPatch original.

Também é possível aplicar os comentários às saídas.

Edite o texto no bloco de código de saída. Digite “//” seguido do texto do comentário. Aqui, esclareceremos as saídas Polígonos e surfacePatches adicionando uma descrição mais detalhada.

  1. Passe o cursor sobre as entradas dos nós personalizados para ver os comentários.

  2. Com o valor padrão definido em inputSurface, também é possível executar a definição sem uma entrada de superfície.

Posicionamento de postes de luz

Um dos muitos casos de uso excelentes do Dynamo é posicionar objetos separados dinamicamente ao longo de um modelo de corredor. Geralmente, os objetos precisam ser posicionados em localizações independentes das montagens inseridas ao longo do corredor, o que é uma tarefa muito entediante para ser realizada manualmente. E, quando a geometria horizontal ou vertical do corredor muda, isso introduz uma quantidade significativa de retrabalho.

Objetivo

🎯 Posicionar referências de bloco de postes de luz ao longo de um corredor em valores de estaca especificados em um arquivo do Excel.

Principais conceitos

  • Ler dados de um arquivo externo (neste caso, Excel)

  • Organizar dados em dicionários

  • Usar sistemas de coordenadas para controlar a posição/escala/rotação

  • Posicionar referências de bloco

  • Visualizar a geometria no Dynamo

Compatibilidade de versão

Este gráfico será executado no Civil 3D 2020 e versões superiores.

Conjunto de dados

Comece fazendo o download dos arquivos de amostra abaixo e, em seguida, abrindo o arquivo DWG e o gráfico do Dynamo.

É melhor que o arquivo do Excel seja salvo no mesmo diretório que o gráfico do Dynamo.

Solução

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

  1. Ler o arquivo do Excel e importar os dados para o Dynamo

  2. Obter as linhas de recurso da linha base do corredor especificada

  3. Gerar os sistemas de coordenadas ao longo da linha de recurso do corredor nas estacas desejadas

  4. Usar os sistemas de coordenadas para posicionar referências de bloco no espaço do modelo

Vamos começar

Obter os dados do Excel

Neste gráfico de exemplo, vamos usar um arquivo do Excel para armazenar os dados que o Dynamo usará para posicionar as referências de bloco dos postes de luz. A tabela tem a aparência a seguir.

Usar o Dynamo para ler dados de um arquivo externo (como um arquivo do Excel) é uma ótima estratégia, especialmente quando os dados precisam ser compartilhados com outros membros da equipe.

Os dados do Excel são importados para o Dynamo da seguinte maneira.

Agora que temos os dados, precisamos dividi-los por coluna (Corredor, Linha base, PointCode etc.) para que possam ser usados no restante do gráfico. Uma forma comum de fazer isso é usar o nó List.GetItemAtIndex e especificar o número de índice de cada coluna que desejamos. Por exemplo, a coluna Corredor está no índice 0, a coluna Linha base está no índice 1 etc.

Parece bom, certo? Mas há um problema potencial com essa abordagem. E se a ordem das colunas no arquivo do Excel for alterada no futuro? Ou uma nova coluna for adicionada entre duas colunas? Nesses casos, o gráfico não funcionará corretamente e exigirá uma atualização. Podemos tornar o gráfico à prova de futuro colocando os dados em um Dicionário, com os cabeçalhos de coluna do Excel como chaves e o resto dos dados como valores.

Se os dicionários forem algo novo para você, veja a seção .

Isso torna o gráfico mais resiliente porque permite flexibilidade ao alterar a ordem das colunas no Excel. Enquanto os cabeçalhos de coluna permanecerem os mesmos, os dados poderão ser recuperados do dicionário usando sua chave (ou seja, o cabeçalho da coluna), que é o que fazemos em seguida.

Obter as linhas de recurso do corredor

Agora que temos os dados do Excel importados e prontos para serem usados, vamos começar a usá-los para obter algumas informações do Civil 3D sobre os modelos de corredor.

  1. Selecione o modelo de corredor pelo nome.

  2. Obtenha uma linha base específica dentro do corredor.

  3. Obtenha uma linha do recurso na linha base pelo código de ponto.

Gerar os sistemas de coordenadas

O que vamos fazer agora é gerar Sistemas de coordenadas ao longo das linhas de recurso do corredor nos valores de estaca que especificamos no arquivo do Excel. Esses sistemas de coordenadas serão usados para definir a posição, a rotação e a escala das referências de bloco dos postes de luz.

Se os sistemas de coordenadas forem algo novo para você, veja a seção .

Observe o uso de um bloco de código para rotacionar os sistemas de coordenadas, dependendo do lado em que eles estejam da linha base. Isso pode ser obtido usando uma sequência de vários nós, mas esse é um bom exemplo de uma situação em que é mais fácil escrever manualmente.

Se os blocos de código forem algo novo para você, veja a seção .

Criar as referências de bloco

Está quase. Temos todas as informações necessárias para podermos realmente posicionar as referências de bloco. A primeira coisa a fazer é obter as definições de bloco que desejamos usando a coluna BlockName do arquivo do Excel.

A partir daí, a última etapa é criar as referências de bloco.

Resultado

Quando você executar o gráfico, deverá ver novas referências de bloco mostradas no espaço do modelo ao longo do corredor. E aqui está a parte interessante – se o modo de execução do gráfico estiver definido como Automático e você editar o arquivo do Excel, as referências de bloco serão atualizadas automaticamente.

Você pode ler mais sobre os modos de execução de gráficos na seção .

Veja um exemplo de como executar o gráfico usando o Reprodutor do Dynamo.

Se o Reprodutor do Dynamo for algo novo para você, veja a seção .

🎉 Missão cumprida.

Bônus: Visualização no Dynamo

Pode ser útil visualizar a geometria do corredor no Dynamo para fornecer contexto. Este modelo específico tem os sólidos do corredor já extraídos no espaço do modelo, então vamos levá-los para o Dynamo.

Mas há algo mais que precisamos considerar. Os sólidos são um tipo de geometria relativamente “pesada”, o que significa que essa operação diminuirá a velocidade do gráfico. Seria bom se houvesse uma maneira simples de escolher se desejamos visualizar os sólidos ou não. A resposta óbvia é desconectar o nó Corridor.GetSolids, mas isso produzirá avisos para todos os nós a jusante, o que é um pouco confuso. Essa é uma situação em que o nó ScopeIf realmente se destaca.

  1. Observe que o nó Object.Geometry tem uma barra cinza na parte inferior. Isso significa que a visualização do nó está desativada (acessível clicando com o botão direito do mouse no nó), o que permite que GeometryColor.ByGeometryColor evite “brigar” com outra geometria por prioridade de exibição na visualização do plano de fundo.

  2. O nó ScopeIf basicamente permite executar seletivamente uma ramificação inteira de nós. Se a entrada test for falsa, nenhum nó conectado ao nó ScopeIf será executado.

Veja o resultado na visualização do plano de fundo do Dynamo.

Ideias

Veja a seguir algumas ideias sobre como você pode expandir os recursos desse gráfico.

Adicione uma coluna de rotação ao arquivo do Excel e use-a para controlar a rotação dos sistemas de coordenadas.

Adicione deslocamentos horizontais ou verticais ao arquivo do Excel para que os postes de luz possam se desviar da linha de recurso do corredor, se necessário.

Em vez de usar um arquivo do Excel com valores de estaca, gere os valores de estaca diretamente no Dynamo usando uma estaca inicial e um espaçamento típico.

Documentação

A edição de parâmetros da documentação segue as lições aprendidas nas seções anteriores. Nesta seção, vamos examinar os parâmetros de edição que não afetam as propriedades geométricas de um elemento, mas, em vez disso, preparam um arquivo do Revit para a documentação.

Desvio

No exercício abaixo, vamos usar um desvio básico do nó do plano para criar uma folha do Revit para documentação. Cada painel em nossa estrutura de telhado definida parametricamente tem um valor diferente para o desvio, e queremos chamar o intervalo de valores usando cores e programando os pontos adaptativos para entregar a um consultor de fachadas, engenheiro ou empreiteiro.

O desvio do nó do plano calculará a distância pela qual o conjunto de quatro pontos varia em relação ao plano de melhor ajuste entre eles. Essa é uma maneira rápida e fácil de estudar a construtibilidade.

Exercício

Parte I: Definir a relação de abertura dos painéis com base no desvio do nó do plano

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Inicie com o arquivo do Revit nesta seção (ou continue da seção anterior). Esse arquivo tem uma matriz de painéis ETFE no telhado. Vamos fazer referência a esses painéis para este exercício.

  1. Adicione um nó Tipos de família à tela e escolha “ROOF-PANEL-4PT”.

  2. Conecte esse nó a um nó Todos os elementos do tipo de família para selecionar todos os elementos do Revit para o Dynamo.

  1. Consulte a localização dos pontos adaptativos de cada elemento com o nó AdaptiveComponent.Locations.

  2. Crie um polígono com base nesses quatro pontos com o nó Polygon.ByPoints. Observe que agora temos uma versão abstrata do sistema de painéis no Dynamo sem ter que importar toda a geometria do elemento do Revit.

  3. Calcule o desvio do plano com o nó Polygon.PlaneDeviation.

Só para testar, como no exercício anterior, vamos definir a proporção de abertura de cada painel com base em seu desvio do plano.

  1. Adicione um nó Element.SetParameterByName à tela e conecte os componentes adaptativos à entrada elemento. Conecte um Bloco de código com a inscrição “Proporção de abertura” à entrada parameterName.

  2. Não é possível conectar diretamente os resultados do desvio à entrada de valor porque precisamos remapear os valores para o intervalo de parâmetros.

  1. Usando Math.RemapRange, remapeie os valores de desvio para um domínio entre 0,15 e 0_,_45 inserindo 0.15; 0.45; no Bloco de código.

  2. Conecte esses resultados à entrada de valor de Element.SetParameterByName.

De volta ao Revit, podemos compreender de certa forma a mudança de abertura na superfície.

Aproximando o zoom, torna-se mais claro que os painéis fechados se concentram nos cantos da superfície. Os cantos abertos estão na parte superior. Os cantos representam áreas de desvio maior, enquanto a saliência tem uma curvatura mínima; portanto, isso faz sentido.

Parte II: Cor e documentação

Definir a Proporção de abertura não demonstra claramente o desvio dos painéis no telhado. Também estamos alterando a geometria do elemento real. Suponha que só desejamos estudar o desvio do ponto de vista da viabilidade de fabricação. Seria útil colorir os painéis com base no intervalo de desvio para nossa documentação. Podemos fazer isso com a série de etapas abaixo e em um processo muito semelhante às etapas acima.

  1. Remova o Element.SetParameterByName e seus nós de entrada e adicione Element.OverrideColorInView.

  2. Adicione um nó Intervalo de cores à tela e conecte-o à entrada de cor Element.OverrideColorInView. Ainda precisamos conectar os valores de desvio ao intervalo de cores para criar o gradiente.

  3. Se você passar o mouse sobre a entrada valor, será possível ver que os valores da entrada devem estar entre 0 e 1 para mapear uma cor para cada valor. Precisamos remapear os valores de desvio para esse intervalo.

  1. Usando Math.RemapRange, remapeie os valores de desvio do plano para um intervalo entre 0 e 1 (observação: também é possível usar o nó “MapTo” para definir um domínio de origem).

  2. Conecte os resultados a um nó Intervalo de cores.

  3. Observe que nossa saída é um intervalo de cores, em vez de um intervalo de números.

  4. Se a definição estiver como Manual, pressione Executar. A partir desse ponto, você deve conseguir estabelecer a definição como Automático.

De volta ao Revit, vemos um gradiente muito mais legível que é representativo do desvio plano com base em nosso intervalo de cores. Mas, e se quisermos personalizar as cores? Observe que os valores de desvio mínimo são representados em vermelho, o que parece ser o oposto do que esperávamos. Queremos que o desvio máximo esteja em vermelho, com o desvio mínimo representado por uma cor menos intensa. Vamos voltar ao Dynamo e corrigir isso.

  1. Usando um Bloco de código, adicione dois números em duas linhas diferentes: 0; e 255;.

  2. Crie uma cor vermelha e azul ao conectar os valores apropriados em dois nós Color.ByARGB.

  3. Crie uma lista com base nessas duas cores.

  4. Conecte essa lista à entrada cores do Intervalo de cores e observe a atualização personalizada do intervalo de cores.

De volta ao Revit, agora podemos entender melhor as áreas de desvio máximo nos cantos. Lembre-se: esse nó se destina a substituir uma cor em uma vista; portanto, poderá ser realmente útil se tivermos uma folha específica no conjunto de desenhos com foco em um determinado tipo de análise.

Parte III: Programação

Ao selecionar um painel ETFE no Revit, vemos que há quatro parâmetros de instância: XYZ1, XYZ2, XYZ3 e XYZ4. Eles ficam todos em branco depois de serem criados. Esses são parâmetros baseados em texto e precisam de valores. Usaremos o Dynamo para escrever as localizações dos pontos adaptativos em cada parâmetro. Isso ajudará a interoperabilidade se a geometria precisar ser enviada para um engenheiro consultor de fachadas.

Em uma folha de amostra, temos uma tabela grande e vazia. Os parâmetros XYZ são parâmetros compartilhados no arquivo do Revit, o que nos permite adicioná-los à tabela.

Aproximando o zoom, os parâmetros XYZ ainda devem ser preenchidos. Os dois primeiros parâmetros são preparados pelo Revit.

Para gravar esses valores, faremos uma operação de lista complexa. O gráfico em si é simples, mas os conceitos são criados intensamente com base no mapeamento da lista, conforme discutido no capítulo sobre a lista.

  1. Selecione todos os componentes adaptativos com dois nós.

  2. Extraia a localização de cada ponto com AdaptiveComponent.Locations.

  3. Converta esses pontos em sequências de caracteres. Lembre-se: o parâmetro se baseia em texto; portanto, é preciso inserir o tipo de dados correto.

  4. Crie uma lista das quatro sequências de caracteres que definem os parâmetros a serem alterados:XYZ1, XYZ2, XYZ3, e XYZ4.

  5. Conecte essa lista à entrada parameterName de Element.SetParameterByName.

  6. Conecte Element.SetParameterByName à entrada combinador de List.Combine. Conecte os componentes adaptativos à list1. Conecte a Sequência de caracteres do objeto à list2.

Estamos mapeando a lista aqui, porque estamos gravando quatro valores para cada elemento, que cria uma estrutura de dados complexa. O nó List.Combine define uma operação uma etapa abaixo na hierarquia de dados. É por isso que as entradas de elemento e de valor Element.SetParameterByName são deixadas em branco. List.Combine está conectando as sublistas de suas entradas às entradas vazias de Element.SetParameterByName, com base na ordem em que elas estão conectadas.

Selecionando um painel no Revit, poderemos ver agora que temos valores de sequência de caracteres para cada parâmetro. Realisticamente, criaríamos um formato mais simples para escrever um ponto (X,Y,Z). Isso pode ser feito com operações de sequência de caracteres no Dynamo, mas estamos ignorando isso aqui para permanecer no escopo deste capítulo.

Uma vista da amostra de cronograma com parâmetros preenchidos.

Cada painel ETFE agora tem as coordenadas XYZ gravadas para cada ponto adaptativo, representando os cantos de cada painel para fabricação.

Sólidos

Sólidos no Dynamo

O que é um sólido?

Se quisermos criar modelos mais complexos que não possam ser criados com base em uma única superfície ou se desejarmos definir um volume explícito, agora precisaremos nos aventurar no domínio dos (e das Polysurfaces). Até mesmo um cubo simples é suficientemente complexo para precisar de seis superfícies, uma por face. Os sólidos dão acesso a dois conceitos-chave que as superfícies não têm: uma descrição topológica mais refinada (faces, arestas, vértices) e operações booleanas.

Operação booleana para criar um sólido esférico pontiagudo

É possível usar para modificar os sólidos. Vamos usar algumas operações booleanas para criar uma bola pontiaguda.

  1. Sphere.ByCenterPointRadius: crie o sólido da base.

  2. Topology.Faces, Face.SurfaceGeometry: consulte as faces do sólido e converta-as em geometria da superfície. Neste caso, a esfera tem apenas uma face.

  3. Cone.ByPointsRadii: crie cones usando pontos na superfície.

  4. Solid.UnionAll: una os cones e a esfera.

  5. Topology.Edges: consulte as arestas do novo sólido.

  6. Solid.Fillet: arredonde as arestas da esfera pontiaguda.

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Congelar

As operações booleanas são complexas e seu cálculo pode ser lento. É possível usar a funcionalidade “congelar” para suspender a execução dos nós selecionados e dos nós a jusante afetados.

1. Use o menu de contexto do botão direito do mouse para congelar a operação de União de sólidos

2. O nó selecionado e todos os nós a jusante serão visualizados em um modo duplicado cinza claro, e os fios afetados serão exibidos como linhas tracejadas. A visualização da geometria afetada também será duplicada. Agora é possível alterar os valores anteriores sem calcular a união booleana.

3. Para descongelar os nós, clique com o botão direito do mouse e desmarque Congelar.

4. Todos os nós afetados e as visualizações de geometria associadas serão atualizados e revertidos para o modo de visualização padrão.

Você pode obter mais informações sobre o congelamento de nós na seção .

Análise abrangente de...

Sólidos

Os sólidos consistem em uma ou mais superfícies que contêm volume por meio de um limite fechado que define a “entrada” ou a “saída”. Independentemente de quantas superfícies existem, elas devem formar um volume “hermético” para serem consideradas como um sólido. Os sólidos podem ser criados unindo superfícies ou Polysurfaces ou usando operações como elevação, varredura e revolução. As primitivas Esfera, Cubo, Cone e Cilindro também são sólidos. Um cubo com, pelo menos, uma face removida conta como uma Polysurface, que tem algumas propriedades similares, mas não é um sólido.

  1. Um plano é composto por uma única superfície e não é um sólido.

  2. Uma esfera é composta por uma superfície, mas é um sólido.

  3. Um cone é composto por duas superfícies unidas para criar um sólido.

  4. Um cilindro é composto por três superfícies unidas para criar um sólido.

  5. Um cubo é composto de seis superfícies unidas para criar um sólido.

Topologia

Os sólidos são compostos de três tipos de elementos: vértices, arestas e faces. As faces são as superfícies que compõem o sólido. As arestas são as curvas que definem a conexão entre as faces adjacentes e os vértices são os pontos inicial e final dessas curvas. É possível consultar esses elementos usando os nós de topologia.

  1. Faces

  2. Arestas

  3. Vértices

Operações

É possível modificar os sólidos arredondando ou chanfrando suas bordas para eliminar os cantos e os ângulos agudos. A operação de chanfro cria uma superfície regular entre duas faces, enquanto o arredondamento é mesclado entre as faces para manter a tangência.

  1. Cubo sólido

  2. Cubo chanfrado

  3. Cubo arredondado

Operações booleanas

As operações booleanas de sólidos são métodos para combinar dois ou mais sólidos. Uma única operação booleana significa realizar quatro operações:

  1. Fazer interseção de dois ou mais objetos.

  2. Dividir os objetos nas interseções.

  3. Excluir as partes indesejadas da geometria.

  4. Unir tudo novamente.

Isso faz com que os booleanos de sólidos sejam um processo eficaz para economizar tempo. Existem três operações booleanas de sólidos que distinguem quais partes da geometria são mantidas.

  1. União: remove as partes sobrepostas dos sólidos e une-as em um único sólido.

  2. Diferença: subtrai um sólido de outro. O sólido a ser subtraído é chamado de ferramenta. Observe que é possível alternar qual sólido é a ferramenta para manter o volume inverso.

  3. Interseção: mantém somente o volume de interseção dos dois sólidos.

Além dessas três operações, o Dynamo tem os nós Solid.DifferenceAll e Solid.UnionAll para executar operações de diferença e união com vários sólidos.

  1. UnionAll: operação de união com esfera e cones virados para fora

  2. DifferenceAll: operação de diferença com esfera e cones virados para dentro

Estudo de caso do pacote – Kit de ferramentas de malha

O Kit de ferramentas de malha do Dynamo fornece ferramentas para importar malhas de formatos de arquivos externos, para criar uma malha com base nos objetos de geometria do Dynamo e para criar manualmente malhas de acordo com seus vértices e índices. A biblioteca também fornece ferramentas para modificar malhas, reparar malhas ou extrair camadas horizontais para uso na fabricação.

O Kit de ferramentas de malha do Dynamo faz parte da pesquisa contínua sobre malhas da Autodesk e, como tal, continuará a crescer nos próximos anos. Pode contar com o aparecimento frequente de novos métodos no kit de ferramentas. Sinta-se à vontade para entrar em contato com a equipe do Dynamo com comentários, bugs e sugestões de novos recursos.

Malhas vs. sólidos

O exercício abaixo demonstra algumas operações básicas de malha usando o Kit de ferramentas de malha. No exercício, intersecionamos uma malha com uma série de planos, que podem ser computacionalmente caros usando sólidos. Ao contrário de um sólido, uma malha tem uma “resolução” definida e não é definida matematicamente, e sim topologicamente, sendo possível definir essa resolução com base na tarefa em questão. Para obter mais detalhes sobre as relações entre malhas e sólidos, consulte o capítulo neste manual. Para uma análise mais completa do Kit de ferramentas de malha, consulte a Vamos analisar o pacote no exercício abaixo.

Instalar o Kit de ferramentas de malha

No Dynamo, vá para Pacotes > Package Manager... na barra de menus superior. No campo de pesquisa, digite MeshToolkit, uma única palavra. Clique em Instalar e aceite as confirmações para iniciar o download. É tão simples quanto isso.

Exercício: Interseção de malha

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Neste exemplo, vamos analisar o nó Intersect no kit de ferramentas de malha. Vamos importar uma malha e intersecioná-la com uma série de planos de entrada para criar fatias. Esse é o ponto inicial para preparar o modelo para fabricação de um cortador a laser, um cortador a jato de água ou uma fresa CNC.

Para começar, abra Mesh-Toolkit_Intersect-Mesh.dyn in Dynamo.

  1. Caminho do arquivo: localize o arquivo de malha a ser importado (stanford_bunny_tri.obj). Os tipos de arquivo suportados são .mix e .obj

  2. Mesh.ImportFile: conecte o caminho do arquivo para importar a malha

  1. Point.ByCoordinates: crie um ponto, ele será o centro de um arco.

  2. Arc.ByCenterPointRadiusAngle: crie um arco em torno do ponto. Essa curva será usada para posicionar uma série de planos. __ As configurações são as seguintes: __ radius: 40, startAngle: -90, endAngle:0

Crie uma série de planos orientados ao longo do arco.

  1. Bloco de código: crie 25 números entre 0 e 1.

  2. Curve.PointAtParameter: conecte o arco à entrada “curva” e a saída do bloco de código à entrada “parâmetro” para extrair uma série de pontos ao longo da curva.

  3. Curve.TangentAtParameter: conecte as mesmas entradas do nó anterior.

  4. Plane.ByOriginNormal: conecte os pontos à entrada “origem” e os vetores à entrada “normal” para criar uma série de planos em cada ponto.

Em seguida, usaremos esses planos para fazer a interseção com a malha.

  1. Mesh.Intersect: faça a interseção dos planos com a malha importada, criando uma série de contornos de policurvas. Clique com o botão direito do mouse em Nó e defina a amarra como a mais longa

  2. PolyCurve.Curves: divida as policurvas em seus fragmentos de curva.

  3. Curve.EndPoint: extraia os pontos finais de cada curva.

  4. NurbsCurve.ByPoints: use os pontos para criar uma curva Nurbs. Use um nó Booleano definido como True para fechar as curvas.

Antes de continuar, desative a visualização de alguns dos nós, como: Mesh.ImportFile, Curve.EndPoint, Plane.ByOriginNormal e Arc.ByCenterPointRadiusAngle para ver melhor o resultado.

  1. Surface.ByPatch: crie as correções de superfícies para cada contorno para criar “fatias” da malha.

Adicione um segundo conjunto de fatias para obter um efeito waffle/caixa de ovos.

Você pode ter notado que as operações de intersecção são calculadas mais rapidamente com uma malha do que com um sólido comparável. Fluxos de trabalho como o demonstrado neste exercício ajudam a trabalhar com malhas.

Transformações de conversão, de rotação e outras

Determinados objetos de geometria podem ser criados explicitamente especificando as coordenadas x, y e z no espaço tridimensional. Mais frequentemente, no entanto, a geometria é movida para sua posição final usando transformações geométricas no próprio objeto ou em seu CoordinateSystem subjacente.

Conversão

A transformação geométrica mais simples é uma conversão, que move um objeto um número especificado de unidades nas direções x, y e z.

Rotação

Embora todos os objetos no Dynamo possam ser convertidos anexando o método .Translate ao final do nome do objeto, as transformações mais complexas exigem a transformação do objeto de um CoordinateSystem subjacente em um novo CoordinateSystem. Por exemplo, para rotacionar um objeto 45° em torno do eixo x, vamos transformar o objeto de seu CoordinateSystem existente sem rotação em um CoordinateSystem que foi rotacionado 45° em torno do eixo x com o método .Transform:

Dimensionar

Além de serem convertidos e rotacionados, também é possível criar os CoordinateSystems com escala ou cisalhamento. Um CoordinateSystem pode ser dimensionado com o método .Scale:

Os CoordinateSystems de cisalhamento são criados inserindo vetores não ortogonais no construtor CoordinateSystem.

A escala e o cisalhamento são, comparativamente, transformações geométricas mais complexas do que a rotação e a conversão, de modo que nem todos os objetos do Dynamo podem sofrer essas transformações. A tabela a seguir descreve quais objetos do Dynamo podem ter CoordinateSystems com escala não uniforme e CoordinateSystems com cisalhamento.

Classe
CoordinateSystem com escala não uniforme
CoordinateSystem com cisalhamento
5KB
UV-CustomNode.zip
archive
Superfícies
232KB
Roads_CorridorBlockRefs (1).dyn
54MB
Roads_CorridorBlockRefs.dwg
12KB
LightPoles.xlsx
Dicionários no Dynamo
Vetor, plano e sistema de coordenadas
Blocos de código e DesignScript
Interface do usuário
Dynamo Player
Estrutura da tabela de arquivos do Excel
Importação de dados do Excel para o Dynamo
Colocar os dados do Excel em um dicionário
Recuperação de dados do dicionário
Obtenção dos sistemas de coordenadas ao longo das linhas de recurso do corredor
Obtenção das definições de bloco que desejamos do documento
Criação das referências de bloco no espaço do modelo
Realização de atualizações no arquivo do Excel e visualização rápida dos resultados no Civil 3D
Execução do gráfico usando o Reprodutor do Dynamo e visualização dos resultados no Civil 3D
Visualização da geometria do corredor no Dynamo
5MB
Revit-Documenting.zip
archive
desvio
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Geometria do projeto computacional
página Wiki do Dynamo.
159KB
MeshToolkit.zip
archive
// create a point at x = 1, y = 2, z = 3
p = Point.ByCoordinates(1, 2, 3);

// translate the point 10 units in the x direction,
// -20 in y, and 50 in z
// p2’s new position is x = 11, y = -18, z = 53
p2 = p.Translate(10, -20, 50);
cube = Cuboid.ByLengths(CoordinateSystem.Identity(),
    10, 10, 10);

new_cs = CoordinateSystem.Identity();
new_cs2 = new_cs.Rotate(Point.ByCoordinates(0, 0),
    Vector.ByCoordinates(1,0,0.5), 25);

// get the existing coordinate system of the cube
old_cs = CoordinateSystem.Identity();

cube2 = cube.Transform(old_cs, new_cs2);
cube = Cuboid.ByLengths(CoordinateSystem.Identity(),
    10, 10, 10);

new_cs = CoordinateSystem.Identity();
new_cs2 = new_cs.Scale(20);

old_cs = CoordinateSystem.Identity();

cube2 = cube.Transform(old_cs, new_cs2);
new_cs = CoordinateSystem.ByOriginVectors(
    Point.ByCoordinates(0, 0, 0),
	Vector.ByCoordinates(-1, -1, 1),
	Vector.ByCoordinates(-0.4, 0, 0));

old_cs = CoordinateSystem.Identity();

cube = Cuboid.ByLengths(CoordinateSystem.Identity(),
    5, 5, 5);

new_curves = cube.Transform(old_cs, new_cs);

Arco

No

Não

NurbsCurve

Sim

Sim

NurbsSurface

No

Não

Círculo

No

Não

Linha

Sim

Sim

Plano

No

Não

Ponto

Sim

Sim

Polígono

No

Não

Sólido

No

Não

Superfície

No

Não

Texto

No

Não

sólidos
operações booleanas
8KB
Geometry for Computational Design - Solids.dyn
Nós e fios
Sólidos
Topologia
Help
Computational Design for Civil Engineers | Autodesk University
Underground Utility GIS Features to Civil 3D Pipe Networks with Dynamo | Autodesk University
Getting Started with Dynamo for Civil 3D: A Beginner’s Guide | Autodesk University
Dynamo in Civil 3D Introduction—Unlocking the Mystery of Scripting | Autodesk University
Dynamo for Civil3D – Huiz.Net
Dynamo for Civil 3D: Automated Checks of Open-Format Road Design Made Easy | Autodesk University
Mundane Civil 3D Tasks to Automate with Dynamo for Civil 3D | Autodesk University
Civil 3D and Dynamo—Dynamic Culvert Design and Analysis | Autodesk University
Logo
Logo
Computational modeling linear structure with Civil 3D, Revit & Dynamo CivilConnection | Autodesk University
GitHub - mzjensen/Camber: An open-source Dynamo package for Civil 3D.GitHub
Parametric modeling and automating the placement of Universal TBM Rings | Autodesk University
Arkance Systems Node Library for Civil 3D DynamoHuizBlog
Civil 3D Toolkit Feedback threadDynamo
Arkance Systems Node Library Feedback ThreadDynamo
GitHub - Autodesk/civilconnection: CivilConnection enables the exchange of information between Civil 3D, Dynamo and Revit.GitHub
Camber Feedback ThreadDynamo
Supercharge Your Dynamo Graph with Civil 3D Toolkit | Autodesk University
Logo

Dados

Os dados são a matéria dos nossos programas. Eles percorrem os fios, fornecendo entradas para os nós onde são processados em uma nova forma de dados de saída. Vamos revisar a definição de dados, como eles são estruturados e começar a usá-los no Dynamo.

O que são os dados?

Os dados são um conjunto de valores de variáveis qualitativas ou quantitativas. A forma mais simples de dados são os números como 0, 3.14 ou 17. Mas os dados também podem ser de diferentes tipos: uma variável representando a alteração de números (height); caracteres (myName); geometria (Circle); ou uma lista de itens de dados (1,2,3,5,8,13,...).

No Dynamo, adicionamos dados às portas de entrada dos nós. Podemos ter dados sem ações, mas precisamos de dados para processar as ações que nossos nós representam. Quando adicionamos um nó ao espaço de trabalho, se ele não tiver nenhuma entrada fornecida, o resultado será uma função, e não o resultado da própria ação.

Dados e ações
  1. Dados simples

  2. Dados e ações (nó A) executados com êxito

  3. A ação (nó A) sem entradas de dados retorna uma função genérica

Null – Ausência de dados

Cuidado com os nós Nulls O tipo 'null' representa a ausência de dados. Embora seja um conceito abstrato, provavelmente ele aparecerá ao trabalhar com a programação visual. Se uma ação não criar um resultado válido, o nó retornará nulo.

Testar para verificar se existem nulos e a sua remoção da estrutura de dados é uma parte crucial para criar programas robustos.

Ícone
Nome/sintaxe
Entradas
Saídas

Object.IsNull

obj

bool

Estruturas de dados

Quando estamos fazendo a programação visual, podemos gerar muitos dados muito rapidamente e necessitar de um meio para gerenciar sua hierarquia. Essa é a função das estruturas de dados, os esquemas organizacionais nos quais armazenamos dados. As especificidades das estruturas de dados e de como usá-las variam conforme a linguagem de programação usada.

No Dynamo, adicionamos hierarquia aos nossos dados através das listas. Vamos explorar isso em profundidade em capítulos posteriores. Para já, vamos começar de forma simples:

Uma lista representa um conjunto de itens colocados em uma estrutura de dados:

  • Tenho cinco dedos (itens) na minha mão (lista).

  • Há dez casas (itens) na minha rua (lista).

Discriminação da lista
  1. Um nó Sequência de números define uma lista de números usando as entradas início, quantidade e etapa. Com esses nós, criamos duas listas separadas de dez números, uma que vai de 100 a 109 e outra que vai de 0 a 9.

  2. O nó List.GetItemAtIndex seleciona um item de uma lista em um índice específico. Escolhendo 0, obtemos o primeiro item da lista (100 neste caso).

  3. Aplicando o mesmo processo à segunda lista, obtemos um valor de 0, o primeiro item da lista.

  4. Agora, mesclamos as duas listas em uma usando o nó List.Create. Observe que o nó cria uma lista de listas. Isso altera a estrutura dos dados.

  5. Usando List.GetItemAtIndex novamente, com o índice definido como 0, obtemos a primeira lista na lista de listas. Isso é o que significa tratar uma lista como um item, o que é um pouco diferente de outras linguagens de script. Nos capítulos posteriores, aprofundaremos mais nos temas de manipulação de listas e estrutura de dados.

O conceito-chave para entender a hierarquia dos dados no Dynamo: em relação à estrutura de dados, as listas são consideradas itens. Ou seja, o Dynamo funciona com um processo descendente para compreender as estruturas dos dados. O que isso significa? Vamos analisar isso com um exemplo.

Exercício: Usar dados para criar uma cadeia de cilindros

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

12KB
Building Blocks of Programs - Data.dyn

Neste primeiro exemplo, montamos um cilindro com camadas que percorre a hierarquia da geometria discutida nesta seção.

Parte I: Configurar o gráfico para um cilindro com alguns parâmetros alteráveis.

1. Adicionar Point.ByCoordinates – após adicionarmos o nó à tela, vemos um ponto na origem da grade de visualização do Dynamo. Os valores padrão das entradas x,y e z são 0,0, especificando um ponto nesse local.

2. Plane.ByOriginNormal – a próxima etapa na hierarquia da geometria é o plano. Existem diversas maneiras de construir um plano, e estamos usando uma origem e um normal para a entrada. A origem é o nó de ponto criado na etapa anterior.

Vector.ZAxis – esse é um vetor unificado na direção z. Observe que não há entradas, somente um vetor de valor [0,0,1]. Usamos isso como a entrada normal para o nó Plane.ByOriginNormal. Isso nos fornece um plano retangular na visualização do Dynamo.

3. Circle.ByPlaneRadius – subindo na hierarquia, agora criamos uma curva com base no plano da etapa anterior. Após a conexão ao nó, obtemos um círculo na origem. O raio padrão no nó é o valor de 1.

4. Curve.Extrude – agora vamos fazer isso surgir fornecendo alguma profundidade e entrando na terceira dimensão. Esse nó cria uma superfície com base na curva por meio de extrusão. A distância padrão no nó é 1 e devemos ver um cilindro na viewport.

5. Surface.Thicken – esse nó fornece um sólido fechado deslocando a superfície por uma determinada distância e fechando a forma. O valor padrão da espessura é 1 e vemos um cilindro com camadas na viewport em linha com esses valores.

6. Controle deslizante de número – em vez de usar os valores padrão para todas essas entradas, vamos adicionar um controle paramétrico ao modelo.

Edição de domínio – após adicionar o controle deslizante de número à tela, clique no acento circunflexo no canto superior esquerdo para exibir as opções de domínio.

Mín/Máx/Etapa – altere os valores mín, máx e etapa para 0,2 e 0,01 respectivamente. Estamos fazendo isso para controlar o tamanho da geometria geral.

7. Controles deslizantes de número – em todas as entradas padrão, vamos copiar e colar esse controle deslizante de número (selecione o controle deslizante, pressione Ctrl+C e, em seguida, Ctrl+V) diversas vezes, até que todas as entradas com padrões tenham um controle deslizante. Alguns dos valores do controle deslizante terão que ser maiores que zero para que a definição funcione (isto é, você precisa de uma profundidade de extrusão para que uma superfície se torne mais espessa).

8. Acabamos de criar um cilindro paramétrico com camadas com esses controles deslizantes. Tente flexibilizar alguns desses parâmetros e veja a atualização da geometria dinamicamente na viewport do Dynamo.

Controles deslizantes de número – aprofundando isso um pouco mais, adicionamos muitos controles deslizantes à tela e precisamos limpar a interface da ferramenta que acabamos de criar. Clique com o botão direito do mouse em um controle deslizante, selecione “Renomear...” e altere cada controle deslizante com o nome apropriado para seu parâmetro (espessura, raio, altura etc.).

Parte II: Preencher uma matriz de cilindros com base na Parte I

9. Acabamos de criar um item incrível de cilindro que aumenta de espessura. Esse é um objeto atualmente, vamos analisar como criar uma matriz de cilindros que permanece vinculada de forma dinâmica. Para fazer isso, criaremos uma lista de cilindros, em vez de trabalhar com um único item.

Adição (+) – nosso objetivo é adicionar uma linha de cilindros ao lado do cilindro que criamos. Se desejarmos adicionar um cilindro adjacente ao atual, precisaremos considerar o raio do cilindro e a espessura de sua camada. Obtemos esse número adicionando os dois valores dos controles deslizantes.

10. Essa etapa é mais complicada, portanto, vamos explicá-la devagar: o objetivo final é criar uma lista de números que definem as localizações de cada cilindro em uma linha.

a. Multiplicação ð primeiro, desejamos multiplicar o valor da etapa anterior por 2. O valor da etapa anterior representa um raio e desejamos mover o cilindro ao longo de todo o diâmetro.

b. Sequência de números – criamos uma matriz de números com esse nó. A primeira entrada é o nó_multiplicação_ da etapa anterior para o valor etapa. É possível definir o valor inicial como 0,0 usando um nó de número.

c. Controle deslizante de número inteiro – para o valor quantidade, conectamos um controle deslizante de número inteiro. Isso definirá quantos cilindros são criados.

d. Saída – essa lista mostra a distância de movimentação de cada cilindro na matriz, e é orientada parametricamente pelos controles deslizantes originais.

11. Essa etapa é muito simples: conecte a sequência definida na etapa anterior à entrada x do Point.ByCoordinates original. Isso substituirá o controle deslizante pointX, que pode ser excluído. Agora, vemos uma matriz de cilindros na viewport (certifique-se de que o controle deslizante de número inteiro seja maior que 0).

12. A cadeia de cilindros ainda está dinamicamente vinculada a todos os controles deslizantes. Flexibilize cada controle deslizante para assistir à atualização da definição.

Selecionar

Selecionar os elementos do Revit

O Revit é um ambiente com abundância de dados. Isso nos dá uma gama de capacidades de seleção que se expande muito além de “apontar e clicar”. Podemos consultar o banco de dados do Revit e vincular dinamicamente os elementos do Revit à geometria do Dynamo durante a execução de operações paramétricas.

A biblioteca do Revit na interface do usuário oferece uma categoria “Seleção” que possibilita várias maneiras de selecionar a geometria.

Hierarquia do Revit

Para selecionar os elementos do Revit corretamente, é importante ter um entendimento completo da hierarquia de elementos do Revit. Deseja selecionar todas as paredes em um projeto? Selecione por categoria. Deseja selecionar todas as cadeiras Eames em seu lobby moderno de meados do século? Selecione por família.

Vamos fazer uma rápida revisão da hierarquia do Revit.

Você se lembra da taxonomia da biologia? Reino, Filo, Classe, Ordem, Família, Gênero, Espécie? Os elementos do Revit são categorizados de forma similar. Em um nível básico, é possível dividir a hierarquia do Revit em Categorias, Famílias, Tipos* e Instâncias. Uma instância é um elemento de modelo individual (com uma ID exclusiva), enquanto uma categoria define um grupo genérico (como “paredes” ou “pisos”). Com o banco de dados do Revit organizado dessa forma, é possível selecionar um elemento e escolher todos os elementos similares com base em um nível especificado na hierarquia.

*Os tipos no Revit são definidos de forma diferente dos tipos na programação. No Revit, um tipo se refere a uma ramificação da hierarquia, em vez de um “tipo de dados”.

Navegação no banco de dados com os nós do Dynamo

As três imagens abaixo mostram as categorias principais para a seleção de elementos do Revit no Dynamo. Essas são ótimas ferramentas para usar em combinação, e vamos explorar algumas delas nos exercícios seguintes.

Apontar e clicar é a forma mais fácil de selecionar diretamente um elemento do Revit. É possível selecionar um elemento do modelo completo ou partes de sua topologia (como uma face ou uma aresta). Isso permanece vinculado dinamicamente ao objeto do Revit. Portanto, quando o arquivo do Revit atualizar sua localização ou parâmetros, o elemento do Dynamo referenciado será atualizado no gráfico.

Os menus suspensos criam uma lista de todos os elementos acessíveis em um projeto do Revit. É possível usar essa opção para referenciar elementos do Revit que não são necessariamente visíveis em uma vista. Essa é uma ótima ferramenta para consultar elementos existentes ou criar novos em um projeto do Revit ou em um editor de família.

![](../.gitbook/assets/selecting _database_navigation_with_dynamo_nodes_02.png)

Também é possível selecionar o elemento do Revit por camadas específicas na hierarquia do Revit. Essa é uma opção eficaz para personalizar grandes matrizes de dados na preparação da documentação ou da instanciação generativa e personalização.

IU

Com as três imagens acima em mente, vamos nos aprofundar em um exercício que seleciona elementos de um projeto básico do Revit na preparação para os aplicativos paramétricos que criaremos nas seções restantes deste capítulo.

Exercício

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

5MB
Revit-Selecting.zip
archive

Neste arquivo de exemplo do Revit, temos três tipos de elementos de uma construção simples. Usaremos isso como exemplo para selecionar elementos do Revit no contexto da hierarquia do Revit.

  1. Massa de construção

  2. Vigas (Framing estrutural)

  3. Treliças (componentes adaptativos)

Quais conclusões podemos tirar dos elementos atualmente na vista do projeto do Revit? E a que distância da hierarquia precisamos ir para selecionar os elementos apropriados? Isso, é claro, se tornará uma tarefa mais complexa ao trabalhar em um projeto grande. Há muitas opções disponíveis: é possível selecionar elementos por categorias, níveis, famílias, instâncias etc.

Selecionar a massa e as superfícies

  1. Como estamos trabalhando com uma configuração básica, vamos selecionar a massa da construção escolhendo “Massa” no nó suspenso Categorias. Isso pode ser encontrado na guia Seleção do Revit.

  2. A saída da categoria Massa é apenas a própria categoria. Precisamos selecionar os elementos. Para fazer isso, usamos o nó “Todos os elementos da categoria”.

Neste ponto, observe que não vemos nenhuma geometria no Dynamo. Selecionamos um elemento do Revit, mas não convertemos o elemento na geometria do Dynamo. Essa é uma separação importante. Se você selecionasse um grande número de elementos, não seria uma boa ideia visualizá-los no Dynamo, pois isso deixaria o sistema inteiro lento. O Dynamo é uma ferramenta para gerenciar um projeto do Revit sem executar necessariamente operações de geometria, e vamos examinar isso na próxima seção deste capítulo.

Neste caso, estamos trabalhando com geometria simples, por isso queremos trazer a geometria para a visualização do Dynamo. Há um número verde ao lado de “BldgMass” no nó de inspeção acima. Isso representa a ID do elemento e nos informa que estamos lidando com um elemento do Revit, não com a geometria do Dynamo. A próxima etapa é converter esse elemento do Revit em geometria no Dynamo.

  1. Usando o nó Element.Faces, obtemos uma lista de superfícies que representam cada face da massa do Revit. Agora, podemos ver a geometria na viewport do Dynamo e começar a referenciar a face para operações paramétricas.

Veja a seguir um método alternativo. Nesse caso, estamos deixando de lado a seleção através da hierarquia do Revit (“Todos os elementos da categoria”) e optando por selecionar explicitamente a geometria no Revit.

  1. Usando o nó “Selecionar o elemento do modelo”, clique no botão *“selecionar” *(ou “alterar”). Na viewport do Revit, selecione o elemento desejado. Neste caso, estamos selecionando a massa da construção.

  2. Em vez de Element.Faces, é possível selecionar a massa completa como uma geometria sólida usando Element.Geometry. Isso seleciona toda a geometria contida naquela massa.

  3. Usando Geometry.Explode, podemos obter a lista de superfícies novamente. Esses dois nós funcionam da mesma forma que Element.Faces, mas oferecem opções alternativas para examinar a geometria de um elemento do Revit.

Usando algumas operações básicas de lista, podemos consultar uma face de interesse.

![](images/2/selecting - exercise 05.jpg)

  1. Primeiro, gere os elementos selecionados anteriormente para o nó Element.Faces.

  2. Em seguida, use o nó List.Count que revela que estamos trabalhando com 23 superfícies na massa.

  3. Referenciando esse número, alteramos o Valor máximo de um controle deslizante de número inteiro para “22”.

  4. Usando List.GetItemAtIndex, inserimos as listas e o controle deslizante de número inteiro para o índice. Deslizando a seleção, paramos quando chegamos ao índice 9 e isolamos a fachada principal que hospeda as treliças.

A etapa anterior era um pouco complicada. Podemos fazer isso muito mais rápido com o nó “Selecionar face”. Isso nos permite isolar uma face que não é um elemento em si no projeto do Revit. Aplica-se a mesma interação como em “Selecionar o elemento do modelo”, exceto pelo fato de que selecionamos a superfície em vez do elemento completo.

Suponha que desejamos isolar as paredes da fachada principal do edifício. É possível usar o nó “Selecionar faces” para fazer isso. Clique no botão “Selecionar” e, em seguida, selecione as quatro fachadas principais no Revit.

Após selecionar as quatro paredes, clique no botão “Concluir” no Revit.

As faces são importadas para o Dynamo como superfícies.

Selecionar vigas

Agora, vamos analisar as vigas sobre o átrio.

  1. Use o nó “Selecionar o elemento do modelo” para selecionar uma das vigas.

  2. Conecte o elemento de viga ao nó Element.Geometry. Agora, temos a viga na viewport do Dynamo.

  3. É possível aumentar o zoom na geometria com um nó Watch3D (se você não visualizar a viga no nó de Inspeção 3D, clique com o botão direito do mouse e pressione “zoom para ajustar”).

Uma pergunta que pode surgir frequentemente nos fluxos de trabalho do Revit/Dynamo: como posso selecionar um elemento e obter todos os elementos similares? Como o elemento selecionado do Revit contém todas as suas informações hierárquicas, podemos consultar seu tipo de família e selecionar todos os elementos daquele tipo.

  1. Conecte o elemento de viga a um nó Element.ElementType.

  2. O nó de Inspeção revela que a saída é agora um símbolo de família, em vez de um elemento do Revit.

  3. Element.ElementType é uma consulta simples; portanto, podemos fazer isso no bloco de código com a mesma facilidade que com x.ElementType; e obter os mesmos resultados.

  1. Para selecionar as vigas restantes, usaremos o nó “Todos os elementos do tipo de família”.

  2. O nó de inspeção mostra que selecionamos cinco elementos do Revit.

  1. Também podemos converter todos esses cinco elementos para a geometria do Dynamo.

E se tivéssemos 500 vigas? A conversão de todos esses elementos na geometria do Dynamo seria muito lenta. Se o Dynamo estiver demorando muito para calcular os nós, será recomendável usar a funcionalidade do nó “congelar” para pausar a execução das operações do Revit enquanto desenvolve o gráfico. Para obter mais informações sobre o congelamento de nós, consulte a seção “Congelar” no capítulo de sólidos.

Em qualquer caso, se precisarmos importar 500 vigas, precisaremos de todas as superfícies para executar a operação paramétrica prevista? Ou podemos extrair informações básicas das vigas e executar tarefas gerativas com a geometria fundamental? Essa é uma pergunta que vamos ter em mente, à medida que avançamos neste capítulo. Por exemplo, em seguida, vamos analisar o sistema de treliça.

Selecionar as treliças

Usando o mesmo gráfico de nós, selecione o elemento de treliça ao invés do elemento de viga. Antes de fazer isso, exclua Element.Geometry da etapa anterior.

Em seguida, estamos prontos para extrair algumas informações básicas do tipo de família de treliças.

  1. No nó Inspeção, podemos ver que temos uma lista de componentes adaptativos selecionados no Revit. Queremos extrair as informações básicas; por isso, começamos com os pontos adaptativos.

  2. Conecte o nó “Todos os elementos do tipo de família” ao nó "AdaptiveComponent.Location". Isso nos fornece uma lista de listas, cada uma com três pontos que representam as localizações dos pontos adaptativos.

  3. A conexão de um nó "Polygon.ByPoints" retorna uma policurva. Podemos ver isso na viewport do Dynamo. Com esse método, visualizamos a geometria de um elemento e abstraímos a geometria da matriz restante dos elementos (que pode ser maior em número do que este exemplo).

Dica: Se você clicar no número verde de um elemento do Revit no Dynamo, a viewport do Revit efetuará o zoom para aquele elemento.

Posicionamento de serviço

O projeto de engenharia de uma construção habitacional típica envolve o trabalho com várias concessionárias subterrâneas, como esgoto sanitário, drenagem de águas pluviais, água potável ou outras. Este exemplo demonstrará como o Dynamo pode ser usado para desenhar as conexões de serviço de uma linha principal de distribuição até um determinada subdivisão de propriedade (por exemplo, um lote). É comum que todos os lotes exijam uma conexão de serviço, o que introduz um trabalho tedioso significativo para colocar todos os serviços. O Dynamo pode acelerar o processo desenhando automaticamente a geometria necessária com precisão, além de fornecer entradas flexíveis que podem ser ajustadas para se adequarem às normas de órgãos locais.

Objetivo

🎯 Colocar referências de bloco do medidor de serviço de água em deslocamentos especificados de uma linha do lote e desenhar uma linha para cada conexão de serviço perpendicular à linha principal de distribuição.

Principais conceitos

  • Usar o nó Selecionar objeto para a entrada do usuário

  • Trabalhar com sistemas de coordenadas

  • Usar operações geométricas como Geometry.DistanceTo e Geometry.ClosestPointTo

  • Criar referências de bloco

  • Controlar as configurações de vinculação de objetos

Compatibilidade de versão

Este gráfico será executado no Civil 3D 2020 e versões superiores.

Conjunto de dados

Comece fazendo o download dos arquivos de amostra abaixo e, em seguida, abrindo o arquivo DWG e o gráfico do Dynamo.

108KB
Land_ServicePlacement.dyn
842KB
Land_ServicePlacement.dwg

Solução

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

  1. Obter a geometria da curva para a linha principal de distribuição

  2. Obter a geometria da curva para uma linha do lote selecionada pelo usuário, revertendo se necessário

  3. Gerar os pontos de inserção para os medidores de serviço

  4. Obter os pontos na linha principal de distribuição que estão mais próximos das localizações do medidor de serviço

  5. Criar referências de bloco e linhas no espaço do modelo

Vamos começar

Obter a geometria principal de distribuição

Nossa primeira etapa é obter a geometria da linha de distribuição principal no Dynamo. Em vez de selecionar linhas individuais ou polilinhas, vamos obter todos os objetos em uma determinada camada e uni-los como uma PolyCurve do Dynamo.

Se a geometria da curva do Dynamo for nova para você, veja a seção Curvas.

Obtenção dos objetos do Civil 3D e união de tudo em uma única PolyCurve

Obter a geometria da linha do lote

Em seguida, precisamos colocar a geometria de uma linha do lote selecionada no Dynamo para que possamos trabalhar com ela. A ferramenta certa para o trabalho é o nó Selecionar objeto, que permite que o usuário do gráfico selecione um objeto específico no Civil 3D.

Também precisamos lidar com um possível problema que surja. A linha do lote tem um ponto inicial e um ponto final, o que significa que ela tem uma direção. Para que o gráfico produza resultados consistentes, precisamos que todas as linhas do lote tenham uma direção consistente. Podemos levar em conta essa condição diretamente na lógica do gráfico, o que torna o gráfico mais resiliente.

Seleção de uma linha do lote e certificação de que ela tenha a direção correta
  1. Obtenha os pontos inicial e final da linha do lote.

  2. Meça a distância de cada ponto até a linha principal de distribuição e, em seguida, descubra qual distância é maior.

  3. O resultado desejado é que o ponto inicial da linha seja o mais próximo da linha principal de distribuição. Se esse não for o caso, invertemos a direção da linha do lote. Caso contrário, simplesmente retornaremos a linha do lote original.

Gerar pontos de inserção

É hora de descobrir onde os medidores de serviço serão colocados. Normalmente, a colocação é determinada pelos requisitos de órgãos locais; portanto, forneceremos valores de entrada que podem ser alterados para atender a várias condições. Vamos usar um Sistema de coordenadas ao longo da linha do lote como referência para criar os pontos. Isso torna muito fácil a definição de deslocamentos relativos à linha do lote, não importando sua orientação.

Se os sistemas de coordenadas forem algo novo para você, veja a seção Vetor, plano e sistema de coordenadas.

Criação de pontos de inserção para os medidores de serviço

Obter os pontos de conexão

Agora precisamos obter os pontos na linha principal de distribuição que estão mais próximos da localizações do medidor de serviço Isso nos permitirá desenhar as conexões de serviço no espaço do modelo para que elas sempre sejam perpendiculares à linha principal de distribuição. O nó Geometry.ClosestPointTo é a solução perfeita.

Obtenção de pontos perpendiculares na linha principal de distribuição
  1. Essa é a PolyCurve da linha principal de distribuição

  2. Esses são os pontos de inserção do medidor de serviço

Criar objetos

A última etapa é efetivamente criar objetos no espaço do modelo. Usaremos os pontos de inserção que geramos anteriormente para criar referências de bloco e, em seguida, usaremos os pontos na linha principal de distribuição para desenhar linhas para as conexões de serviço.

Resultado

Quando você executar o gráfico, deverá ver novas referências de bloco e linhas de conexão de serviço no espaço do modelo. Tente alterar algumas das entradas e veja como tudo é atualizado automaticamente.

Ajuste dos parâmetros de entrada no Dynamo e visualização imediata dos resultados no Civil 3D

Bônus: ativar a colocação sequencial

Você pode observar que, após colocar os objetos para uma linha do lote, selecionar uma linha do lote diferente resulta na “movimentação” dos objetos.

Comportamento quando a vinculação de objetos está ativada

Esse é o comportamento padrão do Dynamo e é muito útil em muitos casos. No entanto, você pode achar conveniente colocar várias conexões de serviço sequencialmente e fazer com que o Dynamo crie novos objetos a cada execução em vez de modificar os originais. É possível controlar esse comportamento ao alterar as configurações de vinculação de objetos.

Configurações da vinculação de objetos do Dynamo

Veja a seção Vinculação de objetos para obter mais informações.

Alterar essa configuração forçará o Dynamo a “esquecer” os objetos que cria a cada execução. Veja a seguir um exemplo de como executar o gráfico com a vinculação de objetos desativada usando o Reprodutor do Dynamo.

Execução do gráfico usando o Reprodutor do Dynamo e visualização dos resultados no Civil 3D

Se o Reprodutor do Dynamo for algo novo para você, veja a seção Dynamo Player.

🎉 Missão cumprida.

Ideias

Veja a seguir algumas ideias sobre como você pode expandir os recursos desse gráfico.

Coloque várias conexões de serviço simultaneamente em vez de selecionar cada linha do lote.

Ajuste as entradas para colocar limpeza de esgoto em vez de medidores de serviço de água.

Adicione um botão de alternância para permitir a colocação de uma única conexão de serviço em um lado específico da linha do lote em vez de em ambos os lados.

Lógica

A Lógica ou, mais especificamente, a Lógica condicional, permite especificar uma ação ou conjunto de ações com base em um teste. Após avaliar o teste, teremos um valor booleano que representa True ouFalse, que podemos usar para controlar o fluxo do programa.

Booleanos

As variáveis numéricas podem armazenar um intervalo completo de números diferentes. As variáveis booleanas somente podem armazenar dois valores referidos como True ou False, Yes ou No, 1 ou 0. Raramente usamos operações booleanas para realizar cálculos devido ao seu intervalo limitado.

Declarações condicionais

A declaração “If” é um conceito-chave em programação: “se isso for verdadeiro, aquilo acontecerá; caso contrário, outra coisa acontecerá. A ação resultante da declaração é controlada por um valor booleano. Há várias maneiras de definir uma declaração “If” no Dynamo:

Ícone
Nome (Sintaxe)
Entradas
Saídas

Se (If)

teste, true, false

resultado

Bloco de código ((x?y:z);)

x? y, z

resultado

Vamos examinar um breve exemplo de cada um desses três nós em ação usando a declaração condicional “Se”.

Nessa imagem, o valor booleano está definido como true, o que significa que o resultado é uma sequência de caracteres com a inscrição: “this is the result if true” (esse será o resultado se for verdadeiro). Os três nós que criam a declaração If estão funcionando de forma idêntica aqui.

Novamente, os nós estão funcionando de forma idêntica. Se o valor booleano for alterado para false, nosso resultado será o número Pi, conforme definido na declaração If original.

Exercício: Lógica e geometria

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

73KB
Building Blocks of Programs - Logic.dyn

Parte I: Filtrar uma lista

  1. Vamos usar a lógica para separar uma lista de números em uma lista de números pares e uma lista de números ímpares.

a. Intervalo de números – adicione um intervalo de números à tela.

b. Números – adicione três nós de número à tela. O valor para cada nó de número deve ser: 0,0 para início, 10,0 para fim e 1,0 para etapa.

c. Saída – nossa saída é uma lista de 11 números que varia entre 0 e 10.

d. Módulo (%) – Intervalo de números em x e 2,0 em y. Isso calcula o resto de cada número na lista dividida por 2. A saída dessa lista fornece uma lista de valores alternados entre 0 e 1.

e. Teste de igualdade (==) – adicione um teste de igualdade à tela. Conecte a saída módulo à entrada x e 0,0 à entrada y.

f. Inspeção – a saída do teste de igualdade é uma lista de valores que alternam entre true e false. Esses são os valores usados para separar os itens na lista. 0 (ou true) representa números pares e (1 ou false) representa números ímpares.

g. List.FilterByBoolMask – esse nó filtrará os valores em duas listas diferentes com base no booleano de entrada. Conecte o intervalo de números original à entrada lista e a saída teste de igualdade à entrada máscara. A saída in representa valores true, enquanto a saída out representa valores false.

h. Inspeção – como resultado, agora temos uma lista de números pares e uma lista de números ímpares. Usamos operadores lógicos para separar as listas em padrões.

Parte II: Da lógica à geometria

Desenvolvendo a lógica estabelecida no primeiro exercício, vamos aplicar essa configuração a uma operação de modelagem.

2. Vamos passar do exercício anterior com os mesmos nós. As únicas exceções (além da alteração do formato) são:

a. Use um nó Sequência com esses valores de entrada.

b. Desconectamos a entrada da lista in em List.FilterByBoolMask. Colocaremos esses nós de lado por enquanto, mas eles serão úteis no exercício posteriormente.

3. Vamos começar criando um grupo separado de gráficos, como mostrado na imagem acima. Esse grupo de nós representa uma equação paramétrica para definir uma curva de linha. Algumas observações:

a. O primeiro Controle deslizante de número representa a frequência da onda; deve ter um mínimo de 1, um máximo de 4 e uma etapa de 0,01.

b. O segundo Controle deslizante de número representa a amplitude da onda; deve ter um mínimo de 0, um máximo de 1 e uma etapa de 0,01.

c. PolyCurve.ByPoints – se o diagrama de nós acima for copiado, o resultado será uma curva sinusoidal na viewport de Visualização do Dynamo.

Método para as entradas: use os nós de número nas propriedades mais estáticas e os controles deslizantes de número nas mais flexíveis. Queremos manter o intervalo de números original que estávamos definindo no início desta etapa. No entanto, a curva seno criada aqui deve ter alguma flexibilidade. É possível mover esses controles deslizantes para observar a curva atualizar sua frequência e amplitude.

4. Vamos pular um pouco a definição e examinar o resultado final para que possamos fazer referência ao ponto em que estamos chegando. As duas primeiras etapas são feitas separadamente. Agora queremos conectar as duas. Usaremos a curva sinusoidal base para controlar a localização dos componentes do compactador e usaremos a lógica true/false para alternar entre caixas pequenas e caixas maiores.

a. Math.RemapRange – usando a sequência de números criada na etapa 02, vamos criar uma nova série de números remapeando o intervalo. Os números originais da etapa 01 variam entre 0 e 100. Esses números variam entre 0 e 1 nas entradas newMin e newMax, respectivamente.

5. Crie um nó Curve.PointAtParameter e, em seguida, conecte a saída Math.RemapRange da etapa 04 como sua entrada de parâmetro.

Essa etapa cria pontos ao longo da curva. Remapeamos os números de 0 a 1, pois a entrada parâmetro está procurando valores nesse intervalo. Um valor de 0 representa o ponto inicial e um valor de 1 representa os pontos finais. Todos os números entre esses valores avaliam dentro do intervalo [0,1].

6. Conecte a saída de Curve.PointAtParameter a List.FilterByBoolMask para separar a lista de índices ímpares e pares.

a. List.FilterByBoolMask – conecte Curve.PointAtParameter da etapa anterior à entrada lista.

b. Inspeção – um nó de inspeção para in e um nó de inspeção para out mostram que temos duas listas que representam índices pares e ímpares. Esses pontos estão ordenados da mesma maneira na curva, o que demonstramos na próxima etapa.

7. Em seguida, vamos usar o resultado de saída de List.FilterByBoolMask na etapa 05 para gerar geometrias com tamanhos de acordo com seus índices.

Cuboid.ByLengths – recrie as conexões vistas na imagem acima para obter um compactador ao longo da curva sinusoidal. Um cuboide é apenas uma caixa aqui, e estamos definindo seu tamanho com base no ponto da curva no centro da caixa. A lógica da divisão par/ímpar agora deve estar clara no modelo.

a. Lista de cuboides em índices pares.

b. Lista de cuboides em índices ímpares.

Pronto. Você acabou de programar um processo de definição das cotas de geometria de acordo com a operação lógica demonstrada neste exercício.

Renomear estruturas

Ao adicionar tubulações e estruturas a uma rede de tubulação, o Civil 3D usa um modelo para atribuir nomes automaticamente. Normalmente, isso é suficiente durante o posicionamento inicial, mas inevitavelmente os nomes terão que mudar no futuro à medida que o projeto evoluir. Além disso, há muitos padrões de nomenclatura diferentes que podem ser necessários, por exemplo, nomear estruturas sequencialmente em um trecho de tubulação com base na estrutura a jusante mais distante ou seguir um padrão de nomenclatura alinhado com o esquema de dados de um órgão local. Este exemplo demonstrará como o Dynamo pode ser usado para definir qualquer tipo de estratégia de nomeação e aplicá-lo de forma consistente.

Objetivo

🎯 Renomear as estruturas de rede de tubulação na ordem com base no estaqueamento de um alinhamento.

Principais conceitos

  • Trabalhar com caixas delimitadoras

  • Filtrar dados usando o nó List.FilterByBoolMask

  • Classificar os dados usando o nó List.SortByKey

  • Gerar e modificar sequências de texto

Compatibilidade de versão

Este gráfico será executado no Civil 3D 2020 e versões superiores.

Conjunto de dados

Comece fazendo o download dos arquivos de amostra abaixo e, em seguida, abrindo o arquivo DWG e o gráfico do Dynamo.

139KB
Utilities_RenameStructures.dyn
6MB
Utilities_RenameStructures.dwg

Solução

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

  1. Selecionar as estruturas por camada

  2. Obter as localizações da estrutura

  3. Filtrar as estruturas por deslocamento e, em seguida, classificá-las por estaca

  4. Gerar os novos nomes

  5. Renomear as estruturas

Vamos começar

Selecionar as estruturas

A primeira coisa que precisamos fazer é selecionar todas as estruturas com as quais planejamos trabalhar. Para fazer isso, basta selecionar todos os objetos em uma determinada camada, o que significa que podemos selecionar estruturas de diferentes redes de tubulação (presumindo que compartilhem a mesma camada).

Seleção das estruturas em uma determinada camada
  1. Esse nó assegura que não recuperemos acidentalmente quaisquer tipos de objetos indesejados que possam compartilhar a mesma camada que as estruturas.

Obter as localizações da estrutura

Agora que temos as estruturas, precisamos descobrir sua posição no espaço para que possamos classificá-las de acordo com sua localização. Para fazer isso, aproveitaremos a caixa delimitadora de cada objeto. A Caixa delimitadora de um objeto é a caixa de tamanho mínimo que contém completamente as extensões geométricas do objeto. Ao calcular o centro da caixa delimitadora, obtemos uma boa aproximação do ponto de inserção da estrutura.

Uso de caixas delimitadoras para obter o ponto de inserção aproximado de cada estrutura

Usaremos estes pontos para obter a estaca e o deslocamento das estruturas em relação a um alinhamento selecionado.

Filtrar e classificar

Neste ponto é que as coisas começam a ficar um pouco complicadas. Nesta fase, temos uma lista grande de todas as estruturas na camada que especificamos e escolhemos um alinhamento que desejamos classificar. O problema é que pode haver estruturas na lista que não queremos renomear. Por exemplo, elas podem não fazer parte do trecho específico em que estamos interessados.

  1. O alinhamento selecionado

  2. As estruturas que queremos renomear

  3. As estruturas que devem ser ignoradas

Portanto, precisamos filtrar a lista de estruturas para que não consideremos as que são maiores do que um determinado deslocamento do alinhamento. Isso é melhor realizado usando o nó List.FilterByBoolMask. Após filtrar a lista de estruturas, usamos o nó List.SortByKey para classificá-las por seus valores de estaca.

Se você não estiver familiarizado com o trabalho com listas, veja a seção Trabalhar com listas.

Filtragem e classificação das estruturas
  1. Verificar se o deslocamento da estrutura é menor que o valor de limite

  2. Substituir os valores nulos por false

  3. Filtrar a lista de estruturas e estacas

  4. Classificar as estruturas pelas estacas

Gerar os novos nomes

O último trabalho que precisamos fazer é criar os novos nomes para as estruturas. O formato que usaremos é <alignment name>-STRC-<number>. Há alguns nós extras aqui para preencher os números com zeros extras, se desejado (por exemplo, “01” em vez de “1”).

Geração dos novos nomes das estruturas

Renomear as estruturas

E, por último, mas não menos importante, renomeamos as estruturas.

Definir os nomes das estruturas

Resultado

Veja um exemplo de como executar o gráfico usando o Reprodutor do Dynamo.

Execução do gráfico usando o Reprodutor do Dynamo e visualização dos resultados no Civil 3D

Se o Reprodutor do Dynamo for algo novo para você, veja a seção Dynamo Player.

🎉 Missão cumprida.

Bônus: Visualização no Dynamo

Pode ser útil aproveitar a visualização do plano de fundo 3D do Dynamo para visualizar as saídas intermediárias do gráfico em vez de apenas o resultado final. Uma coisa fácil que podemos fazer é mostrar as caixas delimitadoras das estruturas. Além disso, este conjunto de dados específico tem um corredor no documento; portanto, podemos trazer a geometria da linha de recurso do corredor para o Dynamo para fornecer algum contexto para onde as estruturas estão localizadas no espaço. Se o gráfico for usado em um conjunto de dados que não tem corredores, estes nós simplesmente não farão nada.

Visualização da geometria das estruturas e das linhas de recurso do corredor

Agora podemos entender melhor como funciona o processo de filtragem das estruturas por deslocamento.

Ajuste do valor limite de deslocamento do alinhamento e visualização das estruturas afetadas no Dynamo

Ideias

Veja a seguir algumas ideias sobre como você pode expandir os recursos desse gráfico.

Renomeie as estruturas com base em seu Alinhamento mais próximo em vez de selecionar um alinhamento específico.

Renomeie as tubulações além das estruturas.

Defina as camadas das estruturas com base em seu trecho.

Funções

As funções podem ser criadas em um Code Block e chamadas em outro lugar da definição do Dynamo. Isto cria outra camada de controle em um arquivo paramétrico e pode ser visualizado como uma versão com base em texto de um nó personalizado. Neste caso, o Code Block "principal" é facilmente acessível e pode ser localizado em qualquer lugar do gráfico. Não é necessário fio!

Principal

A primeira linha tem a palavra-chave "def", depois o nome da função e, a seguir, os nomes das entradas entre parênteses. Os contraventamentos definem o corpo da função. Retorne um valor com "return =". Os Blocos de código que definem uma função não possuem portas de entrada ou saída porque eles são chamados de outros Blocos de código.

/*This is a multi-line comment,
which continues for
multiple lines*/
def FunctionName(in1,in2)
{
//This is a comment
sum = in1+in2;
return sum;
};

Secundários

Chame a função com outro Code Block no mesmo arquivo fornecendo o mesmo nome e o mesmo número de argumentos. Funciona da mesma forma que os nós prontos para uso da sua biblioteca.

FunctionName(in1,in2);

Exercício: Esfera por Z

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

30KB
Functions_SphereByZ.dyn

Neste exercício, vamos criar uma definição genérica que irá criar esferas a partir de uma lista de entrada de pontos. O raio dessas esferas é conduzido pela propriedade Z de cada ponto.

Vamos começar com um intervalo de números de dez valores , de 0 a 100. Conecte-os a um nó Point.ByCoordinates para criar uma linha diagonal.

Crie um Bloco de código e insira a nossa definição.

  1. Use estas linhas de código:

    def sphereByZ(inputPt)
    {
    
    };

O inputPt é o nome que atribuímos para representar os pontos que guiarão a função. Por agora, a função não está fazendo nada, mas vamos desenvolver essa função nas etapas a seguir.

  1. Quando a função Bloco de código é adicionada, colocamos um comentário e uma variável sphereRadius que consulta a posição Z de cada ponto. Lembre-se de que inputPt.Z não precisa de parênteses como um método. Essa é uma consulta das propriedades de um elemento existente; portanto, nenhuma entrada é necessária:

def sphereByZ(inputPt,radiusRatio)
{
//get Z Value, ise ot to drive radius of sphere
sphereRadius=inputPt.Z;
};
  1. Agora, vamos recordar a função que criamos em outro Bloco de código. Se clicarmos duas vezes na tela para criar um novo bloco de código e digitarmos sphereB, notamos que o Dynamo sugere a função sphereByZ que foi definida. A função foi adicionada à biblioteca intellisense. Muito legal.

  1. Agora, chamamos a função e criamos uma variável chamada Pt para conectar os pontos criados nas etapas anteriores:

    sphereByZ(Pt)
  2. Observe que, na saída, temos todos os valores nulos. Por que isso ocorre? Quando definimos a função, estamos calculando a variável sphereRadius, mas não definimos o que a função deve ser retornada como uma saída. Podemos corrigir isso na próxima etapa.

  1. Uma etapa importante: é necessário definir a saída da função adicionando a linha return = sphereRadius; à função sphereByZ.

  2. Agora, vemos que a saída do Bloco de código nos fornece as coordenadas Z de cada ponto.

Agora, vamos criar esferas reais editando a função Principal.

  1. Primeiro definimos uma esfera com a linha de código: sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);

  2. Em seguida, alteramos o valor de retorno para sphere em vez de sphereRadius: return = sphere; Isso nos fornece algumas esferas gigantes em nossa visualização do Dynamo.

1. Para reduzir o tamanho dessas esferas, vamos atualizar o valor sphereRadius adicionando um divisor: sphereRadius = inputPt.Z/20; Agora podemos ver as esferas separadas e começar a entender a relação entre o raio e o valor Z.

  1. No nó Point.ByCoordinates, alterando a amarra de Lista mais curta para Produto transversal, criamos uma grade de pontos. A função sphereByZ ainda está em pleno efeito, de modo que todos os pontos criam esferas com raios com base em valores Z.

  1. E apenas para efeitos de teste, conectamos a lista original de números à entrada X para Point.ByCoordinates. Agora temos um cubo de esferas.

  2. Observação: Se isso levar muito tempo para ser calculado no computador, tente alterar #10 para algo como #5.

Lembre-se: A função sphereByZ que foi criada é uma função genérica, para que possamos recuperar a hélice de uma lição anterior e aplicar a função a ela.

Uma etapa final: vamos conduzir a relação do raio com um parâmetro definido pelo usuário. Para fazer isso, é necessário criar uma nova entrada para a função e também substituir o divisor 20 por um parâmetro.

  1. Atualize a definição de sphereByZ para:

    def sphereByZ(inputPt,radiusRatio)
    {
    //get Z Value, use it to drive radius of sphere
    sphereRadius=inputPt.Z/radiusRatio;
    //Define Sphere Geometry
    sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);
    //Define output for function
    return sphere;
    };
  2. Atualize o Bloco de código secundário adicionando uma variável de relação à entrada: sphereByZ(Pt,ratio); Conecte um controle deslizante à entrada do Bloco de código recém-criado e varie o tamanho dos raios com base na relação de raio.

Curvas: interpoladas e pontos de controle

Há duas maneiras fundamentais para criar curvas de forma livre no Dynamo: especificar uma coleção de pontos e fazer com que o Dynamo interpole uma curva suave entre eles ou um método de menor nível ao especificar os pontos de controle subjacentes de uma curva de determinado grau. As curvas interpoladas serão úteis quando um designer sabe exatamente a forma que uma linha deve ter ou se o projeto tiver restrições específicas por onde a curva pode e não pode passar. As curvas especificadas por meio de pontos de controle são, em essência, uma série de segmentos de linha reta que um algoritmo suaviza em uma forma de curva final. A especificação de uma curva por meio de pontos de controle pode ser útil para navegações de formas de curva com graus variados de suavização ou quando uma continuidade suave entre segmentos de curva é necessária.

Curva interpolada

Para criar uma curva interpolada, basta passar um conjunto de pontos para o método NurbsCurve.ByPoints.

num_pts = 6;

s = Math.Sin(0..360..#num_pts) * 4;

pts = Point.ByCoordinates(1..30..#num_pts, s, 0);

int_curve = NurbsCurve.ByPoints(pts);

A curva gerada faz interseção com cada um dos pontos de entrada, começando e terminando no primeiro e último ponto da coleção, respectivamente. É possível usar um parâmetro periódico opcional para criar uma curva periódica que está fechada. O Dynamo automaticamente preencherá o segmento ausente, portanto, um ponto final duplicado (idêntico ao ponto inicial) não é necessário.

pts = Point.ByCoordinates(Math.Cos(0..350..#10),
    Math.Sin(0..350..#10), 0);

// create an closed curve
crv = NurbsCurve.ByPoints(pts, true);

// the same curve, if left open:
crv2 = NurbsCurve.ByPoints(pts.Translate(5, 0, 0),
    false);

Curva de pontos de controle

As NurbsCurves são geradas da mesma forma, com os pontos de entrada que representam os pontos finais de um segmento de linha reta e um segundo parâmetro que especifica a quantidade e o tipo de suavização que a curva sofre, denominado grau.* Uma curva com grau 1 não tem suavização; é uma polilinha.

num_pts = 6;

pts = Point.ByCoordinates(1..30..#num_pts,
    Math.Sin(0..360..#num_pts) * 4, 0);

// a B-Spline curve with degree 1 is a polyline
ctrl_curve = NurbsCurve.ByControlPoints(pts, 1);

Uma curva com grau 2 é suavizada de forma que a curva faça interseção e seja tangente ao ponto central dos segmentos de polilinha:

num_pts = 6;

pts = Point.ByCoordinates(1..30..#num_pts,
    Math.Sin(0..360..#num_pts) * 4, 0);

// a B-Spline curve with degree 2 is smooth
ctrl_curve = NurbsCurve.ByControlPoints(pts, 2);

O Dynamo suporta curvas NURBS (B-spline racional não uniforme) até o grau 20, e o seguinte script ilustra o efeito que o aumento dos níveis de suavização tem na forma de uma curva:

num_pts = 6;

pts = Point.ByCoordinates(1..30..#num_pts,
    Math.Sin(0..360..#num_pts) * 4, 0);

def create_curve(pts : Point[], degree : int)
{
	return = NurbsCurve.ByControlPoints(pts,
        degree);
}

ctrl_crvs = create_curve(pts, 1..11);

Observe que você deve ter pelo menos mais um ponto de controle que o grau da curva.

Outro benefício de construir curvas por vértices de controle é a capacidade de manter a tangência entre segmentos de curva individuais. Isso é feito extraindo a direção entre os últimos dois pontos de controle e continuando esta direção com os dois primeiros pontos de controle da curva a seguir. O exemplo a seguir cria duas curvas NURBS separadas que, mesmo assim, são tão suaves como uma curva:

pts_1 = {};

pts_1[0] = Point.ByCoordinates(0, 0, 0);
pts_1[1] = Point.ByCoordinates(1, 1, 0);
pts_1[2] = Point.ByCoordinates(5, 0.2, 0);
pts_1[3] = Point.ByCoordinates(9, -3, 0);
pts_1[4] = Point.ByCoordinates(11, 2, 0);

crv_1 = NurbsCurve.ByControlPoints(pts_1, 3);

pts_2 = {};

pts_2[0] = pts_1[4];
end_dir = pts_1[4].Subtract(pts_1[3].AsVector());

pts_2[1] = Point.ByCoordinates(pts_2[0].X + end_dir.X,
    pts_2[0].Y + end_dir.Y, pts_2[0].Z + end_dir.Z);

pts_2[2] = Point.ByCoordinates(15, 1, 0);
pts_2[3] = Point.ByCoordinates(18, -2, 0);
pts_2[4] = Point.ByCoordinates(21, 0.5, 0);

crv_2 = NurbsCurve.ByControlPoints(pts_2, 3);

\\*Essa é uma descrição muito simplificada da geometria da curva NURBS; para uma discussão mais precisa e detalhada, consulte Pottmann, et al, 2007, nas referências.

Abreviação

Abreviação

Existem alguns métodos de abreviação básicos no bloco de código que, em termos simples, facilitam muito o gerenciamento de dados. Vamos explicar os conceitos básicos abaixo e discutir como a abreviação pode ser usada para criar e consultar dados.

Sintaxe adicional

Intervalos e sequências

É possível reduzir o método para definir intervalos e sequências para a abreviação básica. Use a imagem abaixo como um guia para a sintaxe “...” para definir uma lista de dados numéricos com o bloco de código. Após obter o travamento dessa notação, a criação de dados numéricos é um processo realmente eficiente:

  1. Neste exemplo, um intervalo de números é substituído pela sintaxe básica do Bloco de código que define beginning..end..step-size; . Representados numericamente, temos: 0..10..1;

  2. Observe que a sintaxe 0..10..1; é equivalente a 0..10; Um tamanho de etapa de 1 é o valor padrão para a notação abreviada. Assim, 0..10; será fornecida uma sequência de 0 a 10 com um tamanho de etapa de 1.

  3. O exemplo de Sequência é semelhante, exceto se usarmos “#” para indicar que desejamos 15 valores na lista em vez de uma lista que vai até 15. Neste caso, estamos definindo: beginning..#ofSteps..step-size: A sintaxe real para a sequência é 0..#15..2

  4. Usando o símbolo “#” da etapa anterior, agora o colocamos na parte “step-size” da sintaxe. Agora, temos um intervalo de números que se estende de “beginning” até “end”, e a notação “step-size” distribui uniformemente alguns valores entre os dois: beginning..end..#ofSteps

Intervalos avançados

A criação de intervalos avançados nos permite trabalhar com uma lista de listas de forma simples. Nos exemplos abaixo, vamos isolar uma variável da notação do intervalo principal e criar outro intervalo dessa lista.

1. Criando intervalos aninhados, compare a notação com “#” e a notação sem. A mesma lógica se aplica a intervalos básicos, exceto pelo fato de que fica um pouco mais complexo.

2. Podemos definir um subintervalo em qualquer lugar dentro do intervalo principal e observar que também podemos ter dois subintervalos.

3. Controlando o valor “end” em um intervalo, criamos mais intervalos de comprimentos diferentes.

Como um exercício lógico, compare as duas abreviações acima e tente analisar como os subintervalos e a notação # controlam a saída resultante.

Criar listas e obter itens de uma lista

Além de criar listas com abreviações, podemos criar listas imediatamente. Essas listas podem conter um amplo intervalo de tipos de elementos e também podem ser consultadas (lembre-se: as próprias listas são objetos). Para resumir, com o bloco de código você faz listas e consulta itens de uma lista com colchetes :

1. Crie listas rapidamente com sequências de caracteres e consulte-as usando o índice do item.

2. Crie listas com variáveis e consulte usando a notação de abreviação de intervalo.

O gerenciamento com listas aninhadas é um processo semelhante. Esteja ciente da ordem da lista e chame de volta usando vários conjuntos de colchetes:

1. Defina uma lista de listas.

2. Consulte uma lista com uma notação de colchete único.

3. Consulte um item com uma notação de colchete duplo.

Exercício: Superfície senoidal

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Neste exercício, flexibilizaremos nossas novas habilidades de abreviação para criar uma superfície de casca de ovo moderna definida por intervalos e fórmulas. Durante este exercício, observe como usamos o bloco de código e os nós do Dynamo existentes em conjunto: usamos o bloco de código para o levantamento de dados pesados enquanto os nós do Dynamo são visualmente dispostos para a legibilidade da definição.

Comece criando uma superfície conectando os nós acima. Em vez de usar um nó de número para definir a largura e o comprimento, clique duas vezes na tela e digite 100; em um bloco de código

  1. Defina um intervalo entre 0 e 1 com 50 divisões digitando 0..1..#50 em um Bloco de código.

  2. Conecte o intervalo a Surface.PointAtParameter, que usa os valores u e v entre 0 e 1 na superfície. Lembre-se de alterar a Amarra para Produto transversal clicando com o botão direito do mouse no nó Surface.PointAtParameter.

Nesta etapa, empregamos nossa primeira função para mover o eixo de pontos para cima no Z. Esse eixo controlará uma superfície gerada com base na função subjacente. Adicione novos nós, como mostrado na imagem abaixo

  1. Usamos um Bloco de código com a linha: (0..Math.Sin(x*360)..#50)*5;. Para analisar isso rapidamente, definimos um intervalo com uma fórmula dentro dele. Essa fórmula é a função Seno. A função seno recebe entradas de grau no Dynamo, portanto, para obter uma onda senoidal completa, multiplicamos nossos valores de x (essa é a entrada de intervalo de 0 a 1) por 360. Em seguida, queremos o mesmo número de divisões que os pontos de eixo de controle para cada linha, portanto, definimos cinquenta subdivisões com #50. Finalmente, o multiplicador de 5 simplesmente aumenta a amplitude da conversão para que possamos ver o efeito na Visualização do Dynamo.

  1. Apesar de o Bloco de código anterior funcionar bem, não era completamente paramétrico. Queremos controlar os parâmetros dinamicamente; portanto, substituiremos a linha da etapa anterior por (0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;. Isso nos oferece a capacidade de definir esses valores com base nas entradas.

Alterando os controles deslizantes (de 0 a 10), obtemos resultados interessantes.

  1. Efetuando uma transposição no intervalo de números, inverteremos a direção da onda da cortina: transposeList = List.Transpose(sineList);

  1. Obtemos uma superfície de casca de ovo distorcida quando adicionamos sineList e tranposeList: eggShellList = sineList+transposeList;

Vamos alterar os valores dos controles deslizantes especificados abaixo para “acalmar as águas” deste algoritmo.

Por último, vamos consultar partes isoladas dos dados com o bloco de código. Para regenerar a superfície com um intervalo específico de pontos, adicione o bloco de código acima entre os nós Geometry.Translate e NurbsSurface.ByPoints. Isso tem a linha de texto: sineStrips[0..15..1];. Isso selecionará as primeiras 16 linhas de pontos (de 50). Recriando a superfície, podemos ver que geramos uma parte isolada do eixo de pontos.

  1. Na etapa final, para tornar esse Bloco de código mais paramétrico, controlaremos a consulta usando um controle deslizante que varia entre 0 e 1. Fazemos isso com esta linha de código: sineStrips[0..((List.Count(sineStrips)-1)*u)];. Isso pode parecer confuso, mas a linha de código nos fornece uma forma rápida de dimensionar o comprimento da lista em um multiplicador entre 0 e 1.

Um valor de 0.53 no controle deslizante cria uma superfície logo após o ponto central do eixo.

E, conforme esperado, um controle deslizante de 1 cria uma superfície com base no eixo completo de pontos.

Analisando o gráfico visual, podemos realçar os blocos de código e ver cada uma de suas funções.

1. O primeiro Bloco de código substitui o nó Número.

2. O segundo Bloco de código substitui o nó Intervalo de números.

3. O terceiro Bloco de código substitui os nós List.Transpose, List.Count e Intervalo de números.

4. O quarto Bloco de código consulta uma lista de listas, substituindo o nó List.GetItemAtIndex.

Sequências de caracteres

O que é uma sequência de caracteres?

Formalmente, uma String é uma sequência de caracteres que representa uma constante literal ou algum tipo de variável. De forma informal, uma sequência de caracteres é jargão de programação para texto. Trabalhamos com números, tanto números inteiros quanto decimais, para controlar os parâmetros e podemos fazer o mesmo com o texto.

Criar sequências de caracteres

É possível usar as sequências de caracteres para uma ampla gama de aplicativos, incluindo a definição de parâmetros personalizados, a anotação de conjuntos de documentação e a análise através de conjuntos de dados com base em texto. O nó String está localizado em Núcleo>Categoria de entrada.

Os nós de amostra acima são sequências de caracteres. É possível representar um número como uma sequência de caracteres, assim como uma letra ou uma matriz de texto inteira.

Exercício

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Consultar as sequências de caracteres

É possível analisar rapidamente grandes quantidades de dados ao consultar sequências de caracteres. Falaremos sobre algumas operações básicas que podem acelerar um fluxo de trabalho e ajudar na interoperabilidade do software.

A imagem abaixo considera uma sequência de caracteres de dados proveniente de uma planilha externa. A sequência de caracteres representa os vértices de um retângulo no plano XY. Vamos analisar algumas operações de divisão de sequências de caracteres no exercício em miniatura:

  1. O separador “;” divide cada vértice do retângulo. Isso cria uma lista com três itens para cada vértice.

  1. Pressionando “+” no meio do nó, criamos um novo separador.

  2. Adicione uma sequência de caracteres “,” à tela e conecte-se à nova entrada do separador.

  3. Nosso resultado é agora uma lista de dez itens. Primeiro, o nó é dividido com base em separator0 e, em seguida, com base em separator1.

Embora a lista de itens acima possa parecer ser de números, eles ainda são considerados sequências de caracteres individuais no Dynamo. Para criar pontos, seu tipo de dados precisa ser convertido de uma sequência de caracteres em um número. Isso é feito com o nó String.ToNumber

  1. Esse nó é simples. Conecte os resultados de String.Split à entrada. A saída não parece diferente, mas o tipo de dados é agora um número em vez de uma sequência de caracteres.

Com algumas operações adicionais básicas, agora temos um triângulo desenhado na origem com base na entrada original da sequência de caracteres.

Manipular sequências de caracteres

Como uma sequência de caracteres é um objeto de texto genérico, ela armazena uma ampla gama de aplicações. Vamos analisar algumas das principais ações em Núcleo>Categoria de sequência de caracteres no Dynamo:

Este é um método que consiste em mesclar duas sequências de caracteres em ordem. Usa cada sequência de caracteres literais de uma lista e cria uma sequência de caracteres mesclada.

Veja a seguir a representação da concatenação das três sequências de caracteres:

  1. Adicione ou subtraia sequências de caracteres da concatenação clicando nos botões +/- no centro do nó.

  2. A saída fornece uma sequência de caracteres concatenada, com espaços e sinais de pontuação incluídos.

O método de união é muito similar a concatenar, exceto que tem uma camada de pontuação adicionada.

Se você já tiver trabalhado no Excel, poderá já ter visto um arquivo CSV. Isso significa valores separados por vírgulas. É possível usar uma vírgula (ou, neste caso, dois traços) como separador com o nó String.Join para criar uma estrutura de dados similar.

A imagem a seguir representa a união das duas sequências de caracteres:

  1. A entrada do separador permite criar uma sequência de caracteres que divide as sequências de caracteres unidas.

Trabalhar com sequências de caracteres

Neste exercício, vamos usar métodos de consulta e manipulação de sequências de caracteres para desconstruir a estrofe final de Robert Frost: . Não é o aplicativo mais prático, mas nos ajuda a compreender as ações de sequências de caracteres conceituais conforme as aplicamos às linhas legíveis de ritmo e rima.

Vamos começar com uma divisão básica da sequência de caracteres da estrofe. Primeiro, percebemos que a escrita é formatada com base em vírgulas. Usaremos esse formato para separar cada linha em itens individuais.

  1. A sequência de caracteres base é colada em um nó String.

  2. Outro nó String é usado para indicar o separador. Neste caso, usamos uma vírgula.

  3. Um nó String.Split é adicionado à tela e conectado às duas sequências de caracteres.

  4. A saída mostra que separamos as linhas em elementos individuais.

Agora, vamos chegar à parte boa do poema: as duas últimas linhas. A estrofe original era um item de dados. Separamos esses dados em itens individuais na primeira etapa. Agora, precisamos pesquisar o texto que estamos procurando. Embora seja possível fazer isso selecionando os últimos dois itens da lista, se este fosse um livro inteiro, não iríamos querer ler tudo e isolar manualmente os elementos.

  1. Em vez de pesquisar manualmente, usamos o nó String.Contains para executar uma pesquisa de um conjunto de caracteres. Isso é semelhante a usar o comando “Localizar” em um processador de texto. Neste caso, obteremos um retorno de “true” ou “false” se a subsequência de caracteres for encontrada no item.

  2. Na entrada searchFor, definimos uma subsequência de caracteres que estamos procurando na estrofe. Vamos usar um nó String com o texto “E milhas”.

  3. A saída nos fornece uma lista de valores false e true. Usaremos essa lógica booleana para filtrar os elementos na próxima etapa.

  1. List.FilterByBoolMask é o nó que queremos usar para selecionar os valores false e true. A saída “in” retorna as declarações com uma entrada “mask” com valores “true”, enquanto a saída “out” retorna as que têm valores “false”.

  2. Nosso resultado de “in” é conforme esperado, e isso nos dá as duas linhas finais da estrofe.

Agora, queremos enfatizar a repetição da estrofe, mesclando as duas linhas. Quando visualizamos a saída da etapa anterior, notamos que há dois itens na lista:

  1. Usando dois nós List.GetItemAtIndex, podemos isolar os itens usando os valores de 0 e 1 como entrada do índice.

  2. A saída de cada nó gera, em ordem, as duas linhas finais.

Para mesclar esses dois itens em um único, usamos o nó String.Join:

  1. Após adicionar o nó String.Join, notamos que precisamos de um separador.

  2. Para criar o separador, adicionamos um nó String à tela e digitamos uma vírgula.

  3. O resultado final mesclou os últimos dois itens em um.

Pode parecer muito trabalhoso isolar as duas últimas linhas; e é verdade, as operações de sequência de caracteres geralmente exigem algum trabalho inicial. Mas elas são escalonáveis e podem ser aplicadas a grandes conjuntos de dados com relativa facilidade. Se você estiver trabalhando parametricamente com planilhas e interoperabilidade, lembre-se de considerar as operações de sequência de caracteres.

Introdução aos pacotes

O Dynamo oferece um grande número de recursos prontos para uso e também mantém uma ampla biblioteca de pacotes que pode estender significativamente a capacidade do Dynamo. Um pacote é uma coleção de nós personalizados ou funcionalidades adicionais. O Dynamo Package Manager é um portal para a comunidade fazer download de qualquer pacote que tenha sido publicado on-line. Esses conjuntos de ferramentas são desenvolvidos por terceiros para estender a funcionalidade central do Dynamo, acessível a todos, e prontos para download com o clique do botão.

Um projeto de código aberto, como o Dynamo, prospera com esse tipo de envolvimento da comunidade. Com desenvolvedores de terceiros dedicados, o Dynamo é capaz de estender seu alcance para os fluxos de trabalho em uma variedade de setores. Por esse motivo, a equipe do Dynamo tem feito esforços em conjunto para simplificar o desenvolvimento e a publicação de pacotes (que serão discutidos mais detalhadamente nas seções a seguir).

Instalar um pacote

A maneira mais fácil de instalar um pacote é usando a opção de menu Pacotes na interface do Dynamo. Vamos entrar nele e instalar um pacote agora. Neste exemplo rápido, vamos instalar um pacote popular para criar painéis quadrados em uma grade.

No Dynamo, vá para Pacotes > Package Manager...

Na barra de pesquisa, vamos procurar “quadrados na grade retangular”. Após alguns momentos, você deverá ver todos os pacotes que correspondem a essa consulta de pesquisa. Queremos selecionar o primeiro pacote com o nome correspondente.

Clique em Instalar para adicionar esse pacote à biblioteca e, em seguida, aceite a confirmação. Concluído.

Observe que agora temos outro grupo em nossa biblioteca do Dynamo, chamado “buildz”. Esse nome se refere ao desenvolvedor do pacote e o nó personalizado é colocado nesse grupo. Podemos começar a usá-lo imediatamente.

Use Bloco de código para definir rapidamente uma grade retangular, gere a saída do resultado para um nó Polygon.ByPoints e, subsequentemente, um nó Surface.ByPatch para visualizar a lista de painéis retangulares que você acabou de criar.

Pasta Instalar pacote – DynamoUnfold

O exemplo acima se concentra em um pacote com um nó personalizado, mas você usa o mesmo processo para fazer o download de pacotes com diversos nós personalizados e arquivos de dados de suporte. Vamos demonstrar isso agora, com um pacote mais abrangente: o Dynamo Unfold.

Como no exemplo acima, comece selecionando Pacotes > Package Manager...

Desta vez, vamos procurar “DynamoUnfold”, uma palavra. Quando os pacotes forem exibidos, faça o download clicando em Instalar para adicionar o Dynamo Unfold à biblioteca do Dynamo.

Na biblioteca do Dynamo, temos um grupo DynamoUnfold com várias categorias e vários nós personalizados.

Agora, vamos analisar a estrutura de arquivos do pacote.

  1. Primeiro, vá para Pacotes > Package Manager > Pacotes instalados.

  2. Ao lado de DynamoUnfold, selecione o menu de opções .

  3. Em seguida, clique em Mostrar diretório raiz para abrir a pasta raiz desse pacote.

Isso nos leva ao diretório raiz do pacote. Observe que temos três pastas e um arquivo.

  1. A pasta bin contém os arquivos .dll. Esse pacote do Dynamo foi desenvolvido usando a funcionalidade Sem toque; por isso, os nós personalizados são mantidos nessa pasta.

  2. A pasta dyf contém os nós personalizados. Esse pacote não foi desenvolvido usando os nós personalizados do Dynamo; portanto, a pasta está vazia para esse pacote.

  3. A pasta extra contém todos os arquivos adicionais, inclusive os arquivos de exemplo.

  4. O arquivo pkg é um arquivo de texto básico que define as configurações do pacote. Podemos ignorar isso por enquanto.

Abrindo a pasta “extra”, vemos muitos arquivos de exemplo que foram obtidos por download com a instalação. Nem todos os pacotes têm arquivos de exemplo, mas será possível encontrá-los se fizerem parte de um pacote.

Vamos abrir “SphereUnfold”.

Após abrir o arquivo e pressionar “Executar” no solucionador, teremos uma esfera desdobrada. Arquivos de exemplo como esses são úteis para saber como trabalhar com um novo pacote do Dynamo.

Procurar e visualizar informações dos pacotes

No Package Manager, é possível procurar pacotes usando as opções de classificação e filtragem na guia Procurar pacotes. Há vários filtros disponíveis para o programa hospedeiro, status (novo, obsoleto ou não) e se o pacote tem dependências.

Através da classificação de pacotes, é possível identificar os pacotes com alta classificação ou aqueles com mais downloads, ou encontrar pacotes com atualizações recentes.

Também é possível acessar mais detalhes em cada pacote clicando em Exibir detalhes. Isso abre um painel lateral no Package Manager, onde é possível encontrar informações como controle de versão e dependências, URL do site ou do repositório, informações de licença etc.

Site do Dynamo Package Manager

Outra forma de descobrir pacotes do Dynamo é explorar o site do . Aqui, você pode encontrar dependências do pacote e informações de compatibilidade de hospedeiros/versões fornecidas pelos autores do pacote. Também é possível fazer o download dos arquivos do pacote no Dynamo Package Manager, mas fazer isso diretamente no Dynamo é um processo mais intuitivo.

Onde estão armazenados os arquivos dos pacotes localmente?

Se você quiser ver onde os arquivos dos pacotes estão armazenados, na parte superior da navegação, clique em Dynamo > Preferências > Configurações do pacote > Localizações dos arquivos de nós e pacotes. Você poderá encontrar o diretório da pasta raiz atual aqui.

Por padrão, os pacotes são instalados em uma localização similar a este caminho de pasta: C:/Usuários/[nome de usuário]/AppData/Roaming/Dynamo/[versão do Dynamo].

Configurar uma localização compartilhada para pacotes em um escritório

Para usuários que estão perguntando se é possível implantar o Dynamo (de qualquer forma) com pacotes pré-anexados: a abordagem que resolverá esse problema e permitirá o controle em um local central para todos os usuários com instalações do Dynamo é adicionar um caminho de pacote personalizado a cada instalação.

Adicionar uma pasta de rede, onde o gerente de BIM ou outros possam supervisionar o armazenamento da pasta com pacotes aprovados pelo escritório

Na interface do usuário de um aplicativo individual, vá para Dynamo -> Preferências -> Configurações do pacote -> Localizações dos arquivos de nós e pacotes. Na caixa de diálogo, pressione o botão “Adicionar caminho” e navegue até o local de rede do recurso do pacote compartilhado.

Como um processo automatizado, isso envolveria adicionar informações ao arquivo de configuração instalado com o Dynamo: C:\Users\[Username]\AppData\Roaming\Dynamo\Dynamo Revit\[Dynamo Version]\DynamoSettings.xml

Por padrão, a configuração do Dynamo para Revit é:

<CustomPackageFolders>

<string>C:\Users\[Username]\AppData\Roaming\Dynamo\Dynamo Revit\[Dynamo Version]</string>

</CustomPackageFolders>

A adição de uma localização personalizada teria esta aparência:

<CustomPackageFolders>

<string>C:\Users\[Username]\AppData\Roaming\Dynamo\Dynamo Revit\[Dynamo Version]</string>

<string>N:\OfficeFiles\Dynamo\Packages_Limited</string>

</CustomPackageFolders>

Também é possível controlar o gerenciamento central dessa pasta tornando a pasta somente leitura.

Carregar pacotes com binários de uma localização de rede

Cenário

Uma organização pode desejar padronizar os pacotes instalados por diferentes estações de trabalho e usuários. Uma maneira de fazer isso pode ser instalar esses pacotes em Dynamo -> Preferências -> Configurações do pacote -> Localizações dos arquivos de nós e pacotes, selecionando uma pasta de rede como localização de instalação e fazer com que as estações de trabalho adicionem esse caminho a Manage Node and Package Paths.

Problema

Embora o cenário funcione corretamente para pacotes que contêm apenas nós personalizados, ele pode não funcionar para pacotes que contêm binários, como nós sem toque. Esse problema é causado por que o .NET Framework coloca sobre o carregamento de montagens quando eles vêm de uma localização de rede. Infelizmente, usar o elemento de configuração loadFromRemoteSources, como sugerido no thread vinculado, não é uma solução possível para o Dynamo, pois ele é distribuído como um componente em vez de um aplicativo.

Solução

Uma solução possível é usar uma unidade de rede mapeada apontando para a localização de rede e, em vez disso, fazer com que as estações de trabalho façam referência a esse caminho. As etapas para criar uma unidade de rede mapeada estão descritas .

Conhecer mais sobre pacotes

A comunidade do Dynamo está crescendo e evoluindo constantemente. Explorando o Dynamo Package Manager periodicamente, você encontrará alguns novos desenvolvimentos empolgantes. Nas seções a seguir, analisaremos com mais detalhes os pacotes, da perspectiva do usuário final até a criação do seu próprio pacote do Dynamo.

9KB
Building Blocks of Programs - Strings.dyn
Parando em bosques em uma noite de neve
Concatenar
Dividir
Dividir sequência de caracteres
Dynamo Package Manager
medidas de segurança
aqui
Site do Package Manager

Tipo de dados

Dynamo padrão

Equivalente ao bloco de código

Números

Sequências de caracteres

Sequências

Intervalos

Obter item no índice

Criar lista

Concatenar sequências de caracteres

Declarações condicionais

Nó(s)

Equivalente ao bloco de código

Nota

Qualquer operador (+, &&, >=, Not, etc.)

+, &&, >=, !, etc.

Observe que “Not” se torna “!”, mas o nó é chamado “Not” para distinguir de “Factorial”

Booleano true

true;

Repare nas minúsculas

Booleano false

false;

Repare nas minúsculas

20KB
Obsolete-Nodes_Sine-Surface.dyn
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo

Cor

A cor é um excelente tipo de dados para criar imagens atraentes, bem como para a diferença de renderização na saída do Programa visual. Ao trabalhar com dados abstratos e números variados, às vezes é difícil ver o que está mudando e até que ponto. Este é um ótimo aplicativo para cores.

Criar cores

As cores no Dynamo são criadas usando entradas ARGB. Isso corresponde aos canais alfa, vermelho, verde e azul. O alfa representa a transparência da cor, enquanto os outros três canais são usados como cores primárias para gerar todo o espectro de cores em conjunto.

Ícone
Nome (Sintaxe)
Entradas
Saídas

Cor ARGB (Color.ByARGB)

A,R,G,B

cor

Consultar os valores de cor

As cores na tabela abaixo consultam as propriedades usadas para definir a cor: Alfa, Vermelho, Verde e Azul. Observe que o nó Color.Components nos fornece as quatro como resultados diferentes, o que torna este nó preferível para consultar as propriedades de uma cor.

Ícone
Nome (Sintaxe)
Entradas
Saídas

Alfa (Color.Alpha)

cor

A

Vermelho (Color.Red)

cor

R

Verde (Color.Green)

cor

G

Azul (Color.Blue)

cor

B

Componentes (Color.Components)

cor

A, R, G, B

As cores na tabela abaixo correspondem ao espaço de cores HSB. A divisão das cores em matiz, saturação e brilho é, sem dúvida, algo mais intuitivo para a maneira como interpretamos as cores: qual deve ser a cor? Quão colorido deve ser? E quão clara ou escura deve ser a cor? Este é o detalhamento de matiz, saturação e brilho, respectivamente.

Ícone
Nome (Sintaxe)
Entradas
Saídas

Matiz (Color.Hue)

cor

Matiz

Saturação (Color.Saturation)

cor

Saturação

Brilho (Color.Brightness)

cor

Brilho

Faixa de cores

A faixa de cores é similar ao nó Remapear faixa do exercício Lógica: remapeia uma lista de números em outro domínio. Mas, em vez de mapear para um domínio de números, o mapeamento é feito para um gradiente de cores com base nos números de entrada que variam de 0 a 1.

O nó atual funciona bem, mas pode ser um pouco estranho fazer com que tudo funcione da primeira vez. A melhor forma de se familiarizar com o gradiente de cores é testar o resultado de forma interativa. Vamos fazer um exercício rápido para rever como configurar um gradiente com cores de saída correspondentes aos números.

  1. Definir três cores: usando um nó de bloco de código defina vermelho, verde e azul inserindo as combinações apropriadas de 0 e 255.

  2. Criar lista: mescle as três cores em uma lista.

  3. Definir índices: crie uma lista para definir as posições da alça de cada cor (desde 0 até 1). Observe o valor de 0,75 para verde. Isso situa a cor verde a 3/4 do caminho através do gradiente horizontal no controle deslizante da faixa de cores.

  4. Bloco de código: insira valores (entre 0 e 1) para converter em cores.

Visualização da cor

O nó Display.ByGeometry fornece a capacidade de colorir a geometria na viewport do Dynamo. Isso é útil para separar diferentes tipos de geometria, demonstrando um conceito paramétrico ou definindo uma legenda de análise para simulação. As entradas são simples: geometria e cor. Para criar um gradiente como a imagem acima, a entrada de cor é conectada ao nó Faixa de cores.

Cor em superfícies

O nó Display.BySurfaceColors fornece a capacidade de mapear dados em uma superfície usando a cor. Essa funcionalidade apresenta algumas possibilidades interessantes para visualizar os dados obtidos por meio de análise discreta, como solar, energia e proximidade. A aplicação de cor a uma superfície no Dynamo é semelhante à aplicação de uma textura a um material em outros ambientes CAD. Vamos demonstrar como usar essa ferramenta no breve exercício abaixo.

Exercício

Hélice básica com cores

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

16KB
Building Blocks of Programs - Color.dyn

Este exercício foca no controle de cores parametricamente em paralelo com a geometria. A geometria é uma hélice básica, que definimos abaixo usando o Bloco de código. Essa é uma maneira rápida e fácil de criar uma função paramétrica; e, como nosso foco está na cor (e não na geometria), usamos o bloco de código para criar a hélice de forma eficiente sem sobrecarregar a tela. Usaremos o bloco de código com mais frequência à medida que o manual passar a abordar um material mais avançado.

  1. Bloco de código: define os dois blocos de código com as fórmulas acima. Esse é um método paramétrico rápido para criar uma espiral.

  2. Point.ByCoordinates: conecta as três saídas do bloco de código às coordenadas do nó.

Agora, vemos uma matriz de pontos criando uma hélice. A próxima etapa é criar uma curva através dos pontos de forma que possamos visualizar a hélice.

  1. PolyCurve.ByPoints: conecta a saída Point.ByCoordinates à entrada pontos do nó. Obtemos uma curva helicoidal.

  2. Curve.PointAtParameter: conecta a saída PolyCurve.ByPoints à entrada curva. O propósito dessa etapa é criar um ponto paramétrico atrativo que desliza ao longo da curva. Como a curva está avaliando um ponto no parâmetro, precisaremos inserir um valor de parâmetro entre 0 e 1.

  3. Controle deslizante de número: após adicionar à tela, altere o valor mín para 0,0, o valor máx para 1,0 e o valor de etapa para 0,01. Conecte a saída do controle deslizante à entrada parâmetro para Curve.PointAtParameter. Agora, vemos um ponto ao longo do comprimento da hélice, representado por uma porcentagem do controle deslizante (0 no ponto inicial, 1 no ponto final).

Com o ponto de referência criado, agora comparamos a distância do ponto de referência com os pontos originais que definem a hélice. Esse valor de distância determinará a geometria e a cor.

  1. Geometry.DistanceTo: conecta a saída Curve.PointAtParameter à entrada. Conecte Point.ByCoordinates à entrada da geometria.

  2. Inspeção: o resultado mostra uma lista de distâncias entre cada ponto helicoidal e o ponto de referência ao longo da curva.

A próxima etapa é determinar os parâmetros com a lista de distâncias, entre os pontos helicoidais e o ponto de referência. Usamos esses valores de distância para definir os raios de uma série de esferas ao longo da curva. Para manter as esferas em um tamanho adequado, precisamos remapear os valores da distância.

  1. Math.RemapRange: conecta a saída Geometry.DistanceTo à entrada dos números.

  2. Bloco de código: conecta um bloco de código com um valor de 0,01 à entrada newMin e um bloco de código com um valor de 1 à entrada newMax.

  3. Inspeção: conecta a saída Math.RemapRange a um nó e a saída Geometry.DistanceTo a outro nó. Compare os resultados.

Essa etapa remapeou a lista de distâncias para um intervalo menor. Podemos editar os valores newMin e newMax, conforme necessário. Os valores serão remapeados e terão a mesma relação de distribuição em todo o domínio.

  1. Sphere.ByCenterPointRadius: conecta a saída Math.RemapRange à entrada raio e a saída original Point.ByCoordinates à entrada centerPoint.

Altere o valor do controle deslizante de número e observe o tamanho das esferas atualizadas. Agora, temos um modelo paramétrico

O tamanho das esferas demonstra a matriz paramétrica definida por um ponto de referência ao longo da curva. Vamos usar o mesmo conceito para o raio da esfera para determinar sua cor.

  1. Faixa de cores: adiciona a parte superior da tela. Quando passamos o cursor sobre a entrada valor, notamos que os números solicitados estão entre 0 e 1. Precisamos remapear os números da saída Geometry.DistanceTo para que sejam compatíveis com esse domínio.

  2. Sphere.ByCenterPointRadius: por enquanto, vamos desativar a visualização nesse nó (clique com o botão direito do mouse > Visualização).

  1. Math.RemapRange: esse processo deverá ser familiar. Conecte a saída Geometry.DistanceTo à entrada de números.

  2. Bloco de código: de forma semelhante a uma etapa anterior, crie um valor de 0 para a entrada newMin e um valor de 1 para a entrada newMax. Neste caso, observe que podemos definir duas saídas de um único bloco de código.

  3. Faixa de cores: conecte a saída Math.RemapRange à entrada valor.

  1. Color.ByARGB: esse é o processo para criar duas cores. Embora esse processo possa parecer estranho, é o mesmo que as cores RGB em outro software, estamos apenas usando a programação visual para fazer isso.

  2. Bloco de código: crie dois valores de 0 e 255. Conecte as duas saídas às duas entradas Color.ByARGB de acordo com a imagem acima (ou crie as duas cores favoritas).

  3. Faixa de cores: a entrada cores solicita uma lista de cores. É necessário criar essa lista com base nas duas cores criadas na etapa anterior.

  4. List.Create: mescla as duas cores em uma lista. Conecte a saída à entrada cores para a Faixa de cores.

  1. Display.ByGeometryColor: conecta Sphere.ByCenterPointRadius à entrada geometria e a Faixa de cores à entrada cor. Agora temos um gradiente suave no domínio da curva.

Se alterarmos o valor do Controle deslizante de número anterior na definição, as cores e os tamanhos serão atualizados. As cores e o tamanho do raio estão diretamente relacionados neste caso: agora temos uma ligação visual entre dois parâmetros.

Exercício de cor em superfícies

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

238KB
BuildingBlocks of Programs - ColorOnSurface.zip
archive

Primeiro, é preciso criar (ou referenciar) uma superfície para usar como uma entrada para o nó Display.BySurfaceColors. Neste exemplo, estamos fazendo a transição entre uma curva seno e cosseno.

  1. Esse grupo de nós está criando pontos ao longo do eixo Z e, em seguida, deslocando-os com base nas funções de seno e cosseno. As duas listas de pontos são, em seguida, usadas para gerar curvas NURBS.

  2. Surface.ByLoft: gera uma superfície interpolada entre a lista de curvas NURBS.

  1. Caminho do arquivo: selecione um arquivo de imagem de amostra com uso dos dados de pixel a jusante

  2. File.FromPath para converter o caminho do arquivo em um arquivo e, em seguida, passar para Image.ReadFromFile para gerar uma imagem de amostra

  3. Image.Pixels: insira uma imagem e forneça um valor de amostra para usar ao longo das dimensões x e y da imagem

  4. Controle deslizante: fornece os valores para Image.Pixels

  5. Display.BySurfaceColors: mapeia a matriz de valores de cores através da superfície ao longo de X e Y, respectivamente

Visualização aproximada da superfície de saída com resolução de 400 x 300 amostras

Criar

É possível criar uma matriz de elementos do Revit no Dynamo com o controle paramétrico completo. Os nós do Revit no Dynamo oferecem a capacidade de importar elementos de geometrias genéricas para tipos de categoria específicos (como paredes e pisos). Nesta seção, vamos focar na importação de elementos parametricamente flexíveis com componentes adaptativos.

Componentes adaptativos

Um componente adaptativo é uma categoria de família flexível que é bem adequada para aplicativos gerativos. Após a instanciação, é possível criar um elemento geométrico complexo que é guiado pela localização fundamental dos pontos adaptativos.

Veja abaixo um exemplo de um componente adaptativo de três pontos no editor de família. Isso gera uma treliça que é definida pela posição de cada ponto adaptativo. No exercício abaixo, usaremos esse componente para gerar uma série de treliças em uma fachada.

Princípios de interoperabilidade

O componente adaptativo é um bom exemplo das práticas recomendadas de interoperabilidade. É possível criar uma matriz de componentes adaptativos definindo os pontos adaptativos fundamentais. E, ao transferir esses dados para outros programas, temos a capacidade de reduzir a geometria a dados simples. A importação e a exportação com um programa como o Excel seguem uma lógica similar.

Suponha que um consultor de fachadas deseje saber a localização dos elementos da treliça sem precisar analisar a geometria totalmente articulada. Na preparação para a fabricação, o consultor pode fazer referência à localização de pontos adaptativos para gerar novamente a geometria em um programa como o Inventor.

O fluxo de trabalho que configuraremos no exercício abaixo nos permite acessar todos esses dados ao criar a definição para a criação de elementos do Revit. Nesse processo, é possível mesclar a conceitualização, a documentação e a fabricação em um fluxo de trabalho contínuo. Isso cria um processo mais inteligente e eficiente para a interoperabilidade.

Vários elementos e listas

O primeiro exercício abaixo detalhará como o Dynamo referencia os dados para a criação de elementos do Revit. Para gerar vários componentes adaptativos, definiremos uma lista de listas em que cada lista tem três pontos que representam cada ponto do componente adaptativo. Isso será levado em consideração à medida que gerenciarmos as estruturas de dados no Dynamo.

Elementos DirectShape

Outro método para importar a geometria paramétrica do Dynamo no Revit é com o DirectShape. Em resumo, o elemento DirectShape e as classes relacionadas oferecem suporte à capacidade de armazenar formas geométricas criadas externamente em um documento do Revit. A geometria pode incluir sólidos ou malhas fechadas. O DirectShape foi projetado principalmente para importar formas de outros formatos de dados, como IFC ou STEP, onde não há informações suficientes disponíveis para criar um elemento “real” do Revit. Como o fluxo de trabalho IFC e STEP, a funcionalidade DirectShape funciona bem com a importação de geometrias criadas pelo Dynamo em projetos do Revit como elementos reais.

Detalharemos no segundo exercício a importação da geometria do Dynamo como uma DirectShape em nosso projeto do Revit. Usando esse método, podemos atribuir a categoria, o material e o nome de uma geometria importada, mantendo um vínculo paramétrico com o gráfico do Dynamo.

Exercício: Gerar elementos e listas

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

5MB
Revit-Creating.zip
archive

Começando com o arquivo de exemplo desta seção (ou continuando com o arquivo do Revit da sessão anterior), vemos a mesma massa do Revit.

  1. Esse é o arquivo conforme aberto.

  2. Esse é o sistema de treliça que criamos com o Dynamo, vinculado de forma inteligente à massa do Revit.

Usamos os nós “Selecionar o elemento do modelo” e “Selecionar face”, agora estamos descendo uma etapa na hierarquia da geometria e usando “Selecionar aresta”. Com o solucionador do Dynamo definido para executar “Automático”, o gráfico será continuamente atualizado com as alterações no arquivo do Revit. A aresta que estamos selecionando está vinculada dinamicamente à topologia do elemento do Revit. Desde que a topologia* não seja alterada, a conexão permanecerá vinculada entre o Revit e o Dynamo.

  1. Selecione a curva superior da fachada de vidraça. Ela se expande por todo o comprimento da construção. Se você estiver tendo problemas para selecionar a aresta, lembre-se de escolher a seleção no Revit ao passar o mouse sobre a aresta e pressionar “Tab” até que a aresta desejada seja realçada.

  2. Usando dois nós “Selecionar aresta”, selecione cada aresta que representa o declive transversal no meio da fachada.

  3. Faça o mesmo para as arestas inferiores da fachada no Revit.

  4. Os nós de Inspeção revelam que agora temos linhas no Dynamo. Isso é convertido automaticamente na geometria do Dynamo, já que as próprias arestas não são elementos do Revit. Essas curvas são as referências que usaremos para instanciar as treliças adaptativas na fachada.

*Para manter uma topologia consistente, estamos nos referindo a um modelo que não tenha mais faces ou arestas adicionadas. Embora os parâmetros possam alterar sua forma, a maneira como ele é construído permanece consistente.

Primeiro, precisamos unir as curvas e mesclá-las em uma lista. Dessa forma, podemos “agrupar” as curvas para realizar operações de geometria.

  1. Crie uma lista para as duas curvas no meio da fachada.

  2. Una as duas curvas numa policurva conectando o componente List.Create a um nó Polycurve.ByJoinedCurves.

  3. Crie uma lista para as duas curvas na parte inferior da fachada.

  4. Una as duas curvas numa policurva conectando o componente List.Create a um nó Polycurve.ByJoinedCurves.

  5. Por fim, una as três curvas principais (uma linha e duas policurvas) em uma lista.

Desejamos aproveitar a curva superior, que é uma linha, e representa a extensão completa da fachada. Vamos criar planos ao longo dessa linha para fazer a interseção com o conjunto de curvas que agrupamos em uma lista.

  1. Com um bloco de código, defina um intervalo usando a sintaxe: 0..1..#numberOfTrusses;

  2. Conecte um *controle deslizante de número inteiro *à entrada do bloco de código. Como talvez você tenha adivinhado, isso representará o número de treliças. Observe que a barra deslizante controla o número de itens no intervalo definido de *0 *a 1.

  3. Conecte o bloco de código à entrada param de um nó “Curve.PlaneAtParameter” e conecte a aresta superior à entrada da curva. Isso gerará dez planos uniformemente distribuídos pela extensão da fachada.

Um plano é uma parte abstrata da geometria, representando um espaço bidimensional infinito. Os planos são excelentes para contorno e interseção, enquanto estamos configurando nesta etapa.

  1. Usando o nó Geometry.Intersect (defina a opção de amarra como produto transversal), conecte Curve.PlaneAtParameter à entrada entidade do nó Geometry.Intersect. Conecte o nó principal List.Create à entrada geometria. Agora, vemos pontos na viewport do Dynamo que representam a interseção de cada curva com os planos definidos.

Observe que a saída é uma lista de listas de listas. Para nossos fins, há muitas listas. Desejamos fazer uma mesclagem parcial aqui. Precisamos descer uma etapa na lista e nivelar o resultado. Para fazer isso, usaremos a operação List.Map, conforme discutido no capítulo sobre lista do manual.

  1. Conecte o nó Geometry.Intersect à entrada da lista de List.Map.

  2. Conecte um nó Aplainar à entrada f(x) de List.Map. Os resultados fornecem três listas, cada uma com uma contagem igual ao número de treliças.

  3. Precisamos alterar esses dados. Se desejarmos instanciar a treliça, precisaremos usar o mesmo número de pontos adaptativos, conforme definido na família. Esse é um componente adaptativo de três pontos, portanto, em vez de três listas com 10 itens cada (numberOfTrusses), desejamos 10 listas de três itens cada. Desta forma, podemos criar 10 componentes adaptativos.

  4. Conecte o List.Map a um nó List.Transpose. Agora, temos a saída de dados desejada.

  5. Para confirmar se os dados estão corretos, adicione um nó Polygon.ByPoints à tela e verifique novamente com a visualização do Dynamo.

Da mesma forma que criamos os polígonos, é possível organizar os componentes adaptativos.

  1. Adicione um nó AdaptiveComponent.ByPoints à tela, conecte o nó List.Transpose à entrada pontos.

  2. Usando um nó Tipos de família, selecione a família “AdaptiveTruss” e conecte-a à entrada FamilyType do nó AdaptiveComponent.ByPoints.

No Revit, agora temos as dez treliças espaçadas uniformemente na fachada.

“Flexibilizar” o gráfico, aumentamos numberOfTrusses para 30 alterando o controle deslizante. Muitas treliças, o que não é muito realista, mas o vínculo paramétrico está funcionando. Depois de verificar, defina numberOfTrusses como 15.

E, para o teste final, selecionando a massa no Revit e editando os parâmetros de instância, será possível alterar a forma da construção e observar a treliça fazer o mesmo. Lembre-se: esse gráfico do Dynamo precisa estar aberto para que essa atualização seja exibida. O vínculo será interrompido assim que for fechado.

Exercício: Elementos DirectShape

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

5MB
Revit-Creating-DirectShape.zip
archive

Comece abrindo o arquivo de exemplo desta lição: ARCH-DirectShape-BaseFile.rvt.

  1. Na vista 3D, vemos a massa da construção da lição anterior.

  2. Ao longo da aresta do átrio há uma curva de referência, vamos usá-la como uma curva para fazer referência no Dynamo.

  3. Ao longo da aresta oposta do átrio, há outra curva de referência à qual também vamos fazer referência no Dynamo.

  1. Para fazer referência à nossa geometria no Dynamo, usaremos Selecionar o elemento do modelo para cada membro do Revit. Selecione a massa no Revit e importe a geometria para o Dynamo usando Element.Faces. A massa agora deve estar visível na visualização do Dynamo.

  2. Importe uma curva de referência para o Dynamo usando Selecionar o elemento do modelo e CurveElement.Curve.

  3. Importe a outra curva de referência para o Dynamo usando Selecionar o elemento do modelo e CurveElement.Curve.

  1. Diminuindo o zoom e efetuando o pan à direita no gráfico de exemplo, vemos um grupo grande de nós: são operações geométricas que geram a estrutura do telhado da treliça visível na visualização do Dynamo. Esses nós são criados usando a funcionalidade Nó para código, conforme discutido na seção bloco de código do manual.

  2. A estrutura é guiada por três parâmetros principais: Deslocamento diagonal, Curvatura e Raio.

Efetue o zoom em uma visualização próxima dos parâmetros para este gráfico. Podemos flexibilizá-los para obter resultados de geometria diferentes.

  1. Soltando o nó DirectShape.ByGeometry na tela, vemos que ele tem quatro entradas: geometria, categoria, material e nome.

  2. A geometria será o sólido criado com base na parte de criação da geometria do gráfico.

  3. A entrada de categoria é selecionada usando o nó suspenso Categorias. Neste caso, usaremos “Framing estrutural”.

  4. A entrada de material é selecionada por meio da matriz de nós acima. Embora possa ser mais simplesmente definida como “Padrão” neste caso.

Após executar o Dynamo, de volta no Revit, temos a geometria importada no telhado em nosso projeto. Esse é um elemento do framing estrutural em vez de um modelo genérico. O vínculo paramétrico para o Dynamo permanece intacto.

Matemática

Se a forma mais simples de dados forem os números, a forma mais fácil de relacionar esses números será através da matemática. De operadores simples, como dividir até funções trigonométricas, ou fórmulas mais complexas, a matemática é uma ótima forma de começar a explorar as relações e os padrões numéricos.

Operadores aritméticos

Os operadores são um conjunto de componentes que usam funções algébricas com dois valores de entrada numéricos, o que resulta em um valor de saída (adição, subtração, multiplicação, divisão etc.). Eles podem ser encontrados em Operadores>Ações.

Ícone
Nome (Sintaxe)
Entradas
Saídas

Adicionar (+)

var[]...[], var[]...[]

var[]...[]

Subtrair (-)

var[]...[], var[]...[]

var[]...[]

Multiplicar (*)

var[]...[], var[]...[]

var[]...[]

Dividir (/)

var[]...[], var[]...[]

var[]...[]

Exercício: Fórmula da espiral dourada

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

17KB
Building Blocks of Programs - Math.dyn

Parte I: Fórmula paramétrica

Combine operadores e variáveis para formar uma relação mais complexa através de Fórmulas. Use os controles deslizantes para criar uma fórmula que pode ser controlada com parâmetros de entrada.

1. Crie a sequência de números que representa o “t” na equação paramétrica; portanto, queremos usar uma lista suficientemente grande para definir uma espiral.

Sequência de números: defina uma sequência de números com base em três entradas: início, quantidade e etapa.

2. A etapa acima criou uma lista de números para definir o domínio paramétrico. Em seguida, crie um grupo de nós que representa a equação da espiral dourada.

A espiral dourada é definida como a equação:

x=rcosθ=acosθebθx = r cos θ = a cos θ e^{bθ}x=rcosθ=acosθebθ
y=rsinθ=asinθebθy = r sin θ = a sin θe^{bθ}y=rsinθ=asinθebθ

A imagem abaixo representa a espiral dourada na forma de programação visual. Quando você percorrer o grupo de nós, tente prestar atenção ao paralelo entre o programa visual e a equação escrita.

a. Controle deslizante de número: adicione dois controles deslizantes de número à tela. Esses controles deslizantes representarão as variáveis a e b da equação paramétrica. Eles representam uma constante que é flexível ou parâmetros que podem ser ajustados para um resultado desejado.

b. Multiplicação (*): o nó de multiplicação é representado por um asterisco. Usaremos isso repetidamente para conectar variáveis de multiplicação.

c. Math.RadiansToDegrees: os valores “t” precisam ser convertidos em graus para sua avaliação nas funções trigonométricas. Lembre-se de que o Dynamo usa como padrão a unidade de graus para avaliar essas funções.

d. Math.Pow: como uma função de “t” e o número “e” que cria a sequência de Fibonacci.

e. Math.Cos e Math.Sin: essas duas funções trigonométricas diferenciarão a coordenada x e a coordenada y, respectivamente, de cada ponto paramétrico.

f. Inspeção: agora vemos que nossa saída é formada por duas listas, que serão as coordenadas x e y dos pontos usados para gerar a espiral.

Parte II: Da fórmula à geometria

Agora a maioria dos nós da etapa anterior funcionará bem, mas isso requer muito trabalho. Para criar um fluxo de trabalho mais eficiente, observe o DesignScript para definir uma sequência de caracteres de expressões do Dynamo em um nó. Nesta próxima série de etapas, vamos analisar o uso da equação paramétrica para desenhar a espiral de Fibonacci.

Point.ByCoordinates: conecte o nó de multiplicação superior à entrada “x” e a parte inferior à entrada “y”. Agora vemos uma espiral paramétrica de pontos na tela.

Polycurve.ByPoints: conecte Point.ByCoordinates da etapa anterior a pontos. Podemos deixar connectLastToFirst sem entrada porque não estamos criando uma curva fechada. Isso cria uma espiral que passa por cada ponto definido na etapa anterior.

Agora concluímos a espiral de Fibonacci. A partir daqui, vamos aprofundar isso em dois exercícios separados, que chamaremos de nautiloide e girassol. Esses são abstrações de sistemas naturais, mas os dois aplicativos diferentes da espiral de Fibonacci serão bem representados.

Parte III: Da espiral ao nautiloide

Circle.ByCenterPointRadius: vamos usar um nó de círculo aqui com as mesmas entradas da etapa anterior. O valor do raio tem como padrão 1,0, de modo que vemos uma saída imediata de círculos. Torna-se imediatamente legível como os pontos se afastam da origem.

Sequência de números: essa é a matriz original de “t”. Conectando isso ao valor do raio de Circle.ByCenterPointRadius, os centros do círculo ainda ficam bastante afastados da origem, mas o raio dos círculos está aumentando, criando um gráfico de círculo de Fibonacci moderno.

Você ganhará pontos de bônus se fizer em 3D.

Parte IV: Do nautiloide à filotaxia

Agora que fizemos uma casca circular nautiloide, vamos passar para os eixos paramétricos. Vamos usar uma rotação básica na espiral de Fibonacci para criar um eixo de Fibonacci, e o resultado é modelado de acordo com o crescimento de sementes de girassol.

Como ponto de partida, vamos começar com a mesma etapa do exercício anterior: criar uma matriz de espiral de pontos com o nó Point.ByCoordinates.

![](../images/5-3/2/math-part IV-01.jpg)

Em seguida, siga estas minietapas para gerar uma série de espirais em várias rotações.

a. Geometry.Rotate: há diversas opções de Geometry.Rotate; assegure-se de que você selecionou o nó com geometry,basePlane e degrees como entradas. Conecte Point.ByCoordinates à entrada da geometria. Clique com o botão direito do mouse nesse nó e verifique se a amarra está definida como “Produto transversal”

b. Plane.XY: conecte à entrada basePlane. Vamos rotacionar em torno da origem, que é a mesma localização da base da espiral.

c. Intervalo de números: para nossa entrada de graus, desejamos criar várias rotações. Podemos fazer isso rapidamente com um componente do Intervalo de números. Conecte isso à entrada graus.

d. Número: para definir o intervalo de números, adicione três nós de número à tela na ordem vertical. De cima para baixo, atribua valores de 0,0,360,0, e 120,0, respectivamente. Esses valores controlam a rotação da espiral. Observe os resultados de saída no nó Intervalo de números após conectar os três nós de número ao nó.

Nossa saída está começando a se parecer com um redemoinho. Vamos ajustar alguns dos parâmetros de Intervalo de números e ver como os resultados mudam.

Altere o tamanho da etapa do nó Intervalo de números de 120,0 para 36,0. Observe que isso está criando mais rotações e, portanto, nos oferece um eixo mais denso.

Altere o tamanho da etapa do nó Intervalo de números de 36,0 para 3,6. Isso nos oferece agora um eixo muito mais denso, e a direcionalidade da espiral é pouca clara. Senhoras e senhores, criamos um girassol.

O que é uma lista?

O que é uma lista?

Uma lista é uma coleção de elementos ou de itens. Por exemplo, uma penca de bananas. Cada banana é um item na lista (ou penca). É mais fácil pegar uma penca de bananas em vez de cada banana individualmente, e o mesmo vale para agrupar elementos por relações paramétricas em uma estrutura de dados.

Bananas

Foto de Augustus Binu.

Quando fazemos compras, colocamos todos os itens comprados em uma sacola. Essa sacola também é uma lista. Para fazer pão de banana, precisaremos de três pencas de bananas (vamos fazer muito pão de banana). O saco representa uma lista de pencas de bananas e cada penca representa uma lista de bananas. O saco é uma lista de listas (bidimensionais) e a penca de bananas é uma lista (unidimensional).

No Dynamo, os dados da lista são ordenados e o primeiro item em cada lista tem um índice “0”. Abaixo, vamos discutir como as listas são definidas no Dynamo e como várias listas se relacionam entre si.

Índices com base em zero

Uma coisa que pode parecer estranha no início é que o primeiro índice de uma lista é sempre 0; não 1. Portanto, quando falamos sobre o primeiro item de uma lista, na verdade, queremos dizer o item que corresponde ao índice 0.

Por exemplo, se você contasse o número de dedos que temos na mão direita, as chances são de que você teria contado de 1 a 5. No entanto, se você colocar seus dedos em uma lista, o Dynamo teria dado índices de 0 a 4. Embora isso possa parecer um pouco estranho para programadores iniciantes, o índice com base em zero é uma prática padrão na maioria dos sistemas de cálculo.

Observe que ainda temos cinco itens na lista; só que a lista está usando um sistema de contagem baseado em zero. E os itens que estão sendo armazenados na lista não precisam ser apenas números. Eles podem ser qualquer tipo de dados que o Dynamo suporta, como pontos, curvas, superfícies, famílias etc.

a. Índice

b. Ponto

c. Item

Muitas vezes, a maneira mais fácil de analisar o tipo de dados armazenados em uma lista é conectar um nó de inspeção à saída de outro nó. Por padrão, o nó de inspeção exibe automaticamente todos os índices no lado esquerdo da lista e exibe os itens de dados na direita.

Esses índices são um elemento crucial ao trabalhar com listas.

Entradas e saídas

Nas listas, as entradas e as saídas variam de acordo com o nó do Dynamo que está sendo usado. Como exemplo, vamos usar uma lista de cinco pontos e conectar essa saída a dois nós diferentes do Dynamo: PolyCurve.ByPoints e Circle.ByCenterPointRadius:

Exemplos de entrada
  1. A entrada pontos para PolyCurve.ByPoints está procurando “Point[]”. Isso representa uma lista de pontos.

  2. A saída para PolyCurve.ByPoints é uma policurva única criada com base em uma lista de cinco pontos.

  3. A entrada centerPoint para Circle.ByCenterPointRadius solicita “Ponto”.

  4. A saída para Circle.ByCenterPointRadius é uma lista de cinco círculos, cujos centros correspondem à lista original de pontos.

Os dados de entrada para PolyCurve.ByPoints e Circle.ByCenterPointRadius são os mesmos. No entanto, o nó Polycurve.ByPoints gera uma policurva, enquanto o nó Circle.ByCenterPointRadius gera cinco círculos com centros em cada ponto. Isso faz sentido intuitivamente: a policurva é desenhada como uma curva que conecta os cinco os pontos, enquanto os círculos criam um círculo diferente em cada ponto. O que está acontecendo com os dados?

Passando o cursor do mouse sobre a entrada pontos para Polycurve.ByPoints, vemos que a entrada está procurando “Point[]”. Observe os colchetes no final. Isso representa uma lista de pontos e, para criar uma policurva, a entrada precisa ser uma lista para cada policurva. Esse nó, portanto, condensará cada lista em uma policurva.

Por outro lado, a entrada centerPoint para Circle.ByCenterPointRadius solicita “Ponto”. Esse nó procura um ponto, como um item, para definir o ponto central do círculo. É por isso que obtemos cinco círculos com base nos dados de entrada. Reconhecer essa diferença com as entradas no Dynamo ajuda a compreender melhor como os nós funcionam ao gerenciar os dados.

Amarra

A correspondência de dados é um problema sem uma solução fácil. Isso ocorre quando um nó tem acesso a entradas de tamanhos diferentes. Alterar o algoritmo de correspondência de dados pode gerar resultados muito diferentes.

Imagine um nó que cria segmentos de linha entre pontos (Line.ByStartPointEndPoint). Ele terá dois parâmetros de entrada que fornecem as coordenadas dos pontos:

Lista mais curta

A maneira mais simples é conectar as entradas individualmente até que um dos fluxos se esgote. Isso é denominado algoritmo “Lista mais curta”. Este é o comportamento padrão dos nós do Dynamo:

Lista mais longa

O algoritmo “Lista mais longa” continua conectando entradas, reusando elementos, até que todos os fluxos se esgotem:

Produto transversal

Por fim, o método “Produto transversal” torna todas as conexões possíveis:

Como você pode ver, há diferentes maneiras de desenhar linhas entre estes conjuntos de pontos. É possível encontrar as opções de amarra clicando com o botão direito do mouse no centro de um nó e selecionando o menu “Amarra”.

O que é replicação?

Imagine que você tem um cacho de uvas. Se você quisesse fazer suco de uva, não espremeria cada uva individualmente, mas sim colocaria todas no espremedor de uma vez. A replicação no Dynamo funciona de forma semelhante: em vez de aplicar uma operação a um item por vez, o Dynamo pode aplicá-la a uma lista inteira de uma só vez.

Os nós do Dynamo reconhecem automaticamente quando estão trabalhando com listas e aplicam suas operações em vários elementos. Isso significa que você não precisa percorrer os itens manualmente: isso simplesmente acontece. Mas como o Dynamo decide como processar listas quando há mais de uma?

Há duas formas principais:

Replicação cartesiana

Digamos que você esteja na cozinha, fazendo sucos de frutas. Você tem uma lista de frutas: {apple, orange, pear} e uma quantidade fixa de água para cada suco: 1 cup. Você quer fazer um suco com cada fruta, usando a mesma quantidade de água. Nesse caso, a replicação cartesiana entra em ação.

No Dynamo, isso significa que você está alimentando a lista de frutas na entrada de frutas do nó Juice.Maker, enquanto a entrada de água permanece constante em 1 xícara. O nó então processa cada fruta individualmente, combinando-a com a quantidade fixa de água. O resultado é:

apple juice with 1 cup of water orange juice with 1 cup of water pear juice with 1 cup of water

Cada fruta é combinada com a mesma quantidade de água.

Replicação zip

A replicação zip funciona de forma um pouco diferente. Se você tivesse duas listas, uma para frutas: {apple, orange, pear} e outra para quantidades de açúcar: {2 tbsp, 3 tbsp, 1 tbsp}, a replicação zip combinaria os itens correspondentes de cada lista. Por exemplo:

apple juice with 2 tablespoons of sugar orange juice with 3 tablespoons of sugar pear juice with 1 tablespoon of sugar

Cada fruta é combinada com a quantidade correspondente de açúcar.

Para uma análise mais profunda sobre como isso funciona, confira os Guias de replicação e amarra.

Exercício

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

3KB
Lacing.dyn

Para demonstrar as operações de amarra abaixo, vamos usar esse arquivo base para definir a lista mais curta, a lista mais longa e o produto transversal.

Vamos alterar a amarra em Point.ByCoordinates, mas não alteraremos mais nada no gráfico acima.

Lista mais curta

Escolhendo lista mais curta como a opção de amarra (também é a opção padrão), obtemos uma linha diagonal básica composta por cinco pontos. Cinco pontos são o comprimento da lista menor; portanto, a amarra da lista mais curta é interrompida após atingir o final de uma lista.

Exemplos de entrada

Lista mais longa

Alterando a amarra para lista mais longa, obtemos uma linha diagonal que se estende verticalmente. Pelo mesmo método que o diagrama conceitual, o último item na lista de cinco itens será repetido para alcançar o comprimento da lista mais longa.

Exemplos de entrada

Produto transversal

Alterando a amarra para Produto transversal, temos todas as combinações entre cada lista, dando-nos uma grade de pontos 5 x 10. Essa é uma estrutura de dados equivalente ao produto transversal, como mostrado no diagrama conceitual acima, exceto pelo fato de que nossos dados agora são uma lista de listas. Conectando uma policurva, podemos ver que cada lista é definida pelo seu valor X, dando-nos uma linha de linhas verticais.

Exemplos de entrada

Biblioteca

A biblioteca contém todos os nós carregados, incluindo os dez nós de categorias padrão que vêm com a instalação, bem como quaisquer nós ou pacotes personalizados carregados adicionalmente. Os nós na biblioteca são organizados hierarquicamente dentro de bibliotecas, categorias e, quando apropriado, subcategorias.

  • Nós básicos: vêm com a instalação padrão.

  • Nós personalizados: armazene as rotinas ou gráficos especiais usados com frequência como nós personalizados. Também é possível compartilhar os nós personalizados com a comunidade

  • Nós do Gerenciador de pacotes: conjunto de nós personalizados publicados.

Vamos abordar as categorias da hierarquia de nós, mostrar como é possível pesquisar rapidamente na biblioteca e saber mais sobre alguns dos nós usados com frequência.

Hierarquia da biblioteca para categorias

Navegar por essas categorias é a maneira mais rápida de entender a hierarquia do que podemos adicionar ao nosso espaço de trabalho e a melhor maneira de descobrir novos nós que você não usou antes.

Navegue na biblioteca clicando nos menus para expandir cada categoria e suas subcategorias

Geometria oferece ótimos menus para começar a explorar, pois contêm a maior quantidade de nós.

  1. Biblioteca

  2. Categoria

  3. Subcategoria

  4. Nó

Essas opções categorizam os nós na mesma subcategoria com base na capacidade dos nós criar dados, executar uma ação ou consultar dados.

  • Criar: criar ou construir uma geometria do zero. Por exemplo, um círculo.

  • Ação: executar uma ação em um objeto. Por exemplo, dimensionar um círculo.

  • Consulta: obter uma propriedade de um objeto que já existe. Por exemplo, obter o raio de um círculo.

Passe o cursor do mouse sobre um nó para obter informações mais detalhadas além do nome e do ícone. Isso nos oferece uma maneira rápida de entender o que o nó faz, o que ele exigirá para as entradas e o que ele fornecerá como resultado.

  1. Descrição: descrição de texto simples do nó

  2. Ícone: versão maior do ícone no menu Biblioteca

  3. Entrada(s): nome, tipo de dados e estrutura de dados

  4. Saída(s): tipo de dados e estrutura

Pesquisa rápida na biblioteca

Se você souber com algum grau de especificidade qual é o nó que deseja adicionar ao espaço de trabalho, digite no campo Pesquisar para procurar todos os nós correspondentes.

Clique no nó que deseja adicionar ou pressione Enter para adicionar nós realçados ao centro do espaço de trabalho.

Pesquisar por hierarquia

Além de usar palavras-chave para tentar localizar nós, podemos digitar a hierarquia separada por um ponto no campo de pesquisa ou com blocos de código (que usam o idioma textual do Dynamo).

A hierarquia de cada biblioteca é refletida no nome dos nós adicionados ao espaço de trabalho.

Se inserir diferentes partes do local do nó na hierarquia da biblioteca no formato library.category.nodeName, os resultados obtidos serão diferentes

  • library.category.nodeName

  • category.nodeName

  • nodeName ou keyword

Normalmente, o nome do nó no espaço de trabalho será renderizado no formato category.nodeName, com algumas exceções notáveis, especialmente nas categorias de entrada e vista.

Tenha atenção aos nós de nome semelhante e observe a diferença de categoria:

  • Os nós da maioria das bibliotecas incluirão o formato da categoria

  • Point.ByCoordinates e UV.ByCoordinates têm o mesmo nome, mas são provenientes de diferentes categorias

  • Exceções notáveis incluem funções incorporadas, Core.Input, Core.View e Operators

Nós usados com frequência

Com centenas de nós incluídos na instalação básica do Dynamo, quais são essenciais para o desenvolvimento de nossos programas visuais? Vamos nos concentrar naqueles que nos permitem definir os parâmetros do programa (Entrada), ver os resultados de uma ação do nó (Inspeção) e definir entradas ou funcionalidades por meio de um atalho (Bloco de código).

Nós de entrada

Os nós de entrada são os principais meios para o usuário do nosso Programa visual, seja você mesmo ou outra pessoa, fazer a interface com os parâmetros mais importantes. Confira alguns exemplos disponíveis na biblioteca principal:

Nó
Nó

Booleano

Número

Sequência de caracteres

Controle deslizante de números

Caminho do diretório

Controle deslizante de números inteiros

Caminho do arquivo

Inspeção e Watch3D

Os nós de inspeção são essenciais para gerenciar os dados que fluem através do Programa visual. É possível visualizar o resultado de um nó através da visualização dos dados do nó passando o cursor do mouse sobre o nó.

É útil manter a exibição dessas informações em um nó de Inspeção

Ou consultar os resultados da geometria através de um nó Watch3D.

Ambos são encontrados na categoria da vista na biblioteca principal.

Dica: Às vezes, a visualização 3D pode causar distrações, quando o Programa visual contém muitos nós. Considere desmarcar a opção Exibir visualização de plano de fundo no menu Configurações e usar um nó Watch3D para visualizar a geometria.

Bloco de código

Os nós Code Block podem ser utilizados para definir um Code Block com linhas separadas por ponto e vírgula. Isso pode ser tão simples quanto X/Y.

Também é possível usar os blocos de código como um atalho para definir uma entrada de número ou acionar outra funcionalidade do nó. A sintaxe para fazer isso segue a convenção de nomenclatura da linguagem textual do Dynamo, DesignScript.

Confira aqui uma demonstração simples (com instruções) para usar o Bloco de código no script.

  1. Clique duas vezes para criar um nó de bloco de código

  2. Circle.ByCenterPointRadius(x,y);Type

  3. Clique no espaço de trabalho para limpar a seleção e adicionar as entradas x e y automaticamente.

  4. Crie um nó Point.ByCoordinates e um controle deslizante de número e, em seguida, conecte-os às entradas do Bloco de código.

  5. O resultado da execução do Programa visual é mostrado como o círculo na visualização 3D

Conceitos básicos da geometria DesignScript

Ponto

O objeto geométrico mais simples da biblioteca de geometria padrão do Dynamo é um ponto. Toda a geometria é criada usando funções especiais chamadas construtores, cada uma delas retorna uma nova instância desse tipo de geometria específico. No Dynamo, os construtores começam com o nome do tipo do objeto, neste caso, Ponto, seguido pelo método de construção. Para criar um ponto tridimensional especificado pelas coordenadas cartesianas x, y e z, use o construtor ByCoordinates:

// create a point with the following x, y, and z
// coordinates:
x = 10;
y = 2.5;
z = -6;

p = Point.ByCoordinates(x, y, z);

Os construtores no Dynamo normalmente são designados com o prefixo “By” e a chamada dessas funções retorna um objeto recém-criado desse tipo. Esse objeto recém-criado é armazenado na variável nomeada no lado esquerdo do sinal de igual.

A maioria dos objetos tem muitos construtores diferentes, e podemos usar o construtor BySphericalCoordinates para criar um ponto sobre uma esfera, especificado pelo raio da esfera, um primeiro ângulo de rotação e um segundo ângulo de rotação (especificado em graus):

// create a point on a sphere with the following radius,
// theta, and phi rotation angles (specified in degrees)
radius = 5;
theta = 75.5;
phi = 120.3;
cs = CoordinateSystem.Identity();

p = Point.BySphericalCoordinates(cs, radius, theta,
    phi);

De ponto para linha

É possível usar os pontos para construir uma geometria dimensional maior, como linhas. Podemos usar o construtor ByStartPointEndPoint para criar um objeto de linha entre dois pontos:

// create two points:
p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);

// construct a line between p1 and p2
l = Line.ByStartPointEndPoint(p1, p2);

De linha para superfície

De forma semelhante, é possível usar as linhas para criar uma geometria de superfície dimensional maior; por exemplo, usando o construtor Loft, que assume uma série de linhas ou curvas e interpola uma superfície entre elas.

// create points:
p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);

p3 = Point.ByCoordinates(5, -3, 5);
p4 = Point.ByCoordinates(-5, -6, 2);

p5 = Point.ByCoordinates(9, -10, -2);
p6 = Point.ByCoordinates(-11, -12, -4);

// create lines:
l1 = Line.ByStartPointEndPoint(p1, p2);
l2 = Line.ByStartPointEndPoint(p3, p4);
l3 = Line.ByStartPointEndPoint(p5, p6);

// loft between cross section lines:
surf = Surface.ByLoft([l1, l2, l3]);

De superfície para sólido

Também é possível usar as superfícies para criar uma geometria sólida dimensional maior, por exemplo, espessando a superfície por uma distância especificada. Muitos objetos possuem funções associadas a eles, chamados métodos, permitindo que o programador execute comandos nesse objeto em particular. Os métodos comuns a todas as porções de geometria incluem Translate e Rotate, que, respectivamente, convertem (movem) e rotacionam a geometria por um valor especificado. As superfícies apresentam um método Thicken, que recebe uma única entrada, um número que especifica a nova espessura da superfície.

p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);

p3 = Point.ByCoordinates(5, -3, 5);
p4 = Point.ByCoordinates(-5, -6, 2);

l1 = Line.ByStartPointEndPoint(p1, p2);
l2 = Line.ByStartPointEndPoint(p3, p4);

surf = Surface.ByLoft([l1, l2]);

// true indicates to thicken both sides of the Surface:
solid = surf.Thicken(4.75, true);

Intersecionar

Os comandos Intersection podem extrair geometria dimensional menor de objetos dimensionais maiores. Essa geometria dimensional menor extraída pode formar a base para uma geometria dimensional maior, em um processo cíclico de criação, extração e recriação geométrica. Neste exemplo, usamos o sólido gerado para criar uma superfície e usamos a superfície para criar uma curva.

p1 = Point.ByCoordinates(3, 10, 2);
p2 = Point.ByCoordinates(-15, 7, 0.5);

p3 = Point.ByCoordinates(5, -3, 5);
p4 = Point.ByCoordinates(-5, -6, 2);

l1 = Line.ByStartPointEndPoint(p1, p2);
l2 = Line.ByStartPointEndPoint(p3, p4);

surf = Surface.ByLoft([l1, l2]);

solid = surf.Thicken(4.75, true);

p = Plane.ByOriginNormal(Point.ByCoordinates(2, 0, 0),
    Vector.ByCoordinates(1, 1, 1));

int_surf = solid.Intersect(p);

int_line = int_surf.Intersect(Plane.ByOriginNormal(
    Point.ByCoordinates(0, 0, 0),
    Vector.ByCoordinates(1, 0, 0)));

Sintaxe do DesignScript

Você pode ter notado um tema comum nos nomes dos nós no Dynamo: cada nó usa uma sintaxe de “.” sem espaços. Isso ocorre porque o texto na parte superior de cada nó representa a sintaxe real dos scripts, e “.” (ou notação de ponto) separa um elemento dos métodos possíveis que podemos chamar. Isso cria uma conversão fácil de scripts visuais em scripts baseados em texto.

Como uma analogia geral da notação de ponto, como podemos lidar com uma maçã paramétrica no Dynamo? Abaixo estão alguns métodos que iremos executar na maçã antes de decidir comê-la. (Observação: Estes não são métodos reais do Dynamo):

Legível por humanos
Notação de ponto
Saída

Não sei o que você acha, mas com base nos resultados da tabela acima, parece uma maçã saborosa. Acho que vou nomeá-la Apple.eat().

Notação de ponto no bloco de código

Com a analogia da maçã em mente, vamos examinar Point.ByCoordinates e mostrar como podemos criar um ponto usando o bloco de código.

A sintaxe do bloco de código Point.ByCoordinates(0,10); fornece o mesmo resultado que um nó Point.ByCoordinates no Dynamo, exceto que podemos criar um ponto usando um nó. Isso é mais eficiente do que fazer a conexão com um nó separado em “X” e “Y”.

  1. Usando Point.ByCoordinates no bloco de código, estamos especificando as entradas na mesma ordem que o nó pronto para uso (X,Y).

Nós de chamada – Criar, Ações, Consulta

É possível chamar qualquer nó normal na biblioteca através de um bloco de código, desde que o nó não seja um nó da “IU” especial: aqueles com um recurso especial da interface do usuário. Por exemplo, é possível chamar Circle.ByCenterPointRadius, mas não faria muito sentido chamar um nó Watch 3D.

Os nós normais (a maioria da biblioteca) geralmente são de três tipos. Você verá que a biblioteca está organizada tendo em mente essas categorias. Os métodos ou nós desses três tipos são tratados de forma diferente quando executados dentro de um bloco de código.

  1. Criar – Cria (ou constrói) algo

  2. Ação – Realiza uma ação sobre algo

  3. Consulta – Obtém uma propriedade de algo que já existe

Criar

A categoria “Criar” construirá a geometria do zero. Inserimos valores no bloco de código da esquerda para a direita. Essas entradas estão na mesma ordem que as entradas no nó de cima para baixo.

Comparando o nó Line.ByStartPointEndPoint e a sintaxe correspondente no bloco de código, obtemos os mesmos resultados.

Ação

Uma ação é algo que você faz em relação a um objeto desse tipo. O Dynamo usa a notação de ponto, comum a muitas linguagens de codificação, para aplicar uma ação a um item. Uma vez que você tenha o item, digite um ponto e, em seguida, o nome da ação. A entrada do método do tipo de ação é colocada entre parênteses como acontece nos métodos do tipo de criação, com a diferença de não ser necessário especificar a primeira entrada que você vê no nó correspondente. Em vez disso, especificamos o elemento no qual estamos executando a ação:

  1. O nó Point.Add é um nó de tipo de ação, de modo que a sintaxe funciona de forma um pouco diferente.

  2. As entradas são (1) o ponto e (2) o vetor a ser adicionado. Em um Bloco de código, nomeamos o ponto (o item) “pt”. Para adicionar um vetor chamado “vec” a “pt”, podemos escrever pt.Add(vec) ou: item, ponto, ação. A ação Adicionar tem somente uma entrada ou todas as entradas do nó Point.Add, menos a primeira. A primeira entrada do nó Point.Add é o ponto em si.

Consulta

Os métodos de tipo consulta obtêm uma propriedade de um objeto. Como o próprio objeto é a entrada, não é necessário especificar nenhuma entrada. Nenhum parêntese é necessário.

E a amarra?

A amarra com nós é um pouco diferente da amarra com bloco de código. Com nós, o usuário clica com o botão direito do mouse no nó e seleciona a opção de amarra a ser executada. Com o bloco de código, o usuário tem muito mais controle sobre como os dados são estruturados. O método abreviado do bloco de código usa guias de replicação para definir como várias listas unidimensionais devem ser emparelhadas. Os números entre colchetes angulares “<>” definem a hierarquia da lista aninhada resultante: <1>,<2>,<3> etc.

  1. Neste exemplo, usaremos uma abreviação para definir dois intervalos (obtenha mais informações sobre abreviação na seção seguinte deste capítulo). Em resumo, 0..1; é equivalente a {0,1} e -3..-7 é equivalente a {-3,-4,-5,-6,-7}. O resultado nos fornece listas de dois valores x e cinco valores y. Se não usarmos guias de replicação com estas listas não coincidentes, obteremos uma lista de dois pontos, que é o comprimento da lista mais curta. Usando guias de replicação, podemos encontrar todas as possíveis combinações de coordenadas 2 e 5 (ou um Produto transversal).

  2. Usando a sintaxe Point.ByCoordinates(x_vals<1>,y_vals<2>);, obtemos duas listas com cinco itens em cada lista.

  3. Usando a sintaxe Point.ByCoordinates(x_vals<2>,y_vals<1>);, obtemos cinco listas com dois itens em cada lista.

Com essa notação, também podemos especificar qual lista será dominante: 2 listas de 5 itens ou 5 listas de 2 itens. No exemplo, alterar a ordem dos guias de replicação resulta em uma lista de linhas de pontos ou em uma lista de colunas de pontos em um eixo.

Nó para código

Embora os métodos de bloco de código acima possam ter algumas informações úteis, há um recurso no Dynamo chamado “Nó para código” que tornará o processo mais fácil. Para usar esse recurso, selecione uma matriz de nós no gráfico do Dynamo, clique com o botão direito do mouse na tela e selecione “Nó para código”. O Dynamo condensa esses nós em um bloco de código, com todas as entradas e saídas. Não só essa é uma ótima ferramenta para a aprendizagem do bloco de código, como também permite que você trabalhe com um gráfico do Dynamo mais eficiente e paramétrico. Concluiremos o exercício abaixo usando “Nó para código”, por isso, continue acompanhando.

Exercício: Atração de superfície

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Para mostrar as capacidades do bloco de código, vamos converter uma definição de campo atrativo existente em formato de bloco de código. O trabalho com uma definição existente demonstra como o bloco de código se relaciona com os scripts visuais e é útil para aprender a sintaxe do DesignScript.

Comece recriando a definição na imagem acima (ou abrindo o arquivo de amostra).

  1. Observe que a amarra em Point.ByCoordinates foi definida como Produto transversal.

  2. Cada ponto em um eixo é movido para cima na direção Z com base em sua distância até o ponto de referência.

  3. Uma superfície é recriada e espessada, criando uma convexidade na geometria relacionada à distância até o ponto de referência.

  1. Começando do início, vamos definir primeiro o ponto de referência: Point.ByCoordinates(x,y,0); Usamos a mesma sintaxe Point.ByCoordinates como especificado na parte superior do nó do ponto de referência.

  2. As variáveis x e y são inseridas no Bloco de código de forma que possamos atualizá-las dinamicamente com controles deslizantes.

  3. Adicione alguns controles deslizantes às entradas de Bloco de código que variam de -50 a 50. Dessa forma, podemos expandir através do eixo padrão do Dynamo.

  1. Na segunda linha do Bloco de código, definimos uma abreviação para substituir o nó de sequência numérica: coordsXY = (-50..50..#11);Discutiremos mais sobre isso na próxima seção. Por enquanto, observe que essa abreviação é equivalente ao nó Sequência numérica no script visual.

  1. Agora, queremos criar um eixo de pontos com base na sequência coordsXY. Para fazer isso, queremos usar a sintaxe Point.ByCoordinates, mas também precisamos iniciar um Produto transversal da lista da mesma maneira que fizemos no script visual. Para fazer isso, digitamos a linha: gridPts = Point.ByCoordinates(coordsXY<1>,coordsXY<2>,0); Os colchetes angulares indicam a referência do produto transversal.

  2. Observe no nó Watch3D que temos um eixo de pontos no eixo do Dynamo.

  1. Agora, a parte difícil: queremos mover o eixo de pontos para cima com base na distância deles até o ponto de referência. Primeiro, vamos chamar esse novo conjunto de pontos transPts. E, como uma conversão é uma ação em um elemento existente, em vez de usar Geometry.Translate..., vamos usar gridPts.Translate

  2. Lendo o nó real na tela, vemos que há três entradas. A geometria para converter já está declarada porque estamos executando a ação naquele elemento (com gridPts.Translate). As duas entradas restantes serão inseridas entre os parênteses da função: direção e distância.

  3. A direção é muito simples, usamos um Vector.ZAxis() para mover verticalmente.

  4. A distância entre o ponto de referência e cada ponto do eixo ainda precisa ser calculada; portanto, fazemos isso como uma ação para o ponto de referência da mesma maneira: refPt.DistanceTo(gridPts)

  5. A linha final do código fornece os pontos convertidos: transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));

  1. Agora, temos um eixo de pontos com a estrutura de dados apropriada para criar uma superfície Nurbs. Construímos a superfície usando srf = NurbsSurface.ByControlPoints(transPts);

  1. E, finalmente, para adicionar alguma profundidade à superfície, construímos um sólido usando solid = srf.Thicken(5); Neste caso, aumentamos a espessura da superfície 5 unidades no código, mas sempre podemos declará-la como uma variável (chamando-a de espessura, por exemplo) e, em seguida, controlamos esse valor com um controle deslizante.

Simplificar o gráfico com “Nó para código”

O recurso “Nó para código” automatiza todo o exercício que acabamos de concluir com o clique de um botão. Isso não só é eficaz para criar definições personalizadas e blocos de código reutilizáveis, também é uma ferramenta realmente útil para saber como criar um script no Dynamo:

  1. Inicie com o script visual existente na etapa 1 do exercício. Selecione todos os nós, clique com o botão direito do mouse na tela e selecione “Nó para código”. É tão simples quanto isso.

O Dynamo automatizou uma versão com base em texto do gráfico visual, incluindo a amarra e outros itens. Teste isso em seus scripts visuais e aproveite ao máximo o recurso de bloco de código.

Python e Revit

Python e Revit

Agora que demonstramos como usar scripts Python no Dynamo, vamos analisar como conectar as bibliotecas do Revit ao ambiente de scripts. Lembre-se, importamos os nós do núcleo padrão do Python e os nossos do Dynamo com as quatro primeiras linhas do bloco de código abaixo. Para importar os nós, os elementos e o gerenciador de documentos do Revit, só precisamos adicionar mais algumas linhas:

Isso nos fornece acesso à API do Revit e oferece scripts personalizados para qualquer tarefa do Revit. Ao combinar o processo de programação visual com scripts da API do Revit, a colaboração e o desenvolvimento de ferramentas melhoram significativamente. Por exemplo, um gerente do BIM e um projetista esquemático podem trabalhar juntos no mesmo gráfico. Nessa colaboração, eles podem aprimorar o projeto e a execução do modelo.

APIs específicas da plataforma

O plano por trás do projeto do Dynamo é ampliar o escopo da implementação da plataforma. À medida que o Dynamo adiciona mais programas ao registro, os usuários obterão acesso a APIs específicas de plataforma do ambiente de scripts Python. Embora o Revit seja o estudo de caso desta seção, podemos prever mais capítulos que oferecem tutoriais abrangentes sobre scripts em outras plataformas. Além disso, agora há muitas bibliotecas acessíveis que podem ser importadas para o Dynamo.

Os exemplos abaixo demonstram as maneiras de implementar operações específicas do Revit no Dynamo usando o Python. Para obter uma análise mais detalhada sobre a relação do Python com o Dynamo e o Revit, consulte a . Outro recurso útil para o Python e o Revit é o projeto .

Exercício 1

Crie um novo projeto do Revit.

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Nestes exercícios, vamos explorar os scripts Python elementares no Dynamo for Revit. O exercício se concentrará em lidar com os arquivos e elementos do Revit, bem como na comunicação entre o Revit e o Dynamo.

Este é um método simples para recuperar o doc, uiapp e app do arquivo do Revit vinculado à sessão do Dynamo. Os programadores que já trabalharam na API do Revit podem observar os itens na lista de inspeção. Se esses itens não parecerem familiares, não há problema, usaremos outros exemplos nos exercícios abaixo.

Confira a seguir como importamos serviços do Revit e recuperamos os dados do documento no Dynamo.

Veja o nó do Python no Dynamo. Você também pode encontrar o código abaixo:

Exercício 2

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Neste exercício, vamos criar uma curva de modelo simples no Revit usando o nó do Python do Dynamo.

Comece criando uma nova família de massa conceitual no Revit.

Abra a Pasta de massa conceitual e use o arquivo de modelo Metric Mass.rft.

No Revit, use o atalho de teclado un para abrir as configurações da unidade do projeto e altere a unidade de comprimento para metros.

Inicie o Dynamo e crie o conjunto de nós na imagem abaixo. Primeiro, criaremos dois pontos de referência no Revit com base nos nós do Dynamo.

  1. Crie um bloco de código e atribua o valor "0;"

  2. Conecte esse valor a um nó ReferencePoint.ByCoordinates para as entradas X, Y e Z.

  3. Crie três controles deslizantes, variando de -100 a 100 com um tamanho de etapa de 1.

  4. Conecte cada controle deslizante a um nó ReferencePoint.ByCoordinates.

  5. Adicione um nó do Python ao espaço de trabalho, clique no botão “+” no nó para adicionar outra entrada e conecte os dois pontos de referência em cada entrada. Abra o nó do Python.

Veja o nó do Python no Dynamo. Encontre o código completo abaixo.

  1. System.Array: o Revit precisa de uma matriz do sistema como uma entrada (em vez de uma lista do Python). Isso é apenas mais uma linha de código, mas prestar atenção aos tipos de argumentos facilitará a programação em Python no Revit.

No Dynamo, criamos dois pontos de referência com uma linha que os conecta usando o Python. Vamos aprofundar isso um pouco no próximo exercício.

Exercício 3

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Este exercício mantém a simplicidade, mas esclarece os tópicos de conexão de dados e a geometria do Revit para o Dynamo e vice-versa. Começaremos abrindo o Revit-StructuralFraming.rvt. Depois de aberto, inicie o Dynamo e abra o arquivo Revit-StructuralFraming.dyn.

Esse arquivo do Revit é o mais básico possível. Duas curvas de referência: uma desenhada no Nível 1 e outra desenhada no Nível 2. Queremos inserir essas curvas no Dynamo e manter um vínculo dinâmico.

Nesse arquivo, temos um conjunto de nós que se conectam a cinco entradas de um nó do Python.

  1. Nós Selecionar elemento do modelo: clique no botão de seleção para cada um e selecione uma curva correspondente no Revit.

  2. Bloco de código:: usando a sintaxe 0..1..#x;, conecte um controle deslizante de número inteiro que varia entre 0 e 20 à entrada x. Isso especifica o número de vigas a serem desenhadas entre as duas curvas.

  3. Tipos de framing estrutural: escolheremos a viga padrão W12x26 na opção do menu suspenso.

  4. Níveis: selecione “Nível 1”.

Esse código no Python é um pouco mais denso, mas os comentários no código descrevem o que está acontecendo no processo

No Revit, temos uma matriz de vigas que se estendem pelas duas curvas como elementos estruturais. Observação: Este exemplo não é realista... os elementos estruturais são usados como um exemplo para instâncias nativas do Revit criadas no Dynamo.

No Dynamo, também podemos ver os resultados. As vigas no nó Watch3D se referem à geometria consultada dos elementos do Revit.

Observe que temos um processo contínuo de conversão de dados do ambiente do Revit para o ambiente do Dynamo. Em resumo, veja como o processo é realizado:

  1. Selecionar o elemento do Revit

  2. Converter o elemento do Revit em curva do Dynamo

  3. Dividir a curva do Dynamo em uma série de pontos do Dynamo

  4. Usar os pontos do Dynamo entre duas curvas para criar linhas do Dynamo

  5. Criar vigas do Revit referenciando linhas do Dynamo

  6. Gerar saída de superfícies do Dynamo ao consultar a geometria de vigas do Revit

Isso pode parecer um pouco severo, mas o script torna isso tão simples quando editar a curva no Revit e executar novamente o solucionador (embora você possa precisar excluir as vigas anteriores ao fazer isso). Isso se deve ao fato de que estamos colocando vigas no Python e, portanto, quebrando a associação que os nós prontos para uso têm.

Com uma atualização das curvas de referência no Revit, obtemos uma nova matriz de vigas.

Qual é a cor da maçã?

Apple.color

vermelho

A maçã está madura?

Apple.isRipe

true

Quanto a maçã pesa?

Apple.weight

170 g

De onde veio a maçã?

Apple.parent

árvore

O que a maçã cria?

Apple.children

sementes

Esta maçã foi cultivada localmente?

Apple.distanceFromOrchard

96 km

14KB
Dynamo-Syntax_Attractor-Surface.dyn
NodeNames
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

# Import RevitNodes
clr.AddReference("RevitNodes")
import Revit

# Import Revit elements
from Revit.Elements import *

# Import DocumentManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager

import System
# Load the Python Standard and DesignScript Libraries
import sys
import clr

#Import DocumentManager
clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager

#Place your code below this line
doc = DocumentManager.Instance.CurrentDBDocument
uiapp = DocumentManager.Instance.CurrentUIApplication
app = uiapp.Application

#Assign your output to the OUT variable
OUT = [doc,uiapp,app]
import sys
import clr

# Import RevitNodes
clr.AddReference("RevitNodes")
import Revit
#Import Revit elements
from Revit.Elements import *
import System

#define inputs
startRefPt = IN[0]
endRefPt = IN[1]

#define system array to match with required inputs
refPtArray = System.Array[ReferencePoint]([startRefPt, endRefPt])

#create curve by reference points in Revit
OUT = CurveByPoints.ByReferencePoints(refPtArray)
import clr
#import Dynamo Geometry
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
# Import RevitNodes
clr.AddReference("RevitNodes")
import Revit
# Import Revit elements
from Revit.Elements import *
import System

#Query Revit elements and convert them to Dynamo Curves
crvA=IN[0].Curves[0]
crvB=IN[1].Curves[0]

#Define input Parameters
framingType=IN[3]
designLevel=IN[4]

#Define "out" as a list
OUT=[]

for val in IN[2]:
	#Define Dynamo Points on each curve
	ptA=Curve.PointAtParameter(crvA,val)
	ptB=Curve.PointAtParameter(crvB,val)
	#Create Dynamo line
	beamCrv=Line.ByStartPointEndPoint(ptA,ptB)
	#create Revit Element from Dynamo Curves
	beam = StructuralFraming.BeamByCurve(beamCrv,designLevel,framingType)
	#convert Revit Element into list of Dynamo Surfaces
	OUT.append(beam.Faces)
IronPython
página Wiki do Dynamo
Revit Python Shell
2KB
Revit-Doc.dyn
10KB
Revit-ReferenceCurve.dyn
3MB
Revit-StructuralFraming.zip
archive
Logo

Listas n-dimensionais

Em um passo mais avançado, vamos adicionar ainda mais camadas à hierarquia. A estrutura de dados pode se expandir muito além de uma lista bidimensional de listas. Como as listas são itens por si só no Dynamo, podemos criar dados com tantas dimensões quanto possível.

A analogia com a qual vamos trabalhar aqui são as bonecas russas. Cada lista pode ser considerada como um contêiner com vários itens. Cada lista tem suas próprias propriedades e também é considerada como seu próprio objeto.

Bonecas

Um conjunto de bonecas russas (Foto de Zeta) é uma analogia das Listas n-dimensionais. Cada camada representa uma lista e cada lista contém itens. No caso do Dynamo, cada contêiner pode ter vários contêineres dentro (representando os itens de cada lista).

As listas n-dimensionais são difíceis de explicar visualmente, mas criamos alguns exercícios neste capítulo, focados no trabalho com listas que vão além de duas dimensões.

Mapeamento e combinações

O mapeamento é, sem dúvida, a parte mais complexa do gerenciamento de dados no Dynamo e é especialmente relevante ao trabalhar com hierarquias complexas de listas. Com a série de exercícios abaixo, vamos demonstrar quando usar o mapeamento e as combinações, à medida que os dados se tornam multidimensionais.

A introdução inicial a List.Map e List.Combine pode ser encontrada na seção anterior. No último exercício abaixo, vamos usar esses nós em uma estrutura de dados complexa.

Exercício – Listas 2D – Básico

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

33KB
n-Dimensional-Lists.zip
archive

Este exercício é o primeiro de uma série de três focado na articulação da geometria importada. Cada parte desta série de exercícios aumenta a complexidade da estrutura de dados.

Exercício
  1. Vamos começar com o arquivo .sat na pasta de arquivos de exercícios. É possível selecionar esse arquivo usando o nó Caminho do arquivo.

  2. Com Geometry.ImportFromSAT, a geometria é importada para nossa visualização do Dynamo como duas superfícies.

Neste exercício, queremos mantê-la simples e trabalhar com uma das superfícies.

  1. Vamos selecionar o índice de 1 para selecionar a superfície superior. Isso é feito com o nó List.GetItemAtIndex.

  2. Desative a visualização da geometria da visualização de Geometry.ImportFromSAT.

A próxima etapa é dividir a superfície em um eixo de pontos.

1. Usando o Bloco de código, insira estas duas linhas de código: 0..1..#10; 0..1..#5;

2. Com Surface.PointAtParameter, conecte os dois valores do bloco de código a u e v. Altere a amarra desse nó para “Produto transversal”.

3. A saída exibe a estrutura de dados, que também está visível na visualização do Dynamo.

Em seguida, usamos os Pontos da última etapa para gerar dez curvas ao longo da superfície.

  1. Para obter uma visão de como a estrutura de dados está organizada, vamos conectar NurbsCurve.ByPoints à saída de Surface.PointAtParameter.

  2. Você pode desativar a visualização do nó List.GetItemAtIndex por enquanto para obter um resultado mais claro.

  1. Um List.Transpose básico inverterá as colunas e as linhas de uma lista de listas.

  2. Conectando a saída de List.Transpose a NurbsCurve.ByPoints, agora obtemos cinco curvas sendo executadas horizontalmente na superfície.

  3. Você pode desativar a visualização do nó NurbsCurve.ByPoints na etapa anterior para obter o mesmo resultado na imagem.

Exercício – Listas 2D – Avançado

Vamos aumentar a complexidade. Suponha que desejamos executar uma operação nas curvas criadas no exercício anterior. Talvez desejemos relacionar essas curvas com outra superfície e fazer a transição entre elas. Isso requer mais atenção à estrutura de dados, mas a lógica é a mesma.

  1. Comece com uma etapa do exercício anterior, isolando a superfície superior da geometria importada com o nó List.GetItemAtIndex.

  1. Usando Surface.Offset, desloque a superfície por um valor de 10.

  1. Da mesma forma que no exercício anterior, defina um bloco de código com estas duas linhas de código: 0..1..#10; 0..1..#5;

  2. Conecte essas saídas aos dois nós Surface.PointAtParameter, cada um com a amarra definida como “Produto transversal”. Um desses nós está conectado à superfície original, enquanto o outro está conectado à superfície de deslocamento.

  1. Desative a visualização dessas superfícies.

  2. Como no exercício anterior, conecte as saídas aos dois nós NurbsCurve.ByPoints. O resultado mostra curvas correspondentes às duas superfícies.

  1. Usando List.Create, é possível combinar os dois conjuntos de curvas em uma lista de listas.

  2. Observe que, na saída, temos duas listas com dez itens em cada uma, representando cada conjunto de conexão de curvas Nurbs.

  3. Executando o nó Surface.ByLoft, podemos entender visualmente essa estrutura de dados. O nó efetua a transição de todas as curvas em cada sublista.

  1. Desative a visualização do nó Surface.ByLoft na etapa anterior.

  2. Se List.Transpose for usado, lembre-se de que estamos invertendo todas as colunas e linhas. Esse nó transferirá duas listas de dez curvas em dez listas de duas curvas. Agora, temos cada curva Nurbs relacionada à curva vizinha na outra superfície.

  3. Usando Surface.ByLoft, chegamos a uma estrutura nervurada.

Em seguida, demonstraremos um processo alternativo para alcançar esse resultado

  1. Antes de começarmos, desative a visualização de Surface.ByLoft na etapa anterior para evitar confusão.

  2. Uma alternativa para List.Transpose é usar List.Combine. Isso executará um “combinador” em cada sublista.

  3. Neste caso, estamos usando List.Create como o “combinador”, o que criará uma lista de cada item nas sublistas.

  4. Usando o nó Surface.ByLoft, obtemos as mesmas superfícies que as da etapa anterior. A transposição é mais fácil de usar nesse caso, mas quando a estrutura de dados se torna ainda mais complexa, List.Combine é mais confiável.

  1. Retrocedendo algumas etapas, se quisermos alternar a orientação das curvas na estrutura nervurada, deveremos usar List.Transpose antes de conectar a NurbsCurve.ByPoints. Isso inverterá as colunas e linhas, resultando em cinco nervuras horizontais.

Exercício – Listas 3D

Agora, vamos um pouco mais longe. Neste exercício, vamos trabalhar com as duas superfícies importadas, criando uma hierarquia de dados complexa. Ainda assim, nosso objetivo é concluir a mesma operação com a mesma lógica subjacente.

Comece com o arquivo importado do exercício anterior.

  1. Como no exercício anterior, use o nó Surface.Offset para deslocar por um valor de 10.

  2. Observe, na saída, que criamos duas superfícies com o nó de deslocamento.

  1. Da mesma forma que no exercício anterior, defina um Bloco de código com estas duas linhas de código: 0..1..#20; 0..1..#20;

  2. Conecte essas saídas aos dois nós Surface.PointAtParameter, cada um com a amarra definida como “Produto transversal”. Um desses nós está conectado às superfícies originais, enquanto o outro está conectado às superfícies de deslocamento.

  1. Como no exercício anterior, conecte as saídas aos dois nós NurbsCurve.ByPoints.

  2. Observando a saída de NurbsCurve.ByPoints,, é possível ver que esta é uma lista de duas listas, que é mais complexa do que no exercício anterior. Os dados são categorizados pela superfície subjacente; portanto, adicionamos outro nível aos dados estruturados.

  3. Observe que as coisas se tornam mais complexas no nó Surface.PointAtParameter. Neste caso, temos uma lista de listas de listas.

  1. Antes de prosseguir, desative a visualização das superfícies existentes.

  2. Usando o nó List.Create, mesclamos as curvas Nurbs em uma estrutura de dados, criando uma lista de listas de listas.

  3. Conectando um nó Surface.ByLoft, obtemos uma versão das superfícies originais, pois cada uma delas permanece em sua própria lista, conforme foram criadas com base na estrutura de dados original.

  1. No exercício anterior, usamos List.Transpose para criar uma estrutura nervurada. Isso não funcionará aqui. A transposição deve ser usada em uma lista bidimensional e, como nós temos uma lista tridimensional, uma operação de “inverter colunas e linhas” não funcionará tão facilmente. Lembre-se de que as listas são objetos; portanto, List.Transpose inverterá nossas listas com as sublistas, mas não inverterá as curvas Nurbs uma lista mais abaixo na hierarquia.

  1. List.Combine funcionará melhor neste caso. Devemos usar os nós List.Map e List.Combine quando chegarmos a estruturas de dados mais complexas.

  2. Usando List.Create como o “combinador”, criamos uma estrutura de dados que funcionará melhor.

  1. A estrutura de dados ainda precisa ser transposta uma etapa abaixo na hierarquia. Para fazer isso, vamos usar List.Map. Isso funciona como List.Combine, mas com uma lista de entrada, em vez de duas ou mais.

  2. A função que será aplicada a List.Map é List.Transpose, que inverterá as colunas e as linhas das sublistas em nossa lista principal.

  1. Finalmente, podemos fazer a transição entre as curvas Nurbs junto com uma hierarquia de dados adequada, gerando uma estrutura nervurada.

  1. Vamos adicionar alguma profundidade à geometria com um nó Surface.Thicken, com as configurações de entrada conforme mostrado.

  1. É recomendado adicionar uma superfície de apoio a duas estruturas; portanto, adicione outro nó Surface.ByLoft e use a primeira saída de NurbsCurve.ByPoints de uma etapa anterior como entrada.

  2. À medida que a visualização for ficando confusa, desative a visualização desses nós clicando com o botão direito do mouse em cada um deles e desmarque a opção “Visualização” para ver melhor o resultado.

  1. Depois de tornarmos mais espessas essas superfícies selecionadas, nossa articulação estará completa.

Não é a cadeira de balanço mais confortável de todos os tempos, mas há muitos dados em jogo.

Última etapa: vamos inverter a direção dos membros com listras. Como usamos a função de transposição no exercício anterior, faremos algo semelhante aqui.

  1. Como temos mais um nível para a hierarquia, vamos precisar usar List.Map com uma função de List.Transpose para alterar a direção das curvas Nurbs.

  1. Podemos querer aumentar o número de degraus, então podemos alterar o Bloco de código para 0..1..#20; 0..1..#30;

Como a primeira versão da cadeira de balanço era elegante, nosso segundo modelo oferece uma versão alternativa, de utilidade esportiva para descanso dorsal.

Personalizar

Apesar de anteriormente termos examinado a edição de uma massa de construção básica, desejamos aprofundar o vínculo do Dynamo/Revit editando um grande número de elementos de uma só vez. Personalizar em uma grande escala se torna mais complexo, já que as estruturas de dados requerem operações de lista mais avançadas. No entanto, os princípios subjacentes por trás de sua execução são fundamentalmente os mesmos. Vamos estudar algumas oportunidades para análise com base em um conjunto de componentes adaptativos.

Localização do ponto

Suponha que criamos uma faixa de componentes adaptativos e que desejamos editar os parâmetros com base nas localizações dos pontos. Os pontos, por exemplo, podem determinar um parâmetro de espessura que está relacionado com a área do elemento. Ou, eles poderiam determinar um parâmetro de opacidade relacionado à exposição solar durante o ano. O Dynamo permite a conexão entre análise e parâmetros por meio de algumas etapas simples. Vamos explorar uma versão básica no exercício abaixo.

Consulte os pontos adaptativos de um componente adaptativo selecionado usando o nó AdaptiveComponent.Locations. Isso nos permite trabalhar com uma versão abstrata de um elemento do Revit para análise.

Ao extrair a localização dos pontos dos componentes adaptativos, podemos executar uma faixa de análise para aquele elemento. Um componente adaptativo de quatro pontos permitirá estudar o desvio do plano para um determinado painel, por exemplo.

Análise da orientação solar

Use o remapeamento para mapear um conjunto de dados para um intervalo de parâmetros. Essa é uma ferramenta fundamental usada em um modelo paramétrico e vamos demonstrá-la no exercício abaixo.

Usando o Dynamo, é possível usar as localizações dos pontos dos componentes adaptativos para criar um plano de melhor ajuste para cada elemento. Também podemos consultar a posição do sol no arquivo do Revit e estudar a orientação relativa do plano em relação ao sol em comparação com outros componentes adaptativos. Vamos definir isso no exercício abaixo, criando um ambiente algorítmico.

Exercício

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

5MB
Revit-Customizing.zip
archive

Este exercício permite expandir as técnicas demonstradas na seção anterior. Neste caso, estamos definindo uma superfície paramétrica com base em elementos do Revit, instanciando componentes adaptativos de quatro pontos e, em seguida, editando-os com base na orientação em relação ao sol.

  1. Comece selecionando duas arestas com o nó “Selecionar aresta”. As duas arestas são os vãos longos do átrio.

  2. Combine as duas arestas em uma lista com o nó List.Create.

  3. Crie uma superfície entre as duas arestas com Surface.ByLoft.

  1. Usando o bloco de código, defina um intervalo de 0 a 1 com 10 valores uniformemente espaçados: 0..1..#10;

  2. Conecte o bloco de código às entradas u e v de um nó Surface.PointAtParameter e conecte o nó Surface.ByLoft à entrada superfície. Clique com o botão direito do mouse no nó e altere a amarra para Produto transversal. Isso fornecerá uma grade de pontos na superfície.

Essa grade de pontos serve como os pontos de controle para uma superfície definida parametricamente. Queremos extrair as posições “u” e “v” de cada um desses pontos para que possamos conectá-los em uma fórmula paramétrica e manter a mesma estrutura de dados. É possível fazer isso consultando as localizações dos parâmetros dos pontos que acabamos de criar.

  1. Adicione um nó Surface.ParameterAtPoint à tela e conecte as entradas como mostrado acima.

  2. Consulte os valores u desses parâmetros com o nó UV.U.

  3. Consulte os valores v desses parâmetros com o nó UV.V.

  4. Os resultados mostram os valores u e v correspondentes a cada ponto da superfície. Agora, temos um intervalo de 0 a 1 para cada valor, na estrutura de dados apropriada; portanto, estamos prontos para aplicar um algoritmo paramétrico.

  1. Adicione um bloco de código à tela e insira o código: Math.Sin(u*180)*Math.Sin(v*180)*w; Essa é uma função paramétrica que cria um montículo senoidal de uma superfície plana.

  2. Conecta o UV.U à entrada u e o UV.V à entrada v.

  3. A entrada w representa a amplitude da forma; portanto, anexamos um controle deslizante de número a ela.

  1. Agora, temos uma lista de valores conforme definido pelo algoritmo. Vamos usar essa lista de valores para mover os pontos para cima na direção +Z. Usando Geometry.Translate, conecte o bloco de código a zTranslation e Surface.PointAtParameter à entrada geometria. Você deve ver os novos pontos exibidos na visualização do Dynamo.

  2. Finalmente, criamos uma superfície com o nó NurbsSurface.ByPoints, conectando o nó da etapa anterior à entrada de pontos. Dessa forma, obtemos uma superfície paramétrica. Sinta-se à vontade para arrastar o controle deslizante para ver o encolhimento e aumento dos montículos.

Com a superfície paramétrica, queremos definir uma forma de aplicar painéis para criar matrizes em quatro pontos de componentes adaptativos. O Dynamo não tem uma funcionalidade pronta para uso para aplicar painéis à superfície; portanto, podemos consultar a comunidade para obter pacotes úteis do Dynamo.

  1. Vá para Pacotes>Procurar um pacote...

  2. Procure “LunchBox” e instale “LunchBox for Dynamo”. Esse pacote tem um conjunto de ferramentas muito útil para operações de geometria, como esta.

  1. Após o fazer o download, você terá acesso completo ao conjunto LunchBox. Procure “Quad Grid” e selecione “LunchBox Quad Grid By Face”. Conecte a superfície paramétrica à entrada superfície e defina as divisões U e V como 15. Você deve ver uma superfície com painéis quad na visualização do Dynamo.

Se tiver curiosidade sobre a configuração, clique duas vezes no nó Lunch Box e veja como foi feito.

De volta ao Revit, vamos dar uma olhada rápida no componente adaptativo que estamos usando aqui. Não é necessário seguir, mas este é o painel do telhado que vamos instanciar. É um componente adaptativo de quatro pontos que é uma representação bruta de um sistema ETFE. A abertura do vazio central está em um parâmetro chamado “ApertureRatio”.

  1. Estamos prestes a instanciar uma grande quantidade de geometria no Revit; portanto, certifique-se de ativar o solucionador do Dynamo na opção “Manual”.

  2. Adicione um nó Tipos de família à tela e selecione “ROOF-PANEL-4PT”.

  3. Adicione um nó AdaptiveComponent.ByPoints à tela, conecte Pts do painel da saída “LunchBox Quad Grid by Face” à entrada pontos. Conecte o nó Tipos de família à entrada familySymbol.

  4. Pressione Executar. O Revit terá que pensar um pouco enquanto a geometria está sendo criada. Se demorar muito, reduza o número de “15” do bloco de código para um número menor. Isso reduzirá o número de painéis no telhado.

Observação: Se o Dynamo estiver demorando muito para calcular os nós, talvez seja recomendável usar a funcionalidade do nó “congelar” para pausar a execução das operações do Revit enquanto desenvolve o gráfico. Para obter mais informações sobre o congelamento de nós, consulte a seção “Congelar” no capítulo de sólidos.

De volta ao Revit, temos a matriz de painéis no telhado.

Aproximando o zoom, podemos ver mais de perto suas qualidades de superfície.

Análise

  1. Continuando com a etapa anterior, vamos avançar mais e determinar a abertura de cada painel com base em sua exposição solar. Aproximando o zoom no Revit e selecionando um painel, vemos que na barra de propriedades há um parâmetro chamado “Proporção de abertura”. A família é configurada de forma que a abertura se estenda, aproximadamente, de 0,05 a 0,45.

  1. Se ativarmos o caminho solar, será possível ver a localização atual do sol no Revit.

  1. É possível referenciar a localização do sol usando o nó SunSettings.Current.

  1. Conecte as configurações do sol a Sunsetting.SunDirection para obter o vetor solar.

  2. Nos Pts do painel usados para criar os componentes adaptativos, use Plane.ByBestFitThroughPoints para aproximar o plano do componente.

  3. Consulte a normal desse plano.

  4. Use o produto escalar para calcular a orientação solar. O produto escalar é uma fórmula que determina como dois vetores paralelos ou antiparalelos podem ser. Então, estamos tomando a normal do plano de cada componente adaptativo e comparando com o vetor solar para simular aproximadamente a orientação solar.

  5. Obtenha o valor absoluto do resultado. Isso assegura que o produto escalar seja preciso se a normal do plano estiver voltada para a direção reversa.

  6. Pressione Executar.

  1. Observando o produto escalar, temos uma ampla variedade de números. Queremos usar a distribuição relativa deles, mas precisamos condensar os números dentro do intervalo apropriado do parâmetro “Proporção de abertura” que planejamos editar.

  1. Math.RemapRange é uma ótima ferramenta para isso. Essa ferramenta analisa uma lista de entradas e remapeia seus limites em dois valores-alvo.

  2. Defina os valores-alvo como 0,15 e 0,45 em um bloco de código.

  3. Pressione Executar.

  1. Conecte os valores remapeados a um nó Element.SetParameterByName.

  1. Conecte a sequência de caracteres “Proporção de abertura” à entrada parameterName.

  2. Conecte os componentes adaptativos à entrada elemento.

  3. Pressione Executar.

De volta ao Revit, com base em uma distância, podemos fazer o efeito da orientação solar na abertura dos painéis ETFE.

Aproximando o zoom, vemos que os painéis ETFE estão mais fechados como a face do sol. Nosso objetivo aqui é reduzir o superaquecimento da exposição solar. Se quiséssemos deixar entrar mais luz com base na exposição solar, apenas precisaríamos alternar o domínio em Math.RemapRange.

Importação sem toque

O que é a funcionalidade Sem toque?

A importação sem toque é um método simples de apontar e clicar para importar bibliotecas C#. O Dynamo lê os métodos públicos de um arquivo .dll e os converte em nós do Dynamo. É possível usar a funcionalidade Sem toque para desenvolver seus próprios nós e pacotes personalizados e para importar bibliotecas externas para o ambiente do Dynamo.

  1. Arquivos .dll

  2. Nós do Dynamo

Com a funcionalidade Sem toque, é possível importar de fato uma biblioteca que não foi necessariamente desenvolvida para o Dynamo e criar um conjunto de novos nós. A funcionalidade Sem toque atual demonstra a mentalidade do projeto do Dynamo entre plataformas.

Esta seção demonstra como usar a funcionalidade Sem toque para importar uma biblioteca de terceiros. Para obter informações sobre como desenvolver sua própria biblioteca sem toque, consulte a .

Pacotes sem toque

Os pacotes sem toque são um bom complemento aos nós personalizados definidos pelo usuário. Alguns pacotes que usam bibliotecas C# são listados na tabela abaixo. Para obter informações mais detalhadas sobre os pacotes, consulte a seção no Apêndice.

Estudo de caso – Importar o AForge

Neste estudo de caso, vamos mostrar como importar a biblioteca .dll externa . O AForge é uma biblioteca robusta que oferece uma variedade de funcionalidades de processamento de imagens para inteligência artificial. Vamos fazer referência à classe de imagens no AForge para fazer alguns exercício de processamento de imagens abaixo.

Vamos começar por fazer o download do AForge. Na , selecione [Instalador de download] e faça a instalação após a conclusão do download.

No Dynamo, crie um novo arquivo e selecione Arquivo > Importar biblioteca...

Em seguida, localize o arquivo dll.

  1. Na janela pop-up, navegue até a pasta de lançamento na instalação do AForge. Provavelmente isso estará em uma pasta semelhante a esta: C:\Arquivos de Programas (x86)\AForge.NET\Framework\Release.

  2. AForge.Imaging.dll: somente queremos usar esse arquivo da biblioteca do AForge para este estudo de caso. Selecione este arquivo .dll e clique em “Abrir”.

De volta ao Dynamo, você deve ver um grupo de nós do AForge adicionados à biblioteca. Agora, temos acesso à biblioteca de imagens do AForge do nosso programa visual.

Exercício 1 – Detecção de bordas

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Agora que a biblioteca foi importada, começaremos de forma simples com este primeiro exercício (01-EdgeDetection.dyn). Vamos fazer um processamento básico de imagens em uma imagem de amostra para mostrar como o AForge filtra as imagens. Usaremos o nó “Inspeção de imagem” para mostrar nossos resultados e aplicar filtros no Dynamo de forma similar aos do Photoshop.

Para importar uma imagem, adicione um nó Caminho do arquivo à tela e selecione “soapbubbles.jpg” na pasta de exercícios (créd. foto: ).

O nó Caminho do arquivo simplesmente fornece uma sequência de caracteres do caminho para a imagem que selecionamos. Em seguida, precisamos convertê-la em um arquivo de imagem usável no Dynamo.

  1. Use Arquivo do caminho para converter o item do caminho do arquivo em uma imagem no ambiente do Dynamo.

  2. Conecte o nó Caminho do arquivo ao nó File.FromPath.

  3. Para converter esse arquivo em uma imagem, usaremos o nó Image.ReadFromFile.

  4. Por último, vamos ver o resultado. Solte um nó Inspeção de imagem na tela e conecte-se a Image.ReadFromFile. Ainda não usamos o AForge, mas importamos com êxito uma imagem para o Dynamo.

Em AForge.Imaging.AForge.Imaging.Filters (no menu de navegação), você notará que há uma ampla gama de filtros disponíveis. Agora, vamos usar um desses filtros para diminuir a saturação de uma imagem com base nos valores-limite.

  1. Solte três controles deslizantes na tela, altere seus intervalos para que fiquem de 0 a 1 e seus valores de etapas para 0,01.

  2. Adicione o nó Grayscale.Grayscale à tela. Esse é um filtro do AForge que aplica um filtro de escala de cinza a uma imagem. Conecte os três controles deslizantes da etapa 1 a cr, cg e cb. Altere os controles deslizantes superior e inferior para ter um valor de 1 e o controle deslizante do meio para ter um valor de 0.

  3. Para aplicar o filtro escala de cinza, é necessário executar uma ação em nossa imagem. Para isso, usamos BaseFilter.Apply. Conecte a imagem à entrada de imagem e Grayscale.Grayscale à entrada baseFilter.

  4. A conexão a um nó Inspeção de imagem permitirá obter uma imagem sem saturação.

Podemos ter controle sobre como diminuir a saturação dessa imagem com base nos valores-limite para vermelho, verde e azul. Esses valores são definidos pelas entradas para o nó Grayscale.Grayscale. Observe que a imagem parece muito escura, pois o valor verde está definido como 0 no controle deslizante.

  1. Altere os controles deslizantes superior e inferior para ter um valor de 0 e o controle deslizante do meio para ter um valor de 1. Dessa forma, obtemos uma imagem sem saturação mais legível.

Vamos usar a imagem sem saturação e aplicar outro filtro. A imagem sem saturação tem algum contraste, por isso, vamos testar a detecção de bordas.

  1. Adicione um nó SobelEdgeDetector.SobelEdgeDetector à tela.

  2. Conecte-o a BaseUsingCopyPartialFilter.Apply e conecte a imagem sem saturação à entrada de imagem desse nó.

  3. O Sobel Edge Detector realçou as bordas em uma nova imagem.

Aproximando o zoom, o detector de bordas destacou os contornos das bolhas com pixels. A biblioteca AForge tem ferramentas para obter resultados como este e criar a geometria do Dynamo. Vamos explorar isso no próximo exercício.

Exercício 2 – Criação de retângulo

Agora que aprendemos alguns conceitos básicos do processamento de imagens, vamos usar uma imagem para determinar a geometria do Dynamo. Neste exercício, em um nível elementar, temos como objetivo fazer um “Traço automático” de uma imagem usando o AForge e o Dynamo. Vamos simplificar e extrair retângulos de uma imagem de referência, mas há ferramentas disponíveis no AForge para operações mais complexas. Vamos trabalhar com 02-RectangleCreation.dyn dos arquivos de exercício que transferimos por download.

  1. Com o nó Caminho do arquivo, navegue para grid.jpg na pasta de exercícios.

  2. Conecte as séries restantes de nós acima para revelar um eixo paramétrico de curso.

Nesta próxima etapa, queremos fazer referência aos quadrados brancos na imagem e convertê-los em geometria real do Dynamo. O AForge tem muitas ferramentas eficazes de Pesquisa visual computacional e, aqui, vamos usar uma ferramenta particularmente importante para a biblioteca chamada .

  1. Após adicionar BlobCounter à tela, precisamos de uma forma de processar a imagem (de modo semelhante à ferramenta BaseFilter.Apply no exercício anterior).

Infelizmente, o nó “Processar imagem” não está imediatamente visível na biblioteca do Dynamo. Isso acontece porque a função pode não estar visível no código fonte do AForge. Para corrigir isso, precisamos encontrar uma solução alternativa.

  1. Adicione um nó Python à tela e adicione o seguinte código ao nó Python. Esse código importa a biblioteca AForge e, em seguida, processa a imagem importada.

Conectando a saída da imagem à entrada do nó Python, obtemos um resultado AForge.Imaging.BlobCounter do nó Python.

As próximas etapas abrangem alguns truques que demonstram familiaridade com a . Não é necessário aprender tudo isso para trabalhar no Dynamo. Esta é mais uma demonstração de como trabalhar com bibliotecas externas dentro da flexibilidade do ambiente do Dynamo.

  1. Conecte a saída do script Python a BlobCounterBase.GetObjectRectangles. Essa ação faz a leitura de objetos em uma imagem, com base em um valor-limite, e extrai retângulos quantificados do espaço de pixel.

  1. Adicione outro nó Python à tela, conecte-se a GetObjectRectangles e insira o código abaixo. Isso criará uma lista organizada de objetos do Dynamo.

  1. Transponha a saída do nó Python da etapa anterior. Isso cria quatro listas, cada uma representando X, Y, Largura e Altura para cada retângulo.

  2. Usando o bloco de código, organizamos os dados em uma estrutura que acomoda o nó Rectangle.ByCornerPoints (código abaixo).

Temos uma matriz de retângulos representando os quadrados brancos na imagem. Através da programação, fizemos algo (quase) similar a um traço automático no Illustrator.

No entanto, ainda precisamos fazer um pouco de limpeza. Aumentando o zoom, podemos ver que temos vários retângulos pequenos indesejados.

Em seguida, vamos escrever códigos para nos livrar de retângulos indesejados.

  1. Insira um nó Python entre o nó GetObjectRetangle e outro nó Python. O código do nó está abaixo e remove todos os retângulos que estão abaixo de um determinado tamanho.

Com os retângulos supérfluos removidos, apenas para testar, vamos criar uma superfície com base nesses retângulos e efetuar a extrusão deles por uma distância baseada em suas áreas.

Por último, altere a entrada both_sides para falso e obtemos uma extrusão em uma direção. Mergulhe a peça em resina e você obtém uma mesa supermoderna.

Esses são exemplos básicos, mas os conceitos descritos aqui também podem ser usados em aplicativos reais incríveis. É possível usar a pesquisa visual computacional para diversos processos. Para nomear apenas alguns: leitores de código de barras, correspondência de perspectiva, e . Para obter informações sobre tópicos mais avançados com o AForge relacionados a este exercício, leia .

Nós do Python

Por que você usaria a programação textual no ambiente de programação visual do Dynamo? A tem muitas vantagens. Ela permite que você crie programas sem aprender sintaxe especial em uma interface visual intuitiva. No entanto, um programa visual pode se tornar confuso e, às vezes, pode ter funcionalidade insatisfatória. Por exemplo, o Python oferece métodos muito mais simples de escrever declarações condicionais (if/then) e loops. O Python é uma ferramenta avançada que pode ampliar os recursos do Dynamo e permitir que você substitua muitos nós por algumas linhas concisas de código.

Programa visual:

Programa textual:

O nó do Python

Como os blocos de código, os nós do Python são uma interface de scripts dentro de um ambiente de programação visual. O nó do Python pode ser encontrado em Script>Editor>Script do Python na biblioteca.

Clicando duas vezes no nó, é aberto o editor de scripts do Python (também é possível clicar com o botão direito do mouse no nó e selecionar Editar...). Você observará algum texto padronizado na parte superior, que pretende ajudar você a consultar as bibliotecas necessárias. As entradas estão armazenadas na matriz IN. Os valores são retornados ao Dynamo quando são atribuídos à variável OUT

A biblioteca Autodesk.DesignScript.Geometry permite usar a notação de pontos similar aos blocos de código. Para obter mais informações sobre a sintaxe do Dynamo, consulte , bem como o (Para fazer o download desse documento PDF, clique com o botão direito do mouse no link e escolha “Salvar link como...”). Digitar um tipo de geometria como “Point.” exibirá uma lista de métodos para criar e consultar pontos.

Os métodos incluem construtores como ByCoordinates, ações como Add e consultas como as coordenadas X, Y e Z.

Exercício: Nó personalizado com o script do Python para criar padrões com base no módulo sólido

Parte I: Configurar o script do Python

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

Neste exemplo, escreveremos um script Python que cria padrões de um módulo sólido e o transforma em um nó personalizado. Primeiro, vamos criar nosso módulo sólido usando os nós do Dynamo.

  1. Rectangle.ByWidthLength: crie um retângulo que será a base do nosso sólido.

  2. Surface.ByPatch: conecte o retângulo à entrada “closedCurve” para criar a superfície inferior.

  1. Geometry.Translate: conecte o retângulo à entrada “geometry” para movê-lo para cima, usando um bloco de código para especificar a espessura da base do nosso sólido.

  2. Polygon.Points: consulte o retângulo convertido para extrair os pontos de canto.

  3. Geometry.Translate: use um bloco de código para criar uma lista de quatro valores correspondentes aos quatro pontos, convertendo um canto do sólido para cima.

  4. Polygon.ByPoints: use os pontos convertidos para reconstruir o polígono superior.

  5. Surface.ByPatch: conecte o polígono para criar a superfície superior.

Agora que temos as superfícies superior e inferior, vamos elevar os dois perfis para criar os lados do sólido.

  1. List.Create: conecte o retângulo inferior e o polígono superior às entradas do índice.

  2. Surface.ByLoft: eleve os dois perfis para criar os lados do sólido.

  3. List.Create: conecte as superfícies superior, laterais e inferior às entradas do índice para criar uma lista de superfícies.

  4. Solid.ByJoinedSurfaces: una as superfícies para criar o módulo sólido.

Agora que temos nosso sólido, vamos colocar um nó do script do Python no espaço de trabalho.

  1. Para adicionar mais entradas ao nó, clique no ícone + no nó. As entradas são nomeadas IN[0], IN[1], etc. para indicar que representam itens em uma lista.

Vamos começar definindo nossas entradas e saídas. Clique duas vezes no nó para abrir o editor do Python. Siga o código abaixo para modificar o código no editor.

Esse código fará mais sentido à medida que progredirmos no exercício. Em seguida, precisaremos pensar sobre quais informações são necessárias para organizar o módulo de sólido. Primeiro, precisamos conhecer as dimensões do sólido para determinar a distância de conversão. Devido a uma falha da caixa delimitadora, será necessário usar a geometria de curva de aresta para criar uma caixa delimitadora.

Veja o nó do Python no Dynamo. Observe que estamos usando a mesma sintaxe que vemos nos títulos dos nós no Dynamo. Confira o código comentado abaixo.

Como vamos converter e girar os módulos de sólido, usaremos a operação Geometry.Transform. Observando o nó Geometry.Transform, sabemos que precisaremos de um sistema de coordenadas de origem e um sistema de coordenadas de destino para transformar o sólido. A origem é o sistema de coordenadas do contexto do nosso sólido, enquanto o destino será um sistema de coordenadas diferente para cada módulo com matriz. Isso significa que teremos que fazer um loop pelos valores x e y para transformar o sistema de coordenadas de forma diferente a cada vez.

Clique em Executar e, em seguida, salve o código. Conecte o nó do Python ao nosso script existente da seguinte maneira.

  1. Conecte a saída de Solid.ByJoinedSurfaces como a primeira entrada para o nó do Python e use um bloco de código para definir as outras entradas.

  2. Crie um nó Topology.Edges e use a saída do nó do Python como entrada.

  3. Por fim, crie um nó Edge.CurveGeometry e use a saída de Topology.Edges como entrada.

Tente alterar o valor gerador para criar diferentes padrões. Também é possível alterar os parâmetros do próprio módulo sólido para obter diferentes efeitos.

Parte II: Transformar o nó do script do Python em nó personalizado

Agora que criamos um script Python útil, vamos salvá-lo como um nó personalizado. Selecione o nó do script do Python, clique com o botão direito do mouse no espaço de trabalho e selecione “Criar nó personalizado”.

Atribua um nome, uma descrição e uma categoria.

Isso abrirá um novo espaço de trabalho no qual o nó personalizado será editado.

  1. Entradas: altere os nomes das entradas para que sejam mais descritivos e adicione tipos de dados e valores padrão.

  2. Saída: altere o nome da saída

Salve o nó como um arquivo .dyf. Em seguida, você deverá ver que o nó personalizado reflete as alterações que acabamos de fazer.

Trabalhar com listas

Trabalhar com listas

Agora que estabelecemos o que é uma lista, vamos falar sobre as operações que podemos realizar nela. Imagine uma lista como um baralho de cartas. O baralho é a lista e cada carta representa um item.

Foto de

Consulta

Quais consultas podemos fazer na lista? Isso acessa as propriedades existentes.

  • Número de cartas no baralho? 52.

  • Número de naipes? 4.

  • Material? Papel.

  • Comprimento? 3,5 pol. ou 89 mm.

  • Largura? 2,5 pol. ou 64 mm.

Ação

Quais ações podemos executar na lista? Isso altera a lista com base em uma determinada operação.

  • Podemos embaralhar as cartas.

  • Podemos classificar as cartas por valor.

  • Podemos classificar as cartas por naipe.

  • Podemos dividir o baralho.

  • Podemos dividir o baralho, distribuindo cada uma das mãos da rodada.

  • É possível selecionar uma carta específica no baralho.

Todas as operações listadas acima têm nós análogos do Dynamo para trabalhar com listas de dados genéricos. As lições abaixo demonstrarão algumas das operações fundamentais que podemos executar nas listas.

Exercício

Operações de lista

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

A imagem abaixo é o gráfico de base no qual estamos desenhando linhas entre dois círculos para representar operações básicas de lista. Vamos explorar como gerenciar dados em uma lista e demonstrar os resultados visuais através das ações da lista abaixo.

  1. Comece com um Bloco de código com um valor de 500;

  2. Conecte-se à entrada x de um nó Point.ByCoordinates.

  3. Conecte o nó da etapa anterior à entrada de origem de um nó Plane.ByOriginNormal.

  4. Usando um nó Circle.ByPlaneRadius, conecte o nó da etapa anterior à entrada do plano.

  5. Usando o Bloco de código, designe um valor de 50; para o raio. Esse é o primeiro círculo que criaremos.

  6. Com um nó Geometry.Translate, movimente o círculo 100 unidades para cima na direção Z.

  7. Com um nó de Bloco de código, defina um intervalo de dez números entre 0 e 1 com esta linha de código: 0..1..#10;

  8. Conecte o bloco de código da etapa anterior à entrada parâmetro de dois nós Curve.PointAtParameter. Conecte Circle.ByPlaneRadius à entrada de curva do nó superior e Geometry.Translate à entrada de curva do nó abaixo dele.

  9. Usando Line.ByStartPointEndPoint, conecte os dois nós Curve.PointAtParameter.

List.Count

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

O nó List.Count é simples: conta o número de valores em uma lista e retorna esse número. Esse nó ganha mais nuances à medida que trabalhamos com listas de listas, mas vamos demonstrar isso nas seções a seguir.

  1. O nó **List.Count ****** retorna o número de linhas no nó Line.ByStartPointEndPoint. Neste caso, o valor é 10, que concorda com o número de pontos criados no nó original do Bloco de código.

List.GetItemAtIndex

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

List.GetItemAtIndex é uma forma fundamental de consultar um item na lista.

  1. Primeiro, clique com o botão direito do mouse no nó Line.ByStartPointEndPoint para desativar sua visualização.

  2. Usando o nó List.GetItemAtIndex, estamos selecionando o índice “0” ou o primeiro item na lista de linhas.

Altere o valor do controle deslizante entre 0 e 9 para selecionar outro item usando List.GetItemAtIndex.

List.Reverse

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

List.Reverse inverte a ordem de todos os itens em uma lista.

  1. Para visualizar corretamente a lista invertida de linhas, crie mais linhas alterando o Bloco de código para 0..1..#50;

  2. Duplique o nó Line.ByStartPointEndPoint, insira um nó List.Reverse entre Curve.PointAtParameter e o segundo Line.ByStartPointEndPoint

  3. Use os nós Watch3D para visualizar dois resultados diferentes. O primeiro mostra o resultado sem uma lista invertida. As linhas se conectam verticalmente aos pontos adjacentes. A lista invertida, no entanto, conectará todos os pontos à ordem oposta na outra lista.

List.ShiftIndices

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

List.ShiftIndices é uma boa ferramenta para criar padrões de torções ou helicoidais, ou qualquer outra manipulação de dados semelhante. Esse nó altera os itens em uma lista por um determinado número de índices.

  1. No mesmo processo que a lista inversa, insira um List.ShiftIndices no Curve.PointAtParameter e Line.ByStartPointEndPoint.

  2. Usando um Bloco de código, foi designado o valor de “1” para mudar a lista em um índice.

  3. Observe que a alteração é sutil, mas todas as linhas no nó inferior Watch3D mudaram um índice ao se conectarem ao outro conjunto de pontos.

Se o Bloco de código for alterado para um valor maior, “30”, por exemplo, perceberemos uma diferença significativa nas linhas diagonais. A mudança está funcionando como a íris da câmera nesse caso, criando uma torção na forma cilíndrica original.

List.FilterByBooleanMask

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

List.FilterByBooleanMask removerá determinados itens com base em uma lista de booleanos ou valores “true” ou “false”.

Para criar uma lista de valores “true” ou “false”, é necessário um pouco mais de trabalho...

  1. Usando um Bloco de código, defina uma expressão com a sintaxe: 0..List.Count(list);. Conecte o nó Curve.PointAtParameter à entrada lista. Vamos abordar mais essa configuração no capítulo do bloco de código, mas a linha de código nesse caso fornece uma lista que representa cada índice do nó Curve.PointAtParameter.

  2. Usando um nó %** (módulo)**, conecte a saída do bloco de código à entrada x e um valor de 4 à entrada y. Isso vai gerar o resto ao dividir a lista de índices por 4. O módulo é um nó muito útil para a criação do padrão. Todos os valores serão lidos como os possíveis restos de 4: 0, 1, 2, 3.

  3. No nó %** (módulo)**, sabemos que um valor de 0 significa que o índice é divisível por 4 (0, 4, 8 etc...). Usando um nó ==, podemos testar a divisibilidade com um valor de “0”.

  4. O nó Watch revela apenas isso: temos um padrão true/false com a indicação: true,false,false,false....

  5. Usando esse padrão true/false, conecte-se à entrada de máscara dos dois nós List.FilterByBooleanMask.

  6. Conecte o nó Curve.PointAtParameter a cada entrada da lista do List.FilterByBooleanMask.

  7. A saída de Filter.ByBooleanMask é “in” e “out”. “In” representa valores que tinham um valor de máscara “true”, enquanto “out” representa valores que tinham um valor “false”. Conectando as saídas “in” às entradas startPoint e endPoint de um nó Line.ByStartPointEndPoint, criamos uma lista de linhas filtrada.

  8. O nó Watch3D revela que temos menos linhas do que pontos. Selecionamos somente 25% dos nós filtrando somente os valores true.

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

solid = IN[0]
seed = IN[1]
xCount = IN[2]
yCount = IN[3]

solids = []

yDist = solid.BoundingBox.MaxPoint.Y-solid.BoundingBox.MinPoint.Y
xDist = solid.BoundingBox.MaxPoint.X-solid.BoundingBox.MinPoint.X

for i in xRange:
	for j in yRange:
		fromCoord = solid.ContextCoordinateSystem
		toCoord = fromCoord.Rotate(solid.ContextCoordinateSystem.Origin,Vector.ByCoordinates(0,0,1),(90*(i+j%val)))
		vec = Vector.ByCoordinates((xDist*i),(yDist*j),0)
		toCoord = toCoord.Translate(vec)
		solids.append(solid.Transform(fromCoord,toCoord))

OUT = solids
# Load the Python Standard and DesignScript Libraries
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

# The inputs to this node will be stored as a list in the IN variables.
#The solid module to be arrayed
solid = IN[0]

#A Number that determines which rotation pattern to use
seed = IN[1]

#The number of solids to array in the X and Y axes
xCount = IN[2]
yCount = IN[3]

#Create an empty list for the arrayed solids
solids = []

# Place your code below this line


# Assign your output to the OUT variable.
OUT = solids
# Load the Python Standard and DesignScript Libraries
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

# The inputs to this node will be stored as a list in the IN variables.
#The solid module to be arrayed
solid = IN[0]

#A Number that determines which rotation pattern to use
seed = IN[1]

#The number of solids to array in the X and Y axes
xCount = IN[2]
yCount = IN[3]

#Create an empty list for the arrayed solids
solids = []
#Create an empty list for the edge curves
crvs = []

# Place your code below this line
#Loop through edges an append corresponding curve geometry to the list
for edge in solid.Edges:
    crvs.append(edge.CurveGeometry)

#Get the bounding box of the curves
bbox = BoundingBox.ByGeometry(crvs)

#Get the x and y translation distance based on the bounding box
yDist = bbox.MaxPoint.Y-bbox.MinPoint.Y
xDist = bbox.MaxPoint.X-bbox.MinPoint.X

# Assign your output to the OUT variable.
OUT = solids
# Load the Python Standard and DesignScript Libraries
import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

# The inputs to this node will be stored as a list in the IN variables.
#The solid module to be arrayed
solid = IN[0]

#A Number that determines which rotation pattern to use
seed = IN[1]

#The number of solids to array in the X and Y axes
xCount = IN[2]
yCount = IN[3]

#Create an empty list for the arrayed solids
solids = []
#Create an empty list for the edge curves
crvs = []

# Place your code below this line
#Loop through edges an append corresponding curve geometry to the list
for edge in solid.Edges:
    crvs.append(edge.CurveGeometry)

#Get the bounding box of the curves
bbox = BoundingBox.ByGeometry(crvs)

#Get the x and y translation distance based on the bounding box
yDist = bbox.MaxPoint.Y-bbox.MinPoint.Y
xDist = bbox.MaxPoint.X-bbox.MinPoint.X

#Get the source coordinate system
fromCoord = solid.ContextCoordinateSystem

#Loop through x and y
for i in range(xCount):
    for j in range(yCount):
        #Rotate and translate the coordinate system
        toCoord = fromCoord.Rotate(solid.ContextCoordinateSystem.Origin, Vector.ByCoordinates(0,0,1), (90*(i+j%seed)))
        vec = Vector.ByCoordinates((xDist*i),(yDist*j),0)
        toCoord = toCoord.Translate(vec)
        #Transform the solid from the source coord syste, to the target coord system and append to the list
        solids.append(solid.Transform(fromCoord,toCoord))

# Assign your output to the OUT variable.
OUT = solids
Programação visual
https://github.com/DynamoDS/DynamoPrimerNew/blob/master-ptb/coding-in-dynamo/7_code-blocks-and-design-script/7-2_design-script-syntax.md
Guia do DesignScript
35KB
Python_Custom-Node.dyn
Christian Gidlöf
7KB
List-Operations.dyn
8KB
List-Count.dyn
8KB
List-GetItemAtIndex.dyn
8KB
List-Reverse.dyn
8KB
List-ShiftIndices.dyn
11KB
List-FilterByBooleanMask.dyn
cartas
Contagem
Exercício
Exercício
Exercício
Exercício

Logotipo/Imagem

Nome

Kit de ferramentas de malha

Desdobramento do Dynamo

Rhynamo

Optimo

import sys
import clr
clr.AddReference('AForge.Imaging')
from AForge.Imaging import *

bc= BlobCounter()
bc.ProcessImage(IN[0])
OUT=bc
OUT = []
for rec in IN[0]:
	subOUT=[]
	subOUT.append(rec.X)
	subOUT.append(rec.Y)
	subOUT.append(rec.Width)
	subOUT.append(rec.Height)
	OUT.append(subOUT)
recData;
x0=List.GetItemAtIndex(recData,0);
y0=List.GetItemAtIndex(recData,1);
width=List.GetItemAtIndex(recData,2);
height=List.GetItemAtIndex(recData,3);
x1=x0+width;y1=y0+height;
p0=Autodesk.Point.ByCoordinates(x0,y0);
p1=Autodesk.Point.ByCoordinates(x0,y1);
p2=Autodesk.Point.ByCoordinates(x1,y1);
p3=Autodesk.Point.ByCoordinates(x1,y0);
rectangles=IN[0]
OUT=[]
for rec in rectangles:
 if rec.Width>8 and rec.Height>8:
  OUT.append(rec)
página wiki do Dynamo
Pacotes
AForge
página de download do AForge
1MB
ZeroTouchImages.zip
archive
flickr
BlobCounter
API de imagem do AForge
mapeamento de projeção
realidade aumentada
este artigo

Python e Civil 3D

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.

Modelo Python padrão no Civil 3D
  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.

15KB
Python_Catchments.dyn
961KB
Python_Catchments.dwg

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.

Obtenção de todas as áreas de contribuição no documento por camada

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.

Gráfico final

Resultado

E aqui está a geometria final do Dynamo.

PolyCurves do Dynamo resultantes para os limites da área de contribuição

🎉 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.

Logo
Logo
Logo
Logo
Logo
Logo
Logo
Logo

Listas de listas

Listas de listas

Vamos adicionar mais um nível à hierarquia. Se pegarmos o maço de cartas do exemplo original e criarmos uma caixa que contém vários maços, a caixa agora representará uma lista de maços e cada maço representará uma lista de cartas. Esta é uma lista de listas. Para a analogia nesta seção, a imagem abaixo contém uma lista de rolos de moeda e cada rolo contém uma lista de moedas de um centavo.

Moedas

Foto de Dori.

Consulta

Quais consultas podemos fazer na lista de listas? Isso acessa as propriedades existentes.

  • Quantidade de tipos de moeda? 2.

  • Valores de tipo de moeda? $ 0,01 e $ 0,25.

  • Material das moedas de vinte e cinco centavos? 75% de cobre e 25% de níquel.

  • Material de moedas de um centavo? 97,5% de zinco e 2,5% de cobre.

Ação

Quais ações podemos executar na lista de listas? Isso altera a lista de listas com base em uma operação fornecida.

  • Selecione uma pilha específica de moedas de vinte e cinco centavos ou de um centavo.

  • Selecione uma moeda específica de vinte e cinco centavos ou um centavo.

  • Reorganize as pilhas de moedas de vinte e cinco centavos e de um centavo.

  • Misture as pilhas.

Novamente, o Dynamo tem um nó análogo para cada uma das operações acima. Como estamos trabalhando com dados abstratos, e não com objetos físicos, precisamos de um conjunto de regras para controlar como movemos para cima e para baixo na hierarquia de dados.

Ao lidar com listas de listas, os dados são complexos e dispostos em camadas, mas isso proporciona a oportunidade de executar algumas operações paramétricas incríveis. Vamos separar os conceitos básicos e discutir mais algumas operações nas lições abaixo.

Exercício

Hierarquia de cima para baixo

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

4KB
Top-Down-Hierarchy.dyn

O conceito fundamental a ser aprendido nesta seção: o Dynamo trata as listas intrinsecamente como objetos. Essa hierarquia de cima para baixo é desenvolvida considerando a programação orientada a objetos. Em vez de selecionar subelementos com um comando como List.GetItemAtIndex, o Dynamo seleciona o índice da lista principal na estrutura de dados. E esse item pode ser outra lista. Vamos explicar em detalhes com uma imagem de exemplo:

de cima para baixo
  1. Com o Bloco de código, definimos dois intervalos: 0..2; 0..3;

  2. Esses intervalos são conectados a um nó Point.ByCoordinates com amarra definida como “Produto transversal”. Isso cria um eixo de pontos e também retorna uma lista de listas como uma saída.

  3. Observe que o nó Inspeção fornece três listas com quatro itens cada.

  4. Usando List.GetItemAtIndex, com um índice de 0, o Dynamo seleciona a primeira lista e todo seu conteúdo. Outros programas podem selecionar o primeiro item de cada lista na estrutura de dados, mas o Dynamo emprega uma hierarquia de cima para baixo ao lidar com os dados.

List.Flatten

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

4KB
Flatten.dyn

Mesclar remove todos os níveis de dados de uma estrutura de dados. Isso é útil quando as hierarquias de dados não são necessárias para sua operação, mas pode ser arriscado porque remove as informações. O exemplo abaixo mostra o resultado do nivelamento de uma lista de dados.

Exercício
  1. Insira uma linha de código para definir um intervalo em Bloco de código: -250..-150..#4;

  2. Conectando o bloco de código à entrada x e y de um nó Point.ByCoordinates, definimos a amarra como “Produto transversal” para obter um eixo de pontos.

  3. O nó Inspeção mostra que temos uma lista de listas.

  4. Um nó PolyCurve.ByPoints fará referência a cada lista e criará uma policurva respectiva. Observe na visualização do Dynamo que temos quatro policurvas que representam cada linha no eixo.

Exercício
  1. Se inserirmos um nivelamento antes do nó da policurva, criaremos uma única lista para todos os pontos. O nó PolyCurve.ByPoints faz referência a uma lista para criar uma curva e, como todos os pontos estão em uma lista, obtemos uma policurva em ziguezague que segue em toda a lista de pontos.

Há também opções para aplainar níveis isolados de dados. Usando o nó List.Flatten, é possível definir um número determinado de níveis de dados para aplainar desde o topo da hierarquia. Essa será uma ferramenta realmente útil se você estiver lidando com estruturas de dados complexas, que não são necessariamente relevantes para o fluxo de trabalho. Outra opção é usar o nó de nivelamento como uma função em List.Map. Discutiremos mais sobre List.Map abaixo.

Cortar

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

7KB
Chop.dyn

Durante a modelagem paramétrica, também há ocasiões em que você desejará modificar a estrutura de dados para uma lista existente. Há muitos nós disponíveis para isso também, e o corte é a versão mais básica. Com o corte, é possível particionar uma lista em sublistas com um número definido de itens.

O comando de corte divide as listas com base em um determinado comprimento de lista. De certa forma, o corte é o oposto da mesclagem: em vez de remover a estrutura de dados, ele adiciona novos níveis a ela. Essa é uma ferramenta útil para operações geométricas como o exemplo abaixo.

Exercício

List.Map

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

6KB
Map.dyn

List.Map/Combine aplica uma função definida a uma lista de entrada, mas um degrau abaixo na hierarquia. As combinações são o mesmo que os mapas, exceto pelo fato de que as combinações podem ter várias entradas correspondentes à entrada de uma determinada função.

Observação: Este exercício foi criado com uma versão anterior do Dynamo. A maior parte da funcionalidade de List.Map foi resolvida com a adição do recurso List@Level . Para obter mais informações, consulte List@Level abaixo.

Como uma rápida introdução, vamos revisar o nó List.Count de uma seção anterior.

O nó List.Count conta todos os itens em uma lista. Usaremos isso para demonstrar como List.Map funciona.

  1. Insira duas linhas de código no Bloco de código: -50..50..#Nx; -50..50..#Ny;

    Após digitar esse código, o bloco de código criará duas entradas para Nx e Ny.

  2. Com dois controles deslizantes de número inteiro, defina os valores Nx e Ny conectando-os ao Bloco de código.

  3. Conecte cada linha do bloco de código às respectivas entradas X e Y de um nó Point.ByCoordinates. Clique com o botão direito do mouse no nó, selecione “Amarra” e selecione “Produto transversal”. Isso cria um eixo de pontos. Como definimos o intervalo de -50 a 50, estamos expandindo o eixo padrão do Dynamo.

  4. Um nó Inspeção revela os pontos criados. Observe a estrutura de dados. Criamos uma lista de listas. Cada lista representa uma linha de pontos do eixo.

Exercise
  1. Anexe um nó List.Count à saída do nó de inspeção da etapa anterior.

  2. Conecte um nó Inspeção à saída List.Count.

Observe que o nó List.Count fornece um valor igual a 5. Isso é igual à variável “Nx”, conforme definido no bloco de código. Por que isso ocorre?

  • Primeiro, o nó Point.ByCoordinates usa a entrada “x” como entrada principal para criar listas. Quando Nx é 5 e Ny é 3, obtemos uma lista de 5 listas, cada uma com 3 itens.

  • Como o Dynamo trata as listas intrinsecamente como objetos, um nó List.Count é aplicado à lista principal na hierarquia. O resultado é um valor igual a 5 ou o número de listas na lista principal.

Exercício
  1. Usando um nó List.Map, descemos um degrau na hierarquia e executamos uma “função” neste nível.

  2. Observe que o nó List.Count não tem nenhuma entrada. Ele está sendo usado como uma função para que o nó List.Count seja aplicado a cada lista individual um degrau abaixo na hierarquia. A entrada em branco de List.Count corresponde à entrada de lista de List.Map.

  3. Os resultados de List.Count agora fornecem uma lista de 5 itens, cada um com o valor de 3. Isso representa o tamanho de cada sublista.

List.Combine

Observação: Este exercício foi criado com uma versão anterior do Dynamo. A maior parte da funcionalidade de List.Combine foi resolvida com a adição do recurso List@Level . Para obter mais informações, consulte List@Level, abaixo.

Neste exercício, usaremos List.Combine para demonstrar como pode ser usado para aplicar uma função em listas separadas de objetos.

Comece configurando duas listas de pontos.

Exercício
  1. Use o nó Sequência para gerar 10 valores, cada um com um incremento de 10 etapas.

  2. Conecte o resultado à entrada x de um nó Point.ByCoordinates. Isso criará uma lista de pontos no Dynamo.

  3. Adicione um segundo nó Point.ByCoordinates ao espaço de trabalho, use a mesma saída de Sequência como sua entrada x, mas use um Controle deslizante de número inteiro como sua entrada y e defina seu valor como 31 (pode ser qualquer valor, desde que não se sobreponha ao primeiro conjunto de pontos) para que os dois conjuntos de pontos não se sobreponham um ao outro.

Em seguida, usaremos List.Combine para aplicar uma função em objetos em duas listas separadas. Neste caso, será uma função de linha de desenho simples.

Exercício
  1. Adicione List.Combine ao espaço de trabalho e conecte os dois conjuntos de pontos como suas entradas list0 e list1.

  2. Use Line.ByStartPointEndPoint como a função de entrada para List.Combine.

Após a conclusão, os dois conjuntos de pontos são compactados/emparelhados por meio de uma função Line.ByStartPointEndPoint e retornam 10 linhas no Dynamo.

Consulte o exercício em Listas n-dimensionais para ver outro exemplo de uso de List.Combine.

List@Level

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

17KB
Listatlevel.dyn

Com preferência em relação a List.Map, o recurso List@Level permite selecionar diretamente com qual nível de lista você deseja trabalhar diretamente na porta de entrada do nó. É possível aplicar esse recurso a qualquer entrada de nó e permitirá que você acesse os níveis de suas listas com mais rapidez e facilidade do que com outros métodos. Basta informar ao nó qual nível da lista você deseja usar como entrada e deixar que o nó faça o restante.

Neste exercício, usaremos o recurso List@Level para isolar um nível de dados específico.

List@Level

Começaremos com um eixo de pontos 3D simples.

  1. Como o eixo é construído com um intervalo para X, Y e Z, sabemos que os dados estão estruturados com três níveis: uma lista X, uma lista Y e uma lista Z.

  2. Esses níveis existem em diferentes Níveis. Os níveis são indicados na parte inferior da bolha de visualização. As colunas de níveis da lista correspondem aos dados da lista acima para ajudar a identificar em qual nível se deve trabalhar.

  3. Os níveis da lista estão organizados em ordem inversa para que os dados de menor nível estejam sempre em “L1”. Isso ajudará a garantir que os gráficos funcionem conforme planejado, mesmo que algo seja alterado a montante.

List@Level
  1. Para usar a função List@Level, clique em “>”. Nesse menu, existem duas caixas de seleção.

  2. Usar níveis – Ativa a funcionalidade List@Level. Após clicar nessa opção, você poderá clicar e selecionar os níveis da lista de entrada que deseja que o nó use. Com esse menu, você pode experimentar rapidamente diferentes opções de nível clicando para cima ou para baixo.

  3. Manter a estrutura da lista – Se essa opção estiver ativada, você poderá manter a estrutura de nível da entrada. Às vezes, você pode ter organizado intencionalmente os dados em sublistas. Ao marcar essa opção, é possível manter a organização da lista intacta e não perder nenhuma informação.

Com nosso eixo 3D simples, podemos acessar e visualizar a estrutura de lista alternando entre os níveis de lista. Cada combinação de nível de lista e índice retorna um conjunto de pontos diferente do nosso conjunto 3D original.

  1. “@L2” em DesignScript nos permite selecionar somente a lista no Nível 2. A lista no Nível 2 com o índice 0 inclui somente o primeiro conjunto de pontos Y, retornando somente o eixo XZ.

  2. Se alterarmos o filtro Nível para “L1”, poderemos ver tudo no primeiro nível da lista. A lista no Nível 1 com índice 0 inclui todos os nossos pontos 3D em uma lista plana.

  3. Se tentarmos fazer o mesmo para “L3”, veremos somente os pontos do terceiro nível da lista. A lista no Nível 3 com índice 0 inclui somente o primeiro conjunto de pontos Z, retornando somente um eixo XY.

  4. Se tentarmos o mesmo para “L4”, veremos somente os pontos do terceiro nível da lista. A lista no Nível 4 com índice 0 inclui somente o primeiro conjunto de pontos X, retornando somente um eixo YZ.

Embora este exemplo específico também possa ser criado com List.Map, o recurso List@Level simplifica muito a interação, facilitando o acesso aos dados do nó. Confira abaixo uma comparação entre os métodos List.Map e List@Level:

  1. Embora ambos os métodos ofereçam acesso aos mesmos pontos, o método List@Level permite alternar facilmente entre as camadas de dados em um único nó.

  2. Para acessar um eixo de pontos com List.Map, precisamos de um nó List.GetItemAtIndex junto com List.Map. Para cada nível de lista que descermos, precisaremos usar um nó List.Map adicional. Dependendo da complexidade das listas, isso pode exigir a adição de uma quantidade significativa de nós List.Map ao gráfico para acessar o nível de informações correto.

  3. Neste exemplo, um nó List.GetItemAtIndex com um nó List.Map retorna o mesmo conjunto de pontos com a mesma estrutura de lista que o List.GetItemAtIndex com “@L3” selecionado.

Transpor

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

6KB
Transpose.dyn

Transpor é uma função fundamental ao lidar com listas de listas. Assim como nos programas de planilha, uma transposição inverte as colunas e linhas de uma estrutura de dados. Vamos demonstrar isso com uma matriz básica abaixo e, na seção a seguir, vamos demonstrar como uma transposição pode ser usada para criar relações geométricas.

Transpor

Vamos excluir os nós List.Count do exercício anterior e usar alguma geometria para ver como os dados se estruturaram.

  1. Conecte PolyCurve.ByPoints à saída do nó de inspeção de Point.ByCoordinates.

  2. A saída mostra 5 policurvas e podemos ver as curvas na visualização do Dynamo. O nó do Dynamo está procurando uma lista de pontos (ou uma lista de listas de pontos neste caso) e criando uma única PolyCurve com base neles. Essencialmente, cada lista foi convertida em uma curva na estrutura de dados.

  1. Um nó List.Transpose alternará todos os itens com todas as listas em uma lista de listas. Isso parece complicado, mas é a mesma lógica do recurso Transpor no Microsoft Excel: alternar colunas com linhas em uma estrutura de dados.

  2. Observe o resultado abstrato: a transposição alterou a estrutura da lista de 5 listas com 3 itens cada uma para 3 listas com 5 itens cada uma.

  3. Observe o resultado geométrico: usando PolyCurve.ByPoints, obtemos 3 policurvas na direção perpendicular às curvas originais.

Bloco de código para criação de lista

A abreviação do bloco de código usa “[]” para definir uma lista. Essa é uma maneira muito mais rápida e fluida de criar uma lista do que com o nó List.Create. O Bloco de código é discutido com mais detalhes em Blocos de código e DesignScript. Observe na imagem abaixo como uma lista com várias expressões pode ser definida com o bloco de código.

Consulta do bloco de código

A abreviação do Bloco de código usa “[]” como uma forma rápida e fácil de selecionar itens específicos que você deseja de uma estrutura de dados complexa. Os Blocos de código são discutidos com mais detalhes no capítulo Bloco de código e DesignScript. Observe na imagem abaixo como uma lista com vários tipos de dados pode ser consultada com o bloco de código.

Exercício – Consultar e inserir dados

Faça o download do arquivo de exemplo clicando no link abaixo.

É possível encontrar uma lista completa de arquivos de exemplo no Apêndice.

26KB
ReplaceItems.dyn

Este exercício usa uma lógica estabelecida no exercício anterior para editar uma superfície. Nosso objetivo aqui é intuitivo, mas a navegação na estrutura de dados estará mais envolvida. Desejamos articular uma superfície movendo um ponto de controle.

Comece com a cadeia de caracteres dos nós acima. Estamos criando uma superfície básica que abrange o eixo padrão do Dynamo.

  1. Usando o Bloco de código, insira essas duas linhas de código e conecte-se às entradas u e v de Surface.PointAtParameter, respectivamente: -50..50..#3; -50..50..#5;

  2. Certifique-se de configurar a Amarra de Surface.PointAtParameter como “Produto transversal”.

  3. O nó Inspeção mostra que temos uma lista de 3 listas, cada uma com 5 itens.

Nesta etapa, queremos consultar o ponto central no eixo que criamos. Para fazer isso, vamos selecionar o ponto médio na lista do meio. Faz sentido, certo?

  1. Para confirmar que esse é o ponto correto, também podemos clicar nos itens do nó de inspeção para confirmar que estamos selecionando o item correto.

  2. Usando o Bloco de código, vamos escrever uma linha básica de código para consultar uma lista de listas: points[1][2];

  3. Usando Geometry.Translate, vamos mover o ponto selecionado para cima na direção Z por 20 unidades.

  1. Vamos também selecionar a linha média de pontos com um nó List.GetItemAtIndex. Observação: De forma similar a uma etapa anterior, também é possível consultar a lista com o Bloco de código, usando uma linha de points[1];

Até agora, consultamos com êxito o ponto central e o movemos para cima. Agora, queremos inserir esse ponto movido de volta na estrutura de dados original.

  1. Primeiro, queremos substituir o item da lista que isolamos em uma etapa anterior.

  2. Usando List.ReplaceItemAtIndex, vamos substituir o item do meio e o índice de “2” pelo item de substituição conectado ao ponto movido (Geometry.Translate).

  3. A saída mostra que inserimos o ponto movido no item do meio da lista.

Agora que modificamos a lista, precisamos inseri-la de volta na estrutura de dados original: a lista de listas.

  1. Seguindo a mesma lógica, use List.ReplaceItemAtIndex para substituir a lista do centro pela nossa lista modificada.

  2. Observe que os Blocos de código__ que definem o índice para esses dois nós são 1 e 2, que coincidem com a consulta original do Bloco de código (pontos[1][2]).

  3. Se selecionarmos a lista no índice 1, veremos a estrutura de dados realçada na visualização do Dynamo. Mesclamos com êxito o ponto movido para a estrutura de dados original.

Existem várias maneiras de criar uma superfície com base nesse conjunto de pontos. Neste caso, vamos criar uma superfície por meio da elevação de curvas.

  1. Crie um nó NurbsCurve.ByPoints e conecte a nova estrutura de dados para criar três curvas NURBS.

  1. Conecte Surface.ByLoft à saída de NurbsCurve.ByPoints. Agora, temos uma superfície modificada. É possível alterar o valor Z original da geometria. Converta e observe a atualização da geometria.

Índice de nós

Este índice fornece informações adicionais sobre todos os nós usados neste manual de introdução, bem como outros componentes que você pode considerar úteis. Esta é apenas uma introdução a alguns dos 500 nós disponíveis no Dynamo.

Exibição

Cor

CRIAR

Color.ByARGB Crie uma cor usando os componentes alfa, vermelho, verde e azul.

Faixa de cores Obtenha uma cor de um gradiente de cores entre uma cor inicial e uma cor final.

AÇÕES

Color.Brightness Retorna o valor de brilho dessa cor.

Color.Components Lista os componentes da cor na ordem: alfa, vermelho, verde, azul.

Color.Saturation Retorna o valor de saturação dessa cor.

Color.Hue Retorna o valor de matiz desda cor.

CONSULTA

Color.Alpha Localize o componente alfa de uma cor, 0 a 255.

Color.Blue Localize o componente azul de uma cor, 0 a 255.

Color.Green Localize o componente verde de uma cor, 0 a 255.

Color.Red Localize o componente vermelho de uma cor, 0 a 255.

CRIAR

GeometryColor.ByGeometryColor Exibe a geometria usando uma cor.

Inspeção

AÇÕES

View.Watch Visualize a saída do nó.

View.Watch 3D Mostra uma visualização dinâmica da geometria.

Entrada

AÇÕES

Booleano Seleção entre verdadeiro e falso.

Code Block Permite que o código DesignScript seja criado diretamente.

Caminho do diretório Permite selecionar um diretório no sistema para obter o caminho

Caminho do arquivo Permite selecionar um arquivo no sistema para obter o nome de arquivo

Controle deslizante de números inteiros Um controle deslizante que produz valores inteiros.

Number Cria um número.

Controle deslizante de números Um controle deslizante que produz valores numéricos.

String Cria uma cadeia de caracteres.

Object.IsNull Determina se o objeto determinado é nulo.

Lista

CRIAR

List.Create Cria uma nova lista com base nas entradas fornecidas.

List.Combine Aplica um combinador a cada elemento em duas sequências

Intervalo de números Cria uma sequência de números no intervalo especificado.

Sequência de números Cria uma sequência de números.

AÇÕES

List.Chop Divida uma lista em um conjunto de listas que contêm a quantidade determinada de itens.

List.Count Retorna o número de itens armazenados na lista determinada.

List.Flatten Mescla uma lista de listas aninhada por um determinado valor.

List.FilterByBoolMask Filtra uma sequência examinando os índices correspondentes em uma lista separada de booleanos.

List.GetItemAtIndex Retorna um item da lista fornecida que está localizada no índice especificado.

List.Map Aplica uma função em todos os elementos de uma lista, gerando uma nova lista com base nos resultados

List.Reverse Cria uma nova lista que contém os itens da lista determinada, mas na ordem inversa

List.ReplaceItemAtIndex Substitua um item da lista determinada que está localizada no índice especificado

List.ShiftIndices Troca os índices da lista à direita pelo valor fornecido

List.TakeEveryNthItem Obtém os itens da lista fornecida em índices que são múltiplos do valor fornecido, após o deslocamento fornecido.

List.Transpose Troca as linhas e as colunas de uma lista de listas. Se houver algumas linhas mais curtas do que outras, os valores nulos serão inseridos como espaços reservados na matriz resultante de forma que ela seja sempre retangular

Lógica

AÇÕES

Se Declaração condicional. Verifica o valor booleano da entrada de teste. Se a entrada de teste for verdadeira, o resultado retornará a entrada verdadeira. Caso contrário, o resultado retornará a entrada falsa.

Matemática

AÇÕES

Math.Cos Retorna o cosseno de um ângulo.

Math.DegreesToRadians Converte um ângulo em graus em um ângulo em radianos.

Math.Pow Eleva um número à potência especificada.

Math.RadiansToDegrees Converte um ângulo em radianos em um ângulo em graus.

Math.RemapRange Ajusta o intervalo de uma lista de números, preservando o coeficiente de distribuição.

Math.Sin Localiza o seno de um ângulo.

Map Mapeia um valor para um intervalo de entrada

Sequência de caracteres

AÇÕES

String.Concat Concatena várias sequências de caracteres em uma única sequência de caracteres.

String.Contains Determina se a sequência de caracteres fornecida contém a subsequência de caracteres determinada.

String.Join Concatena várias sequências de caracteres em uma única sequência de caracteres, inserindo o separador fornecido entre cada sequência de caracteres unida.

String.Split Divide uma única sequência de caracteres em uma lista de sequência de caracteres, com as divisões determinadas pelas sequências de caracteres do separador fornecidas.

String.ToNumber Converte uma sequência de caracteres em um número inteiro ou um duplo.

Geometria

Circle

CRIAR

Circle.ByCenterPointRadius Cria um círculo com o ponto central de entrada e o raio no plano XY universal, com o Z universal como normal.

Circle.ByPlaneRadius Crie um círculo centralizado na origem do plano de entrada (raiz), que reside no plano de entrada, com o raio especificado.

CRIAR

CoordinateSystem.ByOrigin Crie um CoordinateSystem com origem no ponto de entrada, com os eixos X e Y definidos como eixos X e Y do sistema de coordenadas universal.

CoordinateSystem.ByCylindricalCoordinates Cria um CoordinateSystem nos parâmetros de coordenadas cilíndricas especificadas com relação ao sistema de coordenadas especificado

Cuboide

CRIAR

Cuboid.ByLengths Cria um cuboide centralizado com origem no sistema de coordenadas universal e com largura, comprimento e altura.

Cuboid.ByLengths (origem)

Crie um cuboide centralizado no ponto de entrada, com largura, comprimento e altura especificadas.

Cuboid.ByLengths (coordinateSystem)

Cria um cuboide centralizado com origem no sistema de coordenadas universal e com largura, comprimento e altura.

Cuboid.ByCorners

Cria um cuboide que se estende do ponto baixo ao ponto alto.

Cuboid.Length

Retorna as cotas de entrada do Cuboide e NÃO as cotas reais do espaço universal. **

Cuboid.Width

Retorna as cotas de entrada do Cuboide e NÃO as cotas reais do espaço universal. **

Cuboid.Height

Retorna as cotas de entrada do Cuboide e NÃO as cotas reais do espaço universal. **

BoundingBox.ToCuboid

Retorna a caixa delimitadora como um cuboide de sólido.

**Em outras palavras, se você criar um comprimento de largura de Cuboide (eixo X) 10 e transformá-lo em um CoordinateSystem com dimensionamento de 2 vezes em X, a largura ainda será 10. O ASM não permite extrair os vértices de um corpo em nenhuma ordem previsível; portanto, é impossível determinar as cotas após uma transformação.

Curva

AÇÕES

Curve.Extrude (distância) Efetua a extrusão de uma curva na direção do vetor normal.

Curve.PointAtParameter Obtenha um ponto na curva com um parâmetro especificado entre StartParameter() e EndParameter().

Modificadores de geometria

AÇÕES

Geometry.DistanceTo Obtenha a distância desta geometria até outra.

Geometry.Explode Separa elementos compostos ou não separados em suas partes do componente.

Geometry.ImportFromSAT Lista de geometrias importadas

Geometry.Rotate (basePlane) Rotaciona o objeto em torno da origem e normal do plano por um grau especificado.

Geometry.Translate Converte qualquer tipo de geometria pela distância fornecida na direção determinada.

Linha

CRIAR

Line.ByBestFitThroughPoints Cria uma linha que melhor se aproxima à dispersão de uma plotagem de pontos.

Line.ByStartPointDirectionLength Crie uma linha reta começando no ponto e estendendo-se na direção do vetor pelo comprimento especificado.

Line.ByStartPointEndPoint Cria uma linha reta entre dois pontos de entrada.

Line.ByTangency Crie uma linha tangente à curva de entrada, posicionada no ponto do parâmetro da curva de entrada.

CONSULTA

Line.Direction A direção da curva.

NurbsCurve

Criar

NurbsCurve.ByControlPoints Crie uma BSplineCurve usando pontos de controle explícitos.

NurbsCurve.ByPoints Crie uma BSplineCurve interpolando entre os pontos

NurbsSurface

Criar

NurbsSurface.ByControlPoints Crie uma NurbsSurface usando pontos de controle explícitos com os graus U e V especificados.

NurbsSurface.ByPoints Cria uma NurbsSurface com os graus U e V e pontos interpolados especificados. A superfície resultante passará por todos os pontos.

Plano

CRIAR

Plane.ByOriginNormal Crie um plano centralizado no ponto raiz, com o vetor normal de entrada.

Plane.XY Cria um plano no XY universal

Ponto

CRIAR

Point.ByCartesianCoordinates Forme um ponto em um determinado sistema de coordenadas com três coordenadas cartesianas

Point.ByCoordinates (2d) Forme um ponto no plano XY com base em duas coordenadas cartesianas fornecidas. O componente Z é 0.

Point.ByCoordinates (3d) Forme um ponto com três coordenadas cartesianas fornecidas.

Point.Origin Obtenha o ponto de origem (0,0,0)

AÇÕES

Point.Add Adicione um vetor a um ponto. O mesmo que Converter (vetor).

CONSULTA

Point.X Obtenha o componente X de um ponto

Point.Y Obtenha o componente Y de um ponto

Point.Z Obtenha o componente Z de um ponto

Policurva

CRIAR

Polycurve.ByPoints Crie a PolyCurve com base na sequência de linhas que conectam os pontos. Para a curva fechada, o último ponto deve estar na mesma localização que o ponto inicial.

Retângulo

CRIAR

Rectangle.ByWidthLength (Plano) Crie um retângulo centralizado na raiz do plano de entrada, com a largura (tamanho do eixo X do plano) e o comprimento (tamanho do eixo Y do plano) de entrada.

Esfera

CRIAR

Sphere.ByCenterPointRadius Crie uma esfera sólida centralizada no ponto de entrada, com o raio especificado.

Superfície

CRIAR

Surface.ByLoft Crie uma superfície efetuando a elevação entre as curvas de seção transversal de entrada.

Surface.ByPatch Crie uma superfície preenchendo o interior de um contorno fechado definido por curvas de entrada.

AÇÕES

Surface.Offset Desloque a superfície na direção da normal da superfície pela distância especificada.

Surface.PointAtParameter Retorne o ponto nos parâmetros U e V especificados.

Surface.Thicken Torne mais espessa a superfície em um sólido, efetuando a extrusão na direção de normais de superfície em ambos os lados da superfície.

UV

CRIAR

UV.ByCoordinates Crie um UV com base em dois duplos.

Vetor

CRIAR

Vector.ByCoordinates Forme um vetor com três coordenadas euclidianas

Vector.XAxis Retorna o vetor do eixo X canônico (1,0,0)

Vector.YAxis Retorna o vetor do eixo Y canônico (0,1,0)

Vector.ZAxis Retorna o vetor do eixo Z canônico (0,0,1)

AÇÕES

Vector.Normalized Obtenha a versão normalizada de um vetor

CoordinateSystem

CRIAR

CoordinateSystem.ByOrigin Crie um CoordinateSystem com origem no ponto de entrada, com os eixos X e Y definidos como eixos X e Y do sistema de coordenadas universal.

CoordinateSystem.ByCylindricalCoordinates Cria um CoordinateSystem nos parâmetros de coordenadas cilíndricas especificadas com relação ao sistema de coordenadas especificado

Operadores

+ Adição

- Subtração

* Multiplicação

/ Divisão

% A divisão modular localiza o resto da primeira entrada após dividir pela segunda entrada

< Menor que

> Maior que

== Testes de igualdade entre dois valores.