N-rozměrné seznamy

Postoupíme dále ve složitosti a přidáme do hierarchie ještě více vrstev. Datovou strukturu je možné rozšířit daleko za hranice dvourozměrného seznamu seznamů. Vzhledem k tomu, že seznamy jsou v aplikaci Dynamo položky v nich samotných a jich samotných, je možné vytvořit data s tolika rozměry kolik je jen možné.

Analogie, se kterou budeme pracovat, je založena na ruských matrjoškách. Každý seznam je možné chápat jako kontejner obsahující více položek. Každý seznam má své vlastnosti a také je chápán jako svůj vlastní objekt.

Sada ruských matrjošek (autor fotografie: Zeta) je analogií pro n-rozměrné seznamy. Každá vrstva představuje seznam a každý seznam obsahuje položky. V případě aplikace Dynamo může mít každý kontejner uvnitř více kontejnerů (představujících položky každého seznamu).

N-rozměrné seznamy se těžko vysvětlují vizuálně, v této kapitole jsme však připravili několik cvičení, která se zaměřují na práci se seznamy přesahujícími dva rozměry.

Mapování a kombinace

Mapování je pravděpodobně nejsložitější součástí správy dat v aplikaci Dynamo a je obzvláště důležité při práci se složitými hierarchiemi seznamů. Pomocí řady cvičení níže si ukážeme, kdy je třeba použít mapování a kombinace, když se data stanou vícerozměrnými.

Předběžná představení uzlů List.Map a List.Combine najdete v předchozí části. V posledním cvičení níže použijeme tyto uzly na složitou datovou strukturu.

Cvičení – 2D seznamy – základní

Kliknutím na odkaz níže si stáhněte vzorový soubor.

Úplný seznam vzorových souborů najdete v dodatku.

Toto cvičení je první v řadě tří, které se zaměřuje na členění importované geometrie. Každá část této řady cvičení zvýší složitost datové struktury.

  1. Začněte souborem .sat ve složce souborů cvičení. Tento soubor můžete načíst pomocí uzlu File Path.

  2. Pomocí uzlu Geometry.ImportFromSAT se geometrie importuje do náhledu aplikace Dynamo jako dva povrchy.

V tomto cvičení se pracuje z důvodu zjednodušení pouze s jedním povrchem.

  1. Výběrem indexu 1 uchopte povrch. Index vyberete pomocí uzlu List.GetItemAtIndex.

  2. Vypněte náhled geometrie v náhledu uzlu Geometry.ImportFromSAT.

Dalším krokem je rozdělení povrchu na osnovu bodů.

1. Pomocí bloku kódu vložte tyto dva řádky kódu: 0..1..#10; 0..1..#5;.

2. Připojte dvě hodnoty bloku kódu ke vstupům u a v uzlu Surface.PointAtParameter. Změňte vázání tohoto uzlu na „Vektorový součin“.

3. Výstup odhalí datovou strukturu, která je viditelná také v náhledu aplikace Dynamo.

Dále pomocí bodů z posledního kroku vygenerujte deset křivek podél povrchu.

  1. Chcete-li se podívat, jak je datová struktura uspořádána, připojte objekt NurbsCurve.ByPoints k výstupu uzlu Surface.PointAtParameter.

  2. Nyní můžete vypnout náhled z uzlu List.GetItemAtIndex, abyste získali jasnější výsledek.

  1. Základní uzel List.Transpose převrátí sloupce a řádky seznamu seznamů.

  2. Pokud se výstup uzlu List.Transpose připojí k uzlu NurbsCurve.ByPoints, přes povrch bude nyní horizontálně umístěno pět křivek.

  3. Chcete-li dosáhnout stejného výsledku jako na obrázku, můžete v předchozím kroku vypnout náhled z uzlu NurbsCurve.ByPoints.

Cvičení – 2D seznamy – rozšířené

