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.
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.
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.
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 Ă© 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.
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.
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.
Vamos selecionar o Ăndice de 1 para selecionar a superfĂcie superior. Isso Ă© feito com o nĂł List.GetItemAtIndex.
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.
Para obter uma visĂŁo de como a estrutura de dados estĂĄ organizada, vamos conectar NurbsCurve.ByPoints Ă saĂda de Surface.PointAtParameter.
VocĂȘ pode desativar a visualização do nĂł List.GetItemAtIndex por enquanto para obter um resultado mais claro.
Um List.Transpose bĂĄsico inverterĂĄ as colunas e as linhas de uma lista de listas.
Conectando a saĂda de List.Transpose a NurbsCurve.ByPoints, agora obtemos cinco curvas sendo executadas horizontalmente na superfĂcie.
VocĂȘ pode desativar a visualização do nĂł NurbsCurve.ByPoints na etapa anterior para obter o mesmo resultado na imagem.
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.
Comece com uma etapa do exercĂcio anterior, isolando a superfĂcie superior da geometria importada com o nĂł List.GetItemAtIndex.
Usando Surface.Offset, desloque a superfĂcie por um valor de 10.
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;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.
Desative a visualização dessas superfĂcies.
Como no exercĂcio anterior, conecte as saĂdas aos dois nĂłs NurbsCurve.ByPoints. O resultado mostra curvas correspondentes Ă s duas superfĂcies.
Usando List.Create, Ă© possĂvel combinar os dois conjuntos de curvas em uma lista de listas.
Observe que, na saĂda, temos duas listas com dez itens em cada uma, representando cada conjunto de conexĂŁo de curvas Nurbs.
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.
Desative a visualização do nó Surface.ByLoft na etapa anterior.
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.
Usando Surface.ByLoft, chegamos a uma estrutura nervurada.
Em seguida, demonstraremos um processo alternativo para alcançar esse resultado
Antes de começarmos, desative a visualização de Surface.ByLoft na etapa anterior para evitar confusão.
Uma alternativa para List.Transpose Ă© usar List.Combine. Isso executarĂĄ um âcombinadorâ em cada sublista.
Neste caso, estamos usando List.Create como o âcombinadorâ, o que criarĂĄ uma lista de cada item nas sublistas.
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.
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.
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.
Como no exercĂcio anterior, use o nĂł Surface.Offset para deslocar por um valor de 10.
Observe, na saĂda, que criamos duas superfĂcies com o nĂł de deslocamento.
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;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.
Como no exercĂcio anterior, conecte as saĂdas aos dois nĂłs NurbsCurve.ByPoints.
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.
Observe que as coisas se tornam mais complexas no nĂł Surface.PointAtParameter. Neste caso, temos uma lista de listas de listas.
Antes de prosseguir, desative a visualização das superfĂcies existentes.
Usando o nĂł List.Create, mesclamos as curvas Nurbs em uma estrutura de dados, criando uma lista de listas de listas.
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.
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.
List.Combine funcionarĂĄ melhor neste caso. Devemos usar os nĂłs List.Map e List.Combine quando chegarmos a estruturas de dados mais complexas.
Usando List.Create como o âcombinadorâ, criamos uma estrutura de dados que funcionarĂĄ melhor.
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.
A função que serå aplicada a List.Map é List.Transpose, que inverterå as colunas e as linhas das sublistas em nossa lista principal.
Finalmente, podemos fazer a transição entre as curvas Nurbs junto com uma hierarquia de dados adequada, gerando uma estrutura nervurada.
Vamos adicionar alguma profundidade à geometria com um nó Surface.Thicken, com as configuraçÔes de entrada conforme mostrado.
Ă 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.
Ă 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.
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.
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.
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.





























