Sintaxe do DesignScript
Last updated
Last updated
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):
Humanamente legível | 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().
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”.
Usando Point.ByCoordinates no bloco de código, estamos especificando as entradas na mesma ordem que o nó pronto para uso (X,Y).
É 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.
Criar – Cria (ou constrói) algo
Ação – Realiza uma ação sobre algo
Consulta – Obtém uma propriedade de algo que já existe
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.
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:
O nó Point.Add é um nó de tipo de ação, de modo que a sintaxe funciona de forma um pouco diferente.
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.
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.
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.
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).Usando a sintaxe Point.ByCoordinates
(x_vals<1>,y_vals<2>);
, obtemos duas listas com cinco itens em cada lista.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.
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.
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).
Observe que a amarra em Point.ByCoordinates foi definida como Produto transversal.
Cada ponto em um eixo é movido para cima na direção Z com base em sua distância até o ponto de referência.
Uma superfície é recriada e espessada, criando uma convexidade na geometria relacionada à distância até o ponto de referência.
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.As variáveis x e y são inseridas no Bloco de código de forma que possamos atualizá-las dinamicamente com controles deslizantes.
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.
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.
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.Observe no nó Watch3D que temos um eixo de pontos no eixo do Dynamo.
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 usargridPts.Translate
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.
A direção é muito simples, usamos um
Vector.ZAxis()
para mover verticalmente.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)
A linha final do código fornece os pontos convertidos:
transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));
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);
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.
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:
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.
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