Zvýšíme složitost. Řekněme, že chcete provést operaci s křivkami vytvořenými v předchozím cvičení. Možná bude užitečné tyto křivky spojit s jiným povrchem a šablonovat mezi nimi. Toto vyžaduje věnování větší pozornosti datové struktuře, ale příslušná logika je stejná.

  1. Začněte krokem z předchozího cvičení, který izoluje horní povrch importované geometrie pomocí uzlu List.GetItemAtIndex.

  1. Pomocí uzlu Surface.Offset odsaďte povrch o hodnotu 10.

  1. Stejným způsobem jako v předchozím cvičení definujte blok kódu s těmito dvěma řádky kódu: 0..1..#10; 0..1..#5;.

  2. Tyto výstupy připojte ke dvěma uzlům Surface.PointAtParameter, z nichž každý má vázání nastaveno na Vektorový součin. Jeden z těchto uzlů je připojen k původnímu povrchu, zatímco druhý je připojen k odsazenému povrchu.

  1. Vypněte náhled těchto povrchů.

  2. Stejně jako v předchozím cvičení připojte výstupy ke dvěma uzlům NurbsCurve.ByPoints. Ve výsledku se zobrazí křivky odpovídající dvěma povrchům.

  1. Pomocí uzlu List.Create je možné kombinovat dvě sady křivek do jednoho seznamu seznamů.

  2. Všimněte si, že z výstupu máme dva seznamy každý po deseti položkách, přičemž každý z nich představuje připojenou sadu křivek nurbs.

  3. Provedením operace uzlu Surface.ByLoft je možné vizuálně pochopit tuto datovou strukturu. Uzel šablonuje všechny křivky v každém dílčím seznamu.

  1. Vypněte náhled z uzlu Surface.ByLoft v předchozím kroku.

  2. Pokud použijete uzel List.Transpose, nezapomeňte, že se překlopí všechny sloupce a řádky. Tento uzel převede dva seznamy deseti křivek do deseti seznamů dvou křivek. Nyní je každá křivka nurbs vztažena k sousedící křivce na druhém povrchu.

  3. Pomocí uzlu Surface.ByLoft jste vytvořili žebrovanou konstrukci.

Dále si ukážeme alternativní postup k dosažení tohoto výsledku.

  1. Než začneme, vypněte náhled uzlu Surface.ByLoft v předchozím kroku, abyste se vyhnuli nejasnostem.

  2. Alternativou uzlu List.Transpose je List.Combine. Tento uzel ovládá „kombinátor“ v každém dílčím seznamu.

  3. V tomto případě použijeme uzel List.Create jako „kombinátor“, který vytvoří seznam jednotlivých položek v dílčích seznamech.

  4. Pomocí uzlu Surface.ByLoft získáte stejné povrchy jako v předchozím kroku. Transpozice je v tomto případě jednodušší, pokud však bude datová struktura ještě složitější, uzel List.Combine je spolehlivější.

  1. Pokud bychom v jednom z předchozích kroků chtěli přepnout orientaci křivek žebrované konstrukce, před připojením k uzlu NurbsCurve.ByPoints bychom použili uzel List.Transpose. Ten převrátí sloupce a řádky a vytvoří 5 vodorovných žeber.

Cvičení – 3D seznamy

Je čas postoupit o krok dál. V tomto cvičení budete pracovat s oběma importovanými povrchy a vytvoříte složitou datovou hierarchii. Stále je však naším cílem dokončení této operace pomocí stejné příslušné logiky.

