Com um entendimento de como criar um projeto Sem toque, podemos nos aprofundar nos detalhes específicos da criação de um nó ao navegar pelo exemplo ZeroTouchEssentials no Dynamo Github.
Muitos dos nós padrão do Dynamo são essencialmente nós Sem toque, como a maioria dos nós matemáticos, de cor e de data e hora acima.
Para iniciar, faça o download do projeto ZeroTouchEssentials aqui: https://github.com/DynamoDS/ZeroTouchEssentials
No Visual Studio, abra o arquivo de solução ZeroTouchEssentials.sln
e compile a solução.
O arquivo
ZeroTouchEssentials.cs
contém todos os métodos que iremos importar para o Dynamo.
Abra o Dynamo e importe o ZeroTouchEssentials.dll
para obter os nós que faremos referência nos exemplos a seguir.
Os exemplos de código são extraídos e geralmente coincidem com ZeroTouchEssentials.cs. A documentação XML foi removida para mantê-los concisos, e cada exemplo de código criará o nó na imagem acima dele.
O Dynamo suporta a definição de valores padrão para portas de entrada em um nó. Esses valores padrão serão fornecidos ao nó se as portas não tiverem conexões. Os padrões são expressos usando o mecanismo C# de especificação de argumentos opcionais no Guia de programação C#. Os valores padrão são especificados da seguinte maneira:
Defina os parâmetros do método para um valor padrão: inputNumber = 2.0
O valor padrão será exibido quando você passar o cursor sobre a porta de entrada do nó
Retornar vários valores é um pouco mais complexo do que criar várias entradas e isso precisará ser feito usando um dicionário. As entradas do dicionário se tornam portas no lado de saída do nó. Várias portas de retorno são criadas da seguinte maneira:
Adicione using System.Collections.Generic;
para usar Dictionary<>
.
Adicione using Autodesk.DesignScript.Runtime;
para usar o atributo MultiReturn
. Isso faz referência ao “DynamoServices.dll” do pacote DynamoServices NuGet.
Adicione o atributo [MultiReturn(new[] { "string1", "string2", ... more strings here })]
ao método. As sequências de caracteres se referem às chaves no dicionário e se tornarão os nomes das portas de saída.
Retorne um Dictionary<>
da função com chaves que coincidem com os nomes de parâmetro no atributo: return new Dictionary<string, object>
Consulte este exemplo de código em ZeroTouchEssentials.cs
Um nó que retorna várias saídas.
Observe que agora há duas portas de saída nomeadas de acordo com as sequências que inserimos para as chaves do dicionário.
É recomendável adicionar documentação aos nós do Dynamo que descrevam a função, as entradas, as saídas, os identificadores de pesquisa do nó etc. Isso é feito por meio de identificadores de documentação XML. A documentação XML é criada da seguinte maneira:
Qualquer texto de comentário que é precedido por três barras inclinadas adiante é considerado como documentação
Por exemplo: /// Documentation text and XML goes here
Após as três barras, crie identificadores XML acima dos métodos que o Dynamo lerá ao importar o .dll
Por exemplo: /// <summary>...</summary>
Ative a documentação XML no Visual Studio selecionando Project > Project Properties > Build
e verificando XML documentation file
O Visual Studio gerará um arquivo XML na localização especificada
Os tipos de identificadores são os seguintes:
/// <summary>...</summary>
é a documentação principal do nó e será exibida como uma dica de ferramenta sobre o nó na barra lateral esquerda de pesquisa
/// <param name="inputName">...</param>
criará a documentação para os parâmetros de entrada específicos
/// <returns>...</returns>
criará a documentação para um parâmetro de saída
/// <returns name = "outputName">...</returns>
criará a documentação para vários parâmetros de saída
/// <search>...</search>
corresponderá o nó aos resultados da pesquisa com base em uma lista separada por vírgulas. Por exemplo, se criarmos um nó que subdivide uma malha, poderemos desejar adicionar identificadores como “malha”, “subdivisão” e “catmull-Clark”.
A seguir está um nó de exemplo com descrições de entrada e saída, bem como um resumo que será exibido na biblioteca.
Consulte este exemplo de código em ZeroTouchEssentials.cs
Observe que o código para esse nó de exemplo contém:
Um resumo dos nós
Uma descrição de entrada
Uma descrição de saída
O Dynamo não tem uma palavra-chave new
, portanto, os objetos precisarão ser construídos usando métodos de construção estáticos. Os objetos são construídos da seguinte maneira:
Tornar o construtor interno internal ZeroTouchEssentials()
, a menos que seja necessário de outra forma
Construir o objeto com um método estático como public static ZeroTouchEssentials ByTwoDoubles(a, b)
Observação: O Dynamo usa o prefixo “Por” para indicar que um método estático é um construtor e, embora seja opcional, usar “Por” ajudará a biblioteca a se ajustar melhor ao estilo existente do Dynamo.
Consulte este exemplo de código em ZeroTouchEssentials.cs
Após a importação do dll ZeroTouchEssentials, haverá um nó ZeroTouchEssentials na biblioteca. É possível criar esse objeto usando o nó ByTwoDoubles
.
As bibliotecas do Dynamo podem usar tipos de geometria nativos do Dynamo como entradas e criar uma nova geometria como saídas. Os tipos de geometria são criados da seguinte maneira:
Referenciar “ProtoGeometry.dll” no projeto incluindo using Autodesk.DesignScript.Geometry;
na parte superior do arquivo C# e adicionando o pacote NuGet da ZeroTouchLibrary ao projeto.
Importante: Gerencie os recursos de geometria que não são retornados das funções. Consulte a seção Dispor/usar declarações abaixo.
Observação: Os objetos de geometria do Dynamo são usados como qualquer outro objeto passado para funções.
Consulte este exemplo de código em ZeroTouchEssentials.cs
Um nó que obtém o comprimento de uma curva e o duplica.
Esse nó aceita um tipo de geometria de curva como uma entrada.
Os recursos de geometria que não são retornados de funções precisarão ser gerenciados manualmente, a não ser que você esteja usando o Dynamo versão 2.5 ou posterior. No Dynamo 2.5 e versões posteriores, os recursos de geometria são manipulados internamente pelo sistema. No entanto, talvez você ainda precise descartar a geometria manualmente se tiver um caso de uso complexo ou precisar reduzir a memória em um momento determinado. O mecanismo do Dynamo lidará com quaisquer recursos de geometria que são retornados de funções. Os recursos de geometria que não são retornados podem ser manipulados manualmente das seguintes maneiras:
Com uma declaração de uso:
A declaração de uso está documentada aqui
Consulte Melhorias na estabilidade da geometria do Dynamo para saber mais sobre os novos recursos de estabilidade introduzidos no Dynamo 2.5
Com chamadas Dispor manuais:
Ao publicar uma versão mais recente de uma biblioteca, os nomes de nós podem ser alterados. As alterações de nome podem ser especificadas em um arquivo de migrações para que os gráficos criados em versões anteriores de uma biblioteca continuem a funcionar corretamente quando uma atualização é feita. As migrações são implementadas da seguinte maneira:
Crie um arquivo .xml
na mesma pasta que o .dll
com o seguinte formato: “BaseDLLName”.Migrations.xml
Em .xml
, crie um único elemento <migrations>...</migrations>
Dentro do elemento de migrações, crie os elementos <priorNameHint>...</priorNameHint>
para cada alteração de nome
Para cada alteração de nome, forneça um elemento <oldName>...</oldName>
e <newName>...</newName>
Clicar com o botão direito do mouse e selecionar
Add > New Item
Escolher
XML File
Para este projeto, vamos nomear o arquivo de migrações
ZeroTouchEssentials.Migrations.xml
Esse código de exemplo está informando ao Dynamo que qualquer nó denominado GetClosestPoint
agora é nomeado ClosestPointTo
.
Consulte este exemplo de código em ProtoGeometry.Migrations.xml
No momento, o recurso Sem toque não suporta o uso de elementos genéricos. Eles podem ser usados, mas não no código que é importado diretamente onde o tipo não está definido. Métodos, propriedades ou classes que são genéricos e não têm o conjunto de tipos não podem ser expostos.
No exemplo abaixo, um nó Sem toque do tipo T
não será importado. Se o resto da biblioteca for importado para o Dynamo, haverá exceções de tipo ausentes.
O uso de um tipo genérico com o tipo definido neste exemplo será importado para o Dynamo.