All pages
Powered by GitBook
1 of 1

Loading...

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
Open

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.