Začněte u importovaného souboru z předchozího cvičení.

  1. Stejně jako v předchozím cvičení přidejte pomocí uzlu Surface.Offset odsazení o hodnotu 10.

  2. Všimněte si, že na výstupu se vytvořily dva povrchy s odsazeným uzlem.

  1. Stejným způsobem jako v předchozím cvičení definujte blok kódu s těmito dvěma řádky kódu: 0..1..#20; 0..1..#20;.

  2. Tyto výstupy připojte ke dvěma uzlům Surface.PointAtParameter, z nichž každý má vázání nastaveno na „Vektorový součin“. Jeden z těchto uzlů je připojen k původním povrchům, zatímco druhý je připojen k odsazeným povrchům.

  1. Stejně jako v předchozím cvičení připojte výstupy ke dvěma uzlům NurbsCurve.ByPoints.

  2. Při pohledu na výstup uzlu NurbsCurve.ByPoints si všimněte, že se jedná o seznam dvou seznamů, což je složitější struktura než v předchozím cvičení. Data jsou kategorizována podle základních povrchů, čili do strukturovaných dat byla přidána další vrstva.

  3. Všimněte si, že v uzlu Surface.PointAtParameter se již situace stane složitější. V tomto případě máme seznam seznamů seznamů.

  1. Než budeme pokračovat, vypněte náhled existujících povrchů.

  2. Pomocí uzlu List.Create sloučíme křivky nurbs do jedné datové struktury, čímž vytvoříte seznam seznamů seznamů.

  3. Připojením uzlu Surface.ByLoft získáte verzi původních povrchů, protože každý zůstane ve svém vlastním seznamu vytvořeném z původní datové struktury.

  1. V předchozím cvičení bylo možné vytvořit žebrovanou konstrukci pomocí uzlu List.Transpose. Toto zde nebude fungovat. Transpozice by měla být použita na dvourozměrný seznam a vzhledem k tomu, že máme trojrozměrný seznam, operace „převrácení sloupců a řádků“ nebude fungovat tak snadno. Nezapomeňte, že seznamy jsou objekty, čili uzel List.Transpose převrátí naše seznamy bez dílčích seznamů, ale nepřevrátí křivky nurbs o jeden seznam níže v hierarchii.

  1. Zde bude lépe fungovat uzel List.Combine. Když dojde na složitější datové struktury, chceme použít uzly List.Map a List.Combine.

  2. Pokud použijeme uzel List.Create jako „kombinátor“, vytvoříme datovou strukturu, která nám bude lépe fungovat.

  1. Datovou strukturu o jeden krok níže v hierarchii je stále třeba transponovat. Toto provedete pomocí uzlu List.Map. Funguje jako uzel List.Combine, jen má jeden vstupní seznam místo dvou a více.

  2. Funkce použitá na uzel List.Map je List.Transpose, která převrátí sloupce a řádky dílčích seznamů v hlavním seznamu.

  1. Nakonec můžete šablonovat křivky nurbs společně s vhodnou hierarchií dat. Tím vznikne žebrovaná konstrukce.

  1. Nyní přidáme do geometrie hloubku pomocí uzlu Surface.Thicken se vstupním nastavením, jak je znázorněno na obrázku.

  1. Bylo by vhodné přidat do této struktury podkladový povrch. Přidejte tedy další uzel Surface.ByLoft a jako vstup použijte první výstup uzlu NurbsCurve.ByPoints ze staršího kroku.

  2. Protože se náhled stává nepřehledným, vypněte náhled pro tyto uzly kliknutím pravým tlačítkem na každý z nich a zrušením zaškrtnutí políčka Náhled, abyste lépe viděli výsledek.

  1. A zesílením těchto vybraných povrchů je dokončeno i členění.

Nejedná se zrovna o nejpohodlnější houpací křeslo, ale pracuje se u něj s mnoha daty.

V posledním kroku obrátíme směr žlábkovaných členů. V předchozím kroku jsme použili transpozici, tady uděláme něco podobného.

  1. Vzhledem k tomu, že hierarchie má ještě další vrstvu, je třeba pomocí uzlu List.Map a funkce List.Tranpose změnit směr křivek nurbs.

  1. Mohli bychom chtít zvýšit počet vzorků běhounu, což provedeme změnou bloku kódu na 0..1..#20; 0..1..#30;.

První verze houpacího křesla byla štíhlá, čili druhý model nabízí robustní off-roadovou verzi usazení.

Last updated