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.
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.
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.
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.
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.
Nome: porcentagem
Descrição: calcula a porcentagem de um valor em relação a outro.
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.
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).
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.
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.
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.
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 Superfícies. O gráfico completo é UVmapping_Custom-Node.dyn do arquivo .zip obtido por download acima.
Bloco de código: use essa linha para criar um intervalo de 10 números entre -45 e 45
45..45..#10;
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.
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).
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.
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.
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.
Surface.ByPatch: conecte o Rectangle.ByWidthLength da etapa anterior à entrada “closedCurve” para criar uma superfície de base.
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.
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.
Geometry.ImportFromSAT: conecte o caminho do arquivo para importar a superfície. Você deve ver a superfície importada na visualização da geometria.
UV: conecte a saída do parâmetro UV a um nó UV.U e a um nó UV.V.
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.
PolyCurve.ByPoints: conecte os pontos na superfície para construir uma policurva através dos pontos.
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.
Surface.ByPatch: conecte as policurvas à entrada “closedCurve” para construir as correções de superfícies.
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.
Nome: MapPolygonsToSurface
Descrição: Mapear polígonos de uma superfície base para a superfície alvo
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ó.
Entradas: altere os nomes das entradas para baseSurface e targetSurface.
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.
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.
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.
Passe o cursor sobre as entradas dos nós personalizados para ver os comentários.
Com o valor padrão definido em inputSurface, também é possível executar a definição sem uma entrada de superfície.
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.
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.
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.
Documentos\DynamoCustomNodes... refere-se à localização dos nós personalizados que publicamos localmente.
AppData\Roaming\Dynamo... refere-se à localização padrão dos pacotes do Dynamo instalados on-line.
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.