Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Aplikace Dynamo je aktivní vývojový projekt s otevřeným zdrojovým kódem. Prohlédněte si seznam softwaru, který podporuje aplikaci Dynamo.
Aplikace Dynamo je dodávána předinstalována s různým softwarem, jako je Revit3D, FormIt, Civil3D a podobně.
Další pokyny k používání aplikace Dynamo s konkrétním softwarem naleznete v následujících částech:
Pokud chcete aplikaci Dynamo používat jako samostatnou aplikaci, přečtěte si níže pokyny ke stažení aplikace Dynamo Sandbox.
Aplikace Dynamo je k dispozici na webových stránkách aplikace Dynamo. Na stránce ke stažení jsou k dispozici oficiální, starší a předběžné verze. Přejděte na stránku Get Dynamo a kliknutím na tlačítko Download stáhněte oficiální vydanou verzi.
Pokud hledáte předchozí nebo testovací vývojové verze, přejděte do dolní části této stránky, kde najdete všechny verze.
Testovací vývojové verze mohou obsahovat některé nové a experimentální funkce, které ještě nejsou plně testovány, a proto mohu být nestabilní. Jejich používáním můžete odhalit chyby nebo problémy a pomoci nám vylepšit aplikaci tím, že nahlásíte problémy našemu týmu.
Začátečníkům doporučujeme stáhnout oficiální stabilní verzi.
Před spuštěním jakékoli verze, kterou jste stáhli, je nutné rozbalit obsah do vybrané složky.
V tomto kroku stáhněte a nainstalujte do počítače soubor 7zip.
Klikněte pravým tlačítkem myši na soubor ZIP a vyberte příkaz Extrahovat vše.
Vyberte cíl, do kterého chcete rozbalit všechny soubory.
V cílové složce dvakrát klikněte na soubor DynamoSandbox.exe, abyste jej spustili.
Zobrazí se následující úvodní obrazovka aplikace Dynamo Sandbox.
Blahopřejeme! Dokončili jste instalaci aplikace Dynamo Sandbox a můžete ji začít používat.
Geometrie je dodatečná funkce aplikace Dynamo Sandbox, která je dostupná pouze uživatelům, kteří mají aktuální předplatné nebo licenci k následujícímu softwaru Autodesk: Revit, Robot Structural Analysis, FormIt a Civil 3D. Geometrie umožňuje uživatelům importovat, vytvářet, upravovat a exportovat geometrii z aplikace Dynamo Sandbox.
Knihovna obsahuje všechny načtené uzly, včetně výchozích kategorií uzlů, které jsou dodávány s instalací, a všech dalších načtených vlastních uzlů nebo balíčků. Uzly v knihovně jsou hierarchicky uspořádány v rámci knihoven, kategorií a případně podkategorií.
Základní uzly: Dodávány s výchozí instalací.
Vlastní uzly: Často používané postupy nebo speciální graf si můžete uložit jako vlastní uzly. Vlastní uzly můžete také sdílet s komunitou.
Uzly z nástroje Package Manager: Kolekce publikovaných vlastních uzlů.
Procházení těchto kategorií je nejrychlejší způsob, jak pochopit hierarchii toho, co můžeme přidat do našeho pracovního prostoru, a nejlepší způsob, jak objevit nové uzly, které jste předtím nepoužili.
Procházejte knihovnu kliknutím na nabídky a rozbalte jednotlivé kategorie a jejich podkategorie.
K počátečnímu zkoumání je vhodná nabídka Geometry, protože obsahuje největší množství uzlů.
Knihovna
Kategorie
Dílčí kategorie
Uzel
Uzly jsou dále kategorizovány do stejné podkategorie na základě toho, zda uzly vytvářejí data, provádějí akce nebo dotazují data.
Přesunutím ukazatele myši nad uzel zobrazíte podrobnější informace kromě jeho názvu a ikony. To nám umožňuje rychle pochopit, co uzel dělá, jaké bude vyžadovat vstupy a jaký bude poskytovat výstup.
Popis – prostý jazyk popisující uzel
Ikona – větší verze ikony v nabídce knihovny
Vstupy – název, datový typ a datová struktura
Výstupy – datový typ a struktura
Pokud přibližně víte, který uzel chcete přidat do pracovního prostoru, začněte zadávat jeho název do pole Hledat, čímž vyhledáte všechny odpovídající uzly.
Kliknutím na uzel, který chcete přidat, nebo stisknutím klávesy Enter přidáte zvýrazněné uzly do středu pracovního prostoru.
Kromě použití klíčových slov při hledání uzlů můžete zadat hierarchii oddělenou tečkou do vyhledávacího pole nebo pomocí bloků kódu (které používají textový jazyk aplikace Dynamo).
Hierarchie jednotlivých knihoven se odráží v názvu uzlů přidaných do pracovního prostoru.
Zadáním různých částí místa uzlu v hierarchii knihovny ve formátu library.category.nodeName
získáte různé výsledky:
library.category.nodeName
category.nodeName
nodeName
nebo keyword
Název uzlu v pracovním prostoru se obvykle vykresluje ve formátu category.nodeName
, s důležitými výjimkami zejména v kategoriích Input a View.
Dávejte pozor na podobně pojmenované uzly a všimněte si rozdílu kategorií:
Uzly z většiny knihoven budou obsahovat formát kategorie
Uzly Point.ByCoordinates
a UV.ByCoordinates
mají stejný název, ale pocházejí z různých kategorií
Mezi povinné výjimky patří funkce Built-in, Core.Input, Core.View a Operators
Základní instalace aplikace Dynamo zahrnuje stovky uzlů. Které z nich jsou nezbytné pro vývoj našich vizuálních programů? Zaměřme se na ty, které nám umožňují definovat parametry programu (Input), zobrazit výsledky akce uzlu (Watch) a definovat vstupy nebo funkce pomocí zástupce (Code Block).
Vstupní uzly jsou primárním prostředkem pro uživatele našeho vizuálního programu – ať jste to vy nebo někdo jiný – pro propojení s klíčovými parametry. Níže jsou uvedeny některé uzly dostupné v základní knihovně:
Uzly Watch jsou nezbytné ke správě dat, která prochází vaším vizuálním programem. Výsledek uzlu si můžete zobrazit prostřednictvím náhledu dat uzlu, když nad uzel umístíte ukazatel myši.
V uzlu Watch je vhodné zachovat náhled zobrazený.
Pomocí uzlu Watch3D si můžete zobrazit výsledky geometrie.
Oba tyto uzly jsou dostupné v základní knihovně v kategorii View.
Tip: Pokud vizuální program obsahuje mnoho uzlů, může být někdy 3D náhled rozptylující. Zvažte zrušení zaškrtnutí možnosti Zobrazovat náhled pozadí v nabídce Nastavení a použití uzlu Watch3D k zobrazení náhledu geometrie.
Uzly Code Block lze použít k definování bloku kódu pomocí řádků oddělených středníky. Může to být jednoduchý kód, například X/Y
.
Níže je uvedena jednoduchá ukázka (s pokyny) použití bloku kódu ve skriptu.
Dvojitým kliknutím vytvořte uzel Code Block.
Zadejte Circle.ByCenterPointRadius(x,y);
.
Kliknutím na pracovní prostor pro zrušení výběru by se měly automaticky přidat vstupy x
a y
.
Vytvořte uzly Point.ByCoordinates a Number Slider a připojte je ke vstupům uzlu Code Block.
Výsledek spuštění vizuálního programu je zobrazen jako kružnice v 3D náhledu.
Aplikace Dynamo je platforma vizuálního programování s otevřeným kódem určená pro konstruktéry.
Právě jste otevřeli Dynamo Primer, kompletní příručku pro vizuální programování v aplikaci Autodesk Dynamo. Tato příručka je stále ve vývoji a obsahuje základní informace pro programování. Mezi témata patří práce s výpočetní geometrií, osvědčené postupy pro návrh podle pravidel, mezioborové programování a další témata týkající se platformy Dynamo.
Aplikace Dynamo obsahuje výkonné funkce pro širokou škálu navrhovacích postupů. Svou práci v této aplikaci můžete začít mnoha způsoby:
Prozkoumejte a seznamte se s vizuálním programováním.
Propojujte pracovní postupy v různých aplikacích.
Zapojte se do aktivní komunity uživatelů, přispěvatelů a vývojářů.
Vyvíjejte a vylepšujte platformu s otevřeným zdrojovým kódem.
Pro kvalitní funkce, které nabízí aplikace Dynamo, je potřeba stejně kvalitní dokumentace, Dynamo Primer.
Aplikaci Dynamo neustále vylepšujeme, takže některé funkce mohou vypadat jinak, než je znázorněno v této příručce Primer. Všechny změny funkcí však budou správně reprezentovány.
Projekt Dynamo Primer má otevřený zdrojový kód. Naším cílem je nabídnout uživatelům kvalitní obsah a oceníme jakoukoliv zpětnou vazbu. Pokud chcete ohlásit problém nebo připomínku, vložte ji na stránku s problémy na GitHubu: https://github.com/DynamoDS/DynamoPrimer/issues.
Pokud do projektu chcete přidat novou část, úpravy nebo něco jiného, začněte u našeho repozitáře na GitHubu: https://github.com/DynamoDS/DynamoPrimer
Dynamo Primer je projekt s otevřeným zdrojovým kódem, který vytvořil Matt Jezyk a tým vývojářů aplikace Dynamo společnosti Autodesk.
Společnost Mode Lab sepsala první edici příručky Primer. Děkujeme jim za jejich úsilí při vytváření tohoto hodnotného zdroje.
John Pierson ze společnosti Parallax Team aktualizoval příručku Primer podle verze aplikace Dynamo 2.0.
Společnost Matterlab byla pověřena aktualizací příručky Primer tak, aby odrážela revize aplikace Dynamo 2.13.
Společnost Archilizer byla pověřena aktualizací příručky Primer tak, aby odrážela revize aplikace Dynamo 2.17.
Společnost Wood Rodgers byla pověřena aktualizací příručky Primer obsahem týkajícím se aplikace Dynamo for Civil 3D.
Zvláštní poděkování Ianu Keoughovi za vytvoření a řízení projektu Dynamo.
Děkujeme Mattu Jezykovi, Ianu Keoughovi, Zachu Kronovi, Racel Amourové a Colinu McCroneovi za jejich spolupráci a účast na celé řadě projektů aplikace Dynamo.
Dynamo Nejnovější stabilní verzi aplikace Dynamo naleznete na následujících webových stránkách.
http://dynamobim.com/download/ nebo http://dynamobuilds.com
DynamoBIM Nejlepší zdroj dalších informací, výukových materiálů a komunitních diskuzí je webová stránka DynamoBIM.
http://dynamobim.org
GitHub aplikace Dynamo Dynamo je projekt s otevřeným zdrojovým kódem na GitHubu. Chcete-li přispět, podívejte se na stránku DynamoDS.
https://github.com/DynamoDS/Dynamo
Kontakt Pokud v tomto dokumentu najdete chyby, neváhejte a kontaktujte nás.
Dynamo@autodesk.com
Copyright 2023 Autodesk
Licence Apache, verze 2.0 („Licence“); tento soubor lze použít pouze v souladu s Licencí. Kopii licence lze získat na adrese
http://www.apache.org/licenses/LICENSE-2.0
Pokud příslušné zákony nebo písemná smlouva nestanoví jinak, je software distribuovaný na základě Licence distribuován TAK, JAK JE, BEZ JAKÝCHKOLI PODMÍNEK A ZÁRUK, ať už výslovně uvedených nebo odvozených. Konkrétní ustanovení o povoleních a omezeních naleznete v Licenci.
Chcete-li ji začít používat, spusťte ji z panelu nástrojů. Ikona spuštění se obvykle nachází v nabídce na kartě Správa (podle toho, který software používáte). Spusťte aplikaci Dynamo kliknutím na její ikonu .
V tomto tématu si vysvětlíme , ukážeme si, jak lze a seznámíme se s některými .
Tvorba: Vytvořte nebo sestavte geometrii od začátku. Vytvořte například kružnici.
Akce: Proveďte akci s objektem. Změňte například velikost kružnice.
Dotaz: Získejte vlastnost objektu, který již existuje. Zjistěte například poloměr kružnice.
Bloky kódu také můžete použít jako zkratku k definování položky Number Input nebo k volání funkce jiného uzlu. Syntaxe se řídí konvencí pojmenování textového jazyka aplikace Dynamo, .
Informace o tématech dostupných v této dokumentaci naleznete v .
*Poznámka: Počínaje aplikací Revit 2020 je aplikace Dynamo součástí vydání aplikace Revit a nemusí být ručně instalována. Další informace jsou k dispozici na tomto příspěvku na .
V této části představujeme základní uzly dostupné v knihovně aplikace Dynamo, které vám pomohou vytvořit váš vlastní vizuální program v profesionální kvalitě.
Geometrie pro výpočetní návrh: Jak se v aplikaci Dynamo pracuje s geometrickými prvky? Prozkoumejte více způsobů vytváření jednoduchých nebo složitých geometrií ze základních těles.
Stavební bloky programů: Co jsou „data“ a jaké základní typy se používají v programech? Dozvíte se také další informace o začlenění matematických a logických operací do pracovního postupu návrhu
Práce se seznamy: Jak spravovat a uspořádat datové struktury? Získejte další informace o konceptu seznamu a použijte jej k efektivní správě dat návrhu.
Slovníky v aplikaci Dynamo: Co jsou slovníky? Zjistěte, jak používat slovníky k vyhledávání specifických dat a hodnot z existujících výsledků.
Logická hodnota
Number
String
Number Slider
Directory Path
Integer Slider
File Path
Tento rejstřík nabízí dodatečné informace o všech uzlech použitých v této příručce a také dalších komponentách, které mohou být užitečné. Jedná se pouze o představení některých z 500 uzlů dostupných v aplikaci Dynamo.
TVORBA
Color.ByARGB Umožňuje vytvořit barvu pomocí alfa, červené, zelené a modré složky.
Color Range Vrací barvu z barevného gradientu mezi počáteční a koncovou barvou.
AKCE
Color.Brightness Vrací hodnotu jasu této barvy.
Color.Components Zobrazí seznam složek barvy v pořadí: alfa, červená, zelená a modrá.
Color.Saturation Vrací hodnotu sytosti této barvy.
Color.Hue Vrací hodnotu odstínu této barvy.
DOTAZ
Color.Alpha Umožňuje najít alfa složku barvy, 0 až 255.
Color.Blue Umožňuje zjistit modrou složku barvy, 0 až 255.
Color.Green Umožňuje zjistit zelenou složku barvy, 0 až 255.
Color.Red Umožňuje zjistit červenou složku barvy, 0 až 255.
TVORBA
GeometryColor.ByGeometryColor Zobrazit geometrii v barvě.
AKCE
View.Watch Vizualizuje výstup uzlu.
View.Watch 3D Zobrazí dynamický náhled geometrie.
AKCE
Boolean Výběr mezi hodnotami true a false.
Code Block Umožňuje přímou tvorbu kódu DesignScript.
Directory Path Umožňuje vybrat adresář v systému a načíst jeho cestu.
File Path Umožňuje výběr souboru v systému a získá jeho název.
Integer Slider Posuvník, který vytváří celočíselné hodnoty.
místnosti Vytvoří číslo.
Number Slider Posuvník, který vytváří číselné hodnoty.
Řetězec Vytvoří řetězec.
Object.IsNull Určuje, zda má zadaný objekt hodnotu null.
TVORBA
List.Create Vytvoří nový seznam ze zadaných vstupů.
List.Combine Použije kombinátor na každý prvek ve dvou posloupnostech.
Number Range Vytvoří posloupnost čísel v zadaném rozsahu.
Number Sequence Vytvoří posloupnost čísel.
AKCE
List.Chop Rozdělí seznam do sady seznamů, z nichž každý obsahuje dané množství položek.
List.Count Vrací počet položek uložených v daném seznamu.
List.Flatten Vyrovná vnořený seznam seznamů o určitou hodnotu.
List.FilterByBoolMask Filtruje posloupnost na základě vyhledávání příslušných indexů v samostatném seznamu logických hodnot.
List.GetItemAtIndex Vrací položku z daného seznamu, která se nachází na určeném indexu.
List.Map Použije funkci na všechny prvky v seznamu, čím z výsledků vytvoří nový seznam.
List.Reverse Vytvoří nový seznam obsahující položky daného seznamu, ale v obráceném pořadí.
List.ReplaceItemAtIndex Nahradí položku z daného seznamu, která se nachází na daném indexu.
List.ShiftIndices Posune indexy v seznamu doprava o zadané množství.
List.TakeEveryNthItem Načte položky ze zadaného seznamu na indexech, které jsou násobky dané hodnoty s daným odsazením.
List.Transpose Prohodí řádky a sloupce v seznamu seznamů. Pokud jsou některé řádky kratší než jiné, budou jako zástupné znaky do výsledného pole vloženy hodnoty null, tak aby pole stále bylo pravoúhlé.
AKCE
Pokud Podmíněný výraz. Zkontroluje booleovskou hodnotu testovacího vstupu. Pokud má testovací vstup hodnotu true, výsledný výstup bude mít hodnotu true, v opačném případě bude mít hodnotu false.
AKCE
Math.Cos Vrací kosinus úhlu.
Math.DegreesToRadians Převede úhel ve stupních na úhel v radiánech.
Math.Pow Umocní číslo na danou mocninu.
Math.RadiansToDegrees Převede úhel v radiánech na úhel ve stupních.
Math.RemapRange Upraví rozsah seznamu čísel při zachování poměru rozložení.
Math.Sin Najde sinus úhlu.
Formula Vyhodnocuje matematické vzorce. K vyhodnocení používá NCalc. Viz http://ncalc.codeplex.com
Map Mapuje hodnotu do vstupního rozsahu.
AKCE
String.Concat Zřetězí více řetězců do jediného řetězce.
String.Contains Určuje, zda zadaný řetězec obsahuje daný dílčí řetězec.
String.Join Zřetězí více řetězců do jediného řetězce, přičemž vloží daný oddělovač mezi každý spojený řetězec.
String.Split Rozdělí jeden řetězec na seznam řetězců, s dělením určeným podle daných oddělovacích řetězců.
String.ToNumber Převádí řetězec na celé číslo nebo hodnotu typu double.
TVORBA
Circle.ByCenterPointRadius Vytvoří kružnici se zadaným středem a poloměrem v globální rovině XY, s rovinou Z jako normálou.
Circle.ByPlaneRadius Vytvoří kružnici vystředěnou na počátku vstupní roviny (kořenu), ležící ve vstupní rovině, se zadaným poloměrem.
TVORBA
CoordinateSystem.ByOrigin Vytvoří systém CoordinateSystem s počátkem ve vstupním bodu, s osami X a Y nastavenými jako osy X a Y v GSS.
CoordinateSystem.ByCyclindricalCoordinates Vytvoří systém CoordinateSystem v zadaných válcových souřadnicových parametrech s ohledem na zadaný souřadnicový systém.
TVORBA
Cuboid.ByLengths Vytvoří kvádr vystředěný na počátek GSS, se šířkou, délkou a výškou.
Cuboid.ByLengths (origin)
Vytvoří kvádr vystředěný na vstupním bodu, s určenou šířkou, délkou a výškou.
Cuboid.ByLengths (coordinateSystem)
Vytvoří kvádr vystředěný na počátek GSS, se šířkou, délkou a výškou.
Cuboid.ByCorners
Vytvoří kvádr s rozsahem od dolního bodu po horní bod.
Cuboid.Length
Vrátí vstupní rozměry kvádru, NE skutečné globální rozměry prostoru. **
Cuboid.Width
Vrátí vstupní rozměry kvádru, NE skutečné globální rozměry prostoru. **
Cuboid.Height
Vrátí vstupní rozměry kvádru, NE skutečné globální rozměry prostoru. **
BoundingBox.ToCuboid
Získá hraniční kvádr jako objemový kvádr.
**Jinými slovy, pokud vytvoříte šířku kvádru (osa X) o délce 10 a transformujete ji na souřadnicový systém s 2krát větším měřítkem v ose X, šířka bude stále 10. ASM neumožňuje extrahovat vrcholy tělesa v předvídatelném pořadí, takže po transformaci není možné určit rozměry.
AKCE
Curve.Extrude (distance) Vysune křivku ve směru normálového vektoru.
Curve.PointAtParameter Získá bod na křivce v určeném parametru mezi objekty StartParameter() a EndParameter().
AKCE
Geometry.DistanceTo Získá vzdálenost od této geometrie k jiné.
Geometry.Explode Rozdělí složené nebo neoddělené prvky do součástí jejich komponent.
Geometry.ImportFromSAT Seznam importovaných geometrií
Geometry.Rotate (basePlane) Otočí objekt kolem počátku roviny a normály o zadaný počet stupňů.
Geometry.Translate Posune libovolný typ geometrie o zadanou vzdálenost v daném směru.
TVORBA
Line.ByBestFitThroughPoints Vytvoří čáru nejlépe aproximující rozptýlené vykreslení bodů.
Line.ByStartPointDirectionLength Vytvoří přímou čáru od počátečního bodu, která se prodlouží ve směru vektoru o zadanou délku.
Line.ByStartPointEndPoint Vytvoří rovnou čáru mezi dvěma vstupními body.
Line.ByTangency Vytvoří tečnu ke vstupní křivce, umístěnou v bodu parametru vstupní křivky.
DOTAZ
Line.Direction Směr křivky.
Tvorba
NurbsCurve.ByControlPoints Pomocí explicitních řídicích bodů vytvoří objekt BSplineCurve.
NurbsCurve.ByPoints Vytvoří objekt BSplineCurve pomocí interpolace mezi body.
Tvorba
NurbsSurface.ByControlPoints Vytvoří objekt NurbsSurface pomocí explicitních řídicích bodů se zadanými stupni U a V.
NurbsSurface.ByPoints Vytvoří objekt NurbsSurface s určenými interpolovanými body a stupni U a V. Výsledný povrch bude procházet všemi body.
TVORBA
Plane.ByOriginNormal Vytvoří rovinu vystředěnou na kořenový bod pomocí vstupního normálového vektoru.
Plane.XY Vytvoří rovinu v prostoru XY.
TVORBA
Point.ByCartesianCoordinates Vytvoří bod v daném souřadnicovém systému pomocí 3 kartézských souřadnic.
Point.ByCoordinates (2d) Vytvoří bod v rovině XY pomocí dvou kartézských souřadnic. Komponenta Z je 0.
Point.ByCoordinates (3d) Vytvoří bod daný 3 kartézskými souřadnicemi.
Point.Origin Získá bod počátku (0,0,0).
AKCE
Point.Add Přidá k bodu vektor. Stejné jako Translate (Vector).
DOTAZ
Point.X Získá komponentu X bodu.
Point.Y Získá komponentu Y bodu.
Point.Z Získá komponentu Z bodu.
TVORBA
Polycurve.ByPoints Vytvoří objekt PolyCurve z posloupnosti čar propojujících body. U uzavřené křivky by měl poslední bod být ve stejném umístění jako počáteční bod.
TVORBA
Rectangle.ByWidthLength (Plane) Vytvoří obdélník vystředěný na kořen vstupní roviny se vstupní šířkou (délka osy X roviny) a délkou (délka osy Y roviny).
TVORBA
Sphere.ByCenterPointRadius Vytvoří těleso (kouli) vystředěné na vstupní bod se zadaným poloměrem.
TVORBA
Surface.ByLoft Vytvoří povrch pomocí šablonování mezi křivkami vstupního příčného řezu.
Surface.ByPatch Vytvoří povrch vyplněním vnitřní části uzavřené hranice definované vstupními křivkami.
AKCE
Surface.Offset Odsadí povrch ve směru normály povrchu o zadanou vzdálenost.
Surface.PointAtParameter Vrátí bod v zadaných parametrech U a V.
Surface.Thicken Rozšíří plochu na těleso vysunutím ve směru normál povrchu na obou stranách povrchu.
TVORBA
UV.ByCoordinates Vytvoří prvek UV ze dvou hodnot typu double.
TVORBA
Vector.ByCoordinates Vytvoří vektor pomocí 3 euklidovských souřadnic.
Vector.XAxis Získá kanonický vektor osy X (1,0,0).
Vector.YAxis Získá kanonický vektor osy Y (0,1,0).
Vector.ZAxis Získá kanonický vektor osy Z (0,0,1).
AKCE
Vector.Normalized Získá normalizovanou verzi vektoru.
TVORBA
CoordinateSystem.ByOrigin Vytvoří systém CoordinateSystem s počátkem ve vstupním bodu, s osami X a Y nastavenými jako osy X a Y v GSS.
CoordinateSystem.ByCyclindricalCoordinates Vytvoří systém CoordinateSystem v zadaných válcových souřadnicových parametrech s ohledem na zadaný souřadnicový systém.
+ Součet
- Odečítání
* Součin
/ Podíl
% Modulární dělení nalezne zbytek prvního vstupu po dělení druhým vstupem.
< Menší než
> Větší než
== Zkoušky rovnosti pro rovnost mezi dvěma hodnotami.
Tato příručka Primer obsahuje kapitoly od společnosti Mode Lab. Tyto kapitoly se zaměřují na základy práce s vizuálními programy v aplikaci Dynamo a obsahují i některá pokročilá témata.
Tato příručka je určena pro čtenáře s různými úrovněmi zkušeností a dovedností. V následujících částech naleznete obecný úvod k nastavení aplikace Dynamo, informace o uživatelském rozhraní a klíčové koncepty. Doporučujeme novým uživatelům, aby si tato témata prostudovali:
Uživatelé, kteří by chtěli hlouběji porozumět jednotlivým prvkům, například konkrétním uzlům a jejich koncepci, se mohou seznámit se základy v samostatné kapitole.
Pro uživatele, kteří si chtějí prohlédnout ukázku pracovních postupů aplikace Dynamo, jsme zahrnuli některé grafy do části Vzorové pracovní postupy. Postupujte podle připojených pokynů a vytvořte vlastní grafy aplikace Dynamo.
Další tematická cvičení najdete v dalších kapitolách týkajících se různých aspektů aplikace Dynamo. Cvičení se obvykle nacházejí v poslední části každé stránky.
Aplikace Dynamo by nemohla být taková, jaká je bez široké komunity uživatelů a přispěvatelů. Zapojte se do komunity tím, že budete sledovat blog, přidáte svou práci do galerie nebo budete diskutovat na fóru.
Aplikace Dynamo je navržena jako nástroj vizuálního programování pro konstruktéry, který umožňuje vytvářet nástroje využívající externí knihovny nebo rozhraní API jakéhokoliv produktu společnosti Autodesk. V aplikaci Dynamo Sandbox lze vyvíjet programy v režimu „Sandbox“ – zde však ekosystém aplikace Dynamo ani zdaleka nekončí.
Projekt má otevřený zdrojový kód, takže jej lze rozšiřovat o požadované funkce. Navštivte projekt na GitHubu a podívejte se na probíhající práce na aplikaci Dynamo.
Prohlédněte si a forkněte repozitář a začněte jej rozšiřovat o nové funkce
Uživatelské rozhraní aplikace Dynamo je uspořádáno do pěti hlavních oblastí. Níže naleznete jeho stručný přehled a v následujících částech naleznete informace o pracovním prostoru a knihovně.
Nabídky
Panel nástrojů
Knihovna
Pracovní prostor
Panel spuštění
Zde jsou nabídky pro základní funkce aplikace Dynamo. Podobně jako u většiny softwaru pro systém Windows se první dvě nabídky týkají správy souborů, operací pro výběr a úpravy obsahu. Zbývající nabídky jsou specifičtější pro aplikaci Dynamo.
V rozevírací nabídce Dynamo naleznete obecné informace a přístup k nastavení.
O aplikaci – Zde naleznete informace o verzi aplikace Dynamo nainstalované v počítači.
Smlouva o shromažďování údajů o použitelnosti – Zde můžete povolit nebo zakázat sdílení uživatelských dat za účelem zlepšení aplikace Dynamo.
Předvolby – Zahrnuje nastavení, jako je definování přesnosti aplikace na určený počet desetinných míst a kvality rendrování geometrie.
Ukončit aplikaci Dynamo
Pokud máte problém, podívejte se do nabídky Nápověda. Prostřednictvím internetového prohlížeče můžete navštívit některou z referenčních webových stránek aplikace Dynamo.
Začínáme – Stručný úvod do používání aplikace Dynamo.
Interaktivní průvodce –
Ukázky – Vzorové referenční soubory.
Slovník aplikace Dynamo – Zdroj s dokumentací o všech uzlech.
Webová stránka aplikace Dynamo – Zobrazení projektu aplikace Dynamo v úložišti GitHub.
Stránka Wiki k projektu aplikace Dynamo – Na stránce Wiki najdete informace o vývoji pomocí rozhraní Dynamo API, podpůrných knihoven a nástrojů.
Zobrazit úvodní stránku – Návrat na úvodní stránku aplikace Dynamo, když se nacházíte v dokumentu.
Hlášení chyby – Otevře problém v úložišti GitHub.
Panel nástrojů aplikace Dynamo obsahuje řadu tlačítek pro rychlý přístup k práci se soubory a také příkazy Zpět [Ctrl+Z] a Znovu [Ctrl+Y]. Zcela vpravo je další tlačítko, které umožňuje exportovat snímek pracovního prostoru, což je mimořádně užitečné pro dokumentaci a sdílení.
Knihovna aplikace Dynamo je kolekce funkčních knihoven, z nichž každá obsahuje uzly seskupené podle kategorie. Skládá se ze základních knihoven, které jsou přidány při výchozí instalaci aplikace Dynamo. Jak budeme pokračovat v představování jejího použití, ukážeme si, jak rozšířit základní funkce pomocí vlastních uzlů a dalších balíčků. Podrobnější informace o jejím používání naleznete v části Knihovna.
Pracovní prostor je místo, kde sestavujete své vizuální programy. Můžete také měnit jeho nastavení náhledu tak, abyste si zde mohli prohlížet 3D geometrie. Další podrobnosti naleznete v části Pracovní prostor.
Zde spusťte skript aplikace Dynamo. Kliknutím na ikonu rozevíracího seznamu na tlačítku Spuštění můžete přepínat mezi různými režimy.
Automaticky: Automaticky spustí skript. Změny se aktualizují v reálném čase.
Ruční: Skript se spustí pouze po kliknutí na tlačítko Spustit. To je užitečné při provádění změn ve složitých a těžkých skriptech.
Pravidelně: Ve výchozím nastavení je tato možnost zobrazena šedě. Tato možnost je dostupná pouze v případě, že je použit uzel DateTime.Now. Graf můžete nastavit tak, aby se spouštěl automaticky v zadaném intervalu.
Aplikace Dynamo je prostředí pro vizuální programování, ve kterém lze řídit, jak budou data zpracována. Data jsou čísla nebo text, ale také geometrie. Geometrie, též nazývaná výpočetní geometrie, jsou data, která se používají k tvorbě atraktivních nebo výkonných modelů. K tomu je ovšem zapotřebí pochopit vstupy a výstupy různých typů geometrií.
Pracovní prostor aplikace Dynamo se skládá ze čtyř hlavních prvků.
Všechny aktivní karty
Režim náhledu
Ovládací prvky pro přiblížení / posun pohledu
Uzel v pracovním prostoru
Při otevření nového souboru se ve výchozím nastavení otevře nový domovský pracovní prostor.
Můžete vytvořit vlastní uzel a otevřít jej v pracovním prostoru vlastního uzlu.
V každém okně aplikace Dynamo je povolen pouze jeden domovský pracovní prostor, ale na kartách můžete mít otevřeno více pracovních prostorů vlastních uzlů.
Existují 3 metody přepínání mezi různými náhledy:
a. Pomocí ikon v pravém horním rohu
b. Kliknutím pravým tlačítkem myši na pracovní prostor
Přepnutí z 3D náhledu na náhled grafu
Přepnutí z náhledu grafu na 3D náhled
c. Pomocí klávesové zkratky (Ctrl+B)
K navigaci v obou pracovních prostorech můžete využívat ikony nebo myš.
a. V režimu náhledu grafu
Pomocí ikon:
Pomocí myši:
Kliknutí levým tlačítkem – Výběr
Kliknutí levým tlačítkem a přetažení – Pole výběru umožňující výběr více uzlů
Otáčení prostředním kolečkem nahoru/dolů – Přiblížení/oddálení
Kliknutí prostředním kolečkem a přetažení – Posun pohledu
Kliknutí pravým tlačítkem kdekoli na kreslicí ploše – Otevření hledání na kreslicí ploše
b. V režimu 3D náhledu
Pomocí ikon:
Pomocí myši:
Otáčení prostředním kolečkem nahoru/dolů – Přiblížení/oddálení
Kliknutí prostředním kolečkem a přetažení – Posun pohledu
Kliknutí pravým tlačítkem a přetažení – Orbit
Kliknutím levým tlačítkem myši vyberte libovolný uzel.
Chcete-li vybrat více uzlů, kliknutím a přetažením vytvořte pole výběru.
Pokud chcete vytvářet složitější modely, které nelze vytvořit z jedné plochy, nebo pokud chcete explicitně definovat objem, je nutné využít (a polyplochy). I obyčejná krychle je dost složitá na to, aby potřebovala šest ploch (pro každou stěnu jednu). Tělesa na rozdíl od ploch nabízejí dva klíčové koncepty – přesnější topologický popis (stěny, hrany, vrcholy) a booleovské operace.
K úpravě těles můžete použít . Pojďme vytvořit ostnatou kouli pomocí několika booleovských operací.
Sphere.ByCenterPointRadius: Vytvořte základní těleso.
Topology.Faces, Face.SurfaceGeometry: Vytvořte dotaz na stěny tělesa a převeďte je na geometrie ploch – v tomto případě pracujeme s koulí, která má pouze jednu stěnu.
Cone.ByPointsRadii: Pomocí bodů na ploše vytvořte kužely.
Solid.UnionAll: Sjednoťte kužely a kouli.
Topology.Edges: Vytvořte dotaz na hrany nového tělesa
Solid.Fillet: Zaoblete hrany ostnaté koule
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Booleovské operace jsou složité a jejich výpočet může být pomalý. Pomocí funkce „zmrazení“ je možné pozastavit výpočet vybraných uzlů a všech následných uzlů.
1. Zmrazte operaci sjednocení těles tím, že kliknete pravým tlačítkem myši a vyberete možnost Zmrazit
2. Vybraný uzel a všechny následné uzly se zobrazí světle šedou průhlednou barvou a související dráty budou zobrazeny přerušovaně. Náhled ovlivněné geometrie bude také zobrazen světle šedou průhlednou barvou. Nyní můžete měnit předcházející hodnoty, aniž by došlo k výpočtu booleovského sjednocení.
3. Chcete-li zmrazení zrušit, klikněte pravým tlačítkem a zrušte výběr možnosti Zmrazit.
4. Všechny ovlivněné uzly a geometrie se aktualizují a zobrazí se běžným způsobem.
Tělesa se skládají z jedné nebo více ploch, které tvoří objem tím, že definují hranici, která rozděluje prostor na vnitřní a vnější. Aby byl objem považován za těleso, musí být neprodyšně uzavřen, nezávisle na počtu ploch. Tělesa lze vytvářet spojováním ploch nebo polyploch nebo pomocí operací, například spojením profilů, tažením nebo rotací. Koule, krychle, kužel a válec jsou také tělesy. Krychle s odebranou stěnou se považuje za polyplochu s podobnými vlastnostmi, ale nejedná se přímo o těleso.
Rovina se skládá z jedné plochy a nejedná se o těleso.
Koule je tvořena jednou plochou a je tělesem.
Kužel je tvořen dvěma spojenými plochami utvářejícími těleso.
Válec je tvořen třemi spojenými plochami utvářejícími těleso.
Krychle je tvořena šesti spojenými plochami utvářejícími těleso.
Tělesa se skládají z prvků třech typů: vrcholů, hran a stěn. Stěny jsou plochy, které těleso tvoří. Hrany jsou křivky, které definují propojení sousedních hran a vrcholy jsou počáteční a koncové body těchto křivek. Tyto prvky je možné dotazovat prostřednictvím uzlů topologie.
Stěny
Hrany
Vrcholy
Tělesa lze upravit zaoblením nebo zkosením jejich hran, aby se odstranily ostré rohy a úhly. Operace zkosení vytvoří šikmou plochu mezi dvěma stěnami, zatímco zaoblení mezi nimi vytvoří plynulý přechod se zachováním tečnosti.
Krychlové těleso
Zkosená krychle
Zaoblená krychle
Booleovské operace s tělesy kombinují dvě nebo více těles. Jedna booleovská operace ve skutečnosti provádí čtyři operace:
Průnik dvou nebo více objektů.
Rozdělení těchto objektů v průsečících.
Odstranění nežádoucích částí geometrie.
Spojení celé geometrie dohromady.
Sjednocení: Odebere překrývající se části těles a spojí je do jednoho tělesa.
Rozdíl: Odečte jedno těleso od druhého. Odečítané těleso se nazývá nástroj. Je možné určit, které těleso bude použito jako nástroj.
Průsečík: Zachová pouze společný objem obou těles.
UnionAll: Operace sjednocení s koulí a kužely směřujícími ven.
DifferenceAll: Operace rozdílu s koulí a kužely směřujícími dovnitř.
není definován ničím jiným než jednou nebo více hodnotami, které se nazývají souřadnice. Počet hodnot souřadnic, které je potřeba definovat, závisí na souřadnicovém systému nebo kontextu, ve kterém se bod nachází.
Nejběžnější typ bodu v aplikaci Dynamo existuje v našem trojrozměrném globálním souřadnicovém systému a má tři souřadnice [X,Y,Z] (3D bod v aplikaci Dynamo).
2D bod v aplikaci Dynamo má dvě souřadnice [X,Y].
Parametry křivek i povrchů jsou spojité a přesahují hranu dané geometrie. Protože tvary, které definují parametrický prostor, se nacházejí v trojrozměrném globálním souřadnicovém systému, můžeme vždy převést parametrickou souřadnici do „Globální“ souřadnice. Například bod [0.2, 0.5] na povrchu je stejný jako bod [1.8, 2.0, 4.1] v globálních souřadnicích.
Bod v předpokládaných globálních souřadnicích XYZ
Bod relativní k danému souřadnicovému systému (válcový)
Bod jako souřadnice UV na povrchu
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Pokud je geometrie jazykem modelu, pak body jsou abecedou. Body jsou základem, na kterém je vytvořena veškerá další geometrie – k vytvoření křivky potřebujeme alespoň dva body, k vytvoření polygonu nebo plochy sítě potřebujeme alespoň tři body, a tak dále. Definování polohy, pořadí a vztahu mezi body (zkuste funkci sinus) umožňuje definovat geometrii vyššího řádu, například věci, které známe jako kružnice nebo křivky.
Kružnice vytvořená pomocí funkcí
x=r*cos(t)
ay=r*sin(t)
.Sinusoida vytvořená pomocí funkcí
x=(t)
ay=r*sin(t)
.
Body mohou existovat také v dvojrozměrném souřadnicovém systému. Konvence má různé písmeno označující prostor, se kterým pracujete – můžeme použít [X,Y] na rovině nebo [U,V], na ploše.
Bod v euklidovském souřadnicovém systému: [X,Y,Z]
Bod v souřadnicovém systému parametru křivky: [t]
Bod v souřadnicovém systému parametru povrchu: [U,V]
Dynamo je aplikace pro , kterou lze stáhnout a spustit v samostatném režimu „Sandbox“ nebo jako modul plug-in pro jiný software, například Revit, FormIt nebo Civil 3D.
Přečtěte si další informace o
Aplikace Dynamo umožňuje vizuální programování, tedy propojovat prvky, určovat mezi nimi vazby a vytvářet tak algoritmy složené z posloupnosti akcí. Tyto algoritmy lze použít pro širokou škálu aplikací, od zpracování dat po generování geometrií, to vše v reálném čase a bez jediného řádku kódu (code
).
Dynamo je nedílnou součástí nejrůznějších zajímavých aplikací, od používání vizuálního programování pro pracovní postupy projektů až po vývoj vlastních nástrojů.
Pomocí v modelu reprezentujeme objekty, které vidíme v našem trojrozměrném světě. I když křivky nejsou vždy rovinnými objekty, tj. jsou trojrozměrné, prostor, který definují, je vždy svázán s jedním rozměrem. Plochy nabízejí o jeden prostor navíc a sadu dalších vlastností, které lze používat v dalších operacích modelování.
Importujme plochu do aplikace Dynamo a vyhodnoťme ji v daných parametrech, abychom zjistili, jaká data můžeme získat.
Surface.PointAtParameter vrací bod na zadané souřadnici UV
Surface.NormalAtParameter vrací normálový vektor v zadané souřadnici UV
Surface.GetIsoline vrací izoparametrickou křivku na souřadnici U nebo V – viz vstup isoDirection.
Kliknutím na odkaz níže si stáhněte vzorové soubory.
Úplný seznam vzorových souborů najdete v dodatku.
Plocha je matematický útvar definovaný funkcí a dvěma parametry. Místo parametru t
u křivek se k popisu parametrického prostoru u ploch používají parametry U
a V
. To znamená, že při práci s tímto typem geometrie můžeme odvodit více geometrických dat. Křivky například nabízejí tečné vektory a normálové roviny (které lze otáčet nebo kroutit po délce křivky), zatímco plochy nabízejí normálové vektory a tečné roviny, které jsou konzistentní s jejich orientací.
Povrch
Izokřivka U
Izokřivka V
Souřadnice UV
Kolmá rovina
Normálový vektor
Doména plochy: Doména plochy je definována jako rozsah parametrů (U,V), pro které lze vypočítat trojrozměrnou polohu bodu ležícího v této ploše. Doména v každém rozměru (U nebo V) je obvykle popisována dvěma čísly (od U Min do U Max) a (od V Min do V Max).
Ačkoliv tvar plochy nemusí vždy připomínat obdélník a některé její izokřivky mohou být utaženější nebo uvolněnější než jiné, prostor definovaný její doménou je vždy dvourozměrný. Doména ploch je v aplikaci Dynamo definována minimem 0.0 a maximem 1.0 ve směrech U i V. Rovinné nebo oříznuté plochy mohou mít různé domény.
Izokřivka (nebo izoparametrická křivka): Křivka definovaná konstantní hodnotou U nebo V na ploše a doménou hodnot pro odpovídající druhý směr U nebo V.
Souřadnice UV: Bod v parametrickém prostoru UV, definovaný souřadnicemi U, V a někdy W.
Kolmá rovina: Rovina, která je kolmá k izokřivkám U a V v dané souřadnici UV.
Normálový vektor: Vektor definující směr „nahoru“ vzhledem ke kolmé rovině.
Plochy NURBS jsou velmi podobné křivkám NURBS. Plochy NURBS si lze představit jako mřížku křivek NURBS, které směřují dvěma směry. Tvar plochy NURBS je definován řídicími body a stupněm plochy ve směrech U a V. Stejný algoritmus, tedy řídicí body, váhy a stupeň, se používá k výpočtu tvaru, normál, tečen, křivosti a dalších vlastností.
Geometrie plochy NURBS naznačuje dva směry, protože plochy NURBS jsou (nezávisle na tvaru) obdélníkové mřížky řídicích bodů. Ačkoliv tyto směry často nesouvisí s globálním systémem souřadnic, často je budeme používat k analýze modelů nebo generování dalších geometrií podle této plochy.
Stupeň (U,V) = (3,3)
Stupeň (U,V) = (3,1)
Stupeň (U,V) = (1,2)
Stupeň (U,V) = (1,1)
Polyplochy se skládají z ploch, které jsou spojeny přes hranu. Polyplochy nabízí více než jen dvourozměrnou definici UV, propojené tvary lze procházet podle jejich topologie.
Ačkoliv topologie popisuje pouze způsob, jakým jsou jednotlivé části propojeny, topologie v aplikaci Dynamo představuje také typ geometrie. Konkrétně se jedná o nadřazenou kategorii pro plochy, polyplochy a tělesa.
Spojené plochy (někdy nazývané záplaty) umožňují vytvářet složitější tvary a definovat detaily ve švech. Na hrany polyplochy je možné použít operaci zaoblení nebo zkosení.
je vyjádřením velikosti a směru. Můžete si jej představit jako šipku zrychlující danou rychlostí do určitého směru. Jedná se o klíčovou komponentou pro naše modely v aplikaci Dynamo. Všimněte si, že protože jsou v abstraktní kategorii „Pomocníci“, když vytvoříme vektor, v náhledu pozadí nic neuvidíme.
Úsečku můžeme použít jako náhradu pro náhled vektoru.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
I když jsou abstraktní, roviny mají polohu počátku, aby je bylo možné umístit do prostoru.
V aplikaci Dynamo se roviny rendrují v náhledu pozadí.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
I když jsou abstraktní, souřadnicové systémy mají také počáteční polohu, takže je můžeme umístit do prostoru.
V aplikaci Dynamo jsou souřadnicové systémy vykreslovány v náhledu na pozadí jako bod (počátek) a úsečky definující osy (podle konvence je osa X červená, osa Y zelená a osa Z modrá).
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Vektory, roviny a souřadnicové systémy tvoří primární skupinu abstraktních typů geometrie. Pomáhají definovat umístění, orientaci a prostorový kontext pro jinou geometrii, která popisuje tvary. Pokud řeknu, že jsem v New Yorku na 42. ulici a Broadway (souřadnicový systém), stojím na úrovni ulice (Rovina), dívám se na sever (Vektor), použil jsem tyto „Pomoci“, abych definoval, kde jsem. Totéž platí pro produkt krytu telefonu nebo mrakodrap – potřebujeme tento kontext k vývoji modelu.
Vektor je geometrické množství popisující směr a velikost. Vektory jsou abstraktní, tj. představují množství, nikoli geometrický prvek. Vektory lze snadno zaměnit s body, protože oba jsou tvořeny seznamem hodnot. Klíčový rozdíl je: Body popisují pozici v daném souřadnicovém systému, zatímco vektory popisují relativní rozdíl v pozici, který je stejný jako označení „směr“.
Pokud je představa relativního rozdílu matoucí, představte si vektor AB jako „stojím v bodě A a dívám se směrem k bodu B“. Směr odtud (A) tam (B) je náš vektor.
Vektory dále rozdělíme na jejich složky pomocí stejné AB notace:
Počáteční bod vektoru se nazývá Základna.
Koncový bod vektoru se nazývá Špička nebo Směr.
Vektor AB není stejný jako Vektor BA – ten by mířil v opačném směru.
Pokud někdy budete potřebovat zábavné odlehčení na téma vektorů (a jejich abstraktní definice), podívejte se na klasickou komedii Připoutejte se, prosím! a poslechněte si často citovanou hlášku:
Roger, Roger. Jaký je náš vektor, Viktore?
Roviny jsou dvojrozměrné abstraktní „Pomůcky“. Konkrétně, roviny jsou koncepčně „ploché“, a nekonečně se roztahují ve dvou směrech. Obvykle se znázorňují jako menší obdélník poblíž jejich počátku.
Možná si myslíte: „Počkat! Počátek? To zní jako souřadnicový systém... jako ten, který používám k modelování v softwaru CAD.“
A máte pravdu. Většina modelovacích aplikací využívá stavební roviny nebo „hladiny“ k definování místního dvourozměrného kontextu, ve kterém lze tvořit výkresy. XY, XZ, YZ – nebo – rovina sever, jihovýchod může znít povědomě. Toto jsou všechny roviny, které definují nekonečný „plochý“ kontext. Roviny nemají hloubku, ale pomáhají nám také popsat směr.
Pokud chápeme roviny, jsme malý krok od pochopení souřadnicových systémů. Rovina má všechny stejné součásti jako souřadnicový systém za předpokladu, že se jedná o standardní souřadnicový systém „Euclidean“ nebo „XYZ“.
Existují však jiné alternativní souřadnicové systémy, například válcový nebo sférický. Jak uvidíme v pozdějších částech, souřadnicové systémy lze použít také na jiné typy geometrie k definování umístění na dané geometrii.
Přidání alternativních souřadnicových systémů – válcových, kulových
Geometrie je jazyk designu. Pokud má programovací jazyk nebo prostředí geometrické jádro, můžeme odemknout možnosti navrhování přesných a robustních modelů, automatizaci návrhových procedur a vytváření iterací návrhů pomocí algoritmů.
Porozumění typům geometrie a nám umožní orientovat se v kolekci uzlů geometrie, která je pro nás k dispozici v knihovně. Uzly geometrie jsou uspořádány abecedně a ne hierarchicky – zde jsou zobrazeny podobně jako jejich rozvržení v rozhraní aplikace Dynamo.
Navíc by se vytváření modelů v aplikaci Dynamo a připojení náhledu toho, co vidíme v náhledu pozadí, k toku dat v grafu mělo časem stát více intuitivní.
Všimněte si předpokládaného souřadnicového systému vykresleného pomocí rastru a barevných os
Vybrané uzly rendrují odpovídající geometrii (pokud uzel vytvoří geometrii) na pozadí, přičemž barva zvýraznění je stejná
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Geometrie je tradičně definována jako studium tvaru, velikosti, relativní polohy tvarů a vlastností prostoru. Toto pole má bohatou historii sahající tisíce let. S příchodem a popularizací počítače jsme získali mocný nástroj pro definování, zkoumání a generování geometrie. Nyní je tak snadné vypočítat výsledek složitých geometrických interakcí, že téměř nevnímáme, že to děláme.
Pokud chcete zjistit, jak může být diverzní a složitá geometrie využívána silou vašeho počítače, proveďte rychlé webové vyhledávání Stanford Bunny (Stanfordský zajíček) – kanonického modelu použitého k testování algoritmů.
Pochopení geometrie v kontextu algoritmů, výpočtů a složitosti může znít náročně. Existuje však několik klíčových a poměrně jednoduchých zásad, které můžeme stanovit jako základ pro zahájení tvorby pokročilejších aplikací:
Geometrie jsou data – pro počítač a aplikaci Dynamo se zajíček neliší od čísla.
Geometrie je založena na abstrakci – v zásadě jsou geometrické prvky popsány čísly, vztahy a vzorci v daném prostorovém souřadnicovém systému
Geometrie má hierarchii – body se spojí, aby se vytvořily úsečky, úsečky se spojí, aby se vytvořily povrchy, a tak dále
Geometrie současně popisuje součást i celek – když máme křivku, je to jak tvar i všechny možné body podél ní
V praxi tyto zásady znamenají, že je nutné vědět, s čím pracujeme (jaký typ geometrie, jak byla vytvořena atd.), abychom mohli plynule sestavovat, rozebírat a znovu seskupovat různé geometrie při vývoji složitějších modelů.
Věnujme chvíli času sledování vztahu mezi abstraktním a hierarchickým popisem geometrie. Protože tyto dva koncepty spolu souvisí, ale ne vždy zjevně, můžeme se rychle dostat do koncepčních problémů, jakmile začneme vyvíjet hlubší pracovní postupy nebo modely. Pro začátek používáme dimenzionalitu jako jednoduchý popis toho, co vytváříme. Počet kót potřebných k popisu tvaru nám dává vědět, jak je geometrie uspořádána hierarchicky.
Bod (definovaný souřadnicemi) nemá žádné kóty – jsou to jen čísla popisující jednotlivé souřadnice
Úsečka (definovaná dvěma body) má nyní jednu kótu – úsečku lze „procházet“ dopředu (kladný směr), nebo dozadu (záporný směr)
Rovina (definovaná dvěma úsečkami) má dvě kóty – nyní je možné procházet i vlevo a vpravo
Kvádr (definovaný dvěma rovinami) má tři kóty – můžeme definovat polohu vzhledem ke směru nahoru nebo dolů
Dimenzionalita je pohodlný způsob, jak začít kategorizovat geometrii, ale nemusí být nutně nejlepší. Nakonec, nemodelujeme jen body, čáry, roviny a kvádry – co když chceme provést něco s křivkami? Dále existuje celá další kategorie geometrických typů, které jsou zcela abstraktní a definují vlastnosti, například orientaci, objem nebo vztahy mezi součástmi. Nemůžeme uchopit vektor, tak jak ho definujeme vzhledem k tomu, co vidíme v prostoru? Podrobnější kategorizace geometrické hierarchie by měla rozlišovat rozdíl mezi abstraktními typy nebo „pomocnými objekty“, z nichž každý můžeme seskupovat podle toho, s čím pomáhají, a typy, které pomáhají popisovat tvar prvků modelu.
Vytváření modelů v aplikaci Dynamo není omezeno na to, co lze vytvořit pomocí uzlů. Zde jsou některé klíčové způsoby, jak posunout práci s geometrií na vyšší úroveň:
Aplikace Dynamo umožňuje importovat soubory – zkuste použít soubor CSV pro mračna bodů nebo soubor SAT pro načtení povrchů
Při práci s aplikací Revit můžeme odkazovat na prvky aplikace Revit, které se mají použít v aplikaci Dynamo
Modul Logic nebo konkrétněji Conditional Logic umožňuje určit akci nebo sadu akcí na základě testu. Po vyhodnocení testu budeme mít booleovskou hodnotu představující True
nebo False
, kterou můžeme použít k řízení toku programu.
Číselné proměnné mohou ukládat celou řadu různých čísel. Booleovské proměnné mohou ukládat pouze dvě hodnoty, které se označují jako True nebo False, Yes nebo No, 1 nebo 0. Pomocí booleovských hodnot lze výpočty provádět jen zřídka, protože jsou omezené.
Výraz „If“ je klíčovou koncepcí programování: „Pokud je tato hodnota pravdivá, toto se stane, jinak se stane něco jiného. Výsledná akce výrazu je řízena booleovskou hodnotou. Příkaz „If“ lze v aplikaci Dynamo definovat několika způsoby:
Pojďme si projít stručný příklad každého z těchto tří uzlů v akci pomocí podmíněného výrazu „If“.
Na tomto obrázku je hodnota boolean nastavena na hodnotu true, což znamená, že výsledkem je řetězec: „toto je výsledek, pokud je hodnota true“. Tři uzly vytvářející výraz If zde fungují identicky.
Uzly opět fungují identicky. Pokud je hodnota boolean změněna na false, výsledkem je číslo Pi, jak je definováno v původním výrazu If.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Pomocí logiky rozdělíme seznam čísel do seznamu sudých čísel a seznamu lichých čísel.
a. Number Range – Přidejte na kreslicí plochu číselný rozsah.
b. Numbers – Přidejte na kreslicí plochu tři uzly čísel. Hodnoty pro jednotlivé uzly čísel by měly být: 0.0 pro start, 10.0 pro end a 1.0 pro step.
c. Output – Náš výstup je seznam 11 čísel v rozsahu od 0 do 10.
d. Modulo (%)– Number Range do x a 2.0 do y. Tím se vypočítá zbytek po dělení 2 pro každé číslo v seznamu. Výstup z tohoto seznamu nám poskytne seznam hodnot, které se mění v rozmezí 0 až 1.
e. Test rovnosti (==) – Přidá na kreslicí plochu test rovnosti. Výstup modulo připojte ke vstupu x a 0.0 ke vstupu y.
f. Watch – Výstupem testu rovnosti je seznam hodnot, které se mění na hodnotu true a false. Jedná se o hodnoty použité k oddělení položek v seznamu. 0 (nebo true) představuje sudá čísla a (1 nebo false) představuje lichá čísla.
g. List.FilterByBoolMask – Tento uzel filtruje hodnoty do dvou různých seznamů na základě vstupní booleovské hodnoty. Původní uzel number range připojte ke vstupu list a výstup testu rovnosti připojte ke vstupu mask. Výstup in představuje hodnoty true, zatímco výstup out představuje hodnoty false.
h. Watch – Výsledkem je seznam sudých čísel a seznam lichých čísel. Použili jsme logické operátory k oddělení seznamů do vzorů.
Budeme vycházet z logiky stanovené v prvním cvičení a použijeme toto nastavení na operaci modelování.
2. Vyjdeme z předchozího cvičení se stejnými uzly. Jediné výjimky (kromě změny formátu jsou):
a. Použijte uzel Sequence s těmito vstupními hodnotami.
b. Seznam in jsme odpojili od uzlu List.FilterByBoolMask. Tyto uzly zatím necháme stranou, ale později se nám v tomto cvičení budou hodit.
3. Začneme vytvořením samostatné skupiny grafů, jak je znázorněno na obrázku výše. Tato skupina uzlů představuje parametrickou rovnici k definování oblouku úsečky. Několik poznámek:
a. První uzel Number Slider představuje frekvenci vlny, měl by mít min. hodnotu 1, max. hodnotu 4 a krok 0.01.
b. Druhý uzel Number Slider představuje amplitudu vlny, měl by mít min. hodnotu 0, max. hodnotu 1 a krok 0.01.
c. PolyCurve.ByPoints – Pokud je zkopírováno výše uvedené schéma uzlu, výsledkem je sinusoida ve výřezu náhledu aplikace Dynamo.
Zde je metoda pro vstupy: použijte uzly čísel pro statické vlastnosti a posuvníky pro flexibilnější hodnoty. Chceme zachovat původní číselný rozsah, který definujeme na začátku tohoto kroku. Křivka sinu, kterou zde vytvoříme, by však měla mít určitou flexibilitu. Posunutím těchto posuvníků můžeme sledovat, jak oblouk aktualizuje svou frekvenci a amplitudu.
4. Trochu přeskočíme v definici, takže se podíváme na konec, abychom mohli odkazovat na to, k čemu míříme. První dva kroky jsou provedeny samostatně, nyní je chceme spojit. Pomocí základní sinusové křivky budeme řídit umístění komponent zipu a pomocí logiky true/false budeme přepínat mezi malými a většími poli.
a. Math.RemapRange – Pomocí číselné sekvence vytvořené v kroku 02 vytvoříme novou řadu čísel přemapováním rozsahu. Původní čísla z kroku 01 jsou v rozsahu 0-100. Tato čísla se pohybují v rozsahu od 0 do 1 podle hodnot newMin a newMax.
5. Vytvořte uzel Curve.PointAtParameter a potom připojte výstup Math.RemapRange z kroku 04 ke vstupu param.
Tento krok vytvoří body podél křivky. Čísla byla přemapována na 0 až 1, protože vstup param hledá hodnoty v tomto rozsahu. Hodnota 0 představuje počáteční bod, hodnota 1 představuje koncové body. Všechna čísla mezi hodnotami jsou vyhodnocena v rozsahu [0,1].
6. Připojte výstup z uzlu Curve.PointAtParameter k uzlu List.FilterByBoolMask, abyste oddělili seznam lichých a sudých indexů.
a. List.FilterByBoolMask – Připojte uzel Curve.PointAtParameter z předchozího kroku ke vstupu list.
b. Watch – Uzel Watch pro in a uzel Watch pro out zobrazuje, že máme dva seznamy představující sudé a liché indexy. Tyto body jsou seřazeny stejným způsobem na křivce, kterou ukážeme v dalším kroku.
7. Dále použijeme výsledek výstupu z uzlu List.FilterByBoolMask v kroku 05 k vygenerování geometrií s velikostmi podle jejich indexů.
Cuboid.ByLength – Znovu vytvořte spojení uvedená na obrázku výše, abyste získali zip podél sinusové křivky. Kvádr je pouze kvádr a definujeme jeho velikost na základě bodu křivky ve středu kvádru. Logika sudého nebo lichého rozdělení by nyní měla být v modelu jasná.
a. Seznam kvádrů v sudých indexech.
b. Seznam kvádrů v lichých indexech.
Voila! Právě jste naprogramovali proces definování rozměrů geometrie podle logické operace, kterou jsme si předvedli v tomto cvičení.
V oblasti výpočetního modelování jsou jednou z nejrozšířenějších forem reprezentace 3D geometrie. Geometrie sítě je obvykle tvořena skupinou čtyřúhelníků nebo trojúhelníků. Může se jednat o lehkou a flexibilní alternativu k práci s NURBS. Sítě se používají ve všech ohledech od rendrování a vizualizací až po digitální výrobu a 3D tisk.
Aplikace Dynamo definuje sítě pomocí datové struktury vrcholu plochy. Na základní úrovni je tato struktura jednoduchou kolekcí bodů, které jsou seskupeny do polygonů. Body sítě se nazývají vrcholy, zatímco polygony podobné povrchu se nazývají plochy.
K vytvoření sítě je potřeba seznam vrcholů a systém seskupení těchto vrcholů do plochy nazývané skupina indexů.
Seznam vrcholů
Seznam indexových skupin pro definování ploch
Knihovna také poskytuje nástroje k úpravám sítí, opravě sítí nebo extrahování horizontálních řezů pro použití ve výrobě.
Síť je kolekce čtyřúhelníků a trojúhelníků, které představují geometrii povrchu nebo tělesa. Podobně jako u těles zahrnuje struktura objektu sítě vrcholy, hrany a plochy. Další vlastnosti, které činí sítě jedinečnými, například normály, jsou také jedinečné.
Vrcholy sítě
Hrany sítě *Hrany pouze s jednou sousední plochou se nazývají „Nahé“. Všechny ostatní hrany jsou „Oblečené“.
Plochy sítě
Vrcholy sítě jsou jednoduše seznam bodů. Index vrcholů je velmi důležitý při vytváření sítě nebo při získávání informací o struktuře sítě. Pro každý vrchol existuje také odpovídající normála vrcholu (vektor), která popisuje průměrný směr připojených ploch, a pomáhá nám pochopit „vnitřní“ a „vnější“ orientaci sítě.
Vrcholy
Normály vrcholu
Plocha je uspořádaný seznam tří nebo čtyř vrcholů. Reprezentace „povrchu“ plochy sítě je proto implikována podle polohy indexovaných vrcholů. Seznam vrcholů, které tvoří síť, již máme. Místo toho, aby jednotlivé body definovaly plochu, jednoduše použijeme index vrcholů. To nám také umožňuje použít stejný vrchol ve více než jedné ploše.
Čtyřhranná plocha vytvořená pomocí indexů 0, 1, 2 a 3
Trojúhelníková plocha vytvořená pomocí indexů 1, 4 a 2 Všimněte si, že indexové skupiny lze posunout v jejich pořadí – pokud je posloupnost seřazena proti směru hodinových ručiček, bude plocha správně definována
Jak se liší geometrie sítě od geometrie NURBS? Kdy můžete chtít použít jedno místo druhého?
V předchozí kapitole jsme viděli, že povrchy NURBS jsou definovány řadou křivek NURBS, které se pohybují ve dvou směrech. Tyto směry jsou označeny U
a V
a umožňují parametrizaci povrchu NURB podle dvourozměrné povrchové domény. Samotné křivky jsou uloženy jako rovnice v počítači, takže výsledné povrchy lze vypočítat na libovolně velkou přesnost. Může být však obtížné spojit několik povrchů NURBS dohromady. Spojením dvou povrchů NURBS vznikne polypovrch, kde různé části geometrie budou mít různé parametry UV a definice křivek.
Povrch
Křivka Isoparametric (Isoparm)
Řídicí bod povrchu
Řídicí polygon povrchu
Izoparametrický bod
Povrch rámu
Síť
Nahá hrana
Síť sítě
Hrany sítě
Normála vrcholu
Plocha sítě / Normála plochy sítě
Sítě se naopak skládají z diskrétního počtu přesně definovaných vrcholů a ploch. Síť vrcholů obecně nelze definovat pomocí jednoduchých souřadnic UV
a protože jsou plochy diskrétní, je míra přesnosti zabudována do sítě a lze ji změnit pouze zpřesněním sítě a přidáním dalších ploch. Díky nedostatku matematických popisů mohou sítě pružněji reprezentovat složité geometrie v rámci jediné sítě.
Dalším důležitým rozdílem je rozsah, ve kterém místní změna v geometrii sítě nebo NURBS ovlivňuje celý tvar. Přesun jednoho vrcholu sítě ovlivní pouze plochy, které sousedí s daným vrcholem. V površích NURBS je rozsah vlivu složitější a závisí na stupni povrchu a také na váhách a uzlech řídicích bodů. Obecně platí, že přesunutím jednoho řídicího bodu v povrchu NURBS dojde k hladší a rozsáhlejší změně geometrie.
Povrch NURBS – přesun řídicího bodu má vliv napříč celým tvarem
Geometrie sítě – přesun vrcholu má vliv pouze na přilehlé prvky
Jedna podoba, která může být užitečná, je porovnání vektorového obrázku (složeného z úseček a křivek) s rastrovým obrázkem (složeným z jednotlivých pixelů). Při přiblížení vektorového obrázku zůstanou křivky ostré a jasné, zatímco přiblížení rastrového obrázku má za následek zvětšení jednotlivých pixelů. V této analogii lze povrchy NURBS porovnat s vektorovým obrázkem, protože existuje hladký matematický vztah, zatímco síť se chová podobně jako rastrový obrázek s nastaveným rozlišením.
Pokud jsou nejjednodušší formou dat čísla, nejjednodušším způsobem, jak se tato čísla mohou odlišit, je použití funkce Mathematics. Od jednoduchých operátorů, jako je dělení, až k trigonometrickým funkcím, možnost Math je skvělým způsobem, jak začít zkoumat číselné vztahy a vzory.
Operátory jsou sada komponent, které používají algebraické funkce se dvěma číselnými vstupními hodnotami, které vrací jednu výstupní hodnotu (součet, rozdíl, násobení, dělení atd.). Najdete je pod položkou Operátory > Akce.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Kombinací operátorů a proměnných vytvořte složitější vztah prostřednictvím vzorců. Pomocí posuvníků vytvořte vzorec, který lze řídit pomocí vstupních parametrů.
1. Vytvořte posloupnost čísel, která představuje „t“ v parametrické rovnici. Chceme tedy použít seznam, který je dostatečně velký k definici spirály.
Number Sequence: Definuje posloupnost čísel na základě tří vstupů: start, amount a step.
2. Výše uvedený krok vytvořil seznam čísel definujících parametrickou doménu. Dále vytvořte skupinu uzlů představující rovnici zlaté spirály.
Zlatá spirála je definována jako následující rovnice:
Obrázek níže znázorňuje zlatou spirálu ve vizuální programové podobě. Při procházení skupiny uzlů se snažte věnovat pozornost souvislosti mezi vizuálním programem a psanou rovnicí.
a. Number Slider: Přidejte na kreslicí plochu dva posuvníky. Tyto posuvníky budou představovat proměnné a a b parametrické rovnice. Představují konstantu, která je flexibilní, nebo parametry, které lze upravit podle požadovaného výsledku.
b. Násobení (*): Uzel násobení je reprezentován hvězdičkou. Toto použijeme opakovaně k připojení násobných proměnných
c. Math.RadiansToDegree: Hodnoty 't' je nutné převést na stupně pro jejich vyhodnocení v trigonometrických funkcích. Nezapomeňte, že aplikace Dynamo pro vyhodnocení těchto funkcí ve výchozím stavu používá stupně.
d. Math.Pow: jako funkce 't' a čísla 'e' vytvoří Finobacciho posloupnost.
e. Math.Cos a Math.Sin: Tyto dvě trigonometrické funkce odliší souřadnice X a souřadnice Y každého parametrického bodu.
f. Watch: Nyní vidíte, že náš výstup jsou dva seznamy, které budou tvořit souřadnice x a y bodů použitých k vytvoření spirály.
Point.ByCoordinates: Spojte horní uzel násobení se vstupem x a dolní část se vstupem y. Nyní vidíte parametrickou spirálu bodů na obrazovce.
Polycurve.ByPoints: Spojte uzel Point.ByCoordinates z předchozího kroku se vstupem points. Možnost connectLastToFirst můžeme nechat bez vstupu, protože neděláme uzavřený oblouk. Tím se vytvoří spirála, která prochází každým bodem definovaným v předchozím kroku.
Nyní jsme dokončili Fibonacciho spirálu. Pokračujme dvěma různými cvičeními, které pojmenujeme Loděnka a Slunečnice. Jedná se o abstrakce přírodních systémů, ale dvě různá použití Fibonacciho spirály budou dobře zastoupena.
Circle.ByCenterPointRadius: Zde použijeme kruhový uzel se stejnými vstupy jako v předchozím kroku. Výchozí hodnota poloměru je 1.0, takže je vidět okamžitý výstup kružnic. Je okamžitě vidět, jak se body dále vzdalují od počátku.
Number Sequence: Toto je původní pole 't'. Jeho připojením k hodnotě poloměru v uzlu Circle.ByCenterPointRadius se středy kružnic stále vzdalují od počátku, ale poloměry kružnic se zvětšují, což vytváří zábavný Fibonacciho kruhový graf.
Bonusové body, pokud to vytvoříte ve 3D.
Jako výchozí bod použijeme stejný krok z předchozího cvičení: Vytvoření spirálového pole bodů pomocí uzlu Point.ByCoordinates.
![](../images/5-3/2/math-part IV-01.jpg)
Dále postupujte podle těchto krátkých kroků a vygenerujte řadu spirál s různým natočením.
a. Geometry.Rotate: Existuje několik možností Geometry.Rotate. Ujistěte se, že jste vybrali uzel se vstupy geometry, basePlane a degrees. Připojte položku Point.ByCoordinates ke vstupu geometrie. Klikněte pravým tlačítkem na tento uzel a ujistěte se, že je vázání nastaveno na možnost Kartézský součin.
b. Plane.XY: Připojte se ke vstupu basePlane. Budeme se otáčet kolem počátku, což je stejné umístění jako základna spirály.
c. Number Range: Pro náš vstup stupně chceme vytvořit více otočení. To můžeme rychle provést pomocí komponenty Number Range. Připojte jej ke vstupu degrees.
d. Number: A k definování rozsahu čísel přidejte na kreslicí plochu ve vertikálním pořadí tři uzly čísel. Shora dolů přiřaďte hodnoty 0.0,360.0 a 120.0 v uvedeném pořadí. Tato čísla řídí otáčení spirály. Po připojení tří uzlů čísel k uzlu si všimněte výstupních výsledků z uzlu Number Range.
Náš výstup se začíná podobat víru. Upravíme některé parametry položky Number Range a podíváme se, jak se změní výsledky.
Změňte velikost kroku uzlu Number Range z 120.0 na 36.0. Všimněte si, že tím vznikají další otáčení, a proto získáváme hustší osnovu.
Změňte velikost kroku uzlu Number Range z 36.0 na 3.6. Tím získáme mnohem hustší osnovu a směr spirály je nejasný. Dámy a pánové, vytvořili jsme slunečnici.
Formálně je řetězec posloupnost znaků představujících písmennou konstantu nebo určitý typ proměnné. Neformálně je řetězec označení pro text. Pracovali jsme s celými i desetinnými čísly, abychom mohli řídit parametry, a stejně můžeme pracovat s textem.
Řetězce lze použít pro širokou řadu aplikací, včetně definování uživatelských parametrů, opatření sady dokumentace poznámkami a analýzy textových datasetů. Uzel řetězce se nachází v kategorii Core>Input.
Výše uvedené vzorové uzly jsou řetězce. Číslo může být reprezentováno jako řetězec, jako písmeno nebo celé pole textu.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Pomocí dotazů na řetězce můžete rychle analyzovat velké množství dat. O některých základních operacích, které mohou urychlit pracovní postup a pomoci při interoperabilitě softwaru, se budeme bavit.
Následující obrázek vychází z řetězce dat pocházejících z externí tabulky. Řetězec představuje vrcholy obdélníku v rovině XY. V miniaturním cvičení projdeme některé operace rozdělení řetězce:
Oddělovač „;“ rozdělí každý vrchol obdélníku. Tím se vytvoří seznam se třemi položkami pro každý vrchol.
Kliknutím na tlačítko + uprostřed uzlu vytvoříte nový oddělovač.
Na kreslicí plochu přidejte řetězec „,“ a zadejte jej do nového vstupu oddělovače.
Výsledkem je nyní seznam deseti položek. Uzel se nejprve rozdělí podle položky separator0 a potom podle položky separator1.
Zatímco výše uvedený seznam položek může vypadat jako čísla, jsou stále považovány za samostatné řetězce v aplikaci Dynamo. Aby bylo možné vytvořit body, je nutné jejich datový typ převést z řetězce na číslo. To se provádí pomocí uzlu String.ToNumber.
Tento uzel je přímočarý. Připojte výsledky uzlu String.Split ke vstupu. Výstup nevypadá jinak, ale datový typ je nyní number místo string.
Po několika základních doplňkových operacích je nyní v počátku nakreslen trojúhelník na základě původního vstupu řetězce.
Protože řetězec je obecným textovým objektem, jsou použity v široké škále aplikací. Podívejme se na některé hlavní akce v aplikaci Dynamo v části Core>String Category:
Tato metoda spojí dva řetězce v zadaném pořadí. Vezme všechny řetězcové literály v seznamu a vytvoří z nich jeden sloučený řetězec.
Následující obrázek představuje zřetězení tří řetězců:
Řetězce přidejte nebo odeberte ze zřetězení kliknutím na tlačítka +/- uprostřed uzlu.
Výstup obsahuje jeden zřetězený řetězec, včetně mezer a interpunkcí.
Metoda spojení je velmi podobný zřetězení, s výjimkou toho, že má přidanou hladinu interpunkcí.
Pokud jste pracovali v aplikaci Excel, mohli jste potkat soubor CSV. To znamená hodnoty oddělené čárkou. K vytvoření podobné datové struktury lze jako oddělovač s uzlem String.Join použít čárku (nebo v tomto případě dvě pomlčky).
Následující obrázek představuje spojení dvou řetězců:
Vstup oddělovače umožňuje vytvořit řetězec, který rozdělí spojené řetězce.
Začneme základním rozdělením řetězce sloky. Nejprve si všimneme, že zápis je formátován na základě čárek. Tento formát použijeme k rozdělení každého řádku do jednotlivých položek.
Základní řetězec je vložen do uzlu String.
K označení oddělovače se používá další uzel String. V tomto případě používáme čárku.
Na kreslicí plochu je přidán uzel String.Split a je připojen ke dvěma řetězcům.
Výstup ukazuje, že jsme nyní rozdělili čáry do jednotlivých prvků.
Teď se pojďme dostat k dobré části básně: poslední dva řádky. Původní sloka byla jedna datová položka. Tato data jsme rozdělili na jednotlivé položky v prvním kroku. Teď musíme najít text, který hledáme. I když to můžeme provést výběrem posledních dvou položek seznamu, pokud by se jednalo o celou knihu, nechtěli bychom si vše pročítat a ručně izolovat jednotlivé prvky.
Místo ručního vyhledávání použijeme uzel String.Contains k vyhledání sady znaků. To je podobné jako příkaz Najít v textovém procesoru. V tomto případě získáme výsledek true nebo false, pokud je tento podřetězec nalezen v položce.
Ve vstupu searchFor definujeme podřetězec, který hledáme v rámci sloky. Použijeme uzel String s textem „And miles“.
Výstup nám dává seznam hodnot false a true. Pomocí této booleovské logiky filtrujeme prvky v dalším kroku.
List.FilterByBoolMask je uzel, který chceme použít k procházení hodnot false a true. Výstup „in“ vrátí výrazy s hodnotou „mask“ vstupu true, zatímco výstup „out“ vrací příkazy, které jsou false.
Náš výstup z „in“ je podle očekávání a dává nám poslední dva řádky sloky.
Teď chceme tyto dva řádky sloučit dohromady. Při zobrazení výstupu předchozího kroku si všimneme, že jsou v seznamu dvě položky:
Pomocí dvou uzlů List.GetItemAtIndex lze izolovat položky pomocí hodnot 0 a 1 jako vstupu index.
Výstup každého uzlu nám poskytne v pořadí poslední dva řádky.
Ke sloučení těchto dvou položek do jedné použijte uzel String.Join:
Po přidání uzlu String.Join si všimneme, že potřebujeme oddělovač.
K vytvoření oddělovače přidáme na kreslicí plochu uzel String a zadáme do něj čárku.
Poslední výstup sloučil poslední dvě položky do jedné.
Může se zdát, že je to hodně práce pro izolování posledních dvou řádků, a je to pravda, řetězcové operace často vyžadují nějakou přípravnou práci. Jsou však škálovatelné a lze je relativně snadno použít u velkých datasetů. Pokud parametricky pracujete s tabulkami a interoperabilitou, nezapomeňte na řetězcové operace.
V seznamech lze uspořádat data. V operačním systému počítače existují soubory a složky. V aplikaci Dynamo se jim říká položky a seznamy. Podobně jako v operačním systému, data je možné vytvářet, upravovat a dotazovat mnoha způsoby. Tato kapitola popisuje správu seznamů v aplikaci Dynamo.
Seznam je kolekce prvků nebo položek. Vezměte si například trs banánů. Každý banán je položka v seznamu (nebo v trsu). Je jednodušší sebrat celý trs banánů, než brát každý banán jednotlivě, a to samé platí pro seskupení prvků podle parametrických vztahů v datové struktuře.
Při nákupu potravin naskládáme všechny zakoupené položky do tašky. Tato taška je také seznamem. Pokud chceme vyrobit banánový chléb, potřebujeme 3 trsy banánů (chceme vyrobit hodně banánového chleba). Taška představuje seznam trsů banánů a každý trs představuje seznam banánů. Taška je seznam seznamů (dvourozměrný) a trs banánů je seznam (jednorozměrný).
V aplikaci Dynamo jsou data seznamu seřazena a první položka v každém seznamu má index „0“. Níže rozebereme způsob, jak v aplikaci Dynamo definovat seznamy a jak spolu více seznamů vzájemně souvisí.
Jedna věc, která se může zdát podivnou, je, že první index seznamu je vždy 0, nikoli 1. Čili pokud je řeč o první položce seznamu, ve skutečnosti máme na mysli položku s indexem 0.
Pokud byste například měli spočítat prsty na pravé ruce, existuje šance, že byste napočítali od 1 do 5. Pokud byste však vložili prsty do seznamu, aplikace Dynamo by jim přiřadila index 0 až 4. Ačkoli se toto může zdát začátečníkům v programování velmi zvláštní, nulové indexy jsou ve většině výpočetních systémů běžnou praxí.
Všimněte si, že v seznamu stále máme 5 položek; je to proto, že seznam používá systém počítání od nuly. A položky uložené v seznamu nemusí být jen čísla. Mohou to být položky jakéhokoli datového typu, který aplikace Dynamo podporuje, například body, křivky, povrchy, rodiny atd.
a. Index
b. Bod
c. Položka
Nejjednodušším způsobem, jak se je možné se dívat na datový typ uložený v seznamu je nejčastěji propojení uzlu Watch s výstupem jiného uzlu. Ve výchozím nastavení uzel Watch automaticky zobrazí všechny indexy na levé straně seznamu a data zobrazí vpravo.
Tyto indexy jsou velice důležitým prvkem při práci se seznamy.
Vstupy a výstupy náležející k seznamům se liší podle toho, jaký uzel aplikace Dynamo se použije. Jako příklad použijte seznam 5 bodů a připojte tento výstup ke dvěma různým uzlům aplikace Dynamo: PolyCurve.ByPoints a Circle.ByCenterPointRadius:
Vstup points uzlu PolyCurve.ByPoints hledá strukturu „Point[]“. Tato struktura představuje seznam bodů.
Výstup uzlu PolyCurve.ByPoints je samostatný objekt PolyCurve vytvořený ze seznamu pěti bodů.
Vstup centerPoint uzlu Circle.ByCenterPointRadius žádá o objekt „Point“.
Výstup uzlu Circle.ByCenterPointRadius je seznam pěti kružnic, jejichž středy odpovídají původnímu seznamu bodů.
Vstupní data pro uzly PolyCurve.ByPoints a Circle.ByCenterPointRadius jsou stejná, uzel PolyCurve.ByPoints však předává jeden objekt PolyCurve, zatímco uzel Circle.ByCenterPointRadius předává 5 kružnic se středy v každém bodu. Je to intuitivní: Objekt PolyCurve je vykreslen jako křivka spojující 5 bodů, zatímco kružnice v každém bodu vytvářejí jinou kružnici. Co se tedy děje s daty?
Po přejetí umístění kurzoru nad vstupem points uzlu Polycurve.ByPoints zjistíte, že vstup hledá strukturu „Point[]“. Všimněte si závorek na konci. To představuje seznam bodů a k vytvoření objektu PolyCurve je třeba na vstupu seznam pro každý objekt PolyCurve. Tento uzel proto zhušťuje každý seznam do jednoho objektu PolyCurve.
Na druhou stranu vstup centerPoint uzlu Circle.ByCenterPointRadius žádá objekt „Point“. Tento uzel hledá jeden bod jako položku k definování středu kružnice. Proto ze vstupních dat vznikne pět kružnic. Rozlišování těchto vstupů v aplikaci Dynamo vám pomůže pochopit, jak uzly při zpracování dat fungují.
Porovnávání dat je problém bez čistého řešení. Dochází k němu, pokud má uzel přístup různě velkým vstupům. Změna algoritmu porovnávání dat může vést k naprosto odlišným výsledkům.
Představte si uzel, který tvoří segmenty úseček mezi body (Line.ByStartPointEndPoint). Bude mít dva vstupní parametry, které oba předávají souřadnice bodů:
Nejjednodušším způsobem je spojovat vstupy jedna ku jedné, dokud jeden z datových proudů nedojde na konec. Tomuto se říká algoritmus „Nejkratší seznam“. Jedná se o výchozí chování uzlů aplikace Dynamo:
Algoritmus „Nejdelší seznam“ připojuje vstupy a opakovaně využívá prvky tak dlouho, dokud všechny datové proudy nedojdou na konec:
Metoda „Kartézský součin“ provede všechna možná připojení:
Jak vidíte, existují různé způsoby kreslení čar mezi těmito množinami bodů. Možnosti vázání naleznete po kliknutí pravým tlačítkem na střed uzlu a výběru nabídky „Vázání“.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Pomocí tohoto základního souboru znázorníme níže operace vázání tím, že definujeme nejkratší seznam, nejdelší seznam a kartézský součin.
U uzlu Point.ByCoordinates se změní vázání, ale nic jiného se u grafu výše nezmění.
Pokud jako možnost vázání vyberete nejkratší seznam (což je také výchozí možnost), získáte základní diagonální čáru složenou z pěti bodů. Pět bodů je délka kratšího seznamu, takže vázání nejkratšího seznamu se zastaví, jakmile dorazí na konec jednoho ze seznamů.
Změnou vázání na nejdelší seznam získáte diagonální čáru, která se vertikálně rozšíří. Poslední položka v seznamu 5 položek bude opakována tak dlouho, dokud nebude dosaženo délky delšího seznamu, což je stejné chování jako metoda koncepčního diagramu.
Změnou vázání na Kartézský součin získáte všechny kombinace mezi všemi seznamy, což vytvoří osnovu bodů o rozměrech 5x10. Jedná se o datovou strukturu ekvivalentní ke kartézskému součinu, jak je ukázáno v koncepčním diagramu výše, až na to, že data jsou nyní seznamy seznamů. Pokud připojíme objekt PolyCurve, uvidíme, že každý seznam je definovaný hodnotou X, což znamená, že máme řadu vertikálních čar.
jsou první geometrický datový typ, kterému jsme se věnovali a který má známé sady vlastností popisujících tvar: Jak křivé nebo rovné? Jak dlouhé nebo krátké? Nezapomeňte, že body jsou stále stavební bloky pro definování všeho od úsečky k spline a všechny typy křivek mezi nimi.
Čára
Křivka
Oblouk
Kružnice
Elipsa
Křivka NURBS
Polycurve
NurbsCurve.ByControlPoints používá seznam bodů jako řídicí body
NurbsCurve.ByPoints nakreslí křivku procházející seznamem bodů
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Termín křivka obvykle označuje všechny různé křivé (i rovné) tvary. Křivka s velkým K je nadřazená kategorizace všech těchto typů tvarů – úseček, kružnic, spline atd. Přesněji řečeno, Křivka popisuje každý možný Bod, který lze najít vložením „t“ do kolekce funkcí, která může být v rozsahu od jednoduchých (x = -1.26*t, y = t
) až po funkce zahrnující infinitezimální počet. Bez ohledu na to, s jakým typem Křivky pracujeme, je tento parametr s názvem „t“ vlastnost, kterou můžeme vyhodnotit. Kromě toho, bez ohledu na vzhled tvaru, mají všechny Křivky také počáteční a koncový bod, který je shodný s minimálními a maximálními hodnotami t použitými k vytvoření Křivky. To nám také pomůže pochopit její směr.
Je důležité poznamenat, že aplikace Dynamo předpokládá, že doména hodnot „t“ pro křivku je chápána jako 0.0 až 1.0.
Všechny křivky také mají řadu vlastností, které lze použít k jejich popisu nebo analýze. Pokud je vzdálenost mezi počátečním a koncovým bodem nula, křivka je „uzavřená“. Každá křivka má také řadu řídicích bodů, pokud jsou všechny tyto body umístěny ve stejné rovině, křivka je „rovinná“. Některé vlastnosti se vztahují na křivku jako celek, zatímco jiné se vztahují pouze na určité body podél křivky. Například rovinnost je globální vlastnost, zatímco tečný vektor v dané hodnotě t je místní vlastnost.
Úsečky jsou nejjednodušší formou křivek. Nemusí vypadat zaobleně, ale ve skutečnosti jsou Křivky – jen bez zakřivení. Existuje několik různých způsobů vytvoření čar, nejintuitivnější je od bodu A do bodu B. Tvar čáry AB bude nakreslen mezi body, ale matematicky se prodlouží do nekonečna oběma směry.
Když propojíme obě úsečky dohromady, máme křivku. Zde máme přímočaré znázornění toho, co je řídicí bod. Úprava umístění těchto bodů změní tvar křivky. Pokud je křivka uzavřená, máme polygon. Pokud jsou všechny délky hran polygonu shodné, je popisován jako normální.
Když přidáváme více složitosti k parametrickým funkcím, které definují tvar, můžeme o jeden krok dále od čáry vytvořit oblouk, kružnici, oblouk elipsy nebo elipsu popisem jednoho nebo dvou poloměrů. Rozdíly mezi verzí oblouku a kružnice nebo elipsy spočívají pouze v tom, zda je tvar uzavřený, nebo ne.
NURBS (Nerovnoměrné racionální křivky spline) jsou matematická znázornění, která mohou přesně modelovat libovolný tvar z jednoduché dvojrozměrné úsečky, kružnice, oblouku nebo obdélníku na nejsložitější trojrozměrnou volnou organickou křivku. Díky své pružnosti (relativně málo řídicích bodů, přesto hladká interpolace podle nastavení stupňů) a přesnosti (vázané robustní matematikou) lze modely NURBS použít v jakémkoli procesu od ilustrace a animace až po výrobu.
Stupeň: Způsob definice křivky určuje rozsah vlivu řídicích bodů na křivku, kde čím vyšší je stupeň, tím větší je rozsah. Stupeň je kladné celé číslo. Toto číslo je obvykle 1, 2, 3 nebo 5, ale může to být libovolné kladné celé číslo. Úsečky a křivky NURBS jsou obvykle stupně 1 a většina křivek volného tvaru je stupeň 3 nebo 5.
Řídicí body: Řídicí body jsou seznamem alespoň Stupeň+1 bodů. Jedním z nejsnadnějších způsobů, jak změnit tvar křivky NURBS, je posunout její řídicí body.
Váha: Řídicí body mají přiřazené číslo nazývané Váha. Váhy jsou obvykle kladná čísla. Pokud mají všechny řídicí body křivky stejnou váhu (obvykle 1), křivka se nazývá neracionální, jinak se křivka nazývá racionální. Většina křivek NURBS není racionální.
Uzly: Uzly jsou seznamy čísel (Stupeň+N-1), kde N je počet řídicích bodů. Uzly se používají spolu s váhami k ovládání vlivu řídicích bodů na výslednou křivku. Jedno použití pro uzly je vytvoření zalomení v určitých bodech křivky.
Stupeň = 1
Stupeň = 2
Stupeň = 3
Všimněte si, že čím vyšší je hodnota stupně, tím více řídících bodů se používá k interpolaci výsledné křivky.
Data jsou součástí našich programů. Prochází dráty a zadávají vstupy pro uzly, kde se zpracují do nové formy výstupních dat. Pojďme si prohlédnout definici dat, jak jsou strukturována a začít je používat v aplikaci Dynamo.
Data jsou souborem hodnot kvalitativních nebo kvantitativních proměnných. Nejjednodušší forma dat jsou například čísla jako 0
, 3.14
nebo 17
. Data však mohou být také různých typů: proměnná představující měnící se čísla (height
), znaky (myName
); geometrii (Circle
) nebo seznam datových položek (1,2,3,5,8,13,...
).
V aplikaci Dynamo přidáváme data do vstupních portů uzlů – můžeme mít data bez akcí, ale potřebujeme data ke zpracování akcí, které reprezentují uzly. Pokud do pracovního prostoru přidáme uzel, pokud nebude mít k dispozici žádný vstup, bude výsledkem funkce, nikoli výsledek akce.
Jednoduchá data
Data a akce (Uzel A) se úspěšně spustí
Akce (Uzel A) bez zadání dat vrátí obecnou funkci
Dávejte pozor na nulové hodnoty. Typ 'null'
představuje nedostatek dat. I když je to abstraktní koncept, pravděpodobně se k němu dostanete při práci s vizuálním programováním. Pokud akce nevytvoří platný výsledek, uzel vrátí hodnotu null.
Testování nulových hodnot a odstraňování nulových hodnot z datové struktury je klíčovou součástí vytváření robustních programů.
Při vizuálním programování můžeme velmi rychle vygenerovat velké množství dat a vyžadovat způsob správy jejich hierarchie. Jedná se o úlohu datových struktur, organizačních schémat, ve kterých ukládáme data. Specifika datových struktur a způsob jejich použití se liší mezi jednotlivými programovacími jazyky.
V aplikaci Dynamo přidáme hierarchii k datům prostřednictvím seznamů. To prozkoumáme v pozdějších kapitolách, ale začneme jednoduše:
Seznam představuje kolekci položek umístěných do jedné struktury dat:
Mám pět prstů (položek) na ruce (seznam).
Deset domů (položek) je na mojí ulici (seznam).
Uzel Number Sequence definuje seznam čísel pomocí vstupů start, amount a step. Pomocí těchto uzlů jsme vytvořili dva samostatné seznamy deseti čísel, z nichž jeden se pohybuje v rozsahu 100–109 a druhý se pohybuje v rozsahu 0–9.
Uzel List.GetItemAtIndex slouží k výběru položky v seznamu na určitém indexu. Při výběru hodnoty 0 se první položka zobrazí v seznamu (v tomto případě 100).
Pokud použijeme stejný postup na druhý seznam, získáme hodnotu 0, první položku v seznamu.
Nyní sloučíme dva seznamy do jednoho pomocí uzlu List.Create. Uzel vytvoří seznam seznamů. Tím se změní struktura dat.
Pokud použijete znovu parametr List.GetItemAtIndex, s indexem nastaveným na hodnotu 0, získáme první řádek seznamu seznamů. To znamená, že se seznam považuje za položku, což se poněkud liší od ostatních skriptovacích jazyků. V pozdějších kapitolách se dostaneme k pokročilejší manipulaci se seznamy a datovými strukturami.
Základní koncept pro pochopení hierarchie dat v aplikaci Dynamo: S ohledem na datovou strukturu jsou seznamy považovány za položky. Jinými slovy, aplikace Dynamo funguje s postupem shora dolů pro pochopení datových struktur. Co to znamená? Pojďme to projít s příkladem.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V tomto prvním příkladu sestavíme válec se skořepinou, který prochází hierarchií geometrie, o níž se v této části pojednává.
1. Přidejte uzel Point.ByCoordinates – po přidání uzlu na pracovní plochu vidíme bod v počátku osnovy náhledu aplikace Dynamo. Výchozí hodnoty vstupů x,y a z jsou 0.0, což nám dává bod v tomto umístění.
2. Plane.ByOriginNormal – Dalším krokem v hierarchii geometrie je rovina. Existuje několik způsobů, jak vytvořit rovinu, my pro vstup použijeme počátek a normálu. Počátek je uzel bodu vytvořený v předchozím kroku.
Vector.ZAxis – Toto je sjednocený vektor ve směru Z. Všimněte si, že nejsou k dispozici vstupy, pouze vektor o hodnotě [0,0,1]. Toto je vstupní hodnota normal pro uzel Plane.ByOriginNormal. Tím se v náhledu aplikace Dynamo zobrazí obdélníková rovina.
3. Circle.ByPlaneRadius – Rozšiřujeme hierarchii. Nyní vytvoříme oblouk z roviny v předchozím kroku. Po zapojení do uzlu se v počátku zobrazí kružnice. Výchozí poloměr v uzlu je hodnota 1.
4. Curve.Extrude – Teď provedeme vylepšení přidáním hloubky a přechodem do třetího rozměru. Tento uzel vytvoří povrch z křivky jejím vysunutím. Výchozí vzdálenost v uzlu je 1 a měli bychom ve výřezu vidět válec.
5. Surface.Thicken – Tento uzel nám umožňuje vytvořit uzavřené těleso odsazením povrchu o danou vzdálenost a uzavřením tvaru. Výchozí hodnota tloušťky je 1 a válec se skořepinou je ve výřezu zobrazen v souladu s těmito hodnotami.
6. Number Slider – Místo použití výchozích hodnot pro všechny tyto vstupy přidejte do modelu parametrický ovládací prvek.
Domain Edit – po přidání posuvníku čísla na pracovní plochu klikněte na stříšku v levé horní části a zobrazte možnosti domény.
Min/Max/Step - Změňte hodnoty min, max a step na 0,2 a 0.01. Toto provedeme, abychom mohli řídit velikost celkové geometrie.
7. Number Sliders – Ve všech výchozích vstupech zkopírujte a vložte tento posuvník čísla (vyberte posuvník, stiskněte Ctrl+C a pak Ctrl+V) několikrát, dokud nebudou mít všechny vstupy s výchozími hodnotami posuvník. Aby definice fungovala, některé hodnoty posuvníku musí být větší než nula (například k zesílení plochy je potřeba hloubka vysunutí).
8. Nyní jsme vytvořili parametrický válec se skořepinou s těmito posuvníky. Zkuste některé z těchto parametrů změnit a sledujte, jak se geometrie dynamicky aktualizuje ve výřezu aplikace Dynamo.
Number Sliders – Přidali jsme na plochu hodně posuvníků a je potřeba vyčistit rozhraní nástroje, který jsme právě vytvořili. Klikněte pravým tlačítkem na jeden posuvník, vyberte položku Přejmenovat a změňte název každého posuvníku na název odpovídající jeho parametru (Thickness (Tloušťka), Radius (Poloměr), Height (Výška) atd.).
9. V tomto okamžiku jsme vytvořili úžasnou věc s rozšiřujícím se válcem. Toto je aktuálně jeden objekt, podívejme se, jak vytvořit pole válců, které zůstávají dynamicky propojeny. Za tímto účelem vytvoříme seznam válců, místo práce s jednou položkou.
Addition (+) – Naším cílem je přidat řadu válců vedle válce, který jsme vytvořili. Pokud chceme přidat jeden válec vedle aktuálního válce, je nutné zvážit poloměr válce a tloušťku jeho skořepiny. Toto číslo získáme sečtením dvou hodnot posuvníků.
10. Tento krok je mnohem náročnější, takže ho projdeme pomalu: cílem je vytvořit seznam čísel, která definují umístění každého válce v řadě.
a. Multiplication – Nejprve chceme vynásobit hodnotu z předchozího kroku hodnotou 2. Hodnota z předchozího kroku představuje poloměr a chceme válec posunout o plný průměr.
b. Number Sequence – Pomocí tohoto uzlu vytvoříme pole čísel. První vstup je uzel multiplication z předchozího kroku do hodnoty step. Hodnotu start lze nastavit na 0.0 pomocí uzlu number.
c. Integer Slider – Pro hodnotu amount připojíme posuvník celého čísla. Tím se definuje počet vytvořených válců.
d. Output – Tento seznam zobrazuje vzdálenost přesunutou pro každý válec v poli a je parametricky řízen původními posuvníky.
11. Tento krok je dostatečně jednoduchý – zadejte posloupnost definovanou v předchozím kroku do vstupu x původního uzlu Point.ByCoordinates. Tím nahradíte posuvník pointX, který lze odstranit. Nyní se ve výřezu zobrazuje pole válců (zkontrolujte, zda je číslo posuvníku větší než 0).
12. Řetěz válců je stále dynamicky spojen se všemi posuvníky. Upravte každý posuvník, abyste viděli aktualizaci definice.
Pro hlubší ponoření do vývoje vizuálních programů je potřeba lépe pochopit stavební bloky programu. Tato kapitola pokrývá základní koncepty týkající se dat, která jsou přenášena dráty v programu aplikace Dynamo.
Barva je skvělý datový typ k tvorbě působivých vizuálních prvků a k rozlišení částí výstupu ve vizuálním programu. Při práci s abstraktními daty a proměnlivými čísly je někdy obtížné zjistit, co se do jaké míry mění. Toto je skvělé využití pro barvy.
Barvy v aplikaci Dynamo jsou tvořeny pomocí vstupů ARGB. To odpovídá kanálům Alfa, Červená, Zelená a Modrá. Alfa představuje průhlednost barvy, zatímco ostatní tři se používají jako primární barvy k tvorbě celého spektra barev.
Barvy v níže uvedené tabulce se dotazují na vlastnosti, které se používají k definování barvy: Alfa, Červená, Zelená a Modrá. Všimněte si, že uzel Color.Components nám předá všechny čtyři kanály v samostatných výstupech, což je lepší k dotazování vlastností barvy.
Barvy v tabulce níže odpovídají barevnému prostoru HSB. Rozdělení barvy na odstín, sytost a jas je pravděpodobně intuitivnější pro interpretaci barvy: Jaká barva by to měla být? Jak moc sytá má být? A jak moc světlá, či tmavá má být? Toto je rozbor odstínu, respektive sytosti, respektive jasu.
Rozsah barev je podobný uzlu Remap Range ve cvičení : Přemapuje seznam čísel do jiné domény. Místo mapování do číselné domény však mapuje barevný gradient podle vstupních čísel v rozsahu od 0 do 1.
Aktuální uzel funguje dobře, pokud však všechno začne fungovat napoprvé, něco je zřejmě špatně. Nejlepší způsob, jak se s barevným gradientem seznámit, je provést interaktivní test. Nyní provedeme rychlé cvičení a probereme, jak nastavit gradient s výstupními barvami odpovídajícími číslům.
Definujte tři barvy: Pomocí bloku kódu definujte červenou, zelenou a modrou zadáním příslušných kombinací hodnot 0 a 255.
Vytvořte seznam: Slučte tři barvy do jednoho seznamu.
Definujte indexy: Vytvořte seznam k definování umístění uzlů jednotlivých barev (v rozsahu od 0 do 1). Všimněte si, že u zelené barvy je hodnota 0.75. Tímto se zelená barva umístí do 3/4 přes vodorovný gradient na posuvníku rozsahu barev.
Blok kódu: Zadejte hodnoty (mezi 0 a 1), které chcete převést na barvy.
Uzel Display.ByGeometry umožňuje vybarvit geometrii ve výřezu aplikace Dynamo. Toto je užitečné při oddělení různých typů geometrie, předvedení parametrické koncepce nebo definování legendy analýzy pro simulaci. Vstupy jsou jednoduché: geometrie a barva. Vstup color je za účelem vytvoření gradientu jako na obrázku výše připojen k uzlu Color Range.
Uzel Display.BySurfaceColor umožňuje mapovat data po celém povrchu pomocí barvy. Tato funkce nabízí určité zajímavé možnosti vizualizace dat obdržených přes diskrétní analýzu, jako je analýza slunečného světla, energetická analýza a analýza blízkosti. Použití barvy na povrch v aplikaci Dynamo je podobné jako použití textury na materiál v jiných prostředích CAD. Krátké cvičení níže znázorňuje použití tohoto nástroje.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Toto cvičení je zaměřeno na parametrické řízení barvy rovnoběžně s geometrií. Geometrie je základní šroubovice, kterou níže definujeme pomocí bloku kódu. Jedná se o rychlý a snadný způsob tvorby parametrické funkce; vzhledem k tomu, že se soustředíme na barvu (místo geometrie), můžeme efektivně vytvořit šroubovici pomocí bloku kódu, aniž by došlo k zaplnění kreslicí plochy. K čím složitějším materiálům se příručka Primer dostane, tím častěji se bude používat blok kódu.
Blok kódu: Definujte dva bloky kódu s výše uvedenými vzorci. Toto je rychlá parametrická metoda tvorby spirály.
Point.ByCoordinates: Připojte tři výstupy z bloku kódu k souřadnicím uzlu.
Nyní je vidět pole bodů tvořících šroubovici. Dalším krokem je tvorba křivky procházející body, aby bylo možné vizualizovat šroubovici.
PolyCurve.ByPoints: Připojte výstup Point.ByCoordinates ke vstupu points u uzlu. Vznikne šroubovitá křivka.
Curve.PointAtParameter: Připojte výstup PolyCurve.ByPoints ke vstupu curve. Účelem tohoto kroku je vytvořit parametrický bod atraktoru, který se posouvá podél křivky. Vzhledem k tomu, že křivka vyhodnocuje bod v parametru, bude nutné zadat hodnotu param v rozmezí od 0 do 1.
Posuvník čísel: Po přidání na kreslicí plochu změňte hodnotu min na 0.0, hodnotu max na 1.0 a hodnotu step na 0.01. Připojte výstup posuvníku ke vstupu param u uzlu Curve.PointAtParameter. Nyní je vidět bod podél délky šroubovice, který je vyjádřen procentem posuvníku (0 v počátečním bodě, 1 v koncovém bodě).
Po vytvoření referenčního bodu nyní porovnáme vzdálenost od referenčního bodu k původním bodům, čímž se definuje šroubovice. Tato hodnota vzdálenosti bude řídit geometrii i barvu.
Geometry.DistanceTo: Připojte výstup Curve.PointAtParameter ke vstupu. Připojte uzel Point.ByCoordinates ke vstupu geometrie.
Watch: Výsledný výstup zobrazuje seznam vzdáleností od každého bodu šroubovice k referenčnímu bodu podél křivky.
Dalším krokem je řízení parametrů pomocí seznamu vzdáleností od bodů šroubovice k referenčnímu bodu. Pomocí těchto hodnot vzdáleností se definují poloměry řady koulí podél křivky. Aby se koule udržely ve vhodné velikosti, je nutné přemapovat hodnoty vzdálenosti.
Math.RemapRange: Připojte výstup Geometry.DistanceTo ke vstupu čísel.
Blok kódu: připojte blok kódu s hodnotou 0.01 ke vstupu newMin a blok kódu s hodnotou 1 ke vstupu newMax.
Watch: Připojte výstup Math.RemapRange k jednomu uzlu a výstup Geometry.DistanceTo k jinému. Porovnejte výsledky.
V tomto kroku došlo k přemapování seznamu vzdáleností do menšího rozsahu. Hodnoty newMin a newMax je možné upravit podle libosti. Hodnoty se přemapují a budou mít stejný poměr rozložení v rámci celé domény.
Sphere.ByCenterPointRadius: Připojte výstup Math.RemapRange ke vstupu radius a původní výstup Point.ByCoordinates připojte ke vstupu centerPoint.
Změňte hodnotu posuvníku čísel a sledujte, jak se aktualizuje velikost koulí. Vytvořili jsme parametrický objekt.
Velikost koulí ukazuje parametrické pole definované referenčním bodem podél křivky. Použijeme stejnou koncepci u poloměru koule, abychom mohli řídit jejich barvu.
Color Range: Přidejte horní část kreslicí plochy. Při přejetí kurzoru nad vstupem value si všimněte, že požadovaná čísla jsou v rozsahu 0 až 1. Čísla z výstupu Geometry.DistanceTo je nutné přemapovat, aby byla kompatibilní s touto doménou.
Sphere.ByCenterPointRadius: V tuto chvíli vypněte náhled u tohoto uzlu. (Klikněte pravým tlačítkem myši > Náhled.)
Math.RemapRange: Tento proces by vám měl být známý. Připojte výstup Geometry.DistanceTo ke vstupu čísel.
Blok kódu: Podobně jako v předchozím kroku vytvořte hodnotu 0 pro vstup newMin a hodnotu 1 pro zadání newMax. Všimněte si, že v tomto případě je možné definovat dva výstupy z jednoho bloku kódu.
Color Range: Připojte výstup Math.RemapRange ke vstupu value.
Color.ByARGB: Toto je akce, pomocí které se vytvoří dvě barvy. I přesto, že tento proces může vypadat neobvykle, je stejný jako u barev RGB v jiném softwaru, jen se přitom využije vizuální programování.
Blok kódu: Vytvořte dvě hodnoty 0 a 255. Připojte dva výstupy ke dvěma vstupům Color.ByARGB podle výše uvedeného obrázku (případně vytvořte jakékoli dvě požadované barvy).
Color Range: Vstup colors vyžaduje seznam barev. Tento seznam je potřeba vytvořit ze dvou barev vytvořených v předchozím kroku.
List.Create: Slučte dvě barvy do jednoho seznamu. Připojte výstup ke vstupu colors u uzlu Color Range.
Display.ByGeometryColor: Připojte položku Sphere.ByCenterPointRadius ke vstupu geometry a uzel Color Range připojte ke vstupu color. Nyní máme hladký gradient v celé doméně křivky.
Pokud změníme hodnotu posuvníku čísel z dřívější definice, barvy a velikosti se aktualizují. V tomto případě spolu barvy a velikost poloměru přímo souvisí: nyní existuje vizuální propojení mezi dvěma parametry.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Nejprve je třeba vytvořit (nebo odkázat) povrch, který se použije jako vstup pro uzel Display.BySurfaceColor. V tomto příkladu šablonujeme mezi sinusovou a kosinusovou křivkou.
Tato skupina uzlů vytváří body podél osy Z a poté je posunuje podle sinových a kosinových funkcí. Pomocí dvou seznamů bodů se poté vygenerují křivky NURBS.
Surface.ByLoft: Vygenerujte interpolovaný povrch mezi křivkami NURBS v seznamu.
File Path: Vyberte soubor obrázku, který se bude vzorkovat pro následná data pixelů.
Pomocí uzlu File.FromPath převeďte cestu k souboru na soubor a poté jej předejte do uzlu Image.ReadFromFile. Tím vytvoříte obrázek pro vzorkování.
Image.Pixels: Zadejte obrázek a zadejte hodnotu vzorku, která se má použít ve směru rozměrů X a Y obrázku.
Posuvník: Zadejte hodnoty vzorků pro uzel Image.Pixels
Display.BySurfaceColor: Namapujte pole hodnot barev přes celý povrch podél směru X, respektive Y.
Podrobný náhled výstupního povrchu s rozlišením 400x300 vzorků.
Teď, když jsme stanovili, co je to seznam, pojďme si promluvit o operacích, které s ním můžeme provádět. Představte si seznam jako balíček karet. Seznam je balíček a každá karta představuje položku.
Jaké dotazy ze seznamu vytvoříme? Tím získáte přístup k existujícím vlastnostem.
Počet karet v balíčku? 52.
Počet barev? 4.
Materiál? Papír.
Délka? 3.5" nebo 89 mm.
Šířka? 2.5" nebo 64 mm.
Jaké akce můžeme se seznamem provést? Tím se změní seznam podle dané operace.
Můžeme zamíchat balíček.
Můžeme ho seřadit podle hodnot.
Můžeme ho seřadit podle barev.
Můžeme balíček rozdělit.
Můžeme balíček rozdělit rozdáním karet.
Můžeme z balíčku vybrat konkrétní kartu.
Všechny výše uvedené operace mají analogické uzly aplikace Dynamo pro práci se seznamy obecných dat. Níže uvedené lekce ukážou některé základní operace, které můžeme provádět na seznamech.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Obrázek níže je základní graf, ve kterém nakreslíme čáry mezi dvěma kružnicemi, které představují základní operace se seznamy. Prozkoumáme, jak spravovat data v seznamu a jak prezentovat vizuální výsledky pomocí akcí v seznamu níže.
Začněte uzlem Code Block s hodnotou
500;
.Propojte jej se vstupem x uzlu Point.ByCoordinates.
Uzel z předchozího kroku spojte se vstupem origin uzlu Plane.ByOriginNormal.
Pomocí uzlu Circle.ByPlaneRadius spojte uzel z předchozího kroku se vstupem plane.
Pomocí uzlu Code Block určete hodnotu
50;
pro vstup radius. Toto je první kruh, který vytvoříme.Pomocí uzlu Geometry.Translate posuňte kružnici o 100 jednotek ve směru osy Z.
Pomocí uzlu Code Block definujte rozsah deseti čísel mezi 0 a 1 s tímto řádkem kódu:
0..1..#10;
Blok kódu z předchozího kroku propojte se vstupem param dvou uzlů Curve.PointAtParameter. Propojte uzel Circle.ByPlaneRadius se vstupem curve horního uzlu a uzel Geometry.Translate se vstupem curve dolního uzlu.
Pomocí uzlu Line.ByStartPointEndPoint spojte dva uzly Curve.PointAtParameter.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Uzel List.Count je jednoduchý: spočítá počet hodnot v seznamu a vrátí výsledné číslo. Tento uzel je při práci se seznamy seznamů složitější, ale to si předvedeme v následujících částech.
Uzel **List.Count ****** vrací počet řádků v uzlu Line.ByStartPointEndPoint. V tomto případě je to hodnota 10, která souhlasí s počtem bodů vytvořených z původního uzlu Code Block.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
List.GetItemAtIndex je základní způsob, jak dotazovat položku v seznamu.
Nejprve kliknutím pravým tlačítkem myši na uzel Line.ByStartPointEndPoint vypněte jeho náhled.
Pomocí uzlu List.GetItemAtIndex vybereme index 0 nebo první položku v seznamu řádků.
Chcete-li pomocí uzlu List.GetItemAtIndex vybrat jinou položku, změňte hodnotu posuvníku v rozmezí od 0 do 9.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Možnost List.Reverse obrátí pořadí všech položek v seznamu.
Chcete-li správně zobrazit obrácený seznam čar, vytvořte více čar změnou uzlu Code Block na
0..1..#50;
.Duplikujte uzel Line.ByStartPointEndPoint, vložte uzel List.Reverse mezi uzel Curve.PointAtParameter a druhý uzel Line.ByStartPointEndPoint.
Pomocí uzlů Watch3D zobrazte náhled dvou různých výsledků. První zobrazí výsledek bez obráceného seznamu. Čáry se připojují vertikálně k sousedním bodům. Obrácený seznam však spojí všechny body v opačném pořadí v druhém seznamu.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
List.ShiftIndices je dobrý nástroj ke tvorbě zkroucení, šroubovicových vzorů nebo jiných podobných manipulací s daty. Tento uzel přemístí položky v seznamu do daného počtu indexů.
Stejným postupem jako při otáčení seznamu připojte uzel List.ShiftIndices k uzlu Curve.PointAtParameter a Line.ByStartPointEndPoint.
Pomocí uzlu Code Block s hodnotou 1 posuňte seznam o jeden index.
Všimněte si, že změna je jemná, ale všechny čáry v dolním uzlu Watch3D se posunuly o jeden index při připojení k druhé sadě bodů.
Pokud například změníme uzel Code Block na větší hodnotu, například 30, všimneme si významného rozdílu mezi příčnými čarami. V tomto případě funguje posun jako čočka kamery, což vytváří v původní válcové formě otočení.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Uzel List.FilterByBooleanMask odebere určité položky podle seznamu logických hodnot nebo podle hodnot true nebo false.
Aby bylo možné vytvořit seznam hodnot true nebo false, je třeba ještě trochu pracovat...
Pomocí uzlu Code Block definujte výraz pomocí této syntaxe:
0..List.Count(list);
. Připojte uzel Curve.PointAtParameter ke vstupu list. Toto nastavení projdeme více v kapitole bloku kódu, ale v tomto případě nám řádek kódu poskytuje seznam reprezentující každý index uzlu Curve.PointAtParameter.Pomocí uzlu %** (modulo)** spojte výstup uzlu _Code Block_se vstupem x a hodnotu 4 se vstupem y. Tak získáme zbytek po dělení seznamu indexů 4. Modulo je velmi užitečné pro vytváření vzorů. Všechny hodnoty budou možné zbytky po dělení 4: 0, 1, 2, 3.
Z uzlu %** (modulo)** víme, že hodnota 0 znamená, že index je dělitelný 4 (0, 4, 8 atd.). Pomocí uzlu == můžeme testovat dělitelnost porovnáním s hodnotou 0.
Uzel Watch zobrazuje pouze toto: máme vzor s hodnotou true/false, který je následující: true, false, false, false....
Pomocí tohoto vzoru true/false připojte vstupní hodnotu masky dvou uzlů List.FilterByBooleanMask.
Spojte uzel Curve.PointAtParameter s každým vstupem seznamu pro List.FilterByBooleanMask.
Výstup Filter.ByBooleanMask čte hodnoty in a out. In představuje hodnoty, které měly hodnotu masky true, zatímco out představuje hodnoty, které měly hodnotu false. Zadáním výstupů in do vstupů startPoint a endPoint uzlu Line.ByStartPointEndPoint jsme vytvořili filtrovaný seznam čar.
Uzel Watch3D ukazuje, že máme méně čar než bodů. Vybrali jsme pouze 25 % uzlů filtrováním pouze hodnot true.
Kromě uzlů pro slovníky zavádí aplikace Dynamo 2.0 také nové funkce pro slovníky v blocích kódu.
Je možné použít syntaxi podle obrázku níže nebo reprezentaci uzlů v jazyce DesignScript.
Protože je slovník typem objektu, je možné s ním v aplikaci Dynamo provádět následující akce.
Tyto interakce jsou užitečné zejména při spojování dat aplikace Revit s řetězci. Pojďme se podívat na případy užití v aplikaci Revit.
Nový – Vytvoří nový soubor .dyn.
Otevřít – Otevře existující soubor .dyn (pracovní prostor) nebo .dyf (vlastní uzel).
Uložit/uložit jako – Uloží aktivní soubor .dyn nebo .dyf.
Zpět – Vrátí zpět poslední akci.
Znovu – Znovu provede další akci.
Exportovat pracovní prostor jako obrázek – Exportuje viditelný pracovní prostor jako soubor PNG.
Náhled grafu
3D náhled
Přizpůsobit oknu
Přiblížit
Oddálit
Posun pohledu
Přizpůsobit oknu
Přiblížit
Oddálit
Posun pohledu
Orbit
Další informace o zmrazení uzlů naleznete v části .
Díky tomu booleovské operace šetří velké množství času. Existují tři booleovské operace pro tělesa, které určují, která část geometrie zůstane zachována.
Aplikace Dynamo kromě těchto tří operací obsahuje také uzly Solid.DifferenceAll a Solid.UnionAll, které provádějí rozdíl a sjednocení s více tělesy.
Uzly a dráty jsou v aplikaci Dynamo klíčovými komponentami, které podporují proces . Pomáhají vytvořit silné vizuální a systémové vztahy mezi součástmi návrhu. Jednoduchým kliknutím myši snadno propojíte uzly při vývoji a optimalizaci pracovního postupu návrhu.
je dvourozměrný povrch. Můžete si jej představit jako plochý povrch, která se neomezeně rozprostírá. Každá rovina má počátek, směr X, směr Y a směr Z (nahoru).
je systém, který slouží k určení umístění bodů nebo jiných geometrických prvků. Obrázek níže vysvětluje, jak vypadá v aplikaci Dynamo a co představují jednotlivé barvy.
Nástroj Dynamo Package Manager nabízí další funkce pro rozšířené typy geometrie a operace – podívejte se do balíčku .
Možnosti sítě aplikace Dynamo lze rozšířit instalací balíčku . Balíček Dynamo Mesh Toolkit poskytuje nástroje k importu sítí z externích formátů souborů, vytvoření sítě z objektů geometrie aplikace Dynamo a ručnímu vytvoření sítí pomocí jejich vrcholů a indexů.
Příklad použití tohoto balíčku naleznete v .
Většina uzlů z předchozího kroku bude fungovat dobře, ale jedná se o pracný postup. Chcete-li vytvořit efektivnější pracovní postup, přečtěte si v části jak definovat řetězec výrazů aplikace Dynamo do jednoho uzlu. V následující řadě kroků se podíváme, jak použít parametrickou rovnici k nakreslení Fibonacciho spirály.
Nyní, když jsme vytvořili kruhovou ulitu loděnky, přejděme k parametrickým osnovám. Použijeme základní otočení Fibonacciho spirály k vytvoření Fibonacciho rastru a výsledek bude modelován po .
V tomto cvičení použijeme metody dotazování a manipulace s řetězci, abychom dekonstruovali poslední sloku díla Roberta Frosta . Není to právě použití z praxe, ale pomůže nám to pochopit koncept akcí řetězců, když je použijeme na čitelné řádky básně.
Autor fotografie: .
je tvořena sadou bodů, každá čára má alespoň 2 body. Jedním z nejběžnějších způsobů, jak vytvořit čáru v aplikaci Dynamo, je použití Line.ByStartPointEndPoint
.
je model používaný k přesnému znázornění křivek a povrchů. Pojďme v aplikaci Dynamo pomocí dvou různých metod vytvořit křivku NURBS ve tvaru sinusoidy a porovnat výsledky.
Autor fotografie:
Aplikace Dynamo byla původně vytvořena s ohledem na aplikaci Revit, její všestrannost jako nástroje pro vizuální programování však přesahuje rámec aplikace Revit. Aplikace Dynamo je také integrována do aplikace Civil 3D, což uživatelům umožňuje vytvářet výkonné postupy automatizace pro projekty stavební infrastruktury. Jedná se o mimořádně užitečný nástroj pro zpracování čehokoli od běžných úkolů po nejsložitější pracovní postupy návrhu, který vám v konečném důsledku pomáhá šetřit čas, optimalizovat návrhy a přijímat lepší rozhodnutí o návrhu. Aplikace Dynamo nabízí celou sadu uzlů speciálně navržených pro aplikaci Civil 3D a také knihovny třetích stran od široké komunity uživatelů.
Tato kapitola příručky Primer se zaměří na aplikaci Dynamo for Civil 3D, počínaje základy a konče pokročilejšími tématy.
Object.IsNull
obj
booleovský
Barva ARGB (Color.ByARGB)
A,R,G,B
barva
Alfa (Colour.Alpha)
barva
A
Červená (Colour.Red)
barva
R
Zelená (Color.Green)
barva
G
Modrá (Color.Blue)
barva
B
Komponenty (Colour.Components)
barva
A,R,G,B
Odstín (Colour.Hue)
barva
Odstín
Sytost (Colour.Saturation)
barva
Sytost
Jas (Colour.Brightness)
barva
Jas
If (If)
test, true, false
výsledek
Formula (IF(x,y,z))
x, y, z
výsledek
Code Block ((x?y:z);)
x? y, z
výsledek
Součet (+)
var[]...[], var[]...[]
var[]...[]
Rozdíl (-)
var[]...[], var[]...[]
var[]...[]
Násobení (*)
var[]...[], var[]...[]
var[]...[]
Dělení (/)
var[]...[], var[]...[]
var[]...[]
Chtěli jste někdy v aplikaci Revit vyhledávat položky podle jejich dat?
Pokud ano, je pravděpodobné, že jste udělali něco podobného jako v následujícím příkladu.
Na obrázku níže získáme všechny místnosti v modelu aplikace Revit, zjistíme index požadované místnosti (podle čísla místnosti) a nakonec získáme místnost s tímto indexem.
Získejte všechny místnosti v modelu.
Číslo místnosti, kterou chcete najít.
Získejte číslo místnosti a její index.
Získejte místnost s daným indexem.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Pojďme udělat totéž pomocí slovníků. Nejdříve je nutné získat všechny místnosti v modelu aplikace Revit.
Vybereme kategorii aplikace Revit, se kterou chceme pracovat (v tomto případě místnosti).
Přikážeme aplikaci Dynamo, aby získala všechny prvky
Dále je nutné rozhodnout, podle jakých klíčů se budou data vyhledávat. (Informace o klíčích naleznete v části Co je slovník?)
Data, která použijeme, jsou čísla místností.
Nyní vytvoříme slovník s danými klíči a prvky.
Uzel Dictionary.ByKeysValues vytvoří slovník podle odpovídajících vstupů.
Keys
musí být řetězce, zatímcovalues
mohou být různé typy objektů.
Nyní můžeme načíst místnost ze slovníku pomocí čísla místnosti.
Uzel
String
bude klíč, který použijeme k vyhledání objektu ze slovníku.Uzel Dictionary.ValueAtKey načte objekt ze slovníku.
Stejným způsobem lze vytvářet slovníky seskupených objektů. Pokud bychom chtěli vyhledat všechny místnosti na daném podlaží, můžeme upravit graf následovně.
Místo čísla místnosti použijeme jako klíč hodnotu parametru (v tomto případě podlaží).
Nyní můžete místnosti seskupit podle podlaží, na kterém se nacházejí.
Po seskupení místností podle podlaží, můžeme použít sdílené (jedinečné) klíče jako klíče pro slovník a seznamy místností jako prvky.
Nakonec můžeme pomocí podlaží v modelu aplikace Revit a pomocí slovníku vyhledat, které místnosti se na daném podlaží nacházejí. Uzel
Dictionary.ValueAtKey
načte jako vstup název podlaží a vrátí objekty místností na daném podlaží.
Možnosti slovníků jsou opravdu nekonečné. Možnost propojit BIM data v aplikaci Revit s prvkem samotným nabízí mnohá využití.
Aplikace Dynamo 2.0 oddělila datový typ slovník od datového typu seznam. Tato změna může výrazně změnit způsob, jakým pracujete s daty. Před verzí 2.0 byly slovníky a seznamy spojeny v jediný datový typ. Stručně řečeno, seznamy byly ve skutečnosti slovníky s celočíselnými klíči.
Slovník je datový typ, který se skládá z kolekce dvojic klíč-hodnota, kde klíč je v rámci kolekce jedinečný. Slovník nemá žádné pořadí a umožňuje vyhledávat hodnoty pomocí klíčů (a nikoliv pomocí hodnot indexů jako u seznamů). V aplikaci Dynamo 2.0 mohou být jako klíče použity pouze řetězce.
Seznam je datový list, který se skládá z kolekce hodnot v určitém pořadí. V aplikaci Dynamo seznamy používají celočíselné hodnoty indexů.
Díky oddělení slovníků od seznamů můžete slovníky používat k rychlému a snadnému ukládání a vyhledávání hodnot, aniž by bylo nutné pamatovat si hodnoty indexů nebo uchovávat data ve striktní struktuře seznamu. Během uživatelského testování jsme zjistili, že nahrazením uzlů GetItemAtIndex
slovníky došlo k výraznému zmenšení velikosti grafu.
Došlo ke změnám syntaxe, která souvisí s inicializací a prací se slovníky a seznamy v blocích kódu.
Slovníky používají následující syntaxi: {key:value}
Seznamy používají následující syntaxi: [value,value,value]
Do knihovny byly přidány nové uzly, které vám pomohou vytvářet, upravovat a dotazovat slovníky.
Seznamy vytvořené v blocích kódu verze 1.x budou po načtení skriptu automaticky převedeny do nové syntaxe seznamu, která používá hranaté závorky [ ]
místo složených závorek { }
\.
V počítačových vědách jsou slovníky, podobně jako seznamy, kolekcemi objektů. Zatímco seznamy mají položky v určitém pořadí, slovníky jsou neuspořádané kolekce. Nejsou závislé na pořadových číslech (indexech), používají místo nich klíče.
Na obrázku níže je znázorněno potenciální využití slovníků. Slovníky se často používají ke spojení dvou různých položek, které spolu nemusí souviset. V našem případě propojujeme španělské slovo s anglickým pro později vyhledání.
Vytvoří slovník, který propojí obě části dat.
Získá hodnotu s daným klíčem.
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í 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.
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.
Začněte souborem .sat ve složce souborů cvičení. Tento soubor můžete načíst pomocí uzlu File Path.
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.
Výběrem indexu 1 uchopte povrch. Index vyberete pomocí uzlu List.GetItemAtIndex.
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.
Chcete-li se podívat, jak je datová struktura uspořádána, připojte objekt NurbsCurve.ByPoints k výstupu uzlu Surface.PointAtParameter.
Nyní můžete vypnout náhled z uzlu List.GetItemAtIndex, abyste získali jasnější výsledek.
Základní uzel List.Transpose převrátí sloupce a řádky seznamu seznamů.
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.
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.
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á.
Začněte krokem z předchozího cvičení, který izoluje horní povrch importované geometrie pomocí uzlu List.GetItemAtIndex.
Pomocí uzlu Surface.Offset odsaďte povrch o hodnotu 10.
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;
.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.
Vypněte náhled těchto povrchů.
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.
Pomocí uzlu List.Create je možné kombinovat dvě sady křivek do jednoho seznamu seznamů.
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.
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.
Vypněte náhled z uzlu Surface.ByLoft v předchozím kroku.
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.
Pomocí uzlu Surface.ByLoft jste vytvořili žebrovanou konstrukci.
Dále si ukážeme alternativní postup k dosažení tohoto výsledku.
Než začneme, vypněte náhled uzlu Surface.ByLoft v předchozím kroku, abyste se vyhnuli nejasnostem.
Alternativou uzlu List.Transpose je List.Combine. Tento uzel ovládá „kombinátor“ v každém dílčím seznamu.
V tomto případě použijeme uzel List.Create jako „kombinátor“, který vytvoří seznam jednotlivých položek v dílčích seznamech.
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ší.
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.
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í.
Stejně jako v předchozím cvičení přidejte pomocí uzlu Surface.Offset odsazení o hodnotu 10.
Všimněte si, že na výstupu se vytvořily dva povrchy s odsazeným uzlem.
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;
.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.
Stejně jako v předchozím cvičení připojte výstupy ke dvěma uzlům NurbsCurve.ByPoints.
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.
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ů.
Než budeme pokračovat, vypněte náhled existujících povrchů.
Pomocí uzlu List.Create sloučíme křivky nurbs do jedné datové struktury, čímž vytvoříte seznam seznamů seznamů.
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.
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.
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.
Pokud použijeme uzel List.Create jako „kombinátor“, vytvoříme datovou strukturu, která nám bude lépe fungovat.
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.
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.
Nakonec můžete šablonovat křivky nurbs společně s vhodnou hierarchií dat. Tím vznikne žebrovaná konstrukce.
Nyní přidáme do geometrie hloubku pomocí uzlu Surface.Thicken se vstupním nastavením, jak je znázorněno na obrázku.
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.
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.
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.
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.
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í.
Vlastní uzly vznikají tak, že se do nich zahrnou ostatní uzly (i další vlastní uzly), proto o nich lze přemýšlet jako o kontejnerech. Pokud tento kontejnerový uzel v grafu spustíte, spustí se všechny uzly v něm – pomocí vlastních uzlů tak můžete opakovaně používat a sdílet užitečné posloupnosti uzlů.
Pokud v grafu existuje více kopií vlastního uzlu, po úpravě základního vlastního uzlu se všechny tyto kopie aktualizují. Díky tomu můžete graf snadno aktualizovat a přizpůsobit jej změnám v pracovním postupu nebo návrhu.
Velmi užitečnou funkcí vlastních uzlů je snadné sdílení práce. Pokud zručný uživatel vytvoří složitý graf aplikace Dynamo a předá jej konstruktérovi, který je v aplikaci Dynamo nový, může tento graf zjednodušit do základní podoby. Vlastní uzel je možné otevřít a upravit jeho vnitřní graf, může však vypadat i jako jednoduchý „kontejner“. Pomocí vlastních uzlů mohou uživatelé aplikace Dynamo uchovat svůj graf v přehledné a intuitivní podobě.
Vlastní uzly je možné v aplikaci Dynamo vytvářet mnoha způsoby. V příkladech této kapitoly vytvoříme vlastní uzly přímo v uživatelském rozhraní aplikace Dynamo. Pokud jste programátor a zajímá vás formátování C# nebo Zero-Touch, naleznete podrobnější informace na této stránce na Wiki aplikace Dynamo.
V této části přejdeme do prostředí vlastního uzlu a vytvoříme jednoduchý uzel pro výpočet procent. Prostředí vlastního uzlu se od prostředí grafu aplikace Dynamo liší, ale práce v něm je prakticky stejná. Pojďme tedy vytvořit první vlastní uzel.
Chcete-li vytvořit nový vlastní uzel, spusťte aplikaci Dynamo a vyberte možnost Vlastní uzel, případně na pracovní ploše stiskněte kombinaci kláves Ctrl+Shift+N.
V dialogu Vlastnosti vlastního uzlu zadejte název, popis a kategorii.
Název: Procento
Popis: Vypočítá procentuální podíl jedné hodnoty vůči druhé hodnotě.
Kategorie: Math.Functions
Tím se otevře pracovní plocha se žlutým pozadím, která naznačuje, že pracujete ve vlastním uzlu. Na této pracovní ploše máte přístup ke všem základním uzlům aplikace Dynamo a také k uzlům v kategoriích Input a Output, které slouží k nastavení vstupu a výstupu dat u vlastních uzlů. Lze je najít v nabídce Input > Basic.
Vstupy: Vstupní uzly na vlastních uzlech vytvářejí vstupní porty. Syntaxe pro vstupní port je název_vstupu : datovýtyp = výchozí_hodnota(volitelná).
Výstupy: Podobně jako u vstupních uzlů, tyto vstupy na vlastních uzlech vytvářejí výstupní porty. Ke vstupním a výstupním portům je možné přidat vlastní komentář s informacemi o vstupech a výstupech. Vlastní komentáře jsou podrobněji popsány podrobněji v části Tvorba vlastních uzlů.
Tento vlastní uzel je možné uložit jako soubor .dyf (a nikoliv standardní .dyn). To způsobí, že bude automaticky přidán do relace a všech budoucích relací. Vlastní uzel najdete ve své knihovně v části Doplňky.
Nyní, když jsme vytvořili první vlastní uzel, se v dalších částech podrobněji podíváme na funkce vlastních uzlů a na to, jak publikovat obecné pracovní postupy. V další části vyvineme vlastní uzel, který přenese geometrii z jedné plochy na druhou.
Slovníky představují kolekci dat, která jsou svázána s klíči. Slovníky umožňují vyhledávat, odstraňovat a vkládat data do kolekce.
Slovník si lze představit jako chytrý způsob, jak vyhledávat data.
Funkce pro slovníky byly v aplikaci Dynamo dostupné již delší dobu, verze Dynamo 2.0 však změnila způsob, jakým se s tímto datovým typem pracuje.
Původní obrázek publikován se svolením sixtysecondrevit.com
Aplikace Dynamo nabízí širokou škálu hlavních uzlů pro úlohy vizuálního programování. Někdy však může být rychlejší a elegantnější vytvořit si uzly vlastní. Tyto uzly pak můžete používat v různých projektech, vytvářet díky nim přehlednější grafy, odesílat je do nástroje Package Manager a sdílet je s komunitou aplikace Dynamo.
Sada nástrojů pro sítě obsahuje nástroje pro import sítí ze souborů různých formátů, tvorbu sítě z objektů geometrií aplikace Dynamo a ruční tvorbu sítí z bodů a indexů. Knihovna také obsahuje nástroje pro úpravy sítí a extrahování vodorovných řezů pro použití ve výrobě.
Balíček Dynamo Mesh Toolkit je součástí probíhajícího výzkumu společnosti Autodesk a proto se bude v nadcházejících letech dále rozvíjet. Do sady budou často přidávány nové metody, tým aplikace Dynamo ocení jakékoliv komentáře, hlášení chyb nebo nápady na nové funkce.
V následujícím cvičení budou demonstrovány základní operace pomocí sady nástrojů pro sítě. V tomto cvičení protneme síť řadou rovin, což by u těles bylo výpočetně náročné. Na rozdíl od tělesa má síť „rozlišení“, které není definováno matematicky, ale topologicky, a je možné ho definovat podle aktuální úlohy. Další podrobnosti o vztahu mezi sítí a tělesem naleznete v kapitole Geometrie pro výpočetní návrh v této příručce Primer. Další informace o balíčku Mesh Toolkit naleznete na stránce Wiki k aplikaci Dynamo. Cvičení níže demonstruje práci s tímto balíčkem.
V horní nabídce aplikace Dynamo vyberte možnost Balíčky > Package Manager. Do vyhledávacího pole zadejte MeshToolkit. Jedná se o jedno slovo. Klikněte na tlačítko Instalovat a potvrďte, že chcete zahájit stahování. Je to tak jednoduché.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V tomto příkladu se podíváme na uzel průniku v sadě nástrojů pro sítě. Provedeme import sítě a protneme ji řadou vstupních rovin, čímž vytvoříme řezy. Tím začne příprava modelu na výrobu, řezání laserovým nebo vodním paprskem či CNC frézování.
Začněte otevřením souboru Mesh-Toolkit_Intersect-Mesh.dyn v aplikaci Dynamo.
File Path: Vyhledejte soubor sítě, který chcete importovat (stanford_bunny_tri.obj). Podporované typy souborů jsou .mix a .obj
Mesh.ImportFile: Připojte cestu k souboru, aby došlo k importu sítě.
Point.ByCoordinates: Vytvořte bod, který bude středem oblouku.
Arc.ByCenterPointRadiusAngle: Vytvořte oblouk kolem bodu. Tato křivka bude použita k umístění řady rovin. __ Nastavení jsou následující: __
radius: 40, startAngle: -90, endAngle:0
Vytvořte řadu rovin orientovaných podél oblouku.
Code Block: Vytvořte 25 čísel v rozmezí od 0 do 1.
Curve.PointAtParameter: Připojte oblouk ke vstupu curve a výstup bloku s kódem ke vstupu param, čímž získáte řadu bodů na křivce.
Curve.TangentAtParameter: Připojte stejné vstupy jako u předchozího uzlu.
Plane.ByOriginNormal: Připojte body ke vstupu origin a vektory ke vstupu normal, čímž v jednotlivých bodech vytvoříte řadu rovin.
Nyní tyto roviny použijeme k protnutí sítě.
Mesh.Intersect: Vytvořte průnik rovin s importovanou sítí, čímž vznikne řada kontur objektů polycurve. Klikněte pravým tlačítkem myši na uzel a nastavte vázání na nejdelší.
PolyCurve.Curves: Rozdělte objekty polycurve na fragmenty křivek.
Curve.EndPoint: Extrahujte koncové body jednotlivých křivek.
NurbsCurve.ByPoints: Pomocí bodů vytvořte křivku nurbs. K uzavření křivek použijte uzel Boolean nastavený na True.
Než budete pokračovat, vypněte náhled některých uzlů, například Mesh.ImportFile, Curve.EndPoint, Plane.ByOriginNormal a Arc.ByCenterPointRadiusAngle, abyste lépe viděli výsledek.
Surface.ByPatch: Vytvořte záplaty ploch pro každou konturu, čímž vytvoříte „řezy“ sítě.
Přidejte druhou řadu řezů, čímž vznikne efekt podobný vaflím.
Možná jste si všimli, že operace průniku se u sítí počítají rychleji než u těles. Pracovní postupy podobné těm jako v tomto cvičení fungují se sítěmi velmi dobře.
Aplikace Dynamo 2.0 nabízí několik uzlů pro slovníky. Mezi ně patří uzly pro tvorbu, akci a dotazování.
1. Uzel Dictionary.ByKeysValues
vytvoří slovník ze zadaných hodnot a klíčů. (Počet položek bude odpovídat počtu položek nejkratšího seznamu.)
2. Uzel Dictionary.Components
vytvoří komponenty ze vstupního slovníku. (Operace opačná k vytvoření slovníku.)
3. Uzel Dictionary.RemoveKeys
vytvoří nový objekt slovníku bez vstupních klíčů.
4. Uzel Dictionary.SetValueAtKeys
vytvoří nový slovník na základě vstupních klíčů a hodnot, které nahradí aktuální hodnotu u příslušných klíčů.
5. Uzel Dictionary.ValueAtKey
vrátí hodnotu na pozici vstupního klíče.
6. Uzel Dictionary.Count
vrátí počet dvojic hodnot a klíčů ve slovníku.
7. Uzel Dictionary.Keys
vrátí klíče aktuálně uložené ve slovníku.
8. Uzel Dictionary.Values
vrátí hodnoty aktuálně uložené ve slovníku.
Spojování dat ve slovnících může být užitečnou alternativou pro starý způsob práce s indexy a seznamy.
Aplikace Dynamo nabízí řadu způsobů, jak vytvořit balíček pro vaše osobní použití nebo sdílení s komunitou aplikace Dynamo. V níže uvedené případové studii si rozebráním existujícího balíčku projdeme, jak je balíček vytvořen. Tato případová studie vychází ze zkušeností z předchozí kapitoly a poskytuje sadu vlastních uzlů pro mapování geometrie podle souřadnic UV, z jednoho povrchu aplikace Dynamo do jiného.
Budeme pracovat se vzorovým balíčkem, který demonstruje mapování UV bodů z jednoho povrchu do druhého. Základy nástroje jsme již vytvořili v části Vytvoření vlastního uzlu tohoto cvičení. Níže uvedené soubory ukazují, jak můžeme využít koncepci mapování UV a vytvořit sadu nástrojů pro publikovatelnou knihovnu.
Na tomto obrázku namapujeme bod z jednoho povrchu na jiný pomocí souřadnic UV. Balíček je založen na tomto konceptu, ale se složitější geometrií.
V předchozí kapitole jsme prozkoumali způsoby panelizace povrchu v aplikaci Dynamo podle křivek definovaných v rovině XY. Tato případová studie tyto koncepty rozšiřuje o další kóty geometrie. Tento balíček nainstalujeme, tak jak byl vytvořen, abychom ukázali, jak byl vyvinut. V další části ukážeme, jak byl tento balíček publikován.
V aplikaci Dynamo klikněte na položky Balíčky > Package Manager a vyhledejte balíček MapToSurface (jedná se o jedno slovo). Kliknutím na tlačítko Instalovat zahájíte stahování a přidáte balíček do své knihovny.
Po instalaci by měly být vlastní uzly dostupné v části Doplňky > DynamoPrimer.
S instalovaným balíčkem projdeme to, jak ho nastavit.
Balíček, který vytváříme, používá pět uživatelských uzlů, které jsme vytvořili pro referenci. Projdeme si, co každý uzel dělá níže. Některé vlastní uzly jsou sestaveny z jiných uživatelských uzlů a grafy mají rozvržení, které je pro ostatní uživatele snadno pochopitelné.
Toto je jednoduchý balíček s pěti vlastními uzly. V níže uvedených krocích si stručně promluvíme o nastavení jednotlivých vlastních uzlů.
Toto je základní vlastní uzel, ze kterého vychází všechny ostatní uzly mapování. Jednoduše řečeno, uzel mapuje bod ze zdrojového povrchu souřadnice UV do umístění souřadnic cílového povrchu UV. Protože jsou body nejprimitivnější geometrií, ze které je vytvořena složitější geometrie, můžeme tuto logiku použít k mapování 2D a dokonce 3D geometrie z jednoho povrchu do druhého.
Logika rozšíření mapovaných bodů z 1D geometrie na 2D geometrii je zde jednoduše znázorněna pomocí polygonů. Všimněte si, že jsme do tohoto vlastního uzlu vnořili uzel PointsToSurface. Tímto způsobem lze namapovat body každého polygonu na povrch a poté polygon z těchto namapovaných bodů znovu vygenerovat. Zachováním správné datové struktury (seznam seznamů bodů) můžeme polygony ponechat oddělené, poté co jsou redukovány na sadu bodů.
Používá se zde stejná logika jako v uzlu PolygonToSurface. Místo mapování polygonálních bodů však mapujeme řídicí body křivky nurbs.
OffsetPointsToSurface
Tento uzel je trochu složitější, ale koncept je jednoduchý: Podobně jako uzel PointsToSurface tento uzel mapuje body z jednoho povrchu na druhý. Bere však v úvahu také body, které nejsou na původním zdrojovém povrchu, jejich vzdálenost k nejbližšímu parametru UV a mapuje tuto vzdálenost na normálu cílového povrchu v odpovídající souřadnici UV. To dává větší smysl při prohlížení vzorových souborů.
Toto je jednoduchý uzel, který vytvoří parametrický povrch k mapování ze zdrojové osnovy na vlnitý povrch v souborech příkladů.
Vzorové soubory naleznete v kořenové složce balíčku. Klikněte na kartu Package Manager > Instalované balíčky.
Vedle položky MapToSurface klikněte na nabídku se svislými tečkami > Zobrazit kořenový adresář.
Nyní otevřete složku extra, která obsahuje všechny soubory v balíčku, které nejsou vlastními uzly. Zde jsou uloženy vzorové soubory (pokud existují) pro balíčky aplikace Dynamo. Níže uvedené snímky obrazovky popisují koncepty demonstrované v jednotlivých vzorových souborech.
Tento vzorový soubor ukazuje, jak lze pomocí uzlu PointsToSurface panelizovat povrch na základě osnovy obdélníků. Mělo by vám to připadat povědomé, protože jsme viděli podobný pracovní postup v předchozí kapitole.
Pomocí podobného pracovního postupu se v tomto souboru cvičení zobrazí nastavení pro mapování kružnic (nebo polygonů reprezentujících kružnice) z jednoho povrchu na druhý. Používá se uzel PolygonsToSurface.
Tento vzorový soubor přidává určitou složitost při práci s uzlem NurbsCrvToSurface. Cílový povrch je odsazen o danou vzdálenost a křivka nurbs je mapována na původní cílový povrch a odsazený povrch. Od této chvíle jsou obě mapované křivky šablonovány, aby vytvořily povrch, který bude poté zesílen. Výsledné těleso má zaoblení, které je reprezentativní pro normály cílového povrchu.
Tento vzorový soubor ukazuje, jak mapovat skládaný objekt polysurface ze zdrojového povrchu na cílový povrch. Zdrojový a cílový povrch je pravoúhlý povrch pokrývající rastr a orotovaný povrch.
Zdrojový objekt polysurface mapovaný ze zdrojového povrchu na cílový povrch.
Protože vlastní uzly mohou mapovat různé typy křivek, odkazuje tento poslední soubor na soubor SVG exportovaný z aplikace Illustrator a mapuje importované křivky na cílový povrch.
Analýzou syntaxe souboru .svg se oblouky převedou z formátu .xml na objekty polycurve aplikace Dynamo.
Importované křivky jsou mapovány na cílový povrch. To nám umožňuje přímo navrhnout panelizaci (klikáním) v aplikaci Illustrator, importovat do aplikace Dynamo a použít na cílový povrch.
Aplikace Dynamo nabízí velké množství funkcí, které jsou k dispozici ihned po instalaci, a také spravuje rozsáhlou knihovnu balíčků, která může možnosti aplikace Dynamo podstatně rozšířit. Balíček je kolekce vlastních uzlů nebo dalších funkcí. Nástroj Dynamo Package Manager je portál pro komunitu, kde lze stáhnout všechny balíčky, které byly publikovány online. Tyto sady nástrojů jsou vyvinuty třetími stranami, aby bylo možné rozšířit základní funkce aplikace Dynamo, jsou přístupné všem a připraveny ke stažení kliknutím na tlačítko.
Projektu s otevřeným zdrojovým kódem, jako je Dynamo, tento druh zapojení komunity prospívá. Díky specializovaným vývojářům třetích stran je aplikace Dynamo schopna rozšířit svůj dosah na pracovní postupy napříč různými odvětvími. Z tohoto důvodu tým aplikace Dynamo vyvinul společné úsilí, aby zefektivnil vývoj a zveřejňování balíčků (které budou podrobněji popsány v následujících částech).
Nejjednodušším způsobem instalace balíčku je použití příkazu nabídky Balíčky v rozhraní aplikace Dynamo. Pojďme se do toho hned pustit a nainstalovat ho. V tomto rychlém příkladu nainstalujeme oblíbený balíček k vytvoření čtyřúhelníkových panelů v osnově.
V aplikaci Dynamo přejděte na kartu Balíčky > Package Manager.
Na panelu hledání vyhledejte „quads from rectangular grid“. Za chvíli by se měly zobrazit všechny balíčky, které odpovídají tomuto vyhledávacímu dotazu. Chceme vybrat první balíček s odpovídajícím názvem.
Kliknutím na tlačítko Instalovat přidejte tento balíček do knihovny a potvrďte jej. Hotovo!
Všimněte si, že v knihovně aplikace Dynamo je nyní k dispozici další skupina s názvem „buildz“. Tento název odkazuje na vývojáře balíčku a uživatelský uzel je umístěn do této skupiny. Můžete ji začít ihned používat.
Pomocí uzlu Code Block rychle definujte pravoúhlou osnovu, výsledek odešlete do uzlu Polygon.ByPoints a následně do uzlu Surface.ByPatch, čímž zobrazíte seznam právě vytvořených obdélníkových panelů.
Výše uvedený příklad se zaměřuje na balíček s jedním uživatelským uzlem, ale stejný postup se používá ke stahování balíčků s několika uživatelskými uzly a podpůrnými datovými soubory. Nyní si předvedeme složitější balíček: Dynamo Unfold.
Stejně jako ve výše uvedeném příkladu začněte výběrem položek Balíčky > Package Manager.
Tentokrát vyhledáme výraz DynamoUnfold. Jedná se o jedno slovo. Když se balíčky zobrazí, stáhněte je kliknutím na tlačítko Instalovat a přidejte balíček Dynamo Unfold do své knihovny aplikace Dynamo.
V knihovně aplikace Dynamo je k dispozici skupina aplikace DynamoUnfold s více kategoriemi a s vlastními uzly.
Nyní se podíváme na strukturu souborů balíčku.
Nejprve přejděte do nabídky Balíčky > Package Manager > Instalované balíčky.
Poté kliknutím na možnost Zobrazit kořenový adresář otevřete kořenovou složku pro tento balíček.
Tak se dostaneme do kořenového adresáře balíčku. Všimněte si, že máme tři složky a soubor.
Složka bin slouží k ukládání souborů .dll. Tento balíček Dynamo byl vyvinut pomocí možnosti Zero-Touch, proto jsou vlastní uzly uloženy v této složce.
Složka dyf slouží k umístění vlastních uzlů. Tento balíček nebyl vytvořen pomocí vlastních uzlů aplikace Dynamo, proto je tato složka pro tento balíček prázdná.
Složka extra obsahuje všechny další soubory včetně vzorových souborů.
Soubor pkg je základní textový soubor, který definuje nastavení balíčku. Můžeme ho zatím ignorovat.
Při otevření složky extra se zobrazí několik vzorových souborů, které byly staženy spolu s instalací. Ne všechny balíčky mají vzorové soubory, ale zde je můžete najít, pokud jsou součástí balíčku.
Otevřeme položku SphereUnfold.
Po otevření souboru a stisknutí tlačítka Spustit na řešiči máme rozvinutou kouli. Ukázkové soubory, jako jsou tyto, jsou užitečné při studiu práce s novým balíčkem Dynamo.
V nástroji Package Manager můžete procházet balíčky pomocí možností třídění a filtrování na kartě Vyhledat balíčky. K dispozici je několik filtrů pro hostitelský program, stav (nový, odmítnutý nebo neodmítnutý) a informace o tom, zda má balíček závislosti.
Seřazením balíčků můžete identifikovat vysoce hodnocené nebo nejčastěji stahované balíčky nebo vyhledat balíčky s nejnovějšími aktualizacemi.
Další podrobnosti o jednotlivých balíčcích můžete také zobrazit kliknutím na možnost Zobrazit podrobnosti. Tím se v nástroji Package Manager otevře postranní panel, kde najdete podrobné informace o balíčku, jako je správa verzí a závislosti, adresa URL webu nebo úložiště, informace o licenci atd.
Další způsob, jak objevovat balíčky aplikace Dynamo, je prozkoumat web nástroje nástroj Dynamo Package Manager. Zde najdete statistiky balíčků a žebříčky autorů. Soubory balíčku můžete také stáhnout z aplikace Dynamo Package Manager, ale přímo z aplikace Dynamo je proces jednodušší.
Pokud chcete zjistit, kde jsou uloženy soubory balíčku, klikněte v horní části navigace na možnosti Dynamo > Předvolby > Nastavení balíčku > Umístění souborů uzlů a balíčků, kde najdete aktuální adresář kořenové složky.
Ve výchozím nastavení jsou balíčky nainstalovány do umístění podobného této cestě: C:/Users/[uživatelské jméno]/AppData/Roaming/Dynamo/[verze aplikace Dynamo].
Komunita aplikace Dynamo neustále roste a vyvíjí se. Průběžně prohlížením aplikace Dynamo Package Manager najdete nové zajímavé informace. V následujících částech se podrobněji podíváme na balíčky, z pohledu koncového uživatele na tvorbu vlastního balíčku aplikace Dynamo.
Ačkoliv je aplikace Dynamo flexibilním prostředím, které je navrženo pro vestavění do celé řady programů, původně se jednalo o modul určený pro použití v aplikaci Revit. Vizuální program nabízí robustní možnosti pro informační model budovy (BIM). Aplikace Dynamo nabízí celou sadu uzlů navržených výhradně pro aplikaci Revit a také knihovny třetích stran od komunity AEC. Tato kapitola popisuje základy práce s modulem Dynamo pro aplikaci Revit.
Import pomocí funkce Zero-Touch odkazuje na metodu jednoduchého importu knihoven C# pomocí najetí kurzoru a kliknutí. Aplikace Dynamo přečte veřejné metody souboru .dll a převede je na uzly aplikace Dynamo. Pomocí funkce Zero-Touch můžete vyvinout vlastní uzly a balíčky a importovat externí knihovny do prostředí aplikace Dynamo.
Soubory .dll
Uzly aplikace Dynamo
Pomocí funkce Zero-Touch můžete skutečně importovat knihovnu, která nebyla nezbytně vyvinuta pro aplikaci Dynamo, a vytvořit sady nových uzlů. Aktuální funkce Zero-Touch znázorňuje multiplatformní povahu projektu aplikace Dynamo.
Tato část předvádí, jak pomocí funkce Zero-Touch importovat knihovnu třetích stran. Informace o vývoji vlastní knihovny funkce Zero-Touch naleznete na stránce Wiki k aplikaci Dynamo.
Balíčky funkce Zero-Touch jsou dobrým doplňkem k uživatelským vlastním uzlům. V tabulce níže je uvedeno několik balíčků, které používají knihovny C#. Podrobnější informace o balíčcích naleznete v části Balíčky v dodatku.
Logo/obrázek
Název
Tato případová studie popisuje, jak importovat AForge – externí knihovnu .dll. AForge je robustní knihovna, která nabízí celou řadu funkcí od zpracování obrázků po umělou inteligenci. Níže rozebereme několik cvičení týkající se zpracování obrázků, a přitom se budeme odkazovat na třídu k práci s obrázky v knihovně AForge.
Začněte stažením knihovny AForge. Na stránce stažení knihovny AForge vyberte položku [Download Installer] a po dokončení stahování proveďte instalaci knihovny.
V aplikaci Dynamo vytvořte nový soubor a vyberte možnost Soubor > Importovat knihovnu.
Dále vyhledejte soubor knihovny DLL.
V místním okně přejděte do složky Release instalačního programu AForge. Pravděpodobně se bude jednat o složku podobnou této: C:\Program Files (x86)\AForge.NET\Framework\Release.
AForge.Imaging.dll: Pro tuto případovou studii chceme použít pouze tento soubor z knihovny AForge. Vyberte tento soubor .dll a klikněte na Otevřít.
V aplikaci Dynamo byste měli vidět skupinu uzlů AForge přidanou do knihovny. Nyní máme přístup ke knihovně práce s obrázky AForge z našeho vizuálního programu.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Jakmile bude knihovna importována, začněte jednoduše tímto prvním cvičením (01-EdgeDetection.dyn). V něm provedeme základní zpracování obrázků s ukázkovým obrázkem a ukážeme si, jak fungují filtry obrázků AForge. Pomocí uzlu Watch Image zobrazíme výsledky a v aplikaci Dynamo použijeme filtry podobné těm, které jsou v aplikaci Photoshop.
Chcete-li importovat obrázek, přidejte na pracovní plochu uzel File Path a ve složce cvičení vyberte soubor „soapbubble.jpg“ (autor fotografie: flickr).
Uzel File Path jednoduše předá řetězec s cestou k vybranému obrázku. Dále je potřeba jej převést na použitelný soubor obrázku v aplikaci Dynamo.
Pomocí uzlu File From Path převeďte položku cesty k souboru na obrázek v prostředí aplikace Dynamo.
Připojte uzel File Path k uzlu File.FromPath.
K převodu tohoto souboru na obrázek použijte uzel Image.ReadFromFile.
Nakonec zobrazte výsledek. Přetáhněte uzel Watch Image na kreslicí plochu a připojte jej k uzlu Image.ReadFromFile. Ještě jsme nepoužili AForge, ale úspěšně jsme importovali obrázek do aplikace Dynamo.
Pod uzlem AForge.Imaging.AForge.Imaging.Filters (v navigační nabídce) si všimněte, že je k dispozici celá řada filtrů. Nyní pomocí jednoho z těchto filtrů odbarvíme obrázek podle hodnot prahů.
Umístěte tři posuvníky na kreslicí plochu, změňte jejich rozsahy na 0 až 1 a jejich hodnoty kroku na 0.01.
Přidejte na kreslicí plochu uzel Grayscale.Grayscale. Jedná se o filtr AForge, který na obrázek použije filtr odstínů šedé. Spojte tři posuvníky z kroku 1 ke vstupům cr, cg a cb. Změňte horní a dolní posuvník, tak aby měly hodnotu 1, a střední posuvník, tak aby měl hodnotu 0.
Aby bylo možné použít filtr odstínů šedi, je nutné provést s obrázkem určitou akci. K tomu používáme uzel BaseFilter.Apply. Připojte obrázek ke vstupu image a uzel Grayscale.Grayscale ke vstupu baseFilter.
Připojením k uzlu Watch Image získáte odbarvený obrázek.
Kontrola nad odbarvením obrázku se odvíjí od hodnot prahů pro červenou, zelenou a modrou. Tyto hodnoty jsou definovány vstupy uzlu Grayscale.Grayscale. Všimněte si, že obrázek vypadá značně ztlumeně – je to kvůli tomu, že hodnota zelené barvy je posuvníkem nastavena na 0.
Změňte horní a dolní posuvník, tak aby měly hodnotu 0, a střední posuvník, tak aby měl hodnotu 1. Tímto získáte čitelnější odbarvený obrázek.
Nyní na odbarvený obrázek použijeme další filtr. Odbarvený obrázek má určitý kontrast, čili nyní otestujeme detekci hran.
Na kreslicí plochu přidejte uzel SobelEdgeDetector.SobelEdgeDetector.
Připojte jej k uzlu BaseUsingCopyPartialFilter.Apply a připojte odbarvený obrázek ke vstupu image tohoto uzlu.
Sobelův detektor hran zvýraznil hrany v novém obrázku.
Při přiblížení detektor hran zvýraznil obrysy bublin pomocí pixelů. Knihovna AForge obsahuje nástroje, které umožňují vytvořit pomocí těchto výsledků geometrii aplikace Dynamo. Tato funkce je rozebrána v následujícím cvičení.
Nyní, když jste se seznámili s určitým základním zpracováním obrázků, můžete pomocí obrázku řídit geometrii aplikace Dynamo. Na základní úrovni se v tomto cvičení snažíme provést Aktivní trasování obrázku pomocí příkazů AForge a Dynamo. Budeme se držet jednoduchého postupu a extrahujeme obdélníky z referenčního obrázku, v knihovně AForge jsou však k dispozici i nástroje pro složitější operace. Budeme pracovat se souborem 02-RectangleCreation.dyn ze stažených souborů cvičení.
Pomocí uzlu File Path přejděte do složky cvičení a k souboru grid.jpg.
Propojte zbývající řadu uzlů výše, tak abyste odhalili parametrickou osnovu.
V následujícím kroku je potřeba se odkázat na bílé čtverce v obrázku, které se poté převedou ve skutečnou geometrii aplikace Dynamo. Knihovna AForge má mnoho výkonných nástrojů počítačového vidění, přičemž zde se použije zvlášť důležitý nástroj zvaný BlobCounter.
Po přidání objektu BlobCounter na kreslicí plochu je třeba zpracovat obrázek (podobně jako u nástroje BaseFilter.Apply v předchozím cvičení).
Uzel „Process Image“ však bohužel není ihned viditelný v knihovně aplikace Dynamo. Je tomu tak proto, že funkce nemusí být ve zdrojovém kódu AForge viditelná. Tento problém vyřešíte prostřednictvím náhradního řešení.
Přidejte na kreslicí plochu uzel jazyka Python a přidejte do něj následující kód. Tento kód importuje knihovnu AForge a poté zpracuje importovaný obrázek.
Pokud připojíte výstup obrázku ke vstupu uzlu Python, získáte z uzlu Python výsledek AForge.Imaging.BlobCounter.
Následující postup ukáže několik triků, které znázorní provázanost s rozhraním API AForge Imaging. K práci v aplikaci Dynamo není nutné se naučit úplně vše. Jedná se spíše o demonstraci práce s externími knihovnami v rámci flexibility prostředí aplikace Dynamo.
Připojte výstup skriptu v jazyce Python k uzlu BlobCounterBase.GetObjectRectangles. Tímto se načtou objekty v obrázku podle prahové hodnoty a extrahují se kvantifikované obdélníky z pixelového prostoru.
Přidáním dalšího uzlu Python připojte objekt GetObjectRectangles a zadejte níže uvedený kód. Tím se vytvoří uspořádaný seznam objektů Dynamo.
Transponujte výstup uzlu Python z předchozího kroku. Tím vzniknou 4 seznamy, přičemž každý z nich představuje hodnoty X, Y, šířky a výšky každého obdélníku.
Pomocí bloku kódu uspořádejte data do struktury, která odpovídá uzlu Rectangle.ByCornerPoints (kód níže).
Nyní je vidět pole obdélníků představujících bílé čtverce v obrázku. Pomocí programování jsme právě provedli (zhruba) podobnou věc jako aktivní sledování v aplikaci Illustrator.
Stále však je potřeba provést začištění. Po přiblížení je vidět určité množství malých nežádoucích obdélníků.
Dále napíšeme kódy, abychom se zbavili nežádoucích obdélníků.
Vložte uzel jazyka Python mezi uzel GetObjectRectangles a jiný uzel jazyka Python. Kód uzlu je uveden níže a odstraní všechny obdélníky, které jsou menší než daná velikost.
Jakmile budou přebytečné obdélníky pryč, zkusíme jen tak pro radost vytvořit z těchto obdélníků jeden povrch a vysunout je o určitou vzdálenost podle jejich ploch.
Nakonec změňte vstup both_sides na hodnotu false. Tím získáte vysunutí v jednom směru. Použijte trochu pryskyřice a máte perfektní stůl.
Toto jsou základní příklady, zde popsané koncepty však je možné přetvořit ve skvělé reálné projekty. Počítačové vidění je možné použít v celé řadě procesů. Mezi tyto patří například: čtečky čárových kódů, spojování perspektivy, mapování promítání a rozšířená realita. Další rozšířená témata s funkcí AForge související s tímto cvičením naleznete v tomto článku.
Aplikace Revit je prostředí obsahující velké množství dat. Díky tomu máte k dispozici celou řadu možností, které obnášejí více než jen najetí kurzorem a kliknutí. Při provádění parametrických operací můžete zadat dotaz do databáze aplikace Revit a dynamicky propojit prvky aplikace Revit s geometrií aplikace Dynamo.
Knihovna aplikace Revit v uživatelském rozhraní nabízí kategorii Selection (Výběr), která umožňuje výběr geometrie několika způsoby.
Chcete-li prvky aplikace Revit správně vybírat, je důležité plně pochopit hierarchii prvků aplikace Revit. Chcete vybrat všechny stěny v projektu? Vyberte je podle kategorie. Chcete vybrat každou židli Eames v moderní hale z poloviny století? Vyberte podle rodiny.
Zobrazme si stručný přehled hierarchie aplikace Revit.
Pamatujete si taxonomii z biologie? Říše, kmen, třída, řád, čeleď, rod, druh? Prvky aplikace Revit jsou uspořádány do kategorií podobným způsobem. Na základní úrovni je možné hierarchii aplikace Revit rozdělit na kategorie, rodiny, typy* a instance. Instance je samostatný prvek modelu (s jedinečným ID), zatímco kategorie definuje obecnou skupinu (například „stěny“ nebo „podlahy“). Pokud je databáze aplikace Revit tímto způsobem uspořádána, můžete vybrat jeden prvek a vybrat všechny podobné prvky podle určené úrovně hierarchie.
*Typy v aplikaci Revit jsou definovány jinak než typy u programování. Typ v aplikaci Revit odkazuje na větev hierarchie, nikoli na „datový typ“.
Tři níže uvedené obrázky rozebírají hlavní kategorie výběru prvků aplikace Revit v aplikaci Dynamo. Jsou to skvělé nástroje použitelné v kombinaci, a některé z nich budou rozebrány během následujících cvičení.
Najetí kurzorem a kliknutí je nejjednodušší způsob, jak přímo vybrat prvek aplikace Revit. Můžete vybrat prvek úplného modelu nebo součásti jeho topologie (jako je plocha nebo hrana). Prvek zůstane dynamicky propojený s objektem aplikace Revit, čili jakmile u souboru aplikace Revit dojde k aktualizaci umístění nebo parametrů, odkazovaný prvek aplikace Dynamo se v grafu aktualizuje.
Rozevírací nabídky slouží k tvorbě seznamu všech dostupných prvků v projektu aplikace Revit. Pomocí tohoto nástroje můžete odkazovat na prvky aplikace Revit, které nemusí být v pohledu viditelné. Jedná se o skvělý nástroj k dotazování existujících prvků nebo tvorbě nových v projektu aplikace Revit nebo v editoru rodin.
Prvek aplikace Revit můžete také vybrat podle konkrétních vrstev v hierarchii aplikace Revit. Toto je účinná možnost přizpůsobení velkých polí dat při přípravě dokumentace nebo generativních instancí a přizpůsobení.
Se třemi výše zmíněnými obrázky stále na paměti se pusťte do cvičení, které vybere prvky ze základního projektu aplikace Revit při přípravě pro parametrickou aplikaci, kterou vytvoříte ve zbývajících částech této kapitoly.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V tomto vzorovém souboru aplikace Revit jsou k dispozici tři typy prvků jednoduché budovy. Tento soubor bude sloužit jako příklad výběru prvků aplikace Revit v rámci kontextu hierarchie aplikace Revit.
Objem budovy
Nosníky (rámová konstrukce)
Příhradové nosníky (adaptivní komponenty)
Jaké závěry je možné vyvodit z prvků aktuálně zobrazených v pohledu projektu aplikace Revit? A jak hluboko do hierarchie bude třeba jít, aby bylo možné vybrat vhodné prvky? Tyto problémy se samozřejmě stanou mnohem složitějšími, pokud pracujete na velkých projektech. K dispozici je mnoho možností: prvky je možné vybrat podle kategorií, úrovní, rodin, instancí atd.
Vzhledem k tomu, že nyní pracujete se základním nastavením, vyberte objem budovy kliknutím na položku Objem v rozevíracím uzlu Categories. Tyto položky naleznete na kartě Revit > Výběr.
Výstup kategorie Objem je pouze samotná kategorie. Je třeba vybrat prvky. K tomuto účelu použijte uzel All Elements of Category.
V tuto chvíli si všimněte, že v aplikaci Dynamo není zobrazena žádná geometrie. Vybrali jste prvek aplikace Revit, ale nepřevedli jste jej na geometrii aplikace Dynamo. Toto rozdělení je důležité. Pokud byste chtěli vybrat velký počet prvků, určitě byste nechtěli zobrazit všechny jejich náhledy v aplikaci Dynamo, protože tím by se vše zpomalilo. Aplikace Dynamo je nástroj ke správě projektu aplikace Revit bez nutnosti provádění operací geometrie, tomuto je věnována následující část této kapitoly.
V tomto případě pracujete s jednoduchou geometrií, čili je užitečné zobrazit v náhledu aplikace Dynamo geometrii. Položka „BldgMass“ ve výše zobrazeném uzlu Watch má vedle sebe zelené číslo. To představuje ID prvku a sděluje, že se zabýváme prvkem aplikace Revit, nikoli geometrií aplikace Dynamo. Dalším krokem je převedení tohoto prvku aplikace Revit na geometrii v aplikaci Dynamo.
Pomocí uzlu Element.Faces získáme seznam povrchů představujících každou plochu objemu aplikace Revit. Nyní je geometrie zobrazena ve výřezu aplikace Dynamo a je možné začít s odkazováním plochy pro parametrické operace.
Zde je alternativní metoda. Tentokrát se vyhneme výběru přes hierarchii aplikace Revit (All Elements of Category) a budeme vybírat, aby byla explicitně vybrána geometrie v aplikaci Revit.
V uzlu Select Model Element klikněte na tlačítko *Vybrat *(nebo Změnit). Ve výřezu aplikace Revit vyberte požadovaný prvek. V tomto případě vybíráme objem budovy.
Místo uzlu Element.Faces můžete k výběru plného objemu jako jedné geometrie tělesa použít uzel Element.Geometry. Tím vyberete veškerou geometrii obsaženou v daném objemu.
Pomocí uzlu Geometry.Explode můžete zase získat zpět seznam povrchů. Tyto dva uzly fungují stejně jako uzel Element.Faces, ale nabízejí alternativní možnosti, jak proniknout do geometrie prvku aplikace Revit.
Pomocí některých základních operací se seznamem se můžete dotazovat na určitou plochu.
Nejprve odešlete dříve vybrané prvky do uzlu Element.Faces.
Uzel List.Count následně zobrazí, že pracujete s 23 povrchy v objemu.
Na základě tohoto čísla změňte hodnotu Maximum u *celočíselného posuvníku *na 22.
Pomocí uzlu List.GetItemAtIndex zadejte jako vstupy seznamy a *celočíselný posuvník *pro vstup index. Při procházení vybraných prvků se zastavte na indexu 9 a izolujte hlavní fasádu od příhradových nosníků.
Předchozí krok byl trochu těžkopádný. Činnost tohoto kroku je možné provést mnohem rychleji pomocí uzlu Select Face. Můžete tak izolovat plochu, která není samotným prvkem v projektu aplikace Revit. Stejná interakce platí i pro uzel Select Model Element, s tím rozdílem, že se vybírá povrch, nikoli celý prvek.
Řekněme, že chcete izolovat stěny hlavní fasády budovy. Toho můžete dosáhnout pomocí uzlu Select Faces. Klikněte na tlačítko Vybrat a poté v aplikaci Revit vyberte čtyři hlavní fasády.
Po výběru čtyř stěn se ujistěte, že jste v aplikaci Revit kliknuli na tlačítko Dokončit.
Plochy jsou nyní importovány do aplikace Dynamo jako povrchy.
Nyní se zaměřme na nosníky nad atriem.
Pomocí uzlu Select Model Element vyberte jeden z nosníků.
Připojte prvek nosníku k uzlu Element.Geometry a nosník se zobrazí ve výřezu aplikace Dynamo.
Geometrii můžete přiblížit pomocí uzlu Watch3D (pokud nosník není v uzlu Watch 3D zobrazen, klikněte pravým tlačítkem a klikněte na položku Přizpůsobit oknu).
Otázka, která se může často vyskytovat u pracovních postupů aplikace Revit/Dynamo: Jak mohu vybrat jeden prvek a získat všechny podobné prvky? Vzhledem k tomu, že vybraný prvek aplikace Revit obsahuje všechny hierarchické informace, můžete zadat dotaz na typ rodiny a vybrat všechny prvky tohoto typu.
Připojte prvek nosníku k uzlu Element.ElementType.
Uzel Watch ukazuje, že výstupem je nyní symbol rodiny, nikoli prvek aplikace Revit.
Element.ElementType je jednoduchý dotaz, čili je možné jej provést stejně snadno i v bloku kódu pomocí výrazu
x.ElementType;
a získat tak stejné výsledky.
K výběru zbývajících nosníků se použije uzel All Elements of Family Type.
Uzel Watch zobrazuje, že je vybráno pět prvků aplikace Revit.
Všech pět prvků je také možné převést na geometrii aplikace Dynamo.
Co kdybyste pracovali s 500 nosníky? Převod všech těchto prvků na geometrii aplikace Dynamo by byl velmi pomalý. Pokud aplikaci Dynamo trvá výpočet uzlů dlouho, bude možná užitečné využít funkci „zmrazení“ uzlu, která pozastaví provádění operací aplikace Revit, zatímco vyvíjíte graf. Další informace o zmrazení uzlů najdete v části Zmrazení v kapitole Tělesa.
V každém případě, pokud chcete importovat 500 nosníků, potřebujete k provedení požadované parametrické operace všechny povrchy? Nebo je možné extrahovat z nosníků základní informace a provést generativní úlohy u základní geometrie? Tuto otázku mějte během procházení této kapitoly na paměti. Podívejme se dále například na systém příhradových nosníků
Pomocí stejného grafu uzlů vyberte prvek příhradového nosníku místo prvku nosníku. Ještě než to uděláte, odstraňte uzel Element.Geometry z předchozího kroku.
Dále jsme připraveni extrahovat některé základní informace z typu rodiny příhradových nosníků.
V uzlu Watch je vidět, že výstupem je seznam adaptivních komponent vybraných v aplikaci Revit. Pokud chcete extrahovat základní informace, začněte adaptivními body.
Připojte uzel All Elements of Family Type k uzlu AdaptiveComponent.Location. Tím se zobrazí seznam seznamů, z nichž každý má tři body představující umístění adaptivních bodů.
Připojením uzlu Polygon.ByPoints pak vrátíte objekt PolyCurve. Ve výřezu aplikace Dynamo je to vidět. Touto metodou jste vizualizovali geometrii jednoho prvku a abstrahovali geometrii zbývajícího pole prvků (které mohlo být početně větší než v tomto příkladu).
Tip: Pokud v aplikaci Dynamo kliknete na zelené číslo u prvku aplikace Revit, výřez aplikace Revit se na tento prvek přiblíží.
Do hierarchie bude nyní přidána další vrstva. Pokud vezmeme sadu karet z původního příkladu a vytvoříme krabici, která obsahuje více sad, krabice nyní představuje seznam sad a každá sada představuje seznam karet. Tomuto se říká seznam seznamů. Podívejte se na obrázek níže, představující analogii pro tuto část: na obrázku vidíme seznam sloupečků mincí a každý sloupeček obsahuje seznam mincí.
Fotografii pořídil uživatel Dori.
Jaké dotazy můžeme provádět u seznamu seznamů? Tím získáte přístup k existujícím vlastnostem.
Počet typů mincí? 2.
Hodnoty typu mincí? 0,01 a 0,25 USD.
Materiál čtvrťáků? 75 % měď a 25 % nikl.
Materiál centů? 97,5 % zinek a 2,5 % měď.
Jaké akce můžeme provádět u seznamu seznamů? Tímto se změní seznam seznamů podle dané operace.
Výběr konkrétního sloupku čtvrťáků nebo centů.
Výběr konkrétního čtvrťáku nebo centu.
Přeuspořádání sloupků čtvrťáků a centů
Sloučení sloupků dohromady.
I zde aplikace Dynamo obsahuje analogický uzel pro každou z výše uvedených operací. Vzhledem k tomu, že pracujeme s abstraktními daty a ne s fyzickými objekty, potřebujeme sadu pravidel, která řídí pohyb nahoru a dolů v hierarchii dat.
Při práci se seznamy seznamů jsou data vrstvená a složitá, díky tomu však nastává příležitost provést skvělé parametrické operace. Níže uvedené lekce podrobně rozebírají základy a popisují několik dalších operací.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Základní koncepce této části: aplikace Dynamo zpracovává seznamy jako objekty samy o sobě. Tato hierarchie shora dolů se vyvíjí s ohledem na objektově orientované programování. Místo výběru dílčích prvků pomocí příkazu, jako je List.GetItemAtIndex, vybere aplikace Dynamo tento index v hlavním seznamu v datové struktuře. A tato položka může být i dalším seznamem. Následuje rozbor pomocí vzorového obrázku:
Pomocí bloku kódu jsme definovali dva rozsahy:
0..2; 0..3;
.Tyto rozsahy jsou připojeny k uzlu Point.ByCoordinates s vázáním nastaveným na hodnotu „Vektorový součin“. Tím se vytvoří osnova bodů a také se na výstupu vrátí seznam seznamů.
Všimněte si, že uzel Watch předává 3 seznamy se 4 položkami v každém seznamu.
Při použití funkce List.GetItemAtIndex s indexem 0 aplikace Dynamo vybere první seznam a veškerý jeho obsah. Jiné programy mohou vybrat první položku každého seznamu v datové struktuře, aplikace Dynamo však při práci s daty využívá hierarchii shora dolů.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Metoda Flatten odebere všechny vrstvy dat z datové struktury. Toto je užitečné, pokud hierarchie dat nejsou pro vaši operaci podstatné, může to však představovat riziko, protože dojde k odebrání informací. Následující příklad znázorňuje výsledek vyrovnání seznamu dat.
Zadáním jednoho řádku kódu definujte rozsah v bloku kódu:
-250..-150..#4;
Připojením bloku kódu ke vstupu x a y uzlu Point.ByCoordinates nastavíme vázání na hodnotu „Vektorový součin“, abychom získali osnovu bodů.
Uzel Watch zobrazuje, že je k dispozici seznam seznamů.
Uzel PolyCurve.ByPoints bude odkazovat na každý seznam a vytvoří příslušný objekt polycurve. Všimněte si, že v náhledu aplikace Dynamo se v osnově nachází čtyři objekty polycurve představující jednotlivé řádky.
Vložením vyrovnání před uzel objektu polycurve byl vytvořen jeden seznam pro všechny body. Uzel PolyCurve.ByPoints odkazuje na seznam k vytvoření jedné křivky a vzhledem k tomu, že všechny body jsou v jednom seznamu, vznikne jeden klikatý objekt polycurve, který prochází celým seznamem bodů.
K dispozici jsou také možnosti k vyrovnání izolovaných vrstev dat. Pomocí uzlu List.Flatten můžete definovat nastavený počet vrstev dat, které mají být vyrovnány z horní části hierarchie. Jedná se o skutečně užitečný nástroj, pokud máte potíže se složitými datovými strukturami, které nejsou nezbytně důležité pro váš pracovní postup. Další možností je použít uzel vyrovnání jako funkci v uzlu List.Map. Další informace o uzlu List.Map naleznete níže.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Při parametrickém modelování se také někdy stane, že budete chtít upravit datovou strukturu existujícího seznamu. K tomuto účelu existuje také mnoho uzlů a Chop je tou nejzákladnější verzí. Pomocí uzlu Chop je možné rozdělit seznam na podseznamy s nastaveným počtem položek.
Příkaz Rozdělit rozdělí seznamy podle dané délky seznamu. V některých případech je příkaz Rozdělit opak příkazu Vyrovnat: místo odebrání datové struktury se přidají nové vrstvy. Toto je užitečný nástroj u geometrických operací, viz příklad níže.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Metoda List.Map/Combine použije funkci sady na vstupní seznam, ale o jeden krok níže v hierarchii. Kombinace jsou stejné jako u map, kromě toho, že mohou mít více vstupů odpovídajících zadání dané funkce.
Poznámka: Toto cvičení bylo vytvořeno pomocí předchozí verze aplikace Dynamo. Většina funkčnosti metody List.Map byla vyřešena přidáním funkce List@Level . Další informace naleznete v části List@Level níže.
V rámci rychlého úvodu si zopakujme uzel List.Count z předchozí části.
Uzel List.Count spočítá všechny položky v seznamu. Pomocí tohoto nástroje znázorníme, jak funguje metoda List.Map.
Vložte dva řádky kódu do bloku kódu:
-50..50..#Nx; -50..50..#Ny;
Blok kódu vytvoří po provedení zadání do tohoto kódu dva vstupy pro proměnné Nx a Ny.
Pomocí dvou celočíselných posuvníků definujte hodnoty Nx a Ny jejich připojením k bloku kódu.
Připojte každý řádek bloku kódu do příslušných vstupů X a Y uzlu Point.ByCoordinates. Klikněte pravým tlačítkem na uzel, vyberte položku „Vázání“ a vyberte položku „Vektorový součin“. Tím se vytvoří osnova bodů. Vzhledem k tomu, že jsme definovali rozsah od -50 do 50, bude se rozsah pohybovat ve výchozí osnově aplikace Dynamo.
Uzel Watch zobrazí vytvořené body. Všimněte si datové struktury. Vytvořili jsme seznam seznamů. Každý seznam představuje řádek bodů v osnově.
Připojte uzel List.Count k výstupu uzlu Watch z předchozího kroku.
Připojte uzel Watch k výstupu uzlu List.Count.
Všimněte si, že uzel List.Count vrací hodnotu 5. Jedná se o hodnotu rovnou proměnné "Nx", jak je definována v bloku kódu. Jak je to možné?
Nejprve uzel Point.ByCoordinates použije jako primární vstup pro tvorbu seznamů vstup „x“. Pokud má proměnná Nx hodnotu 5 a proměnná Ny hodnotu 3, vznikne seznam 5 seznamů a každý z těch seznamů bude mít 3 položky.
Vzhledem k tomu, že aplikace Dynamo zpracovává seznamy jako objekty samy o sobě, na hlavní seznam v hierarchii se použije uzel List.Count. Výsledkem je hodnota 5, nebo počet seznamů v hlavním seznamu.
Pomocí uzlu List.Map bude proveden krok dolů v hierarchii a na této úrovni se provede „funkce“.
Všimněte si, že uzel List.Count nemá žádný vstup. Používá se jako funkce, takže uzel List.Count se použije na každý jednotlivý seznam, o jeden krok níže v hierarchii. Prázdný vstup uzlu List.Count odpovídá zadání seznamu uzlu List.Map.
Výsledky metody List.Count nyní obsahují 5 položek, z nichž každá má hodnotu 3. Toto představuje délku každého dílčího seznamu.
Poznámka: Toto cvičení bylo vytvořeno pomocí předchozí verze aplikace Dynamo. Většina funkčnosti metody List.Combine byla vyřešena přidáním funkce List@Level. Další informace naleznete v části List@Level níže.
V tomto cvičení použijeme funkci List.Combine a ukážeme si, jak ji lze použít k aplikaci funkce na samostatné seznamy objektů.
Začněte nastavením dvou seznamů bodů.
Pomocí uzlu Sequence vygenerujte 10 hodnot, každou s přírůstkem 10 kroků.
Výsledek připojte ke vstupu x uzlu Point.ByCoordinates. Tím se v aplikaci Dynamo vytvoří seznam bodů.
Přidejte do pracovního prostoru druhý uzel Point.ByCoordinates, použijte stejný výstup Sequence jako jeho vstup x, ale jako vstup y použijte uzel Integer Slider, který nastavte na hodnotu 31 (může to být libovolná hodnota, pokud se nepřekrývá s první sadou bodů), aby se obě sady bodů navzájem nepřekrývaly.
Dále pomocí uzlu List.Combine použijeme funkci na objekty ve 2 samostatných seznamech. V tomto případě se bude jednat o jednoduchou funkci kreslení čar.
Přidejte do pracovního prostoru uzel List.Combine a připojte 2 sady bodů jako jeho vstupy list0 a list1.
Jako vstupní funkci uzlu List.Combine použijte uzel Line.ByStartPointEndPoint.
Po dokončení jsou 2 sady bodů komprimovány/spárovány dohromady pomocí funkce Line.ByStartPointEndPoint a vrátí 10 řádků v aplikaci Dynamo.
Další příklad použití uzlu List.Combine naleznete ve cvičení v části N-rozměrné seznamy.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Funkce List@Level, která má přednost před funkcí List.Map, umožňuje přímo na vstupním portu uzlu vybrat úroveň seznamu, se kterou chcete pracovat. Tuto funkci je možné použít na libovolný příchozí vstup uzlu a umožní přístup k úrovním seznamů rychleji a snadněji než jiné metody. Stačí jen uzlu určit úroveň seznamu, kterou chcete použít jako vstup, a uzel pak provede vše ostatní.
V tomto cvičení použijeme funkci List@Level k vyčlenění určité úrovně dat.
Začneme jednoduchou 3D osnovou bodů.
Vzhledem k tomu, že je osnova vytvořena pomocí rozsahu hodnot X, Y a Z, víme, že data jsou strukturována do tří vrstev: seznam X, seznam Y a seznam Z.
Tyto vrstvy existují v různých úrovních. Úrovně jsou značeny v dolní části bubliny náhledu. Sloupce úrovní seznamu odpovídají výše uvedeným datům seznamu, aby se snadněji rozpoznalo, na které úrovni se pracuje.
Úrovně seznamu jsou uspořádány v obráceném pořadí, čili data nejnižší úrovně jsou vždy v úrovni „L1“. Toto vám pomůže zajistit, aby grafy fungovaly podle plánu, i když se něco v předcházejícím dění změní.
Chcete-li použít funkci List@Level, klikněte na tlačítko „>“. V této nabídce se zobrazí dvě zaškrtávací políčka.
Použít úrovně – Povolí funkci List@Level. Po kliknutí na tuto možnost budete moci kliknout na požadovanou úroveň seznamu a vybrat vstupní úrovně seznamu, které má uzel použít. Pomocí této nabídky můžete rychle vyzkoušet různé možnosti úrovně kliknutím nahoru nebo dolů.
Zachovat strukturu seznamu – pokud je tato možnost povolena, bude možné zachovat strukturu úrovně tohoto vstupu. Někdy můžete mít data záměrně uspořádaná do dílčích seznamů. Zaškrtnutím této možnosti můžete organizaci seznamu ponechat nedotčenou a neztratit žádné informace.
Pomocí naší jednoduché 3D osnovy je možné získat přístup a vizualizovat strukturu seznamu přepnutím mezi úrovněmi seznamu. Každá kombinace úrovně seznamu a indexu vrátí jinou sadu bodů z naší původní 3D sady.
Možnost „@L2“ v aplikaci DesignScript umožňuje vybrat pouze seznam na úrovni 2. Seznam na úrovni 2 s indexem 0 obsahuje pouze první sadu bodů Y, které vracejí pouze osnovu XZ.
Pokud se filtr úrovně změní na možnost „L1“, je možné zobrazit vše v první úrovni seznamu. Seznam na úrovni 1 s indexem 0 obsahuje všechny 3D body ve vyrovnaném seznamu.
Pokud se pokusíte o totéž u možnosti „L3“, zobrazí se pouze body třetí úrovně seznamu. Seznam na úrovni 2 s indexem 0 obsahuje pouze první sadu bodů Z, které vracejí pouze osnovu XY.
Pokud se pokusíte o totéž u možnosti „L4“, zobrazí se pouze body třetí úrovně seznamu. Seznam na úrovni 4 s indexem 0 obsahuje pouze první sadu bodů X, které vracejí pouze osnovu YZ.
Ačkoliv tento konkrétní příklad je také možné vytvořit pomocí metody List.Map, metoda List@Level výrazně zjednodušuje interakci a usnadňuje přístup k datům uzlu. Níže naleznete porovnání metod List.Map a List@Level:
Ačkoliv obě metody nabízí přístup ke stejným bodům, metoda List@Level umožňuje snadné přepínání mezi hladinami dat v rámci jednoho uzlu.
K získání přístupu k osnově bodů pomocí metody List.Map je kromě uzlu List.Map potřeba i uzel List.GetItemAtIndex. Pro každou úroveň seznamu, u které pokročíme na nižší úroveň, je třeba použít další uzel List.Map. Podle složitosti seznamů může být vyžadováno přidání značného množství uzlů List.Map do grafu, abyste získali přístup ke správné úrovni informací.
V tomto příkladu uzel List.GetItemAtIndex s uzlem List.Map vrátí stejnou sadu bodů se stejnou strukturou seznamu, jako když je v uzlu List.GetItemAtIndex vybrána možnost „@L3“.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Transpozice je základní funkcí při práci se seznamy seznamů. Stejně jako v tabulkových programech i zde transpozice převrátí sloupce a řádky datové struktury. Níže je znázorněn příklad se základní maticí a v následující části je znázorněno, jak je možné pomocí transpozice tvořit geometrické vztahy.
Nyní odstraňte uzly List.Count z předchozího cvičení, přesuňte se ke geometrii a prohlédněte si, jak jsou data strukturována.
Připojte uzel PolyCurve.ByPoints k výstupu uzlu Watch z uzlu Point.ByCoordinates.
Výstup zobrazí 5 objektů polycurve a v náhledu aplikace Dynamo se zobrazí tyto objekty křivek. Uzel aplikace Dynamo hledá seznam bodů (nebo seznam seznamů bodů v tomto případě) a vytvoří z nich jeden objekt PolyCurve. Každý seznam byl v podstatě převeden na křivku v datové struktuře.
Uzel List.Transpose zamění všechny položky se všemi seznamy v seznamu seznamů. Zní to složitě, ale je to stejná logika jako transpozice v aplikaci Microsoft Excel: záměna sloupců a řádků v datové struktuře.
Všimněte si abstraktního výsledku: transpozice změnila strukturu seznamu z 5 seznamů o 3 položkách na 3 seznamy o 5 položkách.
Všimněte si geometrického výsledku: pomocí uzlu PolyCurve.ByPoints získáte 3 objekty polycurve v kolmém směru od původních křivek.
Blok kódu využívá znaky „[]“ jako zkratku k definování seznamu. Jedná se o mnohem rychlejší a plynulejší způsob tvorby seznamů než uzel List.Create. Blok kódu je podrobněji popsán v části Bloky kódů a jazyk DesignScript. V níže uvedeném obrázku můžete vidět, jak je možné definovat seznam s více výrazy pomocí bloku kódu.
Blok kódu používá znaky „[]“ jako rychlý a snadný způsob výběru konkrétních položek ze složité datové struktury. Bloky kódu jsou podrobněji popsány v části Bloky kódů a jazyk DesignScript. V níže uvedeném obrázku můžete vidět, jak je možné dotazovat seznam s více datovými typy pomocí bloku kódu.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Toto cvičení využívá část logiky stanovené v předchozím cvičení k úpravě povrchu. Cíl je intuitivní, nyní se však více zapojí navigace v datové struktuře. Chceme rozdělit povrch přesunem řídicího bodu.
Začněte s výše uvedeným řetězcem uzlů. Vytváříme základní povrch, který pokrývá výchozí osnovu aplikace Dynamo.
Pomocí bloku kódu vložte tyto dva řádky kódu a připojte je ke vstupům u a v uzlu Surface.PointAtParameter:
-50..50..#3;
-50..50..#5;
Zkontrolujte, zda je vázání uzlu Surface.PointAtParameter nastaveno na možnost „Vektorový součin“.
Uzel Watch zobrazuje, že byl vrácen seznam 3 seznamů, z nichž každý obsahuje 5 položek.
V tomto kroku je třeba dotazovat středový bod v osnově, kterou jste vytvořili. Chcete-li to provést, vyberte prostřední bod prostředního seznamu. To dává smysl, že?
Chcete-li potvrdit, že se jedná o správný bod, můžete toho dosáhnout kliknutím na položky uzlu Watch.
Pomocí bloku kódu zapište základní řádek kódu k dotazování se na seznam seznamů:
points[1][2];
Pomocí funkce Geometry.Translate přesuňte vybraný bod nahoru ve směru osy Z o 20 jednotek.
Nyní vybereme také prostřední řádek bodů u uzlu List.GetItemAtIndex. Poznámka: Podobně jako v předchozím kroku můžete také zadat dotaz na seznam pomocí bloku kódu s řádkem
points[1];
.
Zatím jsme se úspěšně dotázali na střed a posunuli jej nahoru. Nyní je potřeba vložit tento přesunutý bod zpět do původní datové struktury.
Nejprve je třeba nahradit položku seznamu, kterou jsme izolovali v předchozím kroku.
Pomocí metody List.ReplaceItemAtIndex nahraďte prostřední položku a použijte index 2 s náhradní položkou připojenou k přesunutému bodu (Geometry.Translate).
Výstup zobrazí, že přesunutý bod byl vložen přes vstup do prostřední položky seznamu.
Nyní, když byl seznam upraven, je třeba vložit tento seznam zpět do původní datové struktury: seznamu seznamů.
Podle stejné logiky nahraďte pomocí metody List.ReplaceItemAtIndex prostřední seznam upraveným seznamem.
Všimněte si, že bloky kódu definující index těchto dvou uzlů jsou 1 a 2, což odpovídá původnímu dotazu z bloku kódu (points[1][2]).
Po výběru seznamu na indexu 1 se v náhledu aplikace Dynamo zvýrazní datová struktura. Přesunutý bod tak byl úspěšně sloučen s původní datovou strukturou.
Z této sady bodů je možné vytvořit povrch mnoha způsoby. V tomto případě se vytvoří povrch šablonováním křivek dohromady.
Vytvořte uzel NurbsCurve.ByPoints a připojením nové datové struktury vytvořte tři křivky nurbs.
Připojte uzel Surface.ByLoft k výstupu uzlu NurbsCurve.ByPoints. Nyní máme upravený povrch. Je možné změnit původní hodnotu Z geometrie. Proveďte posun a sledujte, jak se geometrie aktualizuje!
Úpravy parametrů dokumentace probíhají podle toho, jak je vysvětleno v předchozích částech. V této části se podíváme na parametry úprav, které nemají vliv na geometrické vlastnosti prvků, ale místo toho si připravíme soubor aplikace Revit pro dokumentaci.
V níže uvedeném cvičení použijeme základní odchylku od uzlu roviny k vytvoření výkresu aplikace Revit pro dokumentaci. Každý panel na parametricky definované střešní konstrukci má jinou hodnotu odchylky. Chceme vyřadit rozsah hodnot pomocí barvy a naplánováním adaptivních bodů, které předáme konzultantovi fasád, inženýrovi nebo dodavateli.
Odchylka od uzlu roviny vypočítá vzdálenost, o kterou se sada čtyř bodů liší od roviny optimálního proložení mezi nimi. Je to rychlý a snadný způsob, jak studovat proveditelnost stavby.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Začněte se souborem aplikace Revit pro tuto část (nebo pokračujte od předchozí části). Tento soubor má pole panelů ETFE na střeše. Na tyto panely se budeme odkazovat v tomto cvičení.
Přidejte na kreslicí plochu uzel Family Types a vyberte položku ROOF-PANEL-4PT.
Tento uzel připojte k uzlu Select All Elements of Family Type, abyste do aplikace Dynamo načetli všechny prvky z aplikace Revit.
Pomocí uzlu AdaptiveComponent.Locations můžete dotazovat umístění adaptivních bodů pro každý prvek.
Vytvořte polygon z těchto čtyř bodů pomocí uzlu Polygon.ByPoints. Všimněte si, že nyní máme abstraktní verzi panelového systému v aplikaci Dynamo, aniž by bylo nutné importovat úplnou geometrii prvku aplikace Revit.
Vypočtěte rovinnou odchylku pomocí uzlu Polygon.PlaneDeviation.
Stejně jako v předchozím cvičení nastavíme poměr otvoru každého panelu podle jeho rovinné odchylky.
Přidejte na kreslicí plochu uzel Element.SetParameterByName a připojte adaptivní komponenty ke vstupu prvku. Připojte blok kódu, který načte hodnotu Aperture Ratio do vstupu parameterName.
Výsledky odchylek nelze přímo připojit ke vstupu hodnoty, protože je potřeba hodnoty přemapovat na rozsah parametrů.
Pomocí uzlu Math.RemapRange přemapujte hodnoty odchylek do domény mezi 0.15 a 0_._45 zadáním
0.15; 0.45;
do bloku kódu.Tyto výsledky zapište do hodnoty vstupu pro Element.SetParameterByName.
V aplikaci Revit můžeme trochu pochopit změny otevření napříč povrchem.
Po přiblížení je zřejmé, že uzavřené panely jsou zatíženy vůči rohům povrchu. Otevřené rohy jsou směrem k horní části. Rohy představují oblasti větší odchylky, zatímco vyboulení má minimální zakřivení, což dává smysl.
Nastavení Aperture Ratio jasně nedemonstruje odchylku panelů na střeše a také měníme geometrii skutečného prvku. Předpokládejme, že chceme pouze prozkoumat odchylku z hlediska proveditelnosti výroby. Bylo by užitečné vybarvit panely podle rozsahu odchylky pro naši dokumentaci. To můžeme provést pomocí řady kroků uvedených níže a velmi podobným postupem jako výše uvedené kroky.
Odstraňte uzel Element.SetParameterByName a jeho vstupní uzly a přidejte uzel Element.OverrideColourInView.
Přidejte na kreslicí plochu uzel Color Range a zadejte do vstupu barvy Element.OverrideColorInView. Aby bylo možné vytvořit gradient, je nutné propojit hodnoty odchylek s barevným rozsahem.
Pozastavením ukazatele myši nad vstupem value lze vidět, že hodnoty pro vstup musí být mezi hodnotami 0 a 1, aby bylo možné mapovat barvu na každou hodnotu. Hodnoty odchylek je nutné přemapovat do tohoto rozsahu.
Pomocí uzlu Math.RemapRange přemapujte hodnoty odchylky roviny do rozsahu od* 0* do 1. (Poznámka: Pomocí uzlu MapTo můžete také definovat zdrojovou doménu.)
Vložte výsledky do uzlu Color Range.
Všimněte si, že náš výstup je rozsah barev místo rozsahu čísel.
Pokud máte nastavenou možnost Ruční, klikněte na tlačítko Spustit. Od této chvíle si vystačíte s nastavením Automaticky.
V aplikaci Revit vidíme mnohem čitelnější gradient, který je reprezentativní pro rovinnou odchylku podle našeho rozsahu barev. Ale co když chceme přizpůsobit barvy? Minimální hodnoty odchylek jsou znázorněny červeně, což se zdá být opak toho, co bychom očekávali. Chceme mít maximální odchylku červenou a minimální odchylkou reprezentovanou klidnější barvou. Vraťme se zpátky do aplikace Dynamo, kde to opravíme.
Pomocí bloku kódu přidejte dvě čísla na dva různé řádky:
0;
a255;
.Vytvořte červenou a modrou barvu zadáním příslušných hodnot do dvou uzlů Color.ByARGB.
Vytvořte seznam z těchto dvou barev.
Tento seznam vložte do vstupu colors uzlu Color Range a sledujte, jak se aktualizuje vlastní rozsah barev.
V aplikaci Revit nyní můžeme lépe rozpoznat oblasti maximální odchylky v rozích. Tento uzel slouží k přepsání barvy v pohledu, takže může být skutečně užitečné, pokud máme konkrétní výkres v sadě výkresů, které se soustředí na konkrétní typ analýzy.
Po výběru jednoho panelu ETFE v aplikaci Revit se zobrazí čtyři parametry instance: XYZ1, XYZ2, XYZ3, a XYZ4. Po vytvoření jsou všechny prázdné. Jedná se o textově orientované parametry a potřebují hodnoty. Pomocí aplikace Dynamo zapíšeme umístění adaptivních bodů do každého parametru. To napomáhá interoperabilitě, pokud je nutné geometrii poslat inženýrovi nebo konzultantovi fasád.
Ve vzorovém výkresu máme velký prázdný výkaz. Parametry XYZ jsou sdílené parametry v souboru aplikace Revit, které nám umožňují přidat je do výkazu.
Po přiblížení vidíme, že parametry XYZ nejsou dosud vyplněny. Aplikace Revit spravuje první dva parametry.
K zápisu do těchto hodnot provedeme složitou operaci nad seznamem. Samotný graf je jednoduchý, ale koncepty vychází z mapování seznamu, jak je popsáno v kapitole o seznamech.
Vyberte všechny adaptivní komponenty se dvěma uzly.
Extrahujte umístění každého bodu pomocí uzlu AdaptiveComponent.Locations.
Převeďte tyto body na řetězce. Nezapomeňte, že parametr je textový, takže je potřeba zadat správný typ dat.
Vytvořte seznam čtyř řetězců definujících parametry, které chcete změnit: XYZ1, XYZ2, XYZ3 a XYZ4.
Tento seznam vložte do vstupu parameterName pro uzel Element.SetParameterByName.
Spojte uzel Element.SetParameterByName se vstupem combinator uzlu List.Combine. Připojte vstup adaptive components ke vstupu list1. Připojte uzel String z uzlu String from Object ke vstupu list2.
Zde mapujeme seznam, protože zapisujeme čtyři hodnoty pro každý prvek, který vytvoří složitou datovou strukturu. Uzel List.Combine definuje operaci o jeden krok níže v hierarchii dat. Proto jsou vstupy element a value uzlu Element.SetParameterByName ponechány prázdné. Uzel List.Combine připojuje podseznamy svých vstupů k prázdným vstupům uzlu List.SetParameterByName podle pořadí jejich připojení.
Po výběru panelu v aplikaci Revit nyní vidíme, že pro každý parametr máme hodnoty řetězce. Ve skutečnosti vytvoříme jednodušší formát pro zápis bodu (X,Y,Z). To lze provést pomocí řetězcových operací v aplikaci Dynamo, ale to nyní obejdeme, abychom neodbočovali od tématu.
Pohled ukázkového výkazu s vyplněnými parametry.
Každý panel ETFE nyní obsahuje souřadnice XYZ zapsané pro každý adaptivní bod, což představuje rohy jednotlivých panelů pro výrobu.
Aplikace Dynamo for Civil 3D přináší paradigma vizuálního programování projektantům a návrhářům pracujícím na projektech stavební infrastruktury. Aplikaci Dynamo si můžete představit jako určitý digitální multifunkční nástroj pro uživatele aplikace Civil 3D – ať už se jedná o jakoukoli úlohu, má pro ni ten správný nástroj. Její intuitivní rozhraní umožňuje vytvářet výkonné a přizpůsobitelné postupy bez nutnosti napsání jediného řádku kódu. Abyste mohli používat aplikaci Dynamo, nemusíte být programátorem, ale musíte být schopni myslet logicky jako programátor. Tato kapitola vám spolu s ostatními kapitolami příručky Primer pomůže vybudovat takové logické dovednosti, abyste mohli řešit úlohu s ohledem na výpočetní návrh.
Aplikace Dynamo byla poprvé představena v aplikaci Civil 3D 2020 a od té doby se neustále vyvíjí. Původně se instalovala samostatně prostřednictvím aktualizace softwaru, nyní je součástí všech verzí aplikace Civil 3D. V závislosti na používané verzi aplikace Civil 3D si můžete všimnout, že rozhraní aplikace Dynamo vypadá trochu jinak než v příkladech uvedených v této kapitole. Důvodem je skutečnost, že v aplikaci Civil 3D 2023 došlo k výraznému přepracování rozhraní.
Doporučujeme, abyste se podívali se na blog aplikace Dynamo, kde najdete nejnovější informace o vývoji aplikace Dynamo. V následující tabulce jsou shrnuty klíčové milníky v průběhu životnosti aplikace Dynamo for Civil 3D.
2024.1
2.18
2024
2.17
Aktualizace uživatelského rozhraní Přehrávače skriptů Dynamo
2023.2
2.15
2023
2.13
Aktualizace uživatelského rozhraní aplikace Dynamo
2022.1
2.12
Přidáno nastavení úložiště dat vazeb objektů
Nové uzly pro řízení vazeb objektů
2022
2.10
Součást hlavní instalace aplikace Civil 3D
Přechod z nástroje IronPython na rozhraní Python.NET
2021
2.5
2020.2
2.4
2020 Update 2
2.4
Přidány nové uzly
2020.1
2.2
2020
2.1
První vydání
Výkonnou funkcí aplikace Dynamo je, že můžete upravovat parametry na parametrické úrovni. Například generativní algoritmus nebo výsledky simulace lze použít k řízení parametrů pole prvků. Tímto způsobem může sada instancí ze stejné rodiny obsahovat uživatelské vlastnosti v projektu aplikace Revit.
Parametry instance definují otvor panelů na povrchu střechy v rozsahu Poměr otvoru od 0.1 do 0.4.
Parametry založené na typu jsou použity u každého prvku na povrchu, protože se jedná o stejný typ rodiny. Materiál každého panelu může být například řízen parametrem založeným na typu.
Pokud jste již vytvořili rodinu aplikace Revit, nezapomeňte, že je nutné přiřadit typ parametru (řetězec, číslo, kóta atd.) Při přiřazování parametrů z aplikace Dynamo zkontrolujte, zda používáte správný typ dat.
Aplikaci Dynamo můžete použít také v kombinaci s parametrickými vazbami definovanými ve vlastnostech rodiny aplikace Revit.
Jako rychlý přehled parametrů v aplikaci Revit si ukážeme, že existují parametry typu a parametry instance. Oba lze upravovat pomocí aplikace Dynamo, ale v níže uvedeném cvičení budeme pracovat s parametry instance.
Až zjistíte, jak široké jsou možnosti použití parametrů úprav, možná budete chtít upravovat velké množství prvků v aplikaci Revit pomocí aplikace Dynamo. Může to být výpočetně nákladná operace, což znamená, že může být pomalá. Pokud upravujete velký počet prvků, můžete použít funkci uzlu „zmrazit“, aby bylo možné pozastavit provádění operací aplikace Revit při vytváření grafu. Další informace o zmrazení uzlů najdete v části Zmrazení v kapitole Tělesa.
Od verze 0.8 je aplikace Dynamo v zásadě bez jednotek. Díky tomu může aplikace Dynamo zůstat abstraktním vizuálním programovacím prostředím. Uzly aplikace Dynamo, které spolupůsobí s kótami aplikace Revit, budou odkazovat na jednotky projektu aplikace Revit. Pokud například nastavujete parametr délky v aplikaci Revit z aplikace Dynamo, číslo v aplikaci Dynamo pro danou hodnotu bude odpovídat výchozím jednotkám v projektu aplikace Revit. Níže uvedené cvičení funguje v metrech.
K rychlému převodu jednotek použijte uzel Convert Between Units. Jedná se o užitečný nástroj pro konverzi délkových, plošných a objemových jednotek za pochodu.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V níže uvedeném cvičení jsou použity metry.
Toto cvičení je zaměřeno na úpravy prvků aplikace Revit bez provedení geometrické operace v aplikaci Dynamo. Zde neimportujeme geometrii aplikace Dynamo, pouze upravujeme parametry v projektu aplikace Revit. Toto cvičení je základní, pokročilejší uživatelé aplikace Revit si mohou všimnout, že se jedná o parametry instance objemu, ale stejnou logiku lze použít na pole prvků, které chcete přizpůsobit ve velkém měřítku. To vše provedeme s uzlem Element.SetParameterByName.
Začněte s ukázkovým souborem aplikace Revit pro tuto část. Z předchozího řezu jsme odstranili konstrukční prvky a adaptivní příhradové nosníky. V tomto cvičení se zaměříme na parametrický nýt v aplikaci Revit a v aplikaci Dynamo provedeme manipulaci.
Po výběru budovy v položce Objem v aplikaci Revit se na panelu vlastností zobrazí pole parametrů instance.
V aplikaci Dynamo můžeme načíst parametry výběrem cílového prvku.
Vyberte objem budovy pomocí uzlu Select Model Element.
Všechny parametry tohoto objemu lze dotazovat pomocí uzlu Element.Parameters. To zahrnuje parametry typu a instance.
Odkazujte na uzel Element. Parameters kvůli vyhledání cílových parametrů. Nebo si můžeme v předchozím kroku prohlédnout panel vlastností a vybrat si názvy parametrů, které chcete upravit. V tomto případě hledáme parametry, které ovlivňují velké geometrické pohyby na objemu budovy.
Provedeme změny prvku aplikace Revit pomocí uzlu Element.SetParameterByName.
Pomocí bloku kódu definujte seznam parametrů, s uvozovkami kolem každé položky označujícími řetězec. Můžeme také použít uzel List.Create s řadou uzlů string připojených k několika vstupům, ale blok kódu je rychlejší a jednodušší. Ujistěte se, že řetězec odpovídá přesnému názvu v aplikaci Revit, přičemž se rozlišují malá a velká písmena:
{"BldgWidth","BldgLength","BldgHeight", "AtriumOffset", "InsideOffset","LiftUp"};
Také chceme určit hodnoty pro každý parametr. Přidejte na kreslicí plochu šest posuvníků celých čísel a každý přejmenujte na odpovídající parametr v seznamu. Dále nastavte hodnoty každého posuvníku podle výše uvedeného obrázku. V pořadí shora dolů: 62, 92, 25, 22, 8 a12
Definujte další blok kódu se seznamem stejné délky jako názvy parametrů. V tomto případě pojmenujeme proměnné (bez uvozovek), které vytvářejí vstupy pro blok kódu. Připojte posuvníky ke každému odpovídajícímu vstupu:
{bw,bl,bh,ao,io,lu};
Připojte blok kódu ke vstupu value uzlu Element.SetParameterByName*. Po automatické kontrole spuštění se výsledky automaticky zobrazí.
*Tato ukázka funguje s parametry instance, ale ne s parametry typu.
Stejně jako v aplikaci Revit je mnoho těchto parametrů na sobě závislých. Samozřejmě existují kombinace, ve kterých se může geometrie přerušit. Tento problém můžeme vyřešit definovanými vzorci ve vlastnostech parametru nebo můžeme nastavit podobnou logiku pomocí matematických operací v aplikaci Dynamo (pokud si chcete cvičení rozšířit, je to další výzva).
Tato kombinace poskytuje nový návrh objemu budovy: 100, 92, 100, 25, 13, 51.
Nyní se podívejme, jak můžeme pomocí podobného postupu upravit fasádu.
Zkopírujme graf a zaměřme se na zasklení fasády, ve kterém bude umístěn systém příhradových nosníků. V tomto případě izolujeme čtyři parametry:
{"DblSkin_SouthOffset","DblSkin_MidOffset","DblSkin_NorthOffset","Facade Bend Location"};
Dále vytvoříme posuvníky čísel a přejmenujeme je na příslušné parametry. První tři posuvníky shora dolů by měly být přemapovány na doménu s obsahem [0,10], zatímco poslední posuvník Facade Bend Location by měl být přemapován na doménu s obsahem [0,1]. Tyto hodnoty by měly odshora dolů vycházet z těchto hodnot (i když jsou libovolné): 2.68, 2.64, 2.29, 0.5.
Definujte nový blok kódu a připojte posuvníky:
{so,mo,no,fbl};
Změnou posuvníků v této části grafu můžeme dosáhnout toho, že zasklení fasády bude mnohem výraznější: 9.98, 10.0, 9.71 ,0.31.
V aplikaci Dynamo můžete pomocí plně parametrického ovládání vytvořit pole prvků aplikace Revit. Uzly aplikace Revit v aplikaci Dynamo nabízí možnost importovat prvky z obecných geometrií do určitých typů kategorií (například stěny a podlaží). V této části se zaměříme na import parametricky flexibilních prvků s adaptivními komponentami.
Adaptivní komponenta je flexibilní kategorie rodiny, která se dobře hodí ke generativním aplikacím. Po vytvoření instance můžete vytvořit složitý geometrický prvek, který je řízen základním umístěním adaptivních bodů.
Níže je uveden příklad tříbodové adaptivní komponenty v Editoru rodin. Tím se vytvoří příhradový nosník, který je definován pozicí každého adaptivního bodu. V níže uvedeném cvičení vygenerujeme pomocí této komponenty sérii příhradových nosníků přes celé průčelí.
Adaptivní komponenta je dobrým příkladem doporučených postupů interoperability. Pole adaptivních komponent je možné vytvořit definováním základních adaptivních bodů. A při přenosu těchto dat do jiných programů existuje možnost zredukovat geometrii na jednoduchá data. Import a export pomocí programu, jako je například aplikace Excel, se řídí podobnou logikou.
Řekněme, že konzultant průčelí chce znát umístění prvků příhradových nosníků, aniž by bylo třeba počítat s plně kloubovou geometrií. Při přípravě výroby se může konzultant odkazovat na umístění adaptivních bodů a regenerovat geometrii v programech, jako je Inventor.
Pracovní postup použitý v níže uvedeném cvičení umožňuje přístup ke všem těmto datům při tvorbě definice pro tvorbu prvků aplikace Revit. Tímto procesem sjednotíme konceptualizaci, dokumentaci a výrobu do jednoho plynulého pracovního postupu. Tímto se vytvoří inteligentnější a efektivnější proces pro interoperabilitu.
První cvičení níže znázorňuje, jak aplikace Dynamo odkazuje na data pro tvorbu prvků aplikace Revit. Chcete-li vytvořit více adaptivních komponent, definujte seznam seznamů, kde každý seznam obsahuje tři body představující každý bod adaptivní komponenty. Toto mějte na paměti při správě datových struktur v aplikaci Dynamo.
Další metodou importu parametrické geometrie aplikace Dynamo do aplikace Revit je DirectShape. V souhrnu prvek DirectShape a související třídy podporují možnost externě ukládat vytvořené geometrické tvary do dokumentu aplikace Revit. Geometrie může obsahovat uzavřená tělesa nebo sítě. Prvek DirectShape je primárně určen k importu tvarů z jiných datových formátů, například IFC nebo STEP, kde není k dispozici dostatek informací k vytvoření „skutečného“ prvku aplikace Revit. Prvek DirectShape, podobně jako u pracovního postupu formátů IFC a STEP, funguje dobře při importu geometrií vytvořených v aplikaci Dynamo do projektů aplikace Revit jako skutečných prvků.
Nyní následuje rozbor a druhé cvičení týkající se importu geometrie aplikace Dynamo jako prvku DirectShape do projektu aplikace Revit. Pomocí této metody můžeme přiřadit importované geometrii kategorii, materiál a název – to vše při zachování parametrického propojení s grafem aplikace Dynamo.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Počínaje tímto souborem příkladu z této části (případně pokračováním v práci se souborem aplikace Revit v předchozí relaci) se zobrazuje stejný objem aplikace Revit.
Takto soubor vypadá po otevření.
Toto je systém příhradových nosníků vytvořený pomocí aplikace Dynamo, který je inteligentně propojen s objemem aplikace Revit.
Byly použity uzly Select Model Element a Select Face a nyní pokračujeme o jeden krok v hierarchii geometrie níže a použijeme příkaz Select Edge. Pokud je spouštění výpočetního modulu aplikace Dynamo nastaveno na hodnotu Automaticky, graf se bude průběžně aktualizovat podle změn v souboru aplikace Revit. Vybraná hrana je dynamicky svázána s topologií prvků aplikace Revit. Dokud se topologie* nezmění, připojení mezi aplikacemi Revit a Dynamo zůstane aktivní.
Vyberte horní křivku proskleného průčelí. Tato křivka se táhne přes celou délku budovy. Pokud máte s výběrem hrany potíže, nezapomeňte, že můžete vybrat výběr v aplikaci Revit přesunutím kurzoru nad hranu a opakovaným stisknutím klávesy Tab, dokud se nezvýrazní požadovaná hrana.
Pomocí dvou uzlů Select Edge vyberte každou hranu představující náklon uprostřed průčelí.
Totéž proveďte u dolních hran průčelí v aplikaci Revit.
Uzly Watch zobrazují, že se nyní v aplikaci Dynamo nacházejí čáry. Toto se automaticky převede na geometrii aplikace Dynamo, protože hrany samy nejsou prvky aplikace Revit. Tyto křivky jsou reference, pomocí kterých se vytvoří instance adaptivních příhradových nosníků na průčelí.
*Abychom zachovali konzistentní topologii, odkazujeme se na model, který nemá přidány další plochy ani hrany. Zatímco parametry mohou změnit její tvar, způsob, jakým je vytvořena, zůstává konzistentní.
Nejprve je potřeba spojit křivky a sloučit je do jednoho seznamu. Tímto způsobem je možné „seskupit“ křivky za účelem provedení operací geometrie.
Vytvořte seznam pro dvě křivky uprostřed průčelí.
Spojte tyto dvě křivky do objektu Polycurve připojením komponenty List.Create do uzlu Polycurve.ByJoinedCurves.
Vytvořte seznam pro dvě křivky v dolní části průčelí.
Spojte tyto dvě křivky do objektu Polycurve připojením komponenty List.Create do uzlu Polycurve.ByJoinedCurves.
Nakonec spojte tři hlavní křivky (jednu úsečku a dva objekty polycurve) do jednoho seznamu.
Chceme využít horní křivku, což je čára představující plný rozsah průčelí. Podél této čáry vytvoříme roviny, které se protnou se sadou křivek, jež jsme seskupili do seznamu.
V bloku kódu definujte rozsah pomocí následující syntaxe:
0..1..#numberOfTrusses;
Do vstupu bloku kódu přidejte celočíselný posuvník. Jak jste už možná uhodli, toto bude představovat počet příhradových nosníků. Všimněte si, že posuvník ovládá počet položek v rozsahu definovaném od *0 *do 1.
Připojte blok kódu ke vstupu param uzlu Curve.PlaneAtParameter a připojte horní hranu ke vstupu curve. Tímto získáte deset rovin rovnoměrně rozložených po celém rozsahu průčelí.
Rovina je abstraktní část geometrie, která představuje dvourozměrný prostor, který je nekonečný. Roviny jsou skvělé k tvorbě obrysů a protínání, což provedeme i v tomto kroku.
Pomocí uzlu Geometry.Intersect (nastavte vázání na kartézský součin) připojte uzel Curve.PlaneAtParameter ke vstupu entity uzlu Geometry.Intersect. Připojte hlavní uzel List.Create ke vstupu geometry. Nyní jsou ve výřezu aplikace Dynamo zobrazeny body, které představují průsečík každé křivky s definovanými rovinami.
Všimněte si, že výstup je seznam seznamů. Příliš mnoho seznamů pro tento účel. Je třeba zde provést částečné vyrovnání. Je také třeba postoupit o krok níže v seznamu a vyrovnat výsledek. K tomuto účelu použijte operaci List.Map, jak je popsáno v kapitole o seznamech.
Připojte uzel Geometry.Intersect ke vstupu seznamu uzlu List.Map.
Připojte uzel Flatten ke vstupu f(x) uzlu List.Map. Výsledkem jsou 3 seznamy a každý z nich obsahuje stejný počet příhradových nosníků.
Tato data je třeba změnit. Pokud chceme vytvořit instanci příhradového nosníku, je nutné použít stejný počet adaptivních bodů, jaký je definován v rodině. Jedná se o tříbodovou adaptivní komponentu, takže místo tří seznamů o 10 položkách (numberOfTrusses) chceme 10 seznamů o 3 položkách. Tímto způsobem je možné vytvořit 10 adaptivních komponent.
Připojte uzel List.Map k uzlu List.Transpose. Nyní máme požadovaný výstup dat.
Chcete-li potvrdit správnost dat, přidejte na kreslicí plochu uzel Polygon.ByPoints a zkontrolujte náhled v aplikaci Dynamo.
Stejným způsobem jako jste vytvořili polygony, uspořádejte do pole i adaptivní komponenty.
Přidejte na kreslicí plochu uzel AdaptiveComponent.ByPoints a připojte uzel List.Transpose ke vstupu points.
Pomocí uzlu Family Types vyberte rodinu AdaptiveTruss a připojte ji ke vstupu FamilyType uzlu AdaptiveComponent.ByPoints.
V aplikaci Revit nyní máme deset příhradových nosníků rovnoměrně rozložených po průčelí.
Při kontrole grafu zvyšte hodnotu numberOfTrusses na 30 pomocí posuvníku. Mnohé příhradové nosníky nejsou příliš realistické, ale parametrické propojení funguje. Po ověření nastavte hodnotu numberOfTrusses na 15.
A v rámci posledního testu můžeme výběrem objemu v aplikaci Revit a úpravou parametrů instance změnit tvar budovy a sledovat chování příhradových nosníků. Nezapomeňte, že abyste tyto aktualizace mohli vidět, graf aplikace Dynamo musí být otevřený, a propojení bude přerušeno ihned, jakmile bude graf zavřen.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Začněte otevřením vzorového souboru této lekce – ARCH-DirectShape-BaseFile.rvt.
Ve 3D pohledu uvidíte objem budovy z předchozí lekce.
Podél hrany atria vede jedna referenční křivka, na kterou se poté v aplikaci Dynamo odkážeme.
Podél protilehlé hrany atria je další referenční křivka, na kterou se v aplikaci Dynamo odkážeme také.
Pokud se chcete odkázat na geometrii, použijte uzel Select Model Element pro každého člena v aplikaci Revit. Vyberte objem v aplikaci Revit a importujte geometrii do aplikace Dynamo pomocí uzlu Element.Faces – objem by měl být nyní viditelný v náhledu aplikace Dynamo.
Pomocí uzlů Select Model Element a CurveElement.Curve importujte do aplikace Dynamo první referenční křivku.
Pomocí uzlů Select Model Element a CurveElement.Curve importujte do aplikace Dynamo druhou referenční křivku.
Po oddálení a posunu pohledu doprava ve vzorovém grafu je vidět velká skupina uzlů – jedná se o geometrické operace, které generují konstrukci mřížkované střechy viditelnou v náhledu aplikace Dynamo. Tyto uzly se generují pomocí funkce Uzel na kód, jak je popsáno v části bloku kódu této příručky.
Konstrukce je řízena třemi hlavními parametry – Diagonal Shift (Diagonální posun), Camber (Nadvýšení) a Radius (Poloměr).
Zde je vidět podrobné přiblížení parametrů tohoto grafu. Tyto parametry je možné upravit, tak aby bylo možné dosáhnout jiných výstupních geometrií.
Jakmile přetáhnete uzel DirectShape.ByGeometry na kreslicí plochu, uvidíte, že obsahuje čtyři vstupy: geometry, category, material a name.
Vstup geometry bude těleso vytvořené v části tvorby geometrie grafu.
Vstup category je možné vybrat pomocí rozevíracího uzlu Category. V tomto případě použijeme možnost Structural Framing (Rámová konstrukce).
Vstup material se vybere pomocí výše uvedeného pole uzlů – v tomto případě je však možné jej snadno definovat jako „Výchozí“.
Po spuštění aplikace Dynamo se bude v aplikaci Revit uvnitř projektu na střeše nacházet importovaná geometrie. Jedná se spíš o prvek rámové konstrukce než o obecný model. Parametrické propojení s aplikací Dynamo zůstane neporušené.
Již dříve jsme uvedli, že uzly jsou základními stavebními bloky grafu aplikace Dynamo a jsou uspořádány do logických skupin v knihovně. V aplikaci Dynamo for Civil 3D jsou v knihovně dvě kategorie (neboli police), které obsahují vyhrazené uzly pro práci s objekty aplikací AutoCAD a Civil 3D, například trasy, profily, koridory, reference bloků atd. Zbytek knihovny obsahuje uzly, které jsou obecnější povahy, a jsou konzistentní mezi všemi verzemi aplikace Dynamo (například Dynamo pro aplikaci Revit, Dynamo Sandbox atd.).
Další informace o uspořádání uzlů v základní knihovně aplikace Dynamo naleznete v části .
Specifické uzly pro práci s objekty aplikací AutoCAD a Civil 3D
Obecné uzly
Uzly z balíčků třetích stran, které lze instalovat samostatně.
Použijete-li uzly, které se nacházejí v policích pro aplikace AutoCAD a Civil 3D, bude graf aplikace Dynamo fungovat pouze v aplikaci Dynamo for Civil 3D. Pokud bude graf pro aplikaci Dynamo for Civil 3D otevřen jinde (například v aplikaci Dynamo pro aplikaci Revit), tyto uzly budou označeny upozorněním a nebudou spuštěny.
Proč jsou pro aplikace AutoCAD a Civil 3D k dispozici dvě samostatné police?
Toto uspořádání odlišuje uzly pro nativní objekty aplikace AutoCAD (úsečky, křivky, reference bloků atd.) od uzlů pro objekty Civil 3D (trasy, koridory, povrchy atd.). Z technického hlediska jsou aplikace AutoCAD a Civil 3D dvě samostatné aplikace – AutoCAD je základní aplikace a aplikace Civil 3D je na ní postavena.
Aby bylo možné pracovat s uzly aplikací AutoCAD a Civil 3D, je důležité plně porozumět hierarchii objektů v jednotlivých policích. Pamatujete si taxonomii z biologie? Říše, kmen, třída, řád, čeleď, rod, druh? Objekty aplikací AutoCAD a Civil 3D jsou uspořádány do kategorií podobným způsobem. Vysvětleme si to na několika příkladech.
Jako příklad použijeme trasu.
Řekněme, že vaším cílem je změnit název trasy. Dalším uzlem, který byste zde měli přidal, je uzel CivilObject.SetName.
Zpočátku se to nemusí zdát příliš intuitivní. Co je CivilObject a proč knihovna nemá uzel Alignment.SetName? Odpověď souvisí s opakovatelnou použitelností a jednoduchostí. Pokud se nad tím zamyslíte, proces změny názvu objektu aplikace Civil 3D je stejný, ať už se jedná o trasu, koridor, profil nebo něco jiného. Takže místo opakujících se uzlů, které v podstatě provádějí totéž (například Alignment.SetName, Corridor.SetName, Profile.SetName atd.), by bylo vhodné tuto funkci zabalit do jediného uzlu. Přesně to dělá uzel CivilObject.SetName!
Jiný způsob, jak o tom přemýšlet, je z hlediska vztahů. Trasa a koridor jsou oba typy objektů aplikace Civil, stejně jako jablko a hruška jsou oba typy ovoce. Uzly CivilObject se používají u všech typů objektů aplikace Civil, stejně jako můžete chtít použít jednu škrabku k loupání jablek i hrušek. Ve vaší kuchyni by byl pořádný chaos, kdybyste měli pro každý typ ovoce samostatnou škrabku! V tomto smyslu je knihovna uzlů aplikace Dynamo stejná jako vaše kuchyně.
Nyní se posuneme o krok dál. Řekněme, že chcete změnit hladinu trasy. Uzel, který byste použili, je uzel Object.SetLayer.
Proč neexistuje uzel s názvem CivilObject.SetLayer? Platí zde stejné zásady opakované použitelnosti a jednoduchosti, o kterých jsme hovořili dříve. Vlastnost hladina je společná pro všechny objekty v aplikaci AutoCAD, které lze nakreslit nebo vložit, jako je úsečka, křivka, text, reference bloku atd. Objekty aplikace Civil 3D, například trasy a koridory, spadají do stejné kategorie, takže jakýkoliv uzel, který se vztahuje k objektu, lze použít také s libovolným objektem aplikace Civil.
Když jste si teď udělali základní obrázek, pojďme se rovnou pustit do vytváření prvního grafu aplikace Dynamo v aplikaci Civil 3D!
Jedná se o jednoduchý příklad, který má demonstrovat základní funkce aplikace Dynamo. Doporučujeme postupovat v novém prázdném dokumentu aplikace Civil 3D.
Nejprve otevřete prázdný dokument v aplikaci Civil 3D. V tomto dokumentu poté na pásu karet aplikace Civil 3D přejděte na kartu Správa a vyhledejte panel Vizuální programování.
Kliknutím na tlačítko Dynamo spusťte aplikaci Dynamo v samostatném okně.
Jaký je rozdíl mezi aplikací Dynamo a Přehrávačem skriptů Dynamo?
Aplikace Dynamo se používá k vytváření a spouštění grafů. Přehrávač skriptů Dynamo umožňuje snadno spouštět grafy, aniž by bylo nutné je otevírat v aplikaci Dynamo.
Po otevření aplikace Dynamo se zobrazí úvodní obrazovka. Kliknutím na tlačítko Nový otevřete prázdný pracovní prostor.
Jsou dostupné nějaké ukázky?
Nyní byste měli vidět prázdný pracovní prostor. Vyzkoušejme si aplikaci Dynamo v akci! Zde je náš cíl:
Vypadá to jednoduše, že? Než však začneme, musíme se seznámit s několika základními pojmy.
Základní stavební bloky grafu aplikace Dynamo se nazývají uzly. Uzel je jako malý počítač – vložíte do něj data, on s nimi provede nějakou práci a vygeneruje výsledek. Aplikace Dynamo for Civil 3D obsahuje knihovnu uzlů, které můžete propojit pomocí drátů a vytvořit tak graf, který dokáže větší a lepší věci než kterýkoli uzel sám o sobě.
Počkat, co když jsem úplně nový uživatel aplikace Dynamo?
Některé z těchto informací pro vás mohou být zcela nové – to je v pořádku! Tyto části vám pomohou.
Dobrá. Pojďme nyní sestavit náš graf. Zde je seznam všech uzlů, které budeme potřebovat.
Tyto uzly můžete najít zadáním jejich názvu do vyhledávacího řádku v knihovně nebo kliknutím pravým tlačítkem myši kdekoli na kreslicí ploše a následným vyhledáním.
Jak poznám, které uzly použít a kde je najít?
Takto by měl vypadat výsledný graf.
Shrňme si, co jsme zde udělali:
Vybrali jsme, ve kterém dokumentu budeme pracovat. V tomto případě (a v mnoha dalších případech) chceme pracovat v aktivním dokumentu v aplikaci Civil 3D.
Definovali jsme cílový blok, ve kterém má být vytvořen textový objekt (v tomto případě modelový prostor).
Pomocí uzlu String jsme určili, do které hladiny má být text umístěn.
Pomocí uzlu Point.ByCoordinates jsme vytvořili bod, který definuje umístění textu.
Pomocí dvou uzlů Number Slider jsme definovali souřadnice X a Y bodu vložení textu.
Pomocí dalšího uzlu String jsme definovali obsah textového objektu.
Nakonec jsme vytvořili textový objekt.
Podívejme se na výsledky našeho nového krásného grafu!
V aplikaci Civil 3D zkontrolujte, zda je vybrána karta Model. Měl by se zobrazit nový textový objekt vytvořený aplikací Dynamo.
Pokud text nevidíte, možná budete muset spustit příkaz ZOOM -> EXTENTS, abyste se přiblížili na správné místo.
Výborně! Nyní provedeme několik aktualizací textu.
Vraťte se do grafu aplikace Dynamo a změňte několik vstupních hodnot, například textový řetězec, souřadnice bodu vložení atd. Text by se měl v aplikaci Civil 3D automaticky aktualizovat. Všimněte si také, že pokud odpojíte některý ze vstupních portů, text se odstraní. Pokud vše připojíte zpět, text se znovu vytvoří.
Proč aplikace Dynamo nevloží nový textový objekt při každém spuštění grafu?
Tento příklad je pouze malou ukázkou toho, co všechno lze s aplikací Dynamo for Civil 3D dělat. Čtěte dál a dozvíte se více!
Silnice, železnice, terén, inženýrské sítě, zaměření, GIS...
Stavební infrastruktura je tohle všechno a ještě mnohem víc! Tato část obsahuje několik praktických a relevantních vzorových grafů, které vám pomohou posunout se k mistrovskému zvládnutí aplikace Dynamo a odhalit plný potenciál aplikace Dynamo for Civil 3D. Každý graf obsahuje podrobný popis logiky, která byla použita k jeho vytvoření, abyste jej mohli nejen používat, ale také pochopit.
Tyto příklady navíc obsahují osvědčené postupy pro vytváření silných grafů. Doporučujeme vám, abyste se při práci s příklady seznámili také s částí , kde naleznete další nápady, jak vytvářet výkonné, flexibilní a udržovatelné grafy.
Inženýrský návrh typické bytové výstavby zahrnuje práci s několika podzemními inženýrskými sítěmi, jako je splašková kanalizace, dešťová kanalizace, rozvody pitné vody nebo jiné. V tomto příkladu si ukážeme, jak lze aplikaci Dynamo použít k nakreslení servisních přípojek z rozvodné sítě k danému pozemku (tj. parcely). Je běžné, že každá parcela vyžaduje servisní přípojku, což vyžaduje značné množství zdlouhavé práce při umisťování všech služeb. Aplikace Dynamo může tento proces urychlit automatickým přesným nakreslením nezbytné geometrie a také poskytuje flexibilní vstupy, které lze upravit tak, aby vyhovovaly místním standardům.
Použití uzlu Select Object pro uživatelský vstup
Práce se souřadnicovými systémy
Použití geometrických operací, jako jsou například Geometry.DistanceTo a Geometry.NearestPointTo
Vytvoření referencí bloků
Řízení nastavení vazeb objektů
Tento graf bude funkční v aplikaci Civil 3D 2020 a vyšších verzích.
Začněte stažením níže uvedených vzorových souborů a poté otevřete soubor DWG a graf aplikace Dynamo.
Zde je uveden přehled logiky tohoto grafu.
Získání geometrie křivky pro rozvodnou síť.
Získání geometrie křivky pro uživatelem vybranou linii pozemku, v případě potřeby obrácení směru.
Generování bodů vložení pro měřiče služeb.
Získání bodů na rozvodné síti, které jsou nejblíže umístění měřičů služeb.
Vytvoření referencí bloků a čar v modelovém prostoru.
Pojďme na to!
Prvním krokem je získání geometrie rozvodné sítě do aplikace Dynamo. Místo výběru jednotlivých čar nebo křivek získáme všechny objekty v určité hladině a spojíme je dohromady jako objekt PolyCurve aplikace Dynamo.
Nyní je nutné načíst geometrii vybrané linie pozemku do aplikace Dynamo, abychom s ní mohli pracovat. Správným nástrojem pro tuto úlohu je uzel Select Object, který umožňuje uživateli grafu vybrat konkrétní objekt v aplikaci Civil 3D.
Musíme se také vypořádat s potenciálním problémem, který může nastat. Linie pozemku má počáteční a koncový bod, což znamená, že má směr. Aby graf poskytoval konzistentní výsledky, je nutné, aby všechny linie pozemku měly konzistentní směr. Tuto podmínku můžeme zohlednit přímo v logice grafu, díky čemuž je graf odolnější.
Získá počáteční a koncový bod linie pozemku.
Změří vzdálenost od každého bodu k rozvodné síti a pak zjistí, která vzdálenost je větší.
Požadovaným výsledkem je, aby počáteční bod linie byl co nejblíže k rozvodné síti. Pokud tomu tak není, obrátíme směr linie pozemku. V opačném případě jednoduše vrátíme původní linii pozemku.
Je čas zjistit, kde budou umístěny měřiče služeb. Umístění je obvykle určeno požadavky místních úřadů, takže pouze zadáme vstupní hodnoty, které lze změnit tak, aby vyhovovaly různým podmínkám. Jako referenci pro vytvoření bodů použijeme souřadnicový systém podél linie pozemku. To velmi usnadní definování odsazení vzhledem k linii pozemku, bez ohledu na její orientaci.
Nyní je potřeba získat body na rozvodné síti, které jsou nejblíže umístění měřičů služeb. To nám umožní nakreslit servisní přípojky v modelovém prostoru tak, aby byly vždy kolmé k rozvodné síti Ideálním řešením je uzel Geometry.NearestPointTo.
Toto je křivka PolyCurve rozvodné sítě.
Toto jsou body vložení měřičů služeb.
Posledním krokem je vytvoření objektů v modelovém prostoru. Dříve vytvořené body vložení použijeme k vytvoření referencí bloků a pak pomocí bodů na rozvodné síti nakreslíme čáry k servisním přípojkám.
Při spuštění grafu byste měli vidět nové reference bloků a čáry servisních přípojek v modelovém prostoru. Zkuste změnit některé vstupy a sledujte, jak se vše automaticky aktualizuje!
Možní jste si všimli, že po umístění objektů pro jednu linii pozemku se při výběru jiné linie pozemku objekty „přesunou“.
Toto je výchozí chování aplikace Dynamo, které je v mnoha případech velmi užitečné. Může se však stát, že budete chtít postupně umístit několik servisních přípojek a nechat aplikaci Dynamo při každém spuštění vytvořit nové objekty, místo aby upravovala ty původní. Toto chování můžete ovládat změnou nastavení vazby objektů.
Změna tohoto nastavení způsobí, že aplikace Dynamo „zapomene“ na objekty, které vytvoří při každém spuštění. Zde je příklad spuštění grafu s vypnutou vazbou objektů pomocí Přehrávače skriptů Dynamo.
Zde je několik nápadů, jak byste mohli rozšířit možnosti tohoto grafu.
Umístěte několik servisních přípojek současně místo výběru jednotlivých linií pozemku.
Upravte vstupy tak, aby místo vodoměrů byly umístěny přípojky pro čištění kanalizace .
Přidejte přepínač , který umožní umístit jednu servisní přípojku na určitou stranu linie pozemku místo na obě strany.
Vývoj kinematických obálek pro ověření průjezdnosti je důležitou součástí návrhu železnice. Aplikaci Dynamo lze použít k vytvoření těles pro obalovou křivku místo vytváření a správy složitých podsestav koridoru pro tuto úlohu.
Práce s návrhovými liniemi koridoru
Transformace geometrie mezi souřadnicovými systémy
Vytvoření těles šablonováním
Řízení chování uzlu pomocí nastavení vázání
Tento graf bude funkční v aplikaci Civil 3D 2020 a vyšších verzích.
Začněte stažením níže uvedených vzorových souborů a poté otevřete soubor DWG a graf aplikace Dynamo.
Zde je uveden přehled logiky tohoto grafu.
Získejte návrhové linie ze zadané základny koridoru.
Vytvořte souřadnicové systémy podél návrhové linie koridoru s požadovanou roztečí.
Transformujte geometrii bloku profilu do souřadnicových systémů.
Šablonujte těleso mezi profily.
Vytvořte tělesa v aplikaci Civil 3D.
Pojďme na to!
Prvním krokem je získání dat koridoru. Model koridoru vybereme podle jeho názvu, v rámci koridoru vybereme konkrétní základnu a poté získáme návrhovou linii v rámci základny podle jejího kódu bodu.
Nyní vytvoříme souřadnicové systémy podél návrhových linií koridoru mezi daným počátečním a koncovým staničením. Tyto souřadnicové systémy se použijí k zarovnání geometrie bloku profilu vozidla s koridorem.
Všimněte si malých písmen XXX v pravém dolním rohu uzlu. Tato písmena znamenají, že nastavení vázání uzlu je nastaveno na hodnotu Vektorový součin, což je nutné k vytvoření souřadnicových systémů ve stejných hodnotách staničení pro obě návrhové linie.
Nyní je třeba nějakým způsobem vytvořit pole profilů vozidel podél návrhových linií. Provedeme transformaci geometrie z definice bloku profilu vozidla pomocí uzlu Geometry.Transform. Tento koncept je složitý na vizualizaci, takže než se podíváme na uzly, zde je grafické znázornění toho, co se stane.
V podstatě tedy přebíráme geometrii aplikace Dynamo z jedné definice bloku a přesouváme/otáčíme ji, přičemž vytváříme pole podél návrhové linie. Skvělá věc! Takto vypadá posloupnost uzlů.
Tento uzel získá definici bloku z dokumentu.
Tyto uzly získají geometrii objektů aplikace Dynamo v rámci bloku.
Tyto uzly v podstatě definují souřadnicový systém, ze kterého transformujeme geometrii.
A konečně tento uzel provádí vlastní transformaci geometrie.
Všimněte, že v tomto uzlu je definováno vázání Nejdelší.
A tady vidíme výsledek v aplikaci Dynamo.
Máme pro vás skvělou zprávu. To nejtěžší je za námi. Nyní je třeba pouze vygenerovat tělesa mezi profily. Toho snadno dosáhneme pomocí uzlu Solid.ByLoft.
Zde je výsledek. Nezapomeňte, že se jedná o tělesa aplikace Dynamo – musíme je ještě vytvořit v aplikaci Civil 3D.
Posledním krokem je vytvoření vygenerovaných těles v modelovém prostoru. Také jim přiřadíme barvu, aby byly dobře viditelné.
Zde je příklad spuštění grafu pomocí Přehrávače skriptů Dynamo.
Zde je několik nápadů, jak byste mohli rozšířit možnosti tohoto grafu.
Přidejte možnost používat různé rozsahy staničení pro každou trasu zvlášť.
Rozdělte tělesa na menší segmenty, které by bylo možné jednotlivě analyzovat z hlediska kolizí.
Zkontrolujte, zda se obálka těles ** protíná s návrhovými liniemi** a vybarvěte ty, které se střetávají.
Vedle položky DynamoUnfold vyberte nabídku možností .
Až si jej budete chtít vyzkoušet, přejděte do části .
Aplikace Dynamo for Civil 3D obsahuje několik předdefinovaných grafů, které vám pomohou podnítit některé další nápady, jak používat aplikaci Dynamo. Doporučujeme se na ně někdy podívat a také si přečtěte část v této příručce Primer.
Vytvořte graf aplikace Dynamo, který vloží text do modelového prostoru.
Uzly v knihovně jsou seskupeny do logických kategorií podle toho, co dělají. Přečtěte si část , ve které naleznete podrobnější informace.
Ve výchozím nastavení si aplikace Dynamo „pamatuje“ objekty, které vytvoří. Pokud změníte vstupní hodnoty uzlu, objekty v aplikaci Civil 3D se aktualizují místo vytváření zcela nových objektů. Další informace o tomto chování naleznete v části .
Úkol splněn!
Umístěte reference bloků vodoměrů ve stanovených vzdálenostech od linie pozemku a nakreslete čáru pro každou servisní přípojku kolmo na rozvodnou síť.
Pokud je pro vás geometrie křivek aplikace Dynamo novinkou, přečtěte si část .
Pokud jsou pro vás souřadnicové systémy novinkou, přečtěte si část .
Další informace naleznete v části .
Pokud je pro vás Přehrávač skriptů Dynamo novinkou, přečtěte si část .
Úkol splněn!
Pomocí bloku profilu vozidla vygenerujte 3D tělesa s volným prostorem podél koridoru.
Pokud jsou pro vás souřadnicové systémy novinkou, přečtěte si část .
Pokud je vázání uzlu pro vás novinkou, přečtěte si část .
Pokud je pro vás Přehrávač skriptů Dynamo novinkou, přečtěte si část .
Úkol splněn!
V této části naleznete několik cvičení zabývajících se tvorbou geometrie pomocí jazyka DesignScript. Pokračujte tím, že zkopírujete ukázkový kód v jazyce DesignScript do bloků kódů aplikace Dynamo.
Balíčky aplikace Dynamo jsou sady nástrojů vyvinuté třetími stranami za účelem rozšíření základních funkcí aplikace Dynamo. Jsou přístupné všem a připravené ke stažení kliknutím na tlačítko.
Další informace o tom, jak pracovat s balíčky, naleznete v části Balíčky.
Zde je seznam některých nejoblíbenějších balíčků, které mohou posunout vaše grafy aplikace Dynamo for Civil 3D na vyšší úroveň.
Civil 3D Toolkit je balíček pro aplikaci Dynamo for Civil 3D, který nabízí významná vylepšení funkcí aplikace Dynamo prostřednictvím velkého množství dalších uzlů.
Camber je balíček pro aplikaci Dynamo for Civil 3D s otevřeným zdrojovým kódem, který obsahuje stovky uzlů pro práci s popisky, externími referencemi, datovými zkratkami, styly a pro další akce.
CivilConnection je balíček pro aplikaci Dynamo pro aplikaci Revit s otevřeným zdrojovým kódem, který umožňuje výměnu informací mezi aplikacemi Civil 3D, Dynamo a Revit.
Arkance Systems Nodes je balíček pro aplikaci Dynamo for Civil 3D, který obsahuje řadu užitečných uzlů pro práci s kótami, tabulkami, pohledy, řízením vrtání a dalšími funkcemi.
Aplikace Dynamo for Civil 3D obsahuje velmi výkonný mechanismus pro „zapamatování“ objektů vytvořených jednotlivými uzly. Tento mechanismus se nazývá vazby objektů a umožňuje grafu aplikace Dynamo vytvářet konzistentní výsledky při každém spuštění ve stejném dokumentu. I když je to v mnoha situacích velmi žádoucí, existují jiné situace, kdy budete chtít mít nad chováním aplikace Dynamo větší kontrolu. Tato část vám pomůže pochopit, jak vazby objektů fungují a jak je můžete využít.
Podívejme se na tento graf, který vytváří kružnici v modelovém prostoru v aktuální hladině.
Všimněte si, co se stane, když se poloměr změní.
Toto je vazba objektů v akci. Aplikace Dynamo se ve výchozím nastavení chová tak, že upraví poloměr kružnice, místo aby při každé změně vstupu poloměru vytvořila novou kružnici. Je tomu tak proto, že uzel Object.ByGeometry si „pamatuje“, že při každém spuštění grafu vytvořil tuto konkrétní kružnici. Aplikace Dynamo si navíc tuto informaci uloží, takže při příštím otevření dokumentu aplikace Civil 3D a spuštění grafu se bude chovat úplně stejně.
Podívejme se na příklad, ve kterém můžete chtít změnit výchozí chování vazby objektů aplikace Dynamo. Řekněme, že chcete vytvořit graf, který umístí text do středu kružnice. Vaším záměrem je však, aby graf mohl být spouštěn stále dokola a přitom se pokaždé umístil nový text do jakékoli vybrané kružnice. Níže vidíte, jak by mohl tento graf vypadat.
Toto se však ve skutečnosti stane, když je vybrána jiná kružnice.
Vypadá to, že text je při každém spuštění grafu odstraněn a znovu vytvořen. Ve skutečnosti se pozice textu upravuje podle toho, která kružnice je vybrána. Jedná se tedy o stejný text, jen na jiném místě. Chcete-li pokaždé vytvořit nový text, je nutné upravit nastavení vazby objektů aplikace Dynamo tak, aby nebyla zachována žádná data vazby (viz část #binding-settings níže).
Po provedení této změny získáme požadované chování.
Aplikace Dynamo for Civil 3D umožňuje upravit výchozí chování vazby objektů pomocí nastavení Úložiště dat vazeb v nabídce aplikace Dynamo.
Možnosti nastavení Úložiště dat vazeb jsou k dispozici v aplikaci Civil 3D 2022.1 a vyšších verzích.
Ve výchozím nastavení jsou povoleny všechny možnosti. Zde je souhrn toho, co jednotlivé možnosti dělají.
Pokud je tato povolena možnost, aplikace Dynamo „zapomene“ na objekty, které vytvořila při posledním spuštění grafu. Graf lze tedy spustit v libovolném výkresu v libovolné situaci a pokaždé vytvoří nové objekty.
Vhodné použití
Tuto možnost použijte, pokud chcete, aby aplikace Dynamo „zapomněla“ na vše, co provedla v předchozích spuštěních, a pokaždé vytvořila nové objekty.
Tato možnost znamená, že metadata vazby objektů budou při ukládání serializována do grafu (soubor .dyn). Pokud graf zavřete nebo znovu otevřete a spustíte jej ve stejném výkresu, pak by mělo vše fungovat stejně, jako když jste jej opustili. Jestliže graf spustíte v jiném výkresu, budou data vazby z grafu odstraněna a vytvoří se nové objekty. To znamená, že pokud otevřete původní výkres a spustíte graf znovu, vytvoří se kromě starých objektů i nové.
Vhodné použití
Tuto možnost použijte, pokud chcete, aby si aplikace Dynamo „zapamatovala“ objekty, které vytvořila při posledním spuštění v určitém výkresu.
Tato možnost je vhodná pro situace, kdy je možné zachovat vztah 1:1 mezi konkrétním výkresem a grafem aplikace Dynamo. Možnosti 1 a 3 jsou vhodnější pro grafy, které jsou navrženy tak, aby je bylo možné spouštět ve více výkresech.
Tato možnost je podobná možnosti 2, s tím rozdílem, že data vazby objektu jsou jsou serializována ve výkresu namísto v souboru .dyn. Pokud graf zavřete nebo znovu otevřete a spustíte jej ve stejném výkresu, pak by mělo vše fungovat stejně, jako když jste jej opustili. Jestliže graf spustíte v jiném výkresu, data vazby zůstanou zachována v původním výkresu, protože jsou uložena ve výkresu, nikoli v grafu.
Vhodné použití
Tuto možnost použijte, pokud chcete použít stejný graf ve více výkresech a aplikace Dynamo si má „pamatovat“, co provedla v každém z nich.
V první řadě je třeba poznamenat, že tato možnost nemá žádný vliv na interakci grafu s výkresem při spuštění grafu prostřednictvím hlavního rozhraní aplikace Dynamo. Tato možnost se použije pouze tehdy, když je graf spuštěn pomocí Přehrávače skriptů Dynamo.
Pokud je pro vás Přehrávač skriptů Dynamo novinkou, přečtěte si část Přehrávač skriptů Dynamo.
Jestliže graf spustíte pomocí hlavního rozhraní aplikace Dynamo a pak jej zavřete a spustíte stejný graf pomocí Přehrávače skriptů Dynamo, vytvoří se nové objekty nad těmi, které byly vytvořeny dříve. Jakmile však Přehrávač skriptů Dynamo graf jednou spustí, serializuje data vazeb objektů ve výkresu. Pokud tedy graf spustíte vícekrát prostřednictvím Přehrávače skriptů Dynamo, bude objekty aktualizovat, místo aby vytvářel nové. Jestliže graf spustíte v Přehrávači skriptů Dynamo v jiném výkresu, data vazby zůstanou zachována v původním výkresu, protože jsou uložena ve výkresu, nikoli v grafu.
Vhodné použití
Tuto možnost použijte, pokud chcete spustit graf pomocí Přehrávače skriptů Dynamo ve více výkresech a nechat jej, aby si „pamatoval“, co provedl v každém z nich.
Blok kódu je jedinečná funkce aplikace Dynamo, která dynamicky propojuje prostředí vizuálního programování s textovým. Blok kódu má přístup ke všem uzlům aplikace Dynamo a umožňuje definovat celý graf v jediném uzlu. Doporučujeme této kapitole věnovat zvýšenou pozornost, protože blok kódu je základním stavebním kamenem aplikace Dynamo.
Tato příručka Primer je pouze začátkem vaší cesty s aplikací Dynamo for Civil 3D. K dispozici je množství znalostí dostupných od aktivní komunity uživatelů aplikace Dynamo. Během učení vám doporučujeme prozkoumat některé z těchto zdrojů.
Bloky kódu umožňují pracovat v jazyce DesignScript, což je programovací jazyk používaný v aplikaci Dynamo. Jazyk DesignScript je čitelný a stručný jazyk, který nabízí okamžitou zpětnou vazbu k malým úsekům kódu, ale je v něm možné vytvářet také velké a složité programy. DesignScript také tvoří základ systému, který aplikace Dynamo používá „pod pokličkou“. Protože většina funkcí uzlů aplikace Dynamo je s tímto skriptovacím jazykem v rovnocenném vztahu, znamená to, že se lze plynule přesunout od uzlů ke skriptování.
Pro začátečníky lze uzly převést automaticky na text, což jim usnadní proces učení jazyka DesignScript, případně tím lze zpřehlednit velké části grafu. K tomu slouží proces „Uzel na kód“, který je podrobněji popsán v části Syntaxe jazyka DesignScript. Pokročilejší uživatelé si mohou pomocí bloků kódu přizpůsobovat existující funkce a vytvářet standardní programátorské konstrukce. Pro všechny uživatele nezávisle na zkušenostech je k dispozici velké množství útržků s kódem, které jim pomohou při práci na návrzích. Ačkoliv výraz „blok kódu“ může být pro neprogramátory poněkud zastrašující, ve skutečnosti se jedná o snadno použitelnou funkci. Začátečník dokáže používat blok kódu efektivně i s minimem programování, zatímco pokročilý uživatel může vytvořit skriptované definice, které bude možné vyvolat na jiném místě definice aplikace Dynamo.
Stručně řečeno, bloky kódu představují rozhraní pro textové skriptování v rámci prostředí vizuálního programování. Lze je používat jako čísla, řetězce, vzorce a další datové typy. Blok kódu je navržen přímo pro aplikaci Dynamo – uživatel může v bloku kódu definovat proměnné a ty budou následně automaticky přidány k uzlu jako vstupy:
Bloky kódu umožňují uživatelům flexibilně určit, které vstupy bude uzel obsahovat. Zde je několik způsobů, jak vytvořit základní bod se souřadnicemi (10, 5, 0):
Jakmile se seznámíte s pokročilejšími funkcemi v knihovně, zjistíte, že ruční zadání textu „Point.ByCoordinates“ je rychlejší, než hledání správného uzlu v knihovně. Pokud například zadáte Point., aplikace Dynamo zobrazí seznam možných funkcí, které lze použít pro výraz Point. Díky tomu je skriptování intuitivnější a usnadní vám používání funkcí v aplikaci Dynamo.
Blok kódu se nachází v části Core>Input>Actions>Code Block. Stačí však dvakrát kliknout na pracovní plochu a blok kódu se ihned zobrazí. Tento uzel se používá tak často, že jej lze vytvořit i dvojím kliknutím.
Bloky kódu umožňují flexibilní práci s datovými typy. Uživatel může rychle definovat čísla, řetězce a vzorce a blok kódu nastaví požadovaný výstup.
Na obrázku níže vidíte starý způsob práce, který je poněkud zdlouhavý: uživatel musí vyhledat požadovaný uzel v rozhraní, přidat uzel na pracovní plochu a poté zadat data. S blokem kódu uživateli stačí, když dvakrát klikne na pracovní plochu, čímž vytvoří uzel, a poté zadá požadovaná data splňující základní syntaxi.
Uzly number, string a formula představují příklady uzlů aplikace Dynamo, které jsou v porovnání s blokem kódu poněkud zastaralé.
„Stará škola“
Bloky kódu
Aplikace Dynamo sice umožňuje vytvářet mnoho složitých geometrických útvarů, ale jednoduchá geometrická primitiva tvoří základ jakéhokoliv výpočetního návrhu: mohou být použita přímo v konečném návrhu nebo mohou sloužit jako základ pro generování složitějších geometrií.
Ačkoliv se nejedná o geometrii, objekt CoordinateSystem je důležitým nástrojem pro jejich tvorbu. V objektu CoordinateSystem je uložena pozice a geometrické transformace, například otočení, kolmý posun a změna měřítka.
Chcete-li vytvořit objekt CoordinateSystem na souřadnicích X = 0, Y = 0, Z = 0 bez otočení, změny měřítka nebo kolmého posunu, jednoduše zavolejte konstruktor Identity:
Objekty CoordinateSystems s geometrickými transformacemi jsou mimo rozsah této kapitoly, nicméně souřadnicový systém v zadaném bodě je možné vytvořit pomocí konstruktoru CoordinateSystem.ByOriginVectors:
Nejjednodušším geometrickým primitivem je bod, který představuje bezrozměrné místo v trojrozměrném prostoru. Jak již bylo zmíněno, bod v určitém souřadnicovém systému lze vytvořit několika způsoby: Konstruktor Point.ByCoordinates vytvoří bod se zadanými souřadnicemi X, Y a Z, konstruktor Point.ByCartesianCoordinates vytvoří bod se zadanými souřadnicemi X, Y a Z v určitém souřadnicovém systému, konstruktor Point.ByCylindricalCoordinates vytvoří bod ležící na válci s poloměrem, úhlem otočení a výškou a konstruktor Point.BySphericalCoordinates vytvoří bod ležící na kouli s poloměrem a dvěma úhly otočení.
Tento příklad ukazuje body vytvořené v různých souřadnicových systémech:
Primitivum s vyšším rozměrem v aplikaci Dynamo je úsečka, která představuje nekonečné množství bodů mezi dvěma koncovými body. Čáry lze vytvořit explicitním zadáním dvou okrajových bodů do konstruktoru Line.ByStartPointEndPoint nebo zadáním počátečního bodu, směru a délky v tomto směru do konstruktoru Line.ByStartPointDirectionLength.
Aplikace Dynamo nabízí objekty reprezentující nejzákladnější trojrozměrná geometrická primitiva: kvádry vytvářené konstruktorem Cuboid.ByLengths, kužely vytvářené konstruktory Cone.ByPointsRadius a Cone.ByPointsRadii, válce vytvářené konstruktorem Cylinder.ByRadiusHeight a koule vytvářené konstruktorem Sphere.ByCenterPointRadius.
Funkce lze vytvořit v bloku kódu a lze je znovu načíst jinde v definici aplikace Dynamo. Tím se vytvoří další hladina ovládacího prvku v parametrickém souboru a lze ji zobrazit jako textovou verzi vlastního uzlu. V tomto případě je „nadřazený“ blok kódu snadno dostupný a může být umístěn kdekoli na grafu. Nepotřebuje žádné dráty!
První řádek obsahuje klíčové slovo „def“, pak název funkce a názvy vstupů v závorkách. Závorky definují tělo funkce. Vrátí hodnotu s „return =“. Uzly bloku kódu, které definují funkci, nemají vstupní nebo výstupní porty, protože se volají z jiných uzlů bloku kódu.
Volejte funkci s jiným uzlem bloku kódu ve stejném souboru, a to poskytnutím stejného názvu a stejného počtu argumentů. Funguje stejně uzly v knihovně.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V tomto cvičení vytvoříme obecnou definici, která vytvoří koule ze vstupního seznamu bodů. Poloměr těchto koulí je řízen vlastností Z každého bodu.
Začneme řadou deseti hodnot v rozsahu od 0 do 100. Tyto položky můžete vložit do uzlů Point.ByCoordinates za účelem vytvoření diagonální úsečky.
Vytvořte blok kódu a vložte naši definici.
Použijte tyto řádky kódu:
InputPt je název, který jsme zadali k reprezentaci bodů, které budou řídit funkci. Zatím funkce nic nedělá, ale v následujících krocích ji rozšíříme.
Přidáme-li funkci bloku kódu, umístíme komentář a proměnnou sphereRadius, která dotazuje pozici Z každého bodu. Nezapomeňte, že metoda inputPt.Z nevyžaduje jako metoda závorky. Toto je dotaz vlastností existujícího prvku, takže nejsou nutné žádné vstupy:
Nyní si připomeňme funkci, kterou jsme vytvořili v jiném bloku kódu. Pokud dvakrát klikneme na kreslicí plochu a vytvoříme nový blok kódu a zadáme jej do položky sphereB, všimneme si, že aplikace Dynamo navrhne funkci sphereByZ, kterou jsme definovali. Vaše funkce byla přidána do knihovny intellisense. Působivé.
Nyní zavoláme funkci a vytvoříme proměnnou s názvem Pt, která bude zahrnovat body vytvořené v dřívějších krocích:
Ve výstupu si všimneme, že máme všechny hodnoty null. Jak je to možné? Když jsme definovali funkci, vypočítali jsme proměnnou sphereRadius, ale nedefinovali jsme, co by měla funkce vrátit jako výstup. To můžeme opravit v dalším kroku.
Důležitý krok je, abychom definovali výstup funkce přidáním řádku
return = sphereRadius;
do funkce sphereByZ.Nyní vidíme, že výstupem bloku kódu jsou souřadnice Z každého bodu.
Nyní vytvoříme skutečné koule úpravou nadřazené funkce.
Nejprve definujeme kouli pomocí řádku kódu:
sphere=Sphere.ByCenterPointRadius(inputPt,sphereRadius);
Dále změníme návratovou hodnotu na sphere místo sphereRadius:
return = sphere;
. Díky tomu uvidíme v náhledu aplikace Dynamo obří koule!
1. Chcete-li zmírnit velikost těchto koulí, aktualizujte hodnotu sphereRadius přidáním oddělovače:
sphereRadius = inputPt.Z/20;
. Nyní můžeme vidět jednotlivé koule a začít chápat vztah mezi poloměrem a hodnotou Z.
V uzlu Point.ByCoordinates změnou vázání z možnosti Nejkratší seznam na Kartézský součin vytvoříme osnovu bodů. Funkce sphereByZ je stále plně funkční, takže všechny body vytvářejí koule s poloměry na základě hodnot Z.
A jen tak na zkoušku připojíme původní seznam čísel do vstupu X uzlu Point.ByCoordinates. Teď máme krychli koulí.
Poznámka: Pokud výpočet trvá na vašem počítači dlouhou dobu, zkuste změnit číslo #10 na hodnotu #5.
Pamatujte, že funkce sphereByZ, kterou jsme vytvořili, je obecná funkce, takže můžeme vyvolat šroubovici z předchozí lekce a použít na ni tuto funkci.
Jeden poslední krok: Pojďme řídit poměr poloměru s uživatelem definovaným parametrem. Chcete-li to udělat, je nutné vytvořit nový vstup pro funkci a také nahradit rozdělovač 20 parametrem.
Aktualizujte definici sphereByZ na:
Aktualizujte podřazené bloky kódu přidáním proměnné ratio ke vstupu:
sphereByZ(Pt,ratio);
. Připojte posuvník k nově vytvořenému vstupu bloku kódu a změňte velikost poloměrů podle poměru poloměrů.
Mnoho příkladů se dosud soustředilo na tvorbu vícerozměrných geometrií z méněrozměrných geometrií. Pomocí metod průsečíků je možné z vícerozměrných geometrií vygenerovat méněrozměrné objekty a po vytvoření geometrií lze jejich tvar dále upravit pomocí příkazů oříznutí.
Metoda Intersect je definována u všech geometrií aplikace Dynamo, teoreticky lze tedy provést průnik libovolných dvou geometrií. Některé průniky samozřejmě nedávají smysl, například průnik s body, protože výsledným objektem bude vždy samotný vstupní bod. Další možné kombinace průniků mezi objekty jsou uvedeny v následujícím diagramu. Následující tabulka uvádí výsledky různých operací průniku:
Následující velmi jednoduchý příklad ukazuje průnik roviny s plochou Nurbs. Průnik vygeneruje pole objektů NurbsCurve, které lze používat jako kterékoliv jiné objekty NurbsCurve.
Metoda Trim je velmi podobná metodě Intersect v tom, že je definována u téměř všech geometrií. Metoda Trim je však omezenější než metoda Intersect.
U metody Trim je nutné zadat výběrový bod, který určuje, která geometrie má být zahozena a která má být zachována. Aplikace vyhledá a zahodí oříznutou geometrii, která bude výběrovému bodu nejblíže.
Objekty ve výpočetních návrzích se výjimečně vytvářejí přímo v jejich konečných pozicích a tvarech, většinou jsou přesouvány, otáčeny a jinak transformovány. Vektorová matematika slouží jako geometrická pomůcka, která dává geometrii směr a orientaci, a také slouží ke konceptualizaci pohybů ve 3D prostoru bez vizuální reprezentace.
Na nejzákladnější úrovni představuje vektor pozici ve 3D prostoru a často je reprezentován jako bod s šipkou od pozice (0, 0, 0) do jiné pozice. Vektory je možné vytvořit pomocí konstruktoru ByCoordinates, který jako vstup přijímá souřadnice X, Y a Z nově vytvořeného vektoru. Vektory nejsou geometrickými objekty a nezobrazují se v okně aplikace Dynamo. Informace o nově vytvořeném nebo upraveném vektoru je možné vypsat do konzolového okna:
U vektorových objektů je definována sada matematických operací, které umožňují přičítat, odečítat, násobit a jinak přesouvat objekty ve 3D prostoru, podobně jako lze tyto operace provádět v 1D prostoru na číselné ose.
Součet vektorů je definován jako součet komponent dvou vektorů a lze si jej představit tak, že na špičku jednoho vektoru umístíme druhý vektor. Součet vektorů lze provést metodou Add a je znázorněn na diagramu vlevo.
Podobně lze metodou Subtract od sebe dva vektorové objekty odečíst. Odečtení vektoru si lze představit tak, že se jedná o vektor směřující od prvního vektoru k druhému vektoru.
Násobení vektorů si lze představit jako přesun koncového bodu vektoru v jeho směru o určený faktor měřítka.
Při změně měřítka vektoru je často potřeba, aby výsledná délka odpovídala hodnotě měřítka. Toho lze snadno dosáhnout normalizací vektoru, jinými slovy nastavením jeho délky na 1.
Vektor c má stejný směr jako vektor a (1, 2, 3), ale jeho délka je nyní přesně 5.
Ve vektorové matematice existují dvě další metody, pro které v 1D matematice neexistují podobné operace, jedná se o vektorový a skalární součin. Vektorový součin vytváří vektor, který je kolmý (90 stupňů) ke dvěma existujícím vektorům. Například vektorový součin os X a Y je osa Z, ale vstupní vektory na sebe nemusí být nutně kolmé. Vektorový součin lze vypočítat metodou Cross.
Další pokročilejší funkcí vektorové matematiky je skalární součin. Skalární součin mezi dvěma vektory je reálné číslo (a nikoliv vektor), které souvisí s úhlem mezi dvěma vektory (ale nejedná se přímo o úhel). Jednou z užitečných vlastností skalárního součinu je, že skalární součin je nulový pouze v případě, kdy jsou na sebe vektory kolmé. Skalární součin lze vypočítat metodou Dot.
V aplikaci Dynamo existují dva základní způsoby, jak vytvořit křivky volného tvaru: určením kolekce bodů a interpolací vyhlazené křivky mezi nimi, nebo určením řídicích bodů křivky. Interpolované křivky jsou užitečné, když konstruktér přesně ví, jaký tvar má linie mít, nebo pokud návrh obsahuje konkrétní omezení, kudy křivka může a nemůže procházet. Křivky určené řídicími body jsou vlastně úsečky, které algoritmus vyhladí do podoby konečné křivky. Určení křivky pomocí řídicích bodů je užitečné pro zkoušení různých tvarů s různou mírou vyhlazení, nebo pokud je potřeba dosáhnout plynulého přechodu mezi úsečkami.
Chcete-li vytvořit interpolovanou křivku, jednoduše zadejte kolekci bodů do metody NurbsCurve.ByPoints.
Vygenerovaná křivka protne všechny vstupní body, počínaje prvním bodem a konče posledním bodem v kolekci. Pomocí volitelného parametru lze vytvořit periodickou uzavřenou křivku. Aplikace Dynamo chybějící segment automaticky vytvoří, proto není potřeba zadávat koncový bod stejný jako počáteční bod.
Křivky Nurbs lze vygenerovat stejným způsobem, vstupní body reprezentují koncové body úsečky a druhý parametr určuje sílu a typ vyhlazení, kterému se říká stupeň.* Křivka se stupněm 1 nemá žádné vyhlazení, jedná se o křivku polyline.
Křivka se stupněm 2 je vyhlazená, takže prochází středy lomených čar a v průsečíku je k nim tečná:
Aplikace Dynamo podporuje křivky NURBS (Non-Uniform Rational B-Spline) až do stupně 20 a následující skript demonstruje účinek vyšších stupňů vyhlazení na tvar křivky:
Poznámka: křivka musí mít alespoň o jeden řídicí bod více, než je její stupeň.
Další výhodou tvorby křivek pomocí řídicích bodů je možnost zachování tečnosti mezi jednotlivými segmenty. To lze provést tak, že se získá směr mezi posledními dvěma řídicími body a v tomto směru se bude pokračovat u prvních dvou řídicích bodů následující křivky. V následujícím příkladu jsou vytvořeny dvě samostatné křivky NURBS, které jsou vyhlazené jako jedna křivka:
*Jedná se o velmi zjednodušený popis geometrie křivky NURBS, přesnější a podrobnější popis naleznete v literatuře (Pottmann, et al, 2007).
V bloku kódu je několik základních metod zkratky, které umožňují správu dat velice usnadnit. Rozdělíme si základy níže a prodiskutujeme, jak lze tuto zkratku použít k vytváření a zadávání dotazů na data.
Metodu definování rozsahů a posloupností lze redukovat na základní zkratku. Při definování seznamu číselných dat v bloku kódu pomocí syntaxe „..“ použijte jako vodítko obrázek níže. Po osvojení této notace je vytváření číselných dat skutečně efektivní proces:
V tomto příkladu je číselný rozsah nahrazen základní syntaxí bloku kódu definující
beginning..end..step-size;
. Číselně vyjádřeno získáte:0..10..1;
.Všimněte si, že syntaxe
0..10..1;
je ekvivalentní0..10;
. Velikost kroku 1 je výchozí hodnotou pro notaci zkratky. Proto0..10;
přidělí posloupnost od 0 do 10 s velikostí kroku 1.Příklad s uzlem Sequence je podobný, ale s tím rozdílem, že použijeme znak „#“, abychom určili, že chceme v seznamu zadat 15 hodnot, nikoli seznam, který pokračuje do 15. V tomto případě definujeme:
beginning..#ofSteps..step-size:
. Skutečná syntaxe posloupnosti je0..#15..2
.Pomocí „#“ z předchozího kroku nyní ji nyní umístíme do části step-size syntaxe. Nyní máme číselný rozsah sahající od beginning do end a notace step-size rovnoměrně rozděluje počet hodnot mezi obě části:
beginning..end..#ofSteps
.
Vytváření pokročilých rozsahů umožňuje jednoduše pracovat se seznamem seznamů. V příkladech níže izolujeme proměnnou od uzlu primárního rozsahu a vytvoříme další rozsah tohoto seznamu.
1. Vytvořte vnořené rozsahy a porovnejte notaci s „#“ a bez ní. Stejná logika se používá v základních rozsazích, ale je trochu složitější.
2. Můžeme definovat podrozsah na libovolném místě v primárním rozsahu a všimněte si, že můžeme mít také dva podrozsahy.
3. Řízením hodnoty „end“ v rozsahu vytvoříme více rozsahů různých délek.
V rámci logického cvičení porovnejte dvě výše uvedené zkratky a zkuste analyzovat, jak notace podrozsahů a # určují výsledný výstup.
Kromě vytváření seznamů pomocí zkratky můžeme také vytvořit seznamy za běhu. Tento seznam může obsahovat širokou škálu typů prvků a lze jej také dotazovat (nezapomeňte, že seznamy jsou samy o sobě objekty). Stručně řečeno, pomocí bloku kódu můžete vytvářet seznamy a získávat položky ze seznamu pomocí hranatých závorek:
1. Seznamy můžete rychle vytvářet pomocí řetězců a dotazovat je pomocí položek indexů.
2. Pomocí notace zkratky můžete vytvářet seznamy s proměnnými a dotazy.
Správa s vnořenými seznamy je podobný proces. Při použití více sad hranatých závorek si dávejte pozor na pořadí seznamu:
1. Definujte seznam seznamů.
2. Získání seznamu s použitím notace s jednou hranatou závorkou.
3. Získání položky s použitím notace se dvěma hranatými závorkami.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V tomto cvičení vyzkoušíme naše nové dovednosti zápisu a vytvoříme zábavný zvlněný povrch definovaný rozsahy a vzorci. Během tohoto cvičení si všimněte, jak se používá blok kódu a existující uzly aplikace Dynamo společně: K oddělení práce s daty použijeme blok kódu, zatímco uzly aplikace Dynamo jsou vizuálně rozvrženy pro čitelnost definice.
Začněte vytvořením povrchu spojením výše uvedených uzlů. Místo použití číselného uzlu k definování šířky a délky dvakrát klikněte na kreslicí plochu a do bloku kódu zadejte hodnotu 100;
.
Definujte rozsah mezi 0 a 1 s 50 děleními zadáním hodnoty
0..1..#50
do bloku kódu.Připojte rozsah k uzlu Surface.PointAtParameter, který nabývá hodnot u a v v rozsahu 0 až 1 v celém povrchu. Nezapomeňte změnit hodnotu vázání na Kartézský součin kliknutím pravým tlačítkem myši na uzel Surface.PointAtParameter.
V tomto kroku použijeme první funkci k přesunutí rastru bodů nahoru v ose Z. Tento rastr bude řídit generovaný povrch podle základní funkce. Přidejte nové uzly, jak je znázorněno na obrázku níže.
Místo použití uzlu vzorce použijeme blok kódu s řádkem:
(0..Math.Sin(x*360)..#50)*5;
. Jednoduše řečeno, definujeme rozsah se vzorcem uvnitř něj. Tento vzorec je funkce Sinus. Funkce sinus získá v aplikaci Dynamo vstupy ve stupních, takže abychom získali plnou sinusovou vlnu, je nutné násobit hodnoty x (toto je vstup rozsahu od 0 do 1) hodnotou 360. Dále chceme stejný počet dělení jako řídicí body rastru pro každý řádek, takže definujeme padesát oddílů pomocí #50. Nakonec násobitel hodnoty 5 jednoduše zvýší amplitudu převodu, abychom viděli účinek v náhledu aplikace Dynamo.
I když předchozí blok kódu fungoval dobře, nebyl zcela parametrický. Chceme dynamicky řídit jeho parametry, takže nahradíme řádek z předchozího kroku řetězcem
(0..Math.Sin(x*360*cycles)..#List.Count(x))*amp;
. Díky tomu můžeme definovat tyto hodnoty podle vstupů.
Změnou posuvníků (v rozmezí od 0 do 10) získáme zajímavé výsledky.
Provedením transpozice na číselný rozsah obrátíme směr vlny závěsu:
transposeList = List.Transpose(sineList);
.
Pokud do kódu přidáme sineList a tranposeList, vytvoří se deformovaný povrch vaječné skořápky:
eggShellList = sineList+transposeList;
.
Změňte hodnoty posuvníků uvedené níže, abychom získali klidnější průběh tohoto algoritmu.
Nakonec se budeme dotazovat na izolované části dat pomocí bloku kódu. Chcete-li regenerovat povrch s určitým rozsahem bodů, přidejte blok kódu nad uzel Geometry.Translate a NurbsSurface.ByPoints. Tento blok kódu obsahuje řádek s následujícím textem: sineStrips[0..15..1];
. Tím se vybere prvních 16 řádků bodů (z 50). Při dalším vytvoření povrchu vidíme, že jsme vytvořili izolovanou část rastru bodů.
V posledním kroku, abychom tento blok kódu vytvořili více parametrický, budeme dotaz řídit pomocí posuvníku v rozsahu od 0 do 1. Provedeme to pomocí tohoto řádku kódu:
sineStrips[0..((List.Count(sineStrips)-1)*u)];
. Může se to zdát matoucí, ale řádek kódu nám umožňuje rychle změnit měřítko délky seznamu na násobitel mezi 0 a 1.
Hodnota 0.53
na posuvníku vytvoří povrch těsně za středem osnovy.
Posuvník 1
podle očekávání vytvoří povrch z plné osnovy bodů.
Při pohledu na vizuální graf můžeme zvýraznit bloky kódu a zobrazit jednotlivé funkce.
1. První blok kódu nahrazuje uzel Number.
2. Druhý blok kódu nahrazuje uzel Number Range.
3. Třetíblok kódu nahrazuje uzel Formula (a také uzly List.Transpose, List.Count a Number Range).
4. Čtvrtý blok kódu se dotazuje na seznam seznamů, přičemž nahrazuje uzel List.GetItemAtIndex.
Používá: Bod
Křivka
Rovina
Plocha
Těleso
Na: Křivka
Ano
Ne
Ne
Ne
Ne
Polygon
-
Ne
Ano
Ne
Ne
Plocha
-
Ano
Ano
Ano
Ano
Těleso
-
-
Ano
Ano
Ano
Typ dat
Standardní aplikace Dynamo
Ekvivalent bloku kódu
Čísla
Řetězce
Posloupnosti
Rozsahy
Získat položku na indexu
Vytvořit seznam
Zřetězit řetězce
Podmíněné výrazy
Uzly
Ekvivalent bloku kódu
Poznámka
Libovolný operátor (+, &&, >=, Not atd.)
+, &&, >=, ! atd.
Všimněte si, že z „Not“ se stane „!“, ale uzel se nazývá Not, aby se odlišil od uzlu „Factorial“.
Booleovská hodnota True
true;
Poznámka: malá písmena
Booleovská hodnota False
false;
Poznámka: malá písmena
Nyní, když jsme ukázali, jak používat skripty jazyka Python v aplikaci Dynamo, podívejme se na připojení knihoven aplikace Revit do prostředí skriptování. Pamatujte, importovali jsme standardní knihovny jazyka Python a hlavní uzly aplikace Dynamo pomocí prvních čtyř řádků v níže uvedeném bloku kódu. Chcete-li importovat uzly aplikace Revit, prvky aplikace Revit a správce dokumentů aplikace Revit, stačí přidat pouze několik dalších řádků:
To nám poskytuje přístup k rozhraní API aplikace Revit a nabízí vlastní skriptování pro libovolnou úlohu aplikace Revit. Díky kombinaci procesu vizuálního programování se skriptováním rozhraní API aplikace Revit se spolupráce a vývoj nástrojů výrazně zlepšují. Například správce BIM i konstruktér schémat mohou spolupracovat na stejném grafu. Při této spolupráci mohou zlepšit návrh a provedení modelu.
Plán projektu aplikace Dynamo spočívá v rozšíření rozsahu implementace platformy. Protože aplikace Dynamo přidává další programy do objektu docket, uživatelé budou mít přístup k programům API specifickým pro platformu z prostředí skriptování v jazyce Python. Zatímco v aplikaci Revit se jedná o případovou studii, můžeme předvídat další kapitoly v budoucnosti nabízející komplexní výukové programy zaměřené na skriptování v jiných platformách. Navíc je nyní k dispozici mnoho knihoven IronPython, které lze importovat do aplikace Dynamo.
Níže uvedené příklady ukazují způsoby implementace operací specifických pro aplikaci Revit z aplikace Dynamo pomocí jazyka Python. Podrobnější informace o vztahu jazyka Python s aplikacemi Dynamo a Revit naleznete na stránce Wiki k aplikaci Dynamo. Dalším užitečným zdrojem pro aplikace Python a Revit je projekt prostředí Python Shell aplikace Revit.
Vytvořte nový projekt aplikace Revit.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V těchto cvičeních prozkoumáme základní skripty jazyka Python v rozhraní Dynamo pro aplikaci Revit. Toto cvičení se zaměří na práci se soubory a prvky aplikace Revit a také na komunikaci mezi aplikacemi Revit a Dynamo.
Jedná se o jednoduchou metodu získávání souborů doc, uiapp a app aplikace Revit připojených k vaší relaci Dynamo. Programátoři, kteří předtím pracovali v rozhraní API aplikace Revit, si mohou všimnout položek v seznamu sledovaných položek. Pokud se vám to nezdá povědomé, tak to nevadí. Použijeme další příklady ve cvičeních níže.
Zde je způsob importu služeb aplikace Revit a získání dat dokumentu v aplikaci Dynamo.
Podívejte se na uzel Python v aplikaci Dynamo. Kód můžete také najít níže:
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V tomto cvičení vytvoříme pomocí uzlu Python aplikace Dynamo jednoduchou křivku modelu v aplikaci Revit.
Začněte vytvořením nové rodiny Koncepční objem v aplikaci Revit.
Otevřete složku rodiny Koncepční objem a použijte soubor šablony Metric Mass.rft.
V aplikaci Revit pomocí klávesové zkratky un
vyvolejte nastavení jednotek projektu a změňte jednotku délky na metry.
Spusťte aplikaci Dynamo a vytvořte sadu uzlů jako na obrázku níže. Nejprve vytvoříme dva referenční body v aplikaci Revit z uzlů aplikace Dynamo.
Vytvořte blok kódu a zadejte hodnotu
"0;"
.Tuto hodnotu připojte ke vstupům X, Y a Z uzlu ReferencePoint.ByCoordinates.
Vytvořte tři posuvníky v rozsahu od -100 do 100 s velikostí kroku 1.
Připojte všechny posuvníky k uzlu ReferencePoint.ByCoordinates.
Přidejte do pracovního prostoru uzel Python, kliknutím na tlačítko „+“ v uzlu přidejte další vstup a připojte dva referenční body, jeden ke každému vstupu. Otevřete uzel Python.
Podívejte se na uzel Python v aplikaci Dynamo. Celý kód najdete níže.
System.Array: Aplikace Revit vyžaduje jako vstup systémové pole (místo seznamu jazyka Python). Jedná se pouze o jeden další řádek kódu, ale zohlednění typů argumentů usnadní programování v aplikaci Revit v jazyce Python.
V aplikaci Dynamo jsme pomocí jazyka Python vytvořili dva referenční body a čáru, která je spojuje. V dalším cvičení zkusíme něco složitějšího.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Toto cvičení vysvětluje témata připojení dat a geometrie z aplikace Revit do aplikace Dynamo a zpět. Začneme otevřením souboru Revit-StructuralFraming.rvt. Po otevření spusťte aplikaci Dynamo a otevřete soubor Revit-StructuralFraming.dyn.
Tento soubor aplikace Revit je jeden z nejzákladnějších. Dvě referenční křivky: jedna nakreslená na Podlaží 1 a druhá na Podlaží 2. Chceme tyto křivky dostat do aplikace Dynamo a zachovat živé propojení.
V tomto souboru máme sadu uzlů zapojených do pěti vstupů uzlu Python.
Uzly Select Model Element: Klikněte na tlačítko Vybrat pro každý prvek a vyberte odpovídající křivku v aplikaci Revit.
Uzel Code Block: Pomocí syntaxe
0..1..#x;
, připojte posuvník celého čísla v rozsahu od 0 do 20 ke vstupu x. Označuje počet nosníků, které se mají kreslit mezi dvěma křivkami.Uzel Structural Framing Types: Zde vybereme v rozevírací nabídce výchozí nosník W12x26.
Uzel Levels: Vyberte možnost Podlaží 1.
Tento kód v jazyce Python je trochu hustší, ale komentáře v kódu popisují, co se v procesu děje.
V aplikaci Revit je k dispozici pole nosníků, které pokrývají dvě křivky jako konstrukční prvky. Poznámka: Toto není realistický příklad... Konstrukční prvky se používají jako příklad pro nativní instance aplikace Revit vytvořené z aplikace Dynamo.
Výsledky jsou v aplikaci Dynamo zobrazeny také. Nosníky v uzlu Watch3D odkazují na geometrii dotazovanou z prvků aplikace Revit.
Všimněte si, že máme nepřetržitý proces převodu dat z prostředí aplikace Revit do prostředí aplikace Dynamo. Toto je souhrn průběhu procesu:
Vybrat prvek aplikace Revit
Převést prvek aplikace Revit na křivku aplikace Dynamo
Rozdělit křivku aplikace Dynamo na řadu bodů aplikace Dynamo
Vytvořit čáry aplikace Dynamo pomocí bodů aplikace Dynamo mezi dvěma křivkami
Vytvořit nosníky aplikace Revit pomocí odkazů na čáry aplikace Dynamo
Vytvořit výstup povrchů aplikace Dynamo pomocí dotazů na geometrii nosníků aplikace Revit
Může to znít složitě, ale díky skriptu je to stejně jednoduché jako úprava křivky v aplikaci Revit a opětovné spuštění řešiče (i když je možné, že při tom budete muset odstranit předchozí nosníky). Důvodem je skutečnost, že nosníky umísťujeme do jazyka Python, a tím porušujeme asociaci uzlů OOTB.
Pomocí aktualizace referenčních křivek v aplikaci Revit získáte nové pole nosníků.
S hodnotami:
Povrch
Křivka
Rovina
Těleso
Povrch
Křivka
Bod
Bod, křivka
Povrch
Křivka
Bod
Bod
Bod
Křivka
Rovina
Křivka
Bod
Křivka
Křivka
Těleso
Povrch
Křivka
Křivka
Těleso
Proč byste měli používat textové programování ve vizuálním programovacím prostředí aplikace Dynamo? Vizuální programování má mnoho výhod. Umožňuje vytvářet programy bez použití speciální syntaxe v intuitivním vizuálním rozhraní. Vizuální program však může být nepřehledný a v některých případech může mít menší funkčnost. Například jazyk Python nabízí mnohem jednodušší metody pro zápis podmínek (if/then) a cyklů. Python je výkonný nástroj, který umožňuje rozšířit možnosti aplikace Dynamo a umožňuje nahradit mnoho uzlů několika stručnými řádky kódů.
Vizuální program:
Textový program:
Stejně jako bloky kódu jsou uzly Python skriptovacím rozhraním v prostředí vizuálního programování. Uzel jazyka Python naleznete v knihovně v části Script > Editor > Python Script.
Dvojitým kliknutím na uzel otevřete editor skriptů jazyka Python (můžete také kliknout pravým tlačítkem na uzel a vybrat možnost Upravit). Všimněte si, že se v horní části nachází výchozí text, který vám má pomoci odkazovat na knihovny, které budete potřebovat. Vstupy jsou uloženy v poli IN. Hodnoty se vrátí do aplikace Dynamo jejich přiřazením k proměnné OUT.
Knihovna Autodesk.DesignScript.Geometry umožňuje použití tečkové notace podobné blokům kódů. Další informace o syntaxi aplikace Dynamo naleznete v části https://github.com/DynamoDS/DynamoPrimerNew/blob/master-csy/coding-in-dynamo/7_code-blocks-and-design-script/7-2_design-script-syntax.md a také v příručce DesignScript Guide. (Chcete-li stáhnout tento dokument PDF, klikněte pravým tlačítkem na odkaz a vyberte možnost Uložit odkaz jako.) Zadáním typu geometrie, například „Point.“, zobrazíte seznam metod vytváření a dotazování bodů.
Metody zahrnují konstruktory, například ByCoordinates, akce, například Add, a dotazy, například souřadnice X, Y a Z.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V tomto příkladu napíšeme skript jazyka Python, který vytvoří vzory z modulu tělesa a převede je na vlastní uzel. Nejprve vytvoříme náš modul tělesa pomocí uzlů aplikace Dynamo.
Rectangle.ByWidthLength: Vytvořte obdélník, který bude základem našeho tělesa.
Surface.ByPatch: Spojte obdélník se vstupem closedCurve a vytvořte tak dolní povrch.
Geometry.Translate: Připojte obdélník ke vstupu geometrie, aby se posunul nahoru pomocí bloku kódu, který určuje základní tloušťku našeho tělesa.
Polygon.Points: Pomocí dotazu na převedený obdélník extrahujte rohové body.
Geometry.Translate: Pomocí bloku kódu vytvořte seznam čtyř hodnot odpovídajících čtyřem bodům. Tím posunete jeden roh tělesa nahoru.
Polygon.ByPoints: Pomocí převedených bodů rekonstruujte horní polygon.
Surface.ByPatch: Připojením polygonu vytvořte horní povrch.
Nyní, když máme horní a dolní povrch, vytvoříme boky tělesa šablonováním mezi dvěma profily.
List.Create: Spojte dolní obdélník a horní polygon se vstupy indexu.
Surface.ByLoft: Šablonováním dvou profilů vytvořte strany tělesa.
List.Create: Připojte horní, boční a dolní povrchy ke vstupům indexu a vytvořte tak seznam povrchů.
Solid.ByConnectedSurfaces: Spojením povrchů vytvořte modul tělesa.
Nyní, když máme naše těleso, přetáhneme do pracovního prostoru uzel skriptu jazyka Python.
Chcete-li do uzlu přidat další vstupy, klikněte na ikonu + v uzlu. Vstupy jsou pojmenovány IN[0], IN[1] atd., což označuje, že představují položky v seznamu.
Začneme definováním našich vstupů a výstupu. Dvojitým kliknutím na uzel otevřete editor jazyka Python. Při úpravách kódu v editoru postupujte podle kódu uvedeného níže.
Tento kód začne dávat větší smysl, jak budeme cvičením procházet. Dále musíme přemýšlet o tom, jaké informace jsou potřeba k vytvoření pole našeho modulu tělesa. Nejprve je nutné znát rozměry tělesa, abychom mohli určit vzdálenost posunutí. Kvůli chybě ohraničujícího kvádru bude nutné k jeho vytvoření použít geometrii křivky hrany.
Podívejte se na uzel Python v aplikaci Dynamo. Všimněte si, že používáme stejnou syntaxi, jakou vidíme v názvech uzlů v aplikaci Dynamo. Prohlédněte si níže uvedený kód s komentáři.
Protože budeme převádět i otáčet moduly těles, použijeme operaci Geometry.Transform. Při pohledu na uzel Geometry.Transform zjistíme, že k transformaci tělesa budeme potřebovat zdrojový souřadnicový systém a cílový souřadnicový systém. Zdroj je kontextový souřadnicový systém našeho tělesa, zatímco cíl bude odlišný souřadnicový systém pro každý modul v poli. To znamená, že bude nutné projít hodnoty X a Y a transformovat souřadnicový systém pokaždé jinak.
Klikněte na tlačítko Spustit a poté uložte kód. Připojte uzel jazyka Python k existujícímu skriptu níže uvedeným způsobem.
Připojte výstup z uzlu Solid.ByConnectedSurfaces jako první vstup uzlu jazyka Python a pomocí uzlu CodeBlock definujte ostatní vstupy.
Vytvořte uzel Topology.Edge a jako vstup použijte výstup z uzlu jazyka Python.
Nakonec vytvořte uzel Edge.CurveGeometry a jako vstup použijte výstup z uzlu Topology.Edge.
Zkuste změnit výchozí hodnotu a vytvořte jiné vzory. Můžete také změnit parametry samotného modulu tělesa a dosáhnout tak různých efektů.
Nyní, když jsme vytvořili užitečný skript jazyka Python, uložte jej jako uživatelský uzel. Vyberte uzel Python Script, klikněte pravým tlačítkem na pracovní prostor a vyberte možnost Vytvořit vlastní uzel.
Přiřaďte název, popis a kategorii.
Tím se otevře nový pracovní prostor, ve kterém se má upravit uživatelský uzel.
Vstupy: Změňte vstupní názvy tak, aby byly popisnější, a přidejte typy dat a výchozí hodnoty.
Výstup: Změňte název výstupu.
Uzel uložte jako soubor .dyf a měli byste vidět, že vlastní uzel odráží změny, které jsme právě provedli.
Python je široce používaný programovací jazyk, jehož popularita souvisí s jeho stylem syntaxe. Je velmi čitelný, a proto je snazší se ho naučit v porovnání s mnoha jinými jazyky. Python podporuje moduly a balíčky a může být začleněn do existujících aplikací. Dobrým zdrojem informací o tom, jak začít pracovat s jazykem Python, je část „Getting Started“ na stránce Python.org.
V této části příručky Primer jsou uvedeny některé osvědčené postupy. Obsahuje několik zkušenostmi a výzkumem prověřených strategií, které pomohou dosáhnout kvalitních pracovních postupů. Jako konstruktéři a programátoři měříme kvalitu zejména z hlediska udržitelnosti, použitelnosti a efektivity našich nástrojů. Ačkoliv se v následujících příkladech probírají osvědčené postupy pro vizuální nebo textové programování, lze je uplatnit ve všech programovacích prostředích a pracovních postupech.
Vizuální programování může být kreativní činnost, tok programu a uživatelské vstupy se však můžou velmi rychle stát složitými a na pracovní ploše nepřehlednými. Podívejme se na některé osvědčené postupy pro správu programu.
Jakmile na pracovní plochu přidáte několik uzlů, můžete je chtít přeuspořádat, aby byly přehledné. Výběrem více než jednoho uzlu a kliknutím pravým tlačítkem myši na pracovní plochu se v místním okně zobrazí nabídka Zarovnat výběr s možnostmi pro zarovnání a rozmístění po osách X a Y.
Vyberte více než jeden uzel.
Klikněte pravým tlačítkem myši na pracovní plochu.
Použijte možnosti funkce Zarovnat výběr.
S trochou zkušeností můžeme vizuální program „číst“ tak, že se podíváme na názvy uzlů a budeme sledovat tok programu. Dobrým zvykem je vkládat na pracovní plochu popisy. Aplikace Dynamo obsahuje uzel Notes s upravitelným textovým polem. Poznámky lze na pracovní plochu přidávat dvěma způsoby:
Přejděte do nabídky Upravit > Vytvořit poznámku
Použijte kombinaci kláves Ctrl+W
Po přidání poznámky na pracovní plochu se zobrazí textové pole pro úpravu textu. Po vytvoření lze poznámku upravit dvojitým kliknutím nebo kliknutím pravým tlačítkem na uzel Note.
S tím, jak se vizuální program zvětšuje, může být užitečné označit větší kroky jako celky. Větší kolekce uzlů můžeme zvýraznit jako skupinu a označit je barevným obdélníkem na pozadí a názvem. Pokud je vybrán více než jeden uzel, skupinu lze vytvořit třemi způsoby:
Přejděte do nabídky Upravit > Vytvořit skupinu
Použijte kombinaci kláves Ctrl+G
Klikněte pravým tlačítkem myši na pracovní plochu a vyberte možnost „Vytvořit skupinu“
Po vytvoření skupiny je možné upravit její nastavení, například název a barvu.
Tip: Použití poznámek a skupin je účinný způsob, jak zvýšit přehlednost a srozumitelnost v souboru.
Zde je příklad programu s přidanými poznámkami a skupinami:
Poznámka: „Parametry mřížky“
Poznámka: „Body mřížky“
Skupina: „Tvorba mřížky z bodů“
Skupina: „Tvorba bodu atraktoru“
Poznámka: „Kalibrace hodnot vzdálenosti“
Poznámka: „Proměnná mřížka kružnic“
Tato referenční stránka rozšiřuje doporučené postupy popsané ve skriptovacích strategiích, které obsahují podrobnější informace o knihovnách kódů, opatřování popisky a stylech. Budeme používat jazyk Python k ilustraci níže uvedených koncepcí, ale stejné zásady by platily v jazyce C#(Zerotouch), ale s jinou syntaxí.
Standardní knihovny jsou externí pro aplikaci Dynamo a jsou k dispozici v programovacích jazycích Python a C# (Zerotouch). Aplikace Dynamo má také vlastní sadu knihoven, které přímo odpovídají hierarchii uzlu aplikace Dynamo, což uživateli umožňuje vytvořit v kódu cokoliv, co by mohlo být vytvořeno pomocí uzlů a drátů. V následující části je uveden postup, jak jednotlivé knihovny aplikace Dynamo poskytují přístup a kdy mají používat standardní knihovnu.
Standardní knihovny a knihovny aplikace Dynamo
K vytvoření pokročilých dat a toků struktur v prostředí aplikace Dynamo lze použít i standardní knihovny jazyků Python a C#.
Knihovny aplikace Dynamo přímo odpovídají hierarchii uzlů pro vytváření geometrie a dalších objektů aplikace Dynamo.
Knihovny aplikace Dynamo
ProtoGeometry*
Funkce: Arc, Bounding Box, Circle, Cone, Coordinate System, Cuboid, Curve, Cylinder, Edge, Ellipse, Ellipse Arc ,Face, Geometry, Helix, Index Group, Line, Mesh, Nurbs Curve, Nurbs Surface, Plane, Point, Polygon, Rectangle, Solid, Sphere, Surface, Topology, TSpline, UV, Vector, Vertex.
Způsob importu: import Autodesk.DesignScript.Geometry
``
DSCoreNodes
Funkce: Color, Color Range 2D, Date Time, Time Span, IO, Formula, Logic, List, Math, Quadtree, String, Thread.
Způsob importu: import DSCore
Mozaikování
Funkce: Convex Hull, Delaunay, Voronoi.
Způsob importu: import Tessellation
DSOffice
Funkce: Excel.
Způsob importu: import DSOffice
*Poznámka: Při použití knihovny protoGeometry prostřednictvím jazyka Python nebo C# vytváříte nespravované objekty, které vyžadují ruční správu paměti. Další informace najdete níže v části Nespravované objekty.
Během skriptování používáme identifikátory k označení různých položek, jako jsou proměnné, typy, funkce a další entity. Pomocí tohoto systému symbolické notace, můžeme při vytváření algoritmů využít informace pomocí popisků – obvykle tvořených posloupností znaků. Názorné pojmenování věcí hraje důležitou roli v psaní kódu, který mohou snadno číst a chápat i ostatní uživatelé, stejně jako vaše budoucí já. Zde jsou tipy, které vám pomohou při pojmenování položek ve skriptu:
Zkratky jsou v pořádku, ale vysvětlete je pomocí komentáře:
Vyhněte se nadbytečnému označování popisky:
Místo záporné logiky použijte pro názvy proměnných kladnou logiku:
Upřednostňujte „obrácenou poznámku“:
Z hlediska struktury je to rozumnější.
Zkratky by se měly používat ke zkrácení příliš dlouhých a často opakovaných řetězců:
Používání zkratek může rychle vést k velmi matoucím a nestandardním programům.
Používejte pouze nezbytná slova:
„Všechno by mělo být co nejjednodušší, ale ne jednodušší.“ – Albert Einstein
Obecně řečeno, existuje více než jeden způsob, jak něco programovat, proto je váš „osobní styl“ skriptování výsledkem nespočtu malých rozhodnutí, která se rozhodnete udělat (nebo nedělat) v průběhu práce. To znamená, že čitelnost a udržitelnost kódu jsou přímým výsledkem jeho vnitřní konzistence a dodržování všeobecných stylistických konvencí. Jako orientační pravidlo by měl kód, který vypadá stejně na dvou místech, fungovat stejně. Zde je několik tipů pro zápis jasného a konzistentního kódu.
Konvence pojmenování: (Vyberte jednu z níže uvedených konvencí pro každý typ entity v kódu a držte se jí.)
Proměnné, funkce, metody, balíčky, moduly:
lower_case_with_underscores
Třídy a výjimky:
CapWords
Chráněné metody a vnitřní funkce:
_single_leading_underscore(self, ...)
Soukromé metody:
__double_leading_underscore(self, ...)
Konstanty:
ALL_CAPS_WITH_UNDERSCORES
Tip: Vyhněte se jednopísmenným proměnným (zvláště I, O, I) kromě velmi krátkých bloků, kdy je význam zřetelně viditelný z bezprostředního kontextu.
Použití prázdných řádků:
Definice funkcí a tříd nejvyšší úrovně obklopte dvěma prázdnými řádky.
Definice metody uvnitř třídy jsou obklopeny jedním prázdným řádkem.
Pro oddělení skupin souvisejících funkcí lze použít (střídmě) další prázdné řádky.
Vyhněte se nadbytečným prázdným znakům:
Bezprostředně uvnitř závorek:
Bezprostředně před čárkou, středníkem nebo dvojtečkou:
Bezprostředně před otevřenou závorkou, která začíná seznam argumentů volání funkce:
Bezprostředně před otvírací závorkou, která začíná indexování nebo řezy:
Vždy obklopte tyto binární operátory jednou mezerou na obou stranách:
Dávejte pozor na délku řádků:
Nepřekračujte cca 79 znaků.
Omezení požadované šířky okna editoru umožňuje, aby bylo více souborů otevřeno vedle sebe, a funguje správně při použití nástrojů pro kontrolu kódu, které představují dvě verze v sousedních sloupcích.
Dlouhé řádky lze rozdělit na více řádků zalomením výrazů v závorkách:
Vyhněte se zjevným a nadbytečným komentářům:
Někdy méně komentářů znamená čitelnější kód. Zvláště pokud vás nutí místo toho použít smysluplné názvy symbolů.
Přijetí kvalitních kódovacích návyků snižuje závislost na komentářích:
Tip: Komentáře vám vysvětlují proč, kód vám říká jak.
Podívejte se na otevřený zdrojový kód:
Projekty s otevřeným zdrojovým kódem jsou založeny na spolupráci mnoha vývojářů. Tyto projekty musí udržovat vysokou úroveň čitelnosti kódu, aby tým mohl pracovat co nejúčinněji. Proto je vhodné procházet zdrojový kód těchto projektů a sledovat, co tito vývojáři provádějí.
Vylepšete své konvence:
Je třeba se ptát, zda každá konvence funguje pro současné potřeby.
Je ohrožena funkčnost/účinnost?
Na těchto stránkách Wiki naleznete rady pro psaní C# pro Zerotouch a přispívání do aplikace Dynamo:
Tato nápověda Wiki obsahuje některé obecné standardy kódování pro dokumentaci a testování vašeho kódu: https://github.com/DynamoDS/Dynamo/wiki/Coding-Standards
Tato nápověda Wiki se týká zejména norem pojmenování knihoven, kategorií, názvů uzlů, názvů portů a zkratek: https://github.com/DynamoDS/Dynamo/wiki/Naming-Standards
Nespravované objekty:
Při používání knihovny geometrie aplikace Dynamo (ProtoGeometry) z geometrických objektů v jazyce Python nebo C# nebudou vytvářené objekty spravovány virtuálním počítačem a paměť po mnoha těchto objektech bude nutné vyčistit ručně. Chcete-li vyčistit nativní nebo nespravované objekty, můžete použít metodu Dispose nebo klíčové slovo using. Přehled najdete v této položce Wiki: https://github.com/DynamoDS/Dynamo/wiki/Zero-Touch-Plugin-Development#dispose--using-statement.
Je nutné pouze uvolnit nespravované zdroje, které se nevrací do grafu, nebo se na ně neukládá odkaz. Ve zbytku této části odkazujeme na tyto objekty jako mezilehlou geometrii. Příklad této třídy objektu je uveden v příkladu kódu níže. Tato funkce Zero Touch jazyka C# singleCube vrací jednu krychli, ale během provádění vytvoří 10 000 dalších krychlí. Můžeme předstírat, že tato jiná geometrie byla použita jako mezilehlá konstrukční geometrie.
Tato funkce Zero Touch pravděpodobně způsobí selhání aplikace Dynamo. Protože jsme vytvořili 10 000 těles, ale pouze jedno z nich bylo uloženo a pouze toto bylo vráceno. Místo toho bychom měli odstranit všechny mezilehlé krychle, kromě té, kterou vrátíme. Nechceme odstranit tu, kterou vrátíme, protože bude propagována do grafu a použita jinými uzly.
Opravený kód by vypadal jako:
Obecně platí, že je nutné pouze odstranit geometrii, jako je Surfaces
, Curves
a Solids
. Pro jistotu však můžete odstranit všechny typy geometrie (Vectors
, Points
, CoordinateSystems
).
Před touto kapitolou se příručka Primer zabývala implementací výkonných funkcí vizuálního skriptování v aplikaci Dynamo. Správné pochopení těchto možností je pevným základem a prvním krokem ve vytváření robustních vizuálních programů. Když vizuální programy používáme v ostrém provozu, sdílíme je s kolegy, řešíme chyby nebo zkoušíme meze, vyvstávají další problémy, které je třeba řešit. Pokud váš program bude používat někdo jiný nebo očekáváte, že jej otevřete až za šest měsíců, je v obou případech nutné, aby vše bylo ihned graficky a logicky přehledné. Aplikace Dynamo nabízí mnoho nástrojů ke správě složitosti programu a tato kapitola se zabývá pokyny k tomu, jak tyto nástroje použít.
Při vývoji grafu aplikace Dynamo a zkušebních nápadů může rychle dojít k nárůstu složitosti i velikosti grafu. I když je důležité vytvořit fungující program, je stejně důležité, aby byl co nejjednodušší. Nejenže graf bude fungovat rychleji a předvídatelněji, ale v případě otevření po nějakém čase vy i ostatní uživatelé rychleji porozumí logice grafu. Zde je několik způsobů, které vám pomohou vyjasnit logiku grafu.
Skupiny vám při tvorbě programu umožní vytvářet funkčně odlišné součásti.
Skupiny umožňují přesouvat velké části programu při zachování modularity a zarovnání.
Můžete změnit barvu skupiny k rozlišení toho, co je účelem skupiny (vstupy vs. funkce).
Pomocí skupin můžete vytvořit organizaci grafu ke zjednodušení tvorby uživatelských uzlů.
Barvy v tomto programu určují účel každé skupiny. Pomocí této strategie je možné vytvořit hierarchii v libovolných grafických normách nebo šablonách, které vyvíjíte.
Skupina funkcí (modrá)
Skupina vstupů (oranžová)
Skupina skriptů (zelená)
Informace o tom, jak používat skupiny, naleznete v části Správa programu.
Někdy můžete použít blok kódu k rychlejšímu zadání čísla nebo metody uzlu než při vyhledávání (Point.ByCoordinates, Number, String, Formula).
Bloky kódu jsou užitečné, pokud chcete definovat vlastní funkce v jazyce DesignScript, aby se snížil počet uzlů v grafu.
Vzor 1 i 2 provádí stejnou funkci. Bylo však mnohem rychlejší napsat několik řádků kódu, než vyhledávat a přidávat jednotlivé uzly. Blok kódu je také mnohem výstižnější.
Kód jazyka DesignScript zapsaný v bloku kódu
Ekvivalentní program v uzlech
Informace o použití bloku kódu naleznete v části Co je blok kódu.
Složitost grafu můžete snížit pomocí možnosti Uzel na kód, která vezme kolekci jednoduchých uzlů a zapíše odpovídající skript DesignScript do jednoho bloku kódu.
Možnost Uzel na kód** může zhustit kód, aniž by došlo k porušení přehlednosti programu**.
Následují klady použití možnosti Uzel na kód:
Snadno zhustí kód do jedné komponenty, kterou je stále možné upravit
Může zjednodušit významnou část grafu
Užitečná, pokud „miniprogram“ nebude často upravován
Užitečná k zahrnutí dalších funkcí bloku kódu, například funkce
Následují zápory použití možnosti Uzel na kód:
Obecné pojmenování snižuje čitelnost
Pro některé uživatele je obtížnější na porozumění
Neexistuje snadný způsob, jak se vrátit k verzi vizuálního programování
Existující program
Blok kódu vytvořený pomocí možnosti Uzel na kód
Informace o tom, jak používat možnost Uzel na kód, naleznete v části Syntaxe jazyka DesignScript.
Funkce List@Level pomáhá snížit složitost grafu nahrazením uzlů List.Map a List.Combine, které mohou zabírat značné množství místa na pracovní ploše.
Funkce List@Level nabízí** rychlejší způsob, jak vytvořit logiku uzlu konstrukce, než u uzlů List.Map a List.Combine**, umožněním přístupu k datům na libovolné úrovni v seznamu přímo ze vstupního portu uzlu.
Můžeme ověřit, kolik hodnot True vrátí metoda BoundingBox.Contains a ve kterých seznamech, a to aktivováním funkce List@Level u vstupu seznamu funkce CountTrue. List@Level umožňuje uživateli určit, ze které úrovně se bude přebírat vstup. Použití funkce List@Level je flexibilní, efektivní a vysoce podporované u jiných metod zahrnujících metody List.Map a List.Combine.
Počítání hodnot True na úrovni seznamu 2
Počítání hodnot True na úrovni seznamu 3
Informace o tom, jak používat funkci List@Level, naleznete v části Seznamy seznamů.
Kromě zjednodušení a zefektivnění grafu nejvíce, jak je to možné, snažte se dbát i na grafickou přehlednost. Navzdory nejlepšímu úsilí o intuitivnost grafu s logickými seskupeními nemusí být vztahy zjevné. Jednoduchá poznámka uvnitř skupiny nebo přejmenování posuvníku vám nebo jinému uživateli může ušetřit zbytečné nejasnosti nebo procházení grafu. Následuje několik způsobů, jak uvnitř grafů i mezi nimi zavést grafickou konzistenci.
Chcete-li si ušetřit práci po dokončení tvorby grafu, měli byste se snažit zajistit čitelnost rozvržení uzlů častým zarovnáváním uzlů během práce.
Pokud s grafem budou pracovat i ostatní, měli byste se před jeho odesláním ujistit, že rozvržení drátů a uzlů je přehledné.
Chcete-li si usnadnit zarovnání, použijte funkci Rozvržení uzlů vyčištění k automatickému zarovnání grafu, zarovnání však bude méně přesné, než když je uděláte sami.
Neuspořádaný graf
Zarovnaný graf
Informace o tom, jak používat zarovnání uzlů, naleznete v části Správa programu.
Přejmenování vstupů může ostatním usnadnit porozumění vašemu grafu, zejména pokud jejich vstup nebude vidět na obrazovce.
Buďte opatrní při přejmenovávání jiných uzlů než vstupů. Alternativou je vytvoření vlastního uzlu ze shluku uzlů a jeho přejmenování; bude zřejmé, že obsahuje něco jiného.
Vstupy pro manipulaci s povrchem
Vstupy architektonických parametrů
Vstupy pro skript simulace odvodnění
Chcete-li uzel přejmenovat, klikněte pravým tlačítkem na jeho název a vyberte příkaz „Přejmenovat uzel...“.
Pokud něco v grafu vyžaduje vysvětlení v jednoduchém jazyce, které není možné vyjádřit uzly, měli byste přidat poznámku.
Poznámka by měla být přidána, pokud je kolekce uzlů nebo skupina příliš velká nebo složitá a není možné jí ihned porozumět.
Poznámka popisující část programu, která vrací nezpracované vzdálenosti posunu
Poznámka popisující kód, který mapuje tyto hodnoty na sinusovou vlnu
Postup přidání poznámky naleznete v části Správa programu.
Při tvorbě vizuálního skriptu je důležité ověřit, zda skript vrací očekávaný výstup. Ne všechny chyby nebo problémy způsobí chybu celého programu, zejména hodnoty null nebo nulové hodnoty, které by mohly ovlivnit něco dále v programu. Tato strategie je také popsána v kontextu textového skriptování v části Strategie skriptování. Následující postup vám pomůže zajistit, že skript vrátí očekávaný výstup.
Pomocí uzlů Watch a bublin náhledů můžete při sestavování programu** ověřit, zda se na klíčových výstupech vrací očekávané hodnoty**.
K porovnání se použijí uzly Watch:
Nezpracované vzdálenosti posunu
Hodnoty, které prošly rovnicí sinu
Postup použití sledování naleznete v části Knihovna.
Je vysoce pravděpodobné, váš program otevře i někdo jiný, a to i v případě, že pracujete nezávisle. I tito lidé by měli být schopni rychle porozumět, co program potřebuje na svých vstupech a co vytváří na svých výstupech. Toto je důležité zejména při vývoji vlastního uzlu, který má být sdílen s komunitou aplikace Dynamo a používán v programu jiného uživatele. Tyto postupy vedou k robustním, opakovaně použitelným programům a uzlům.
Aby byla zajištěna čitelnost a škálovatelnost, měli byste se pokusit co nejvíce minimalizovat vstupy a výstupy.
Ještě před přidáním jakéhokoli uzlu na plátno byste se měli pokusit stanovit strategii, jak budete logiku vytvářet, a to tak, že nejprve vytvoříte hrubý náčrt toho, jak by logika mohla fungovat. Při vývoji hrubého obrysu byste měli sledovat, které vstupy a výstupy budou vloženy do skriptů.
Pokud existují konkrétní možnosti nebo podmínky, které chcete do grafu vložit, měli byste použít předvolby, abyste k těmto položkám měli rychlý přístup.
Pomocí předvoleb můžete také snížit složitost ukládáním specifických hodnot posuvníku do mezipaměti u grafu s dlouhou dobou běhu.
Postup použití předvoleb naleznete v části Správa dat s předvolbami.
Pokud je možné program shromáždit do jednoho kontejneru, měli byste použít vlastní uzel.
Vlastní uzel byste měli použít i v případě, že se část grafu často znovu používá v jiných aplikacích.
Pokud chcete sdílet funkce s komunitou aplikace Dynamo, měli byste použít vlastní uzel.
Shromáždění programu sloužícího k převodu bodů do vlastního uzlu učiní robustní, jedinečný program přenositelným a mnohem snadnějším na pochopení. Dobře pojmenované vstupní porty pomohou ostatním uživatelům porozumět tomu, jak tento uzel používat. Nezapomeňte přidávat popisy a požadované typy dat pro každý vstup.
Existující program atraktoru
Vlastní uzel, který tento program shromažďuje, PointGrid
Informace o použití vlastních uzlů naleznete v části Úvod do vlastních uzlů.
Můžete vytvořit šablony pro stanovení grafických standardů ve vizuálních grafech, aby spolupracovníci měli standardizovaný způsob, jak grafům porozumět.
Při tvorbě šablony můžete standardizovat barvy skupin a velikosti písem a kategorizovat tak typy pracovních postupů nebo akcí s daty.
Při tvorbě šablony můžete dokonce standardizovat, jakým způsobem chcete v grafu označovat, barvit nebo stylizovat rozdíly mezi front-end a back-end pracovními postupy.
Uživatelské rozhraní nebo front-end programu obsahuje název projektu, posuvníky vstupu a importovanou geometrii.
Back-end programu.
Seskupení kategorií podle barev (obecný návrh, vstupy, skriptování v jazyce Python, importovaná geometrie).
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Nyní, když bylo stanoveno několik osvědčených postupů, použijeme tyto postupy na rychle sestavený program. I když program při generování střechy uspěje, stav grafu je „mapou mysli“ autora. Chybí jakákoli organizace a popis použití. Projdeme si nejlepší postupy organizace, popisu a analýzy programu, aby ostatní uživatelé mohli porozumět tomu, jak se tento program používá.
Program funguje, ale graf není uspořádán.
Začneme určením dat a geometrie vrácené programem.
Porozumění tomu, kdy dochází k velkým změnám dat, je velmi důležité ke stanovení logického dělení nebo modularity. Zkuste zkontrolovat zbytek programu pomocí uzlů Watch, čímž zjistíte, zda můžete před přechodem na další krok určit skupiny.
Tento blok kódu s matematickou rovnicí vypadá jako klíčový prvek programu. Uzel Watch zobrazuje, že vrací seznamy vzdáleností posunu.
Účel této oblasti není zcela zřejmý. Uspořádání hodnot True na úrovni seznamu L2 z výstupu uzlu BoundingBox.Contains a přítomnost položky List.FilterByBoolMask naznačuje, že jsme vzorkovali část osnovy bodů.
Když teď rozumíte základním prvkům programu, můžeme je umístit do skupin.
Skupiny umožňují uživateli vizuální rozlišení částí programu.
Import 3D modelu pozemku
Osnova převodu bodů založená na rovnici sinu
Ukázková část bodové osnovy
Tvorba povrchu architektonické střechy
Tvorba skleněného obvodového pláště
Jakmile budou skupiny stanoveny, zarovnejte uzly, tak aby vznikla vizuální spojitost přes celý graf.
Vizuální spojitost zlepšuje pro uživatele viditelnost toku programu a implicitních vztahů mezi uzly.
Zlepšete přístup k programu přidáním další hladiny grafických vylepšení. Přidáním poznámek popisujete, jak určitá oblast programu funguje, zadejte u vstupů vlastní názvy a přiřaďte k různým typům skupin barvy.
Tato grafická vylepšení sdělují uživateli více o tom, co program dělá. Různé barvy skupin pomáhají rozlišit vstupy od funkcí.
Poznámky
Vstupy s popisnými názvy
Před zhuštěním programu, je třeba najít strategické umístění, kde představíme simulátor odvodnění ve skriptu jazyka Python. Výstup prvního povrchu střechy s měřítkem připojte k odpovídajícímu vstupu skriptování.
V této části programu jsme se rozhodli integrovat skriptování, aby simulace odvodnění mohla být spuštěna na původním, jediném povrchu střechy. Tento konkrétní povrch není zobrazen v náhledu, ale ušetří krok výběru horního povrchu u zkoseného objektu Polysurface.
Zdrojová geometrie pro vstup skriptu
Uzel jazyka Python
Posuvníky vstupů
„Přepínač“ zapnutí/vypnutí
Nyní, když je vše připraveno, zjednodušíme graf.
Berte v potaz, že program s využitím možnosti Uzel na kód a vlastního uzlu značně zmenšil velikost grafu. Skupiny, které tvoří povrch střechy a stěny, byly převedeny na kód, protože jsou pro tento program velmi specifické. Skupina převodu bodů je obsažena ve vlastním uzlu, protože by mohla být využita i v jiném programu. Ve vzorovém souboru vytvořte vlastní uzel ze skupiny převodu bodů.
Vlastní uzel, který má obsahovat skupinu „osnovy převodu bodů“
Možnost Uzel na kód ke zhuštění skupin „tvorby povrchu architektonické střechy a obvodového pláště“
Jako poslední krok vytvořte předvolby pro ukázkové tvary střechy.
Tyto vstupy jsou primárními ovladači tvaru střechy a díky nim uživatel snadněji pochopí potenciál programu.
Program s pohledy dvou předvoleb.
Vzory odvodnění střechy nabízí uživateli analytický pohled příslušných předvoleb.
Aplikace Dynamo začínala jako doplněk pro informační modely budov v aplikaci Revit. Od té doby však urazila dlouhou cestu. Jedná se zejména o platformu, která konstruktérům umožňuje zkoumat vizuální programování, řešit problémy a vytvářet vlastní nástroje. Začněme tím, že si řekneme, k čemu aplikace Dynamo slouží a jak ji používat.
V aplikaci Dynamo jsou uzly objekty, jejichž propojováním vzniká vizuální program. Každý uzel provádí operaci – někdy může být jednoduchá, například uložení čísla, jindy může být složitá, například tvorba nebo dotazování geometrie.
Většina uzlů v aplikaci Dynamo se skládá z pěti částí. Ačkoliv existují výjimky, například vstupní uzly, anatomii každého uzlu lze popsat následovně:
Název – Název uzlu. Konvence pojmenování je
Category.Name
.Hlavní tělo – Hlavní tělo uzlu. Po kliknutí pravým tlačítkem myši se zde zobrazí možnosti na úrovni celého uzlu.
Porty (vstupní a výstupní) – Slouží jako zásuvky pro dráty, zleva dochází ke vstupu dat do uzlu, vpravo je výstup výsledků po provedení akce uzlu.
Výchozí hodnota – Klikněte pravým tlačítkem myši na vstupní port – některé uzly mají k dispozici výchozí hodnoty, které mohou nebo nemusí být použity.
Ikona vázání – Označuje možnost vázání zadanou pro odpovídající vstupy seznamu (více informací později).
Vstupům a výstupům uzlů se říká porty, které se chovají jako zásuvky pro dráty. Data vstupují do uzlu skrz porty vlevo a po jeho spuštění proudí z uzlu ven skrz porty vpravo.
Porty očekávají, že obdrží data určitého typu. Například připojením čísla 2.75 na porty uzlu Point.ByCoordinates dojde k úspěšné tvorbě bodu, pokud však na stejný port zadáme hodnotu Červená, dojde k chybě.
Přesunutím kurzoru nad port zobrazíte popisek s očekávaným datovým typem.
Popisek portu
Popisek
Datový typ
Výchozí hodnota
Aplikace Dynamo naznačuje stav běhu vizuálního programu, tím že jednotlivé uzly rendruje s různými barvami podle jejich stavu. Hierarchie stavů se řídí touto posloupností: Chyba > Upozornění > Informace > Náhled.
Najetím myší nebo kliknutím pravým tlačítkem myši na název nebo porty se zobrazí další informace a možnosti.
Připojené vstupy – Uzel s modrými svislými pruhy na vstupních portech je dobře připojen a má úspěšně připojeny všechny vstupy.
Nepřipojené vstupy – Pokud má uzel na jednom nebo více vstupních portech červené svislé pruhy, je nutné tyto vstupy připojit.
Funkce – Uzel, jehož výstupem je funkce, a u jehož výstupního portu je zobrazen šedý svislý pruh, je uzel funkce.
Vybráno – Aktuálně vybrané uzly mají světle modré rámečky.
Zmrazeno –Průsvitný modrý uzel je zmrazen, čímž je pozastaveno provádění uzlu.
Upozornění – Žlutý stavový řádek pod uzlem označuje stav upozornění, což znamená, že buď chybí vstupní data, nebo jsou použity nesprávné datové typy.
Chyba – Červený stavový řádek pod uzlem označuje chybový stav uzlu.
Informace – Modrý stavový řádek pod uzlem označuje stav Informace, což znamená, že jsou k dispozici užitečné informace o uzlech. Tento stav lze spustit, pokud se blíží maximální hodnota podporovaná uzlem, jestliže je uzel používán způsobem, který má potenciální dopad na výkon atd.
Pomocí informací uvedených v popisku můžete zjistit, kde došlo k problému (například chybný datový typ nebo datová struktura u předchozích uzlů).
Popisek k upozornění – Hodnotu „Null“ nebo prázdná data nelze interpretovat jako typ Double, tj.číslo.
Pomocí uzlu Watch můžete prozkoumat vstupní data uzlu.
V předchozím uzlu Number je uložena hodnota „Red“ a nikoli číslo.
V některých situacích můžete chtít zabránit spuštění určitých uzlů ve vizuálním programu. To lze provést „zmrazením“ uzlu, což je možnost dostupná v místní nabídce uzlu.
Zmrazení uzlu zmrazí také uzly, které jsou za ním. Jinými slovy, všechny uzly, které závisí na výstupu zmrazeného uzlu, budou také zmrazeny.
Dráty propojují uzly a vytvářejí mezi nimi vazby, které tvoří tok vizuálního programu. Lze si je představit jako elektrické dráty, které přenášejí pulzy dat od jednoho objektu k dalšímu.
Dráty propojují výstupní port jednoho uzlu se vstupním portem jiného uzlu. Tím se v daném směru vytváří tok dat vizuálního programu.
Vstupní porty jsou na levé straně a výstupní porty jsou umístěny na pravé straně uzlů, proto lze obecně říci, že tok programu se pohybuje zleva doprava.
Vytvořte drát kliknutím levým tlačítkem myši na požadovaný port a následným kliknutím na port jiného uzlu vytvořte propojení. Při propojování uzlů se drát zobrazuje přerušovaně až do jeho propojení s jiným uzlem, pak se zobrazí plnou čarou.
Data tímto drátem budou protékat od vstupu do výstupu, na porty je však možné klikat v libovolném pořadí.
Často je nutné upravit tok vizuálního programu tak, že se upraví propojení reprezentovaná dráty. Chcete-li upravit drát, klikněte levým tlačítkem myši na vstupní port uzlu, který je již propojen. Nyní máte dvě možnosti:
Chcete-li změnit propojení ke vstupnímu portu, klikněte levým tlačítkem myši na jiný vstupní port.
Chcete-li drát odebrat, odsuňte jej pryč a klikněte levým tlačítkem myši na pracovní prostor.
Stisknutím klávesy Shift a kliknutím levým tlačítkem myši můžete změnit propojení několik drátů.
Stisknutím klávesy Ctrl a kliknutím levým tlačítkem myši můžete drát duplikovat.
Ve výchozím nastavení se dráty zobrazují šedě. Po výběru uzlu se k němu připojené dráty zvýrazní světle modrou barvou stejně jako uzel samotný.
Zvýrazněný drát
Výchozí drát
Skrytí drátů ve výchozím nastavení
Pokud chcete dráty v grafu skrýt, přejděte do nabídky Zobrazit > Konektory a zrušte zaškrtnutí položky Zobrazit spojky.
Při tomto nastavení se bledě modrou barvou zvýrazní pouze vybrané uzly a jejich spojovací dráty.
Můžete skrýt také pouze vybraný drát a to kliknutím pravým tlačítkem na výstup uzlů a výběrem položky Skrýt dráty.
Náhled vypnut – Šedý stavový řádek pod uzlem a ikona oka označuje, že náhled geometrie uzlu je vypnutý.
Pokud jsou ve vizuálním programu upozornění nebo chyby, aplikace Dynamo zobrazí další informace o problému. Nad názvy žlutých uzlů se navíc zobrazí popisky. Přesunutím ukazatele myši nad ikonu popisku upozornění nebo chyby tuto ikonu rozbalíte.
V dalším kroku vaše vlastní uzly uspořádáte a publikujete jako balíčky – ty představují dobrý způsob, jak uzly uložit a sdílet s komunitou aplikace Dynamo.
Knihovna uzlů aplikace Dynamo obsahuje již ve výchozím nastavení spoustu funkcí. Pokud však provádíte některé časté úkony nebo chcete s komunitou sdílet speciální graf, pomocí vlastních uzlů můžete funkce aplikace Dynamo rozšířit ještě více.
Aplikace Dynamo nabízí několik různých metod vytváření vlastních uzlů. Vlastní uzly můžete vytvořit zcela od začátku, z existujícího grafu nebo explicitně v jazyce C#. V této části se budeme zabývat vytvořením vlastního uzlu v uživatelském rozhraní aplikace Dynamo z existujícího grafu. Tato metoda je ideální k začištění pracovního prostoru a zabalení sekvence uzlů k opakovanému použití na jiném místě.
Na obrázku níže namapujeme bod z jednoho povrchu na jiný pomocí souřadnic UV. Pomocí tohoto konceptu vytvoříme panelizovaný povrch, který odkazuje na křivky v rovině XY. Zde vytvoříme čtyřhranné panely pro naši panelizaci, ale pomocí stejné logiky můžeme vytvořit širokou řadu panelů s mapováním UV. Jedná se o skvělou příležitost k vývoji vlastního uzlu, protože v tomto grafu nebo v jiných pracovních postupech aplikace Dynamo budeme moci snadněji opakovat podobný proces.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Začneme vytvořením grafu, který chceme vnořit do vlastního uzlu. V tomto příkladu vytvoříme graf, který mapuje polygony ze základního povrchu na cílový povrch pomocí souřadnic UV. Tento proces mapování UV často používáme, proto je vhodným kandidátem pro vlastní uzel. Další informace o površích a prostoru UV naleznete na stránce Povrch. Úplný graf je UVmapping_Custom-Node.dyn ze souboru ZIP staženého výše.
Code Block: Pomocí tohoto řádku vytvořte rozsah 10 čísel v rozmezí -45 až 45:
45..45..#10;
.Point.ByCoordinates: Připojte výstup uzlu Code Block ke vstupům „x“ a „y“ a nastavte vázání na kartézský součin. Nyní byste měli mít osnovu bodů.
Plane.ByOriginNormal: Spojením výstupu Point se vstupem origin vytvořte rovinu v každém z bodů. Bude použit výchozí normálový vektor (0,0,1).
Rectangle.ByWidthLength: Spojte roviny z předchozího kroku do vstupu plane a pomocí uzlu Code Block s hodnotou 10 určete šířku a délku.
Nyní byste měli vidět osnovu obdélníků. Tyto obdélníky namapujeme na cílový povrch pomocí souřadnic UV.
Polygon.Points: Spojením výstupu uzlu Rectangle.ByWidthLength z předchozího kroku se vstupem polygon extrahujte rohové body každého obdélníku. Jedná se o body, které namapujeme na cílový povrch.
Rectangle.ByWidthLength: Pomocí uzlu Code Block s hodnotou 100 určete šířku a délku obdélníku. Toto bude hranice našeho základního povrchu.
Surface.ByPatch: Připojte uzel Rectangle.ByWidthLength z předchozího kroku ke vstupu closedCurve a vytvořte tak základní povrch.
Surface.UVParameterAtPoint: Připojte výstup Point uzlu Polygon.Points a výstup Surface uzlu Surface.ByPatch k vrácení parametru UV v každém bodu.
Nyní, když máme základní povrch a sadu souřadnic UV, můžete importovat cílový povrch a mapovat body mezi povrchy.
File Path: Vyberte cestu k souboru povrchu, který chcete importovat. Typ souboru by měl být .SAT. Klikněte na tlačítko Procházet a přejděte k souboru UVmapping_srf.sat ze souboru .zip staženého výše.
Geometry.ImportFromSAT: Připojte cestu k souboru a importujte povrch. Importovaný povrch uvidíte v náhledu geometrie.
UV: Připojte výstup parametru UV k uzlu UV.U a UV.V.
Surface.PointAtParameter: Připojte importovaný povrch a také souřadnice U a V. Nyní byste měli na cílovém povrchu vidět rastr 3D bodů.
Posledním krokem je použití 3D bodů k vytvoření pravoúhlých záplat povrchů.
PolyCurve.ByPoints: Spojením bodů na povrchu se vytvoří objekt polycurve procházející body.
Boolean: Do pracovního prostoru přidejte uzel Boolean, připojte jej ke vstupu connectLastToFirst a přepnutím na hodnotu True uzavřete objekt polycurve. Nyní byste měli vidět obdélníky namapované na povrch.
Surface.ByPatch: Propojte objekty polycurve se vstupem closedCurve a vytvořte tak záplaty povrchů.
Nyní vybereme uzly, které chceme vnořit do vlastního uzlu, a zvážíme, co chceme použít jako vstupy a výstupy našeho uzlu. Chceme, aby byl vlastní uzel co nejflexibilnější, a proto by měl být schopen mapovat libovolné polygony, nikoli pouze obdélníky.
Vyberte následující uzly (počínaje uzlem Polygon.Points), klikněte pravým tlačítkem na pracovní prostor a vyberte možnost Vytvořit vlastní uzel.
V dialogu Vlastnosti vlastního uzlu přiřaďte k vlastnímu uzlu název, popis a kategorii.
Název: MapPolygonsToSurface
Popis: Mapuje polygony ze základního na cílový povrch.
Kategorie doplňků: Geometry.Curve
Vlastní uzel výrazně začistil pracovní prostor. Vstupy a výstupy byly pojmenovány na základě původních uzlů. Upravte vlastní uzel, aby byly názvy popisnější.
Dvakrát klikněte na vlastní uzel, který chcete upravit. Tím se otevře pracovní prostor se žlutým pozadím, které představuje vnitřek uzlu.
Vstupy: Změňte názvy vstupů na baseSurface a targetSurface.
Výstupy: Přidejte další výstup pro mapované polygony.
Uložte vlastní uzel a vraťte se do domovského pracovního prostoru. Všimněte si, že uzel MapPolygonsToSurface odráží změny, které jsme právě provedli.
Robustnost vlastního uzlu lze také zvýšit přidáním vlastních komentářů. Komentáře mohou pomoci u typů vstupů a výstupů nebo vysvětlovat funkci uzlu. Komentáře se zobrazí, když uživatel umístí kurzor nad vstup, nebo výstup vlastního uzlu.
Dvakrát klikněte na vlastní uzel, který chcete upravit. Tím se znovu otevře pracovní prostor se žlutým pozadím.
Začněte upravovat vstupní kód bloku. Chcete-li vytvořit komentář, zadejte výraz "//" následovaný textem komentáře. Zadejte vše, co může pomoci objasnit uzel – zde budeme popisovat položku targetSurface.
Také nastavíme výchozí hodnotu inputSurface nastavením typu vstupu rovnajícího se hodnotě. Zde nastavíme výchozí hodnotu na původní nastavení Surface.ByPatch.
Komentáře lze použít také na výstupy.
Začněte upravovat text ve výstupním bloku kódu. Zadejte „//“ a za ním text komentáře. Zde vyjasníme výstupy Polygons a surfacePatches přidáním podrobnějšího popisu.
Přesunutím kurzoru nad vstupy vlastního uzlu zobrazíte komentáře.
S výchozí hodnotou nastavenou pro položku inputSurface můžeme také spustit definici bez zadání povrchu.
Vytvořili jsme vlastní uzel a použili jej na proces v grafu aplikace Dynamo. Nyní tento uzel chceme zachovat v knihovně aplikace Dynamo pro později použití v dalších grafech. Z tohoto důvodu provedeme místní publikování uzlu. Tento postup je podobný jako publikování balíčku, další informace budou uvedeny v další kapitole.
Po místním publikování uzlu bude uzel dostupný v knihovně aplikace Dynamo po otevřené nové relace. Pokud by uzel publikován nebyl, graf aplikace Dynamo odkazující na vlastní uzel by musel tento uzel obsahovat ve své složce (další možností je uzel importovat do aplikace Dynamo pomocí možnosti Soubor > Importovat knihovnu).
Vlastní uzly a balíčky z aplikace Dynamo Sandbox ve verzi 2.17 a novějších můžete publikovat, pokud nemají žádné závislosti na hostitelském rozhraní API. Ve starších verzích je publikování vlastních uzlů a balíčků povoleno pouze v aplikacích Dynamo for Revit a Dynamo for Civil 3D.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
V této části budeme pokračovat v práci s vlastním uzlem vytvořeným dříve. Po otevření vlastního uzlu PointsToSurface se graf zobrazí v Editoru uživatelských uzlů aplikace Dynamo. Vlastní uzel je možné otevřít také dvojitým kliknutím v Editoru grafu aplikace Dynamo.
Chcete-li provést místní publikování vlastního uzlu, klikněte pravým tlačítkem myši na pracovní plochu a vyberte možnost Publikovat tento vlastní uzel.
Vyplňte informace podle obrázku výše a klikněte na tlačítko Publikovat místně. Všimněte si, že pole Skupina určuje místo v nabídce aplikace Dynamo, kde bude uzel dostupný.
Vyberte složku, ve které se budou nacházet všechny místně publikované vlastní uzly. Aplikace Dynamo bude tuto složku kontrolovat při každém spuštění, proto by se mělo jednat o trvalé umístění. Přejděte do této složky a klikněte na tlačítko Vybrat složku. Uzel aplikace Dynamo je nyní místně publikován a bude k dispozici v knihovně aplikace Dynamo po každém spuštění aplikace.
Chcete-li zjistit umístění složky vlastních uzlů, klikněte na nabídku Dynamo > Předvolby > Nastavení balíčku > Cesty uzlů a balíčků.
V tomto okně se zobrazí seznam cest.
Dokumenty\DynamoCustomNodes... odkazuje na umístění místně publikovaných vlastních uzlů.
AppData\Roaming\Dynamo... odkazuje na výchozí umístění balíčků aplikace Dynamo nainstalovaných online.
Cestu k vaší místní složce můžete v seznamu přesunout dolů (výběrem cesty ke složce a kliknutím na šipku dolů). Složka uvedená nejvýše se používá jako výchozí složka pro instalace balíčků. Pokud jako výchozí složku nastavíte výchozí cestu pro instalaci balíčků aplikace Dynamo, online balíčky budou odděleny od místně publikovaných uzlů.
Změnili jsme pořadí cest, aby se pro instalaci balíčků použila výchozí cesta aplikace Dynamo.
Pokud přejdete do této místní složky, ve složce „.dyf“ (což je přípona pro soubor vlastního uzlu aplikace Dynamo) naleznete původní vlastní uzel. Po úpravě souborů v této složce se uzly aktualizují v uživatelském rozhraní. Do složky DynamoCustomNode je možné přidat další uzly a aplikace Dynamo je přidá do knihovny po restartování.
Aplikace Dynamo se nyní pokaždé načte s uzlem PointsToSurface ve skupině DynamoPrimer v knihovně.
V předchozích částech jsme se zabývali podrobnostmi o tom, jak je balíček MapToSurface nastaven pomocí vlastních uzlů a vzorových souborů. Ale jak publikujeme balíček, který byl vyvinut místně? Tato případová studie ukazuje, jak publikovat balíček ze sady souborů v místní složce.
Balíček lze publikovat mnoha způsoby. Níže je popsán proces, který doporučujeme: publikovat místně, vyvíjet místně a poté publikovat online. Začneme složkou obsahující všechny soubory v balíčku.
Před přechodem k publikování balíčku MapToSurface nejprve odinstalujte balíček z předchozí lekce, abyste nepracovali se stejnými balíčky.
Začněte přechodem na kartu Balíčky > Package Manager > Instalované balíčky > vedle položky MapToSurface klikněte na nabídku se svislými tečkami > Odstranit.
Poté restartujte aplikaci Dynamo. Při opakovaném otevření by se v okně Správa balíčků již neměla nacházet položka MapToSurface. Teď jsme připraveni začít od začátku.
Vlastní uzly a balíčky z aplikace Dynamo Sandbox ve verzi 2.17 a novějších můžete publikovat, pokud nemají žádné závislosti na hostitelském rozhraní API. Ve starších verzích je publikování vlastních uzlů a balíčků povoleno pouze v aplikacích Dynamo for Revit a Dynamo for Civil 3D.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Toto je první odeslání pro náš balíček a všechny ukázkové soubory a vlastní uzly souborů jsme umístili do jedné složky. Když je tato složka připravena, jsme připraveni k odeslání do správce Dynamo Package Manager.
Tato složka obsahuje pět vlastních uzlů (.dyf).
Tato složka také obsahuje pět vzorových souborů (.dyn) a jeden importovaný vektorový soubor (.svg). Tyto soubory budou sloužit jako úvodní cvičení, která uživateli ukážou, jak pracovat s vlastními uzly.
V aplikaci Dynamo začněte kliknutím na kartu Balíčky > Package Manager > Publikovat nový balíček.
Na kartě Publikovat balíček vyplňte příslušná pole v levé části okna.
Dále přidáme soubory balíčku. Soubory můžete přidat po jednom nebo můžete přidat celou složku výběrem možnosti Přidat adresář (1). Chcete-li přidat soubory, které nejsou soubory .dyf, změňte typ souboru v okně prohlížeče na Všechny soubory (.). Všimněte si, že budeme přidávat soubor, vlastní uzel (.dyf) nebo ukázkový soubor (.dyn), bez rozdílu. Aplikace Dynamo tyto položky kategorizuje při publikování balíčku.
Po výběru složky MapToSurface nástroj Package Manager zobrazí obsah složky. Pokud nahráváte vlastní balíček se složitou strukturou složek a nechcete, aby aplikace Dynamo provedla změny ve struktuře složek, můžete povolit přepínač Zachovat strukturu složek. Tato možnost je určena pro pokročilé uživatele, a pokud balíček není záměrně nastaven určitým způsobem, je nejlepší nechat tento přepínač vypnutý a umožnit aplikaci Dynamo uspořádat soubory podle potřeby. Pokračujte kliknutím na tlačítko Další.
Zde si můžete prohlédnout, jak aplikace Dynamo uspořádá soubory balíčku před publikováním. Pokračujte kliknutím na tlačítko Dokončit.
Publikujte balíček kliknutím na tlačítko Publikovat místně (1).. Pokud pracujete s námi, klikněte na tlačítko Publikovat místně a ne Publikovat online, abychom v nástroji Package Manager neměli duplicitní balíčky.
Po publikování by měly být vlastní uzly dostupné ve skupině DynamoPrimer nebo v knihovně aplikace Dynamo.
Nyní se podívejme na kořenový adresář a uvidíme, jak aplikace Dynamo formátovala balíček, který jsme právě vytvořili. Proveďte to tak, že přejdete na kartu Nainstalované balíčky > vedle položky MapToSurface klikněte na nabídku se svislými tečkami > vyberte možnost Zobrazit kořenový adresář.
Všimněte si, že kořenový adresář se nachází v místním umístění balíčku (balíček jsme publikovali „místně“). Aplikace Dynamo aktuálně odkazuje na tuto složku pro čtení vlastních uzlů. Proto je důležité místně publikovat adresář do trvalého umístění složky (například ne na plochu). Zde je struktura složky balíčku Dynamo.
Složka bin obsahuje soubory .dll vytvořené pomocí knihoven C# nebo Zero-Touch. Pro tento balíček žádné nemáme, proto je tato složka v tomto příkladu prázdná.
Složka dyf slouží k umístění vlastních uzlů. Otevřením tohoto okna se zobrazí všechny vlastní uzly (soubory .dyf) pro tento balíček.
Složka navíc obsahuje všechny další soubory. Tyto soubory budou pravděpodobně soubory aplikace Dynamo (.dyn) nebo jakékoli další požadované soubory (.svg, .xls, .jpeg, .sat atd.).
Soubor pkg je základní textový soubor, který definuje nastavení balíčku. To je v aplikaci Dynamo automatické, ale pokud se chcete dostat do detailů, můžete je upravit.
Poznámka: Tento krok neprovádějte, pokud skutečně nepublikujete vlastní balíček!
Až budete připraveni k publikování, v okně Balíčky > Package Manager > Instalované balíčky vyberte tlačítko vpravo od balíčku, který chcete publikovat, a zvolte možnost Publikovat.
Pokud aktualizujete balíček, který již byl publikován, klikněte na tlačítko Publikovat verzi a aplikace Dynamo aktualizuje balíček online podle nových souborů v kořenovém adresáři daného balíčku. Je to tak jednoduché.
Při aktualizaci souborů v kořenové složce publikovaného balíčku můžete také publikovat novou verzi balíčku výběrem možnosti Publikovat verzi na kartě Moje balíčky. Jedná se o snadný způsob, jak provést nezbytné aktualizace vašeho obsahu a sdílet jej s komunitou. Možnost Publikovat verzi bude fungovat pouze v případě, že udržujete balíček.
Modul Dynamo pro aplikaci Revit rozšiřuje informační model budovy o data a logiku grafického editoru algoritmů. Jeho flexibilita spolu s robustní databázi aplikace Revit umožňují pracovat na BIM inovativním způsobem.
Tato kapitola se zaměřuje na práci na BIM v rozhraní Dynamo. Jednotlivé části jsou zaměřeny zejména na praktická cvičení, protože práce na projektu je nejlepší způsob, jak se seznámit s grafickým editorem algoritmů pro BIM. Řekněme si ale nejdřív něco k počátkům programu.
Protože se aplikace Revit i aplikace Dynamo neustále vyvíjejí, může dojít k situaci, kdy verze aplikace Revit nebude kompatibilní s nainstalovanou verzí modulu Dynamo pro aplikaci Revit. Níže jsou uvedeny verze modulu Dynamo pro aplikaci Revit, které jsou kompatibilní s aplikací Revit.
Díky specializovanému týmu vývojářů a aktivní komunitě ušel projekt od svým počátku dlouhou cestu.
Aplikace Dynamo původně sloužila ke zjednodušení pracovních postupů AEC v aplikaci Revit. Ačkoliv aplikace Revit pro každý projekt vytváří robustní databázi, průměrní uživatelé měli problém při přistupování k těmto datům mimo rozhraní. Aplikace Revit nabízí rozsáhlé API (aplikační programové rozhraní), které umožňuje vývojářům vytvářet přizpůsobené nástroje. Programátoři toto API využívali dlouhá léta, ale textové programování není pro každého. Aplikace Dynamo sloužila ke zpřístupnění dat aplikace Revit prostřednictvím jednoduchého grafického editoru.
Pomocí základních uzlů aplikace Dynamo spolu s uzly pro aplikaci Revit je možné rozšířit parametrické pracovní postupy pro interoperabilitu, dokumentaci, analýzu a generování. S aplikací Dynamo lze zdlouhavé pracovní postupy automatizovat a zaměřit se pouze na návrh.
V projektu aplikace Revit nebo Editoru rodiny přejděte na doplňky a klikněte na možnost Dynamo.*
*Aplikace Dynamo se spustí pouze v souboru, ve kterém byla otevřena.
Po otevření aplikace Dynamo v aplikaci Revit je k dispozici nová kategorie s názvem „Revit“. Jedná se o rozšíření uživatelského rozhraní, které nabízí uzly pro práci s aplikací Revit.*
*Pokud použijete uzly určené pro práci v aplikaci Revit, graf aplikace Dynamo bude fungovat pouze při otevření v modulu Dynamo pro aplikaci Revit. Pokud graf modulu Dynamo pro aplikaci Revit otevřete například v aplikaci Dynamo Sandbox, uzly aplikace Revit budou chybět.
Protože Revit je platforma s robustními funkcemi pro správu projektů, výpočet parametrických operací v aplikaci Dynamo může být složitý a pomalý. Pokud aplikaci Dynamo trvá výpočet uzlů dlouho, bude možná užitečné využít funkci „zmrazení“ uzlu, která pozastaví provádění operací aplikace Revit, zatímco vyvíjíte graf.
Aplikace Dynamo byla původně vytvořena pro AEC a její velká a rostoucí komunita nabízí skvělou příležitost spojit se a učit se od expertů z oboru. Komunitu aplikace Dynamo tvoří architekti, inženýři, programátoři a konstruktéři, kteří rádi sdílejí a tvoří.
Aplikace Dynamo také provozuje aktivní blog. Přečtěte si nejnovější příspěvky z vývoje.
Další informace o zmrazení uzlů naleznete v části .
Aplikace Dynamo je projekt s otevřeným zdrojovým kódem, která se neustále vyvíjí, přičemž velké množství vývoje souvisí také s aplikací Revit. Pokud s aplikací začínáte, neváhejte a na diskuzním fóru! Pokud jste programátor a chcete se zapojit do vývoje aplikace Dynamo, přejděte na . Skvělým zdrojem knihoven třetích stran je také nástroj . Mnoho z těchto balíčků bylo vyvinuto s ohledem na AEC a v této kapitole budou probrány balíčky třetích stran pro panelizaci.
2013
2014
2015
2016
2017
2018
2019
2020+
2.1.0 – Aplikace Revit 2020 a novější nyní obsahuje aplikaci Dynamo, která je aktualizována, stejně jako Revit.)
Není použito
Zatímco v předchozích částech byl kladen důraz na úpravu základního objemu budovy, tato část se zabývá více propojením aplikací Dynamo a Revit, konkrétně úpravou velkého počtu prvků najednou. Přizpůsobení ve velkém měřítku je čím dál složitější tím, jak datové struktury vyžadují čím dál pokročilejší operace seznamů. Základní principy za jejich prováděním však zůstávají v podstatě stejné. Následuje popis několika příležitostí k analýze v sadě adaptivních komponent.
Řekněme, že byl vytvořen určitý počet adaptivních komponent a vy chcete upravit parametry podle jejich umístění bodů. Body by mohly například řídit parametr tloušťky, který souvisí s plochou prvku. Nebo by mohly řídit parametr průhlednosti, který souvisí s vystavením slunečnímu záření po celý rok. Aplikace Dynamo umožňuje analýzu parametrů v několika snadných krocích, přičemž základní verze analýzy je popsána ve cvičení níže.
Zadejte dotaz na adaptivní body vybrané adaptivní komponenty pomocí uzlu AdaptiveComponent.Locations. Toto vám umožní pracovat během analýzy s abstrahovanou verzí prvku aplikace Revit.
Extrahování umístění bodu adaptivních komponent vám umožní spustit celou řadu analýz pro daný prvek. Například čtyřbodová adaptivní komponenta umožní studovat odchylku od roviny u daného panelu.
Pomocí přemapování můžete namapovat sadu dat na rozsah parametru. Jedná se o základní nástroj používaný v parametrických modelech a je znázorněn v níže uvedeném cvičení.
V aplikaci Dynamo je možné pomocí umístění bodů adaptivních komponent vytvořit nejlépe přizpůsobenou rovinu pro každý prvek. Také můžete zadat dotaz na pozici slunce v souboru aplikace Revit a studovat orientaci roviny vzhledem ke slunci v porovnání s jinými adaptivními komponentami. V níže uvedeném cvičení toto nastavíme vytvořením algoritmických střech.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Toto cvičení rozšiřuje techniky znázorněné v předchozí části. V tomto případě definujeme parametrický povrch z prvků aplikace Revit, dále vytvoříme instance čtyřbodových adaptivních komponent a poté je upravíme podle orientace vzhledem ke slunci.
Začněte výběrem dvou hran pomocí uzlu Select Edge. Tyto dvě hrany jsou dvě dlouhá rozpětí atria.
Spojte dvě hrany do jednoho seznamu pomocí uzlu List.Create.
Vytvořte mezi dvěma hranami povrch pomocí uzlu Surface.ByLoft.
Pomocí bloku kódu definujte rozsah od 0 do 1 s 10 rovnoměrně rozmístěnými hodnotami:
0..1..#10;
.Připojte blok kódu ke vstupům *u *a v uzlu Surface.PointAtParameter a připojte uzel Surface.ByLoft ke vstupu surface. Klikněte pravým tlačítkem na uzel a změňte vázání na Kartézský součin. Tím se vytvoří osnova bodů na povrchu.
Tato osnova bodů slouží jako řídicí body parametricky definovaného povrchu. Je třeba extrahovat pozice u a v každého z těchto bodů, aby bylo možné je připojit k parametrickému vzorci a zachovat stejnou datovou strukturu. Toho dosáhnete zadáním dotazu na umístění parametrů bodů, které jste právě vytvořili.
Přidejte na kreslicí plochu uzel Surface.ParameterAtPoint a připojte vstupy, jak je znázorněno výše.
Zadejte dotaz na hodnoty u těchto parametrů pomocí uzlu UV.U.
Zadejte dotaz na hodnoty v těchto parametrů pomocí uzlu UV.V.
Výstup zobrazuje odpovídající hodnoty u a v pro každý bod povrchu. Nyní existuje rozsah od 0 do 1 pro každou hodnotu ve správné datové struktuře, čili je vše připraveno k použití parametrického algoritmu.
Přidejte na kreslicí plochu blok kódu a zadejte tento kód:
Math.Sin(u*180)*Math.Sin(v*180)*w;
. Jedná se o parametrickou funkci, která z plochého povrchu vytvoří sinusový oblouk.Připojte uzel UV.U ke vstupu u a UV.V ke vstupu v.
Vstup w představuje amplitudu tvaru, takže k němu připojíme posuvník čísel.
Nyní máme seznam hodnot definovaných algoritmem. Pomocí tohoto seznamu hodnot přesuňte body nahoru ve směru +Z. Pomocí uzlu Geometry.Translate připojte blok kódu ke vstupu zTranslation a uzel Surface.PointAtParameter připojte ke vstupu geometry. Nyní by se v náhledu aplikace Dynamo měly zobrazit nové body.
Nakonec vytvořte povrch pomocí uzlu NurbsSurface.ByPoints tím, že ke vstupu bodů připojíte uzel z předchozího kroku. Nyní máme parametrický povrch. Můžete volně přetahovat posuvník a pozorovat, jak se oblouk zmenšuje a zvětšuje.
U parametrického povrchu nyní chceme definovat způsob, jak z něj vytvořit panely a umístit tak čtyřbodové adaptivní komponenty do pole. Aplikace Dynamo nemá ve výchozím stavu funkci k vytvoření panelů z povrchu, čili je třeba prozkoumat komunitu a najít užitečné balíčky pro aplikaci Dynamo.
Přejděte do nabídky Balíčky > Vyhledat balíček.
Vyhledejte řetězec LunchBox a nainstalujte si balíček LunchBox for Dynamo. Jedná se o skutečně užitečnou sadu nástrojů pro operace geometrií, jako je právě tato.
Po stažení máte nyní plný přístup k sadě LunchBox. Vyhledejte řetězec Quad Grid a vyberte položku LunchBox Quad Grid By Face. Připojte parametrický povrch ke vstupu surface a nastavte podíly U a V na hodnotu 15. Nyní byste v náhledu aplikace Dynamo měli vidět povrch se čtyřmi panely.
Pokud vás zajímá nastavení tohoto balíčku, klikněte dvakrát na uzel Lunch Box a zjistěte, jak funguje.
Opět v aplikaci Revit se v rychlosti podíváme na adaptivní komponentu, kterou používáme. Není třeba ji stále sledovat, ale toto je o panel střechy, od kterého vytvoříme instanci. Jedná se o čtyřbodovou adaptivní komponentu, která je jednoduchou reprezentací systému ETFE. Otvor středového vybrání je u parametru s názvem ApertureRatio.
Chystáte se vytvořit instanci geometrie v aplikaci Revit, proto se ujistěte, že je řešič aplikace Dynamo nastaven na možnost Ruční.
Přidejte na kreslicí plochu uzel Family Types a vyberte položku ROOF-PANEL-4PT.
Přidejte na kreslicí plochu uzel AdaptiveComponent.ByPoints a připojte Panel Pts z výstupu balíčku LunchBox Quad Grid by Face ke vstupu points. Připojte uzel Family Types ke vstupu familySymbol.
Klikněte na možnost Spustit. Během tvorby geometrie bude aplikace Revit chvíli zaneprázdněna. Pokud to trvá příliš dlouho, snižte hodnotu v bloku kódu z 15 na nižší hodnotu. Tím se sníží počet panelů na střeše.
Poznámka: Pokud aplikaci Dynamo trvá výpočet uzlů dlouho, bude možná užitečné využít funkce uzlu „freeze“, která pozastaví provádění operací aplikace Revit, zatímco vyvíjíte graf. Další informace o zmrazení uzlů najdete v části Zmrazení v kapitole Tělesa.
Zpátky v aplikaci Revit máme pole panelů na střeše.
Po přiblížení se můžete blíže podívat na kvality jejich povrchů.
V rámci pokračování z předchozího kroku nastavte otvor každého panelu podle jeho vystavení slunci. Pokud přiblížíte pohled v aplikaci Revit a vyberete jeden panel, uvidíte na panelu vlastností, že je zde parametr s názvem Poměr otvoru. Rodina je nastavena, tak aby měl otvor rozsah zhruba od 0.05 do 0.45.
Pokud zapnete dráhu slunce, uvidíte v aplikaci Revit aktuální polohu slunce.
Na tuto polohu slunce se můžete odkázat pomocí uzlu SunSettings.Current.
Připojením nastavení slunce k uzlu Sunsetting.SunDirection získejte vektor slunečního záření.
U výstupu Panel Pts použitého k vytvoření adaptivních komponent aproximujte rovinu pro komponentu pomocí uzlu Plane.ByBestFitThroughPoints.
Zadejte dotaz na normálu této roviny.
K výpočtu orientace slunečního záření použijte skalární součin. Skalární součin je vzorec, který určuje, jak mohou dva vektory být rovnoběžné nebo nerovnoběžné. Čili vezmete normálu roviny každé adaptivní komponenty a porovnáte ji s vektorem slunečního záření, čímž zhruba nasimulujete orientaci slunečního záření.
Použijte absolutní hodnotu výsledku. Tím zajistíte, že bude skalární součin přesný, pokud je normála roviny otočena opačným směrem.
Klikněte na možnost Spustit.
Při pohledu na skalární součin je vidět, že máme k dispozici velký rozsah čísel. Chceme použít jejich relativní rozložení, ale je potřeba zhustit čísla do vhodného rozsahu parametru Poměr otvoru, který chceme upravit.
K tomuto účelu se skvěle hodí uzel Math.RemapRange. Ten vezme vstupní seznam a přemapuje jeho hranice na dvě cílové hodnoty.
Definujte cílové hodnoty 0.15 a 0.45 v bloku kódu.
Klikněte na možnost Spustit.
Připojte přemapované hodnoty k uzlu Element.SetParameterByName.
Připojte řetězec Aperture Ratio (Poměr otvoru) ke vstupu parameterName.
Připojte adaptivní komponenty ke vstupu element.
Klikněte na možnost Spustit.
Zpět v aplikaci Revit můžeme z dálky rozeznat vliv orientace slunečního záření na otvor v panelech ETFE.
Pokud přiblížíte pohled, zjistíte, že panely ETFE jsou více uzavřené, pokud směřují ke slunci. Cílem je snížit míru přehřátí při vystavení slunečnímu záření. Pokud chcete vpustit dovnitř více světla na základě slunečního záření, prostě jen přepněte doménu v uzlu Math.RemapRange.
Při přidávání potrubí a stavebních objektů do potrubní sítě používá aplikace Civil 3D šablonu k automatickému přiřazení názvů. To je obvykle dostačující během počátečního umístění, ale názvy se budou v budoucnu nevyhnutelně měnit s tím, jak se bude návrh vyvíjet. Kromě toho existuje mnoho různých vzorů pojmenování, které mohou být vyžadovány, například postupné pojmenování stavebních objektů v potrubní trase počínaje nejvzdálenějším stavebním objektem, nebo podle vzoru pojmenování, který je v souladu s datovým schématem vyžadovaným místními úřady. V tomto příkladu si ukážeme, jak lze aplikaci Dynamo použít k definování libovolného typu strategie pojmenování a jejímu důslednému používání.
Práce s ohraničujícími kvádry
Filtrování dat pomocí uzlu List.FilterByBoolMask
Třídění dat pomocí uzlu List.SortByKey
Generování a úprava textových řetězců
Tento graf bude funkční v aplikaci Civil 3D 2020 a vyšších verzích.
Začněte stažením níže uvedených vzorových souborů a poté otevřete soubor DWG a graf aplikace Dynamo.
Zde je uveden přehled logiky tohoto grafu.
Vyberte stavební objekty podle hladiny.
Získejte umístění stavebních objektů.
Filtrujte stavební objekty podle odsazení a pak je uspořádejte podle staničení.
Vytvořte nové názvy.
Přejmenujte stavební objekty.
Pojďme na to!
Nejprve je třeba vybrat všechny stavení objekty, se kterými chceme pracovat. Provedeme to tak, že jednoduše vybereme všechny objekty v určité hladině, což znamená, že můžeme vybrat stavební objekty z různých potrubních sítí (za předpokladu, že sdílejí stejnou hladinu).
Tento uzel zajišťuje, že neúmyslně nevybereme žádné nežádoucí typy objektů, které by mohly sdílet stejnou hladinu jako stavební objekty.
Nyní, když máme stavební objekty, musíme zjistit jejich polohu v prostoru, abychom je mohli seřadit podle jejich umístění. K tomu využijeme ohraničující kvádr každého objektu. Ohraničující kvádr objektu je kvádr minimální velikosti, který zcela obsahuje geometrické rozměry objektu. Výpočtem středu ohraničujícího kvádru získáte poměrně dobrou aproximaci bodu vložení stavebního objektu.
Tyto body použijeme k získání staničení a odsazení stavebních objektů vzhledem k vybrané trase.
Tady to začíná být trochu složitější. V této fázi máme velký seznam všech stavebních objektů na hladině, kterou jsme určili, a vybrali jsme trasu, podle které jsme je chtěli seřadit. Problém je v tom, že v seznamu mohou být stavební objekty, které nechceme přejmenovat. Nemusí například být součástí konkrétní trasy, která nás zajímá.
Vybraná trasa
Stavební objekty, které chceme přejmenovat
Stavební objekty, které mají být ignorovány
Proto je nutné seznam stavebních objektů filtrovat, aby nebyly brány v úvahu stavební objekty, jejichž odsazení od trasy je větší než zadaná hodnota. To lze nejlépe provést pomocí uzlu List.FilterByBoolMask. Po filtrování seznamu stavebních objektů je pomocí uzlu List.SortByKey uspořádáme podle hodnot staničení.
Zkontroluje, zda je odsazení stavebního objektu menší než prahová hodnota.
Nahradí nulové hodnoty hodnotou false.
Filtruje seznam stavebních objektů a staničení.
Uspořádá stavební objekty podle staničení.
Poslední část práce, kterou je třeba udělat, je vytvoření nových názvů struktur. Formát, který použijeme, je <alignment name>-STRC-<number>
. Je zde několik dalších uzlů, které v případě potřeby doplní čísla dalšími nulami (například 01 místo 1).
A v neposlední řadě přejmenujeme stavební objekty.
Zde je příklad spuštění grafu pomocí Přehrávače skriptů Dynamo.
Pro účely vizualizace dočasných výstupů grafu místo pouze konečného výsledku může být užitečné využít 3D náhled na pozadí v aplikaci Dynamo. Jednou z jednoduchých věcí, kterou můžeme udělat, je zobrazit ohraničující kvádry pro stavební objekty. Tato konkrétní datová sada navíc obsahuje v dokumentu koridor, takže můžeme přenést geometrii návrhové linie koridoru do aplikace Dynamo a získat tak určitý kontext pro umístění stavebních objektů v prostoru. Pokud by graf byl použit v datové sadě, která nemá žádné koridory, pak tyto uzly jednoduše nebudou provádět žádné akce.
Nyní lépe rozumíme tomu, jak funguje proces filtrování stavebních objektů podle odsazení.
Zde je několik nápadů, jak byste mohli rozšířit možnosti tohoto grafu.
Přejmenujte stavební objekty podle jejich nejbližší trasy místo výběru konkrétní trasy.
Kromě stavebních objektů přejmenujte také potrubí.
Nastavte hladiny stavebních objektů podle jejich spuštění.
Jedním z mnoha případů skvělého použití aplikace Dynamo je dynamické umísťování samostatných objektů podél modelu koridoru. Často je potřeba objekty umístit na místa, která jsou nezávislá na vložených sestavách podél koridoru, což je velmi zdlouhavý úkol, který je třeba provést ručně. A pokud se změní horizontální nebo vertikální geometrie koridoru, je nutné provést značné množství předělávek.
Načítání dat z externího souboru (v tomto případě soubor aplikace Excel)
Uspořádání dat ve slovnících
Použití souřadnicových systémů k řízení polohy, měřítka nebo natočení
Umístění referencí bloků
Vizualizace geometrie v aplikaci Dynamo
Tento graf bude funkční v aplikaci Civil 3D 2020 a vyšších verzích.
Začněte stažením níže uvedených vzorových souborů a poté otevřete soubor DWG a graf aplikace Dynamo.
Doporučujeme soubor aplikace Excel uložit ve stejném adresáři jako graf aplikace Dynamo.
Zde je uveden přehled logiky tohoto grafu.
Načtěte soubor aplikace Excel a importujte data do aplikace Dynamo.
Získejte návrhové linie ze zadané základny koridoru.
Vytvořte souřadnicové systémy podél návrhové linie koridoru v požadovaných staničeních.
Pomocí souřadnicových systémů umístěte reference bloků v modelovém prostoru.
Pojďme na to!
V tomto vzorovém grafu použijeme soubor aplikace Excel k uložení dat, která aplikace Dynamo použije k umístění referencí bloků sloupů osvětlení. Tabulka vypadá následovně.
Použití aplikace Dynamo k načtení dat z externího souboru (například souboru aplikace Excel) je skvělou strategií, zejména pokud je potřeba data sdílet s ostatními členy týmu.
Data ze souboru aplikace Excel se do aplikace Dynamo importují následujícím způsobem.
Nyní, když máme data, je nutné je rozdělit podle sloupců (Corridor, Baseline, PointCode atd.), aby je bylo možné použít ve zbývající části grafu. Běžně se to dělá pomocí uzlu List.GetItemAtIndex a zadáním čísla indexu každého sloupce, který chceme použít. Například sloupec Corridor má index 0, sloupec Baseline má index 1 atd.
Vypadá to dobře, že? Ale tento přístup v sobě skrývá možný problém. Co když se v budoucnu změní pořadí sloupců v souboru aplikace Excel? Nebo se mezi dva sloupce přidá nový sloupec? Potom graf nebude správně fungovat a bude vyžadovat aktualizaci. Budoucí fungování grafu můžeme zajistit vložením dat do slovníku, přičemž záhlaví sloupců v souboru aplikace Excel budou sloužit jako klíče a zbývající data jako hodnoty.
Graf je díky tomu odolnější, protože umožňuje flexibilně měnit pořadí sloupců v souboru aplikace Excel. Dokud záhlaví sloupců zůstanou stejná, pak lze data jednoduše načíst ze slovníku pomocí jeho klíče (tj. záhlaví sloupce), což nyní provedeme.
Nyní, když máme importovaná a připravená data aplikace Excel, začneme je používat k získávání informací o modelech koridorů z aplikace Civil 3D.
Vybere model koridoru podle jeho názvu.
Získá konkrétní základnu v rámci koridoru.
Získá návrhovou linii v rámci základny podle kódu bodu.
Nyní vytvoříme souřadnicové systémy podél návrhových linií koridoru v hodnotách staničení, které jsme zadali v souboru aplikace Excel. Tyto souřadnicové systémy budou použity k definování polohy, otočení a měřítka referencí bloků sloupů osvětlení.
Všimněte si, že je zde použit blok kódu k otočení souřadnicových systémů v závislosti na tom, na které straně základny se nacházejí. Toho lze dosáhnout pomocí posloupnosti několika uzlů, ale toto je dobrý příklad situace, kdy je jednodušší to prostě sepsat.
Blížíme se k cíli! Máme všechny informace, které potřebujeme, abychom mohli skutečně umístit reference bloků. Nejprve je nutné získat požadované definice bloků pomocí sloupce BlockName v souboru aplikace Excel.
Posledním krokem je vytvoření referencí bloků.
Po spuštění grafu by se měly v modelovém prostoru podél koridoru zobrazit nové reference bloků. A tady je ta skvělá část – pokud je režim spuštění grafu nastaven na Automaticky a upravíte soubor aplikace Excel, reference bloků se automaticky aktualizují!
Zde je příklad spuštění grafu pomocí Přehrávače skriptů Dynamo.
Vizualizace geometrie koridoru v aplikaci Dynamo může být užitečná kvůli získání kontextu. Tento konkrétní model má tělesa koridoru již extrahovaná v modelovém prostoru, takže je přeneseme do aplikace Dynamo.
Je tu však ještě něco, co musíme vzít v úvahu. Tělesa jsou relativně „těžkým“ typem geometrie, což znamená, že tato operace zpomalí graf. Proto by se hodilo, kdyby existoval jednoduchý způsob, jak zvolit, zda chceme tělesa zobrazit, nebo ne. Zřejmou odpovědí je odpojení uzlu Corridor.GetSolids, což však vytvoří upozornění pro všechny navazující uzly, což je trochu nepřehledné. To je situace, kdy vítězoslavně použijeme uzel ScopeIf.
Všimněte si šedé čáry v dolní části uzlu Object.Geometry. To znamená, že náhled uzlu je vypnutý (přístupný po kliknutí pravým tlačítkem myši na uzel), což umožňuje, aby uzel GeometryColor.ByGeometryColor „nebojoval“ s jinou geometrií o prioritu zobrazení v náhledu na pozadí.
Uzel ScopeIf v zásadě umožňuje selektivně spustit celou větev uzlů. Pokud je vstup test nastaven na hodnotu false, potom se nespustí žádné uzly připojené k uzlu ScopeIf.
Zde je výsledek v náhledu na pozadí v aplikaci Dynamo.
Zde je několik nápadů, jak byste mohli rozšířit možnosti tohoto grafu.
Přidejte do souboru aplikace Excel sloupec rotation a použijte jej k řízení otáčení souřadnicových systémů.
Přidejte do souboru aplikace Excel horizontální nebo vertikální odsazení, aby se sloupy osvětlení mohly v případě potřeby odchýlit od návrhové linie koridoru.
Místo použití souboru aplikace Excel s hodnotami staničení vygenerujte hodnoty staničení přímo v aplikaci Dynamo pomocí počátečního staničení a typické rozteče.
Přejmenujte stavební objekty potrubní sítě v pořadí podle staničení trasy.
Pokud se seznamy pracujete poprvé, přečtěte si část .
Pokud je pro vás Přehrávač skriptů Dynamo novinkou, přečtěte si část .
Úkol splněn!
Umístěte reference bloků sloupů osvětlení podél koridoru v hodnotách staničení určených v souboru aplikace Excel.
Pokud jsou pro vás slovníky novinkou, přečtěte si část .
Pokud jsou pro vás souřadnicové systémy novinkou, přečtěte si část .
Pokud jsou bloky kódu pro vás novinkou, přečtěte si část .
Další informace o režimech spouštění grafů naleznete v části .
Pokud je pro vás Přehrávač skriptů Dynamo novinkou, přečtěte si část .
Úkol splněn!
Přehrávač skriptů Dynamo nabízí zjednodušený způsob spouštění grafů aplikace Dynamo v aplikaci Civil 3D. Jakmile je graf vytvořen, nejsou k používání Přehrávače a spouštění grafů zapotřebí žádné odborné znalosti aplikace Dynamo. To usnadňuje sdílení grafů s ostatními uživateli, kteří nemají zájem pronikat do detailů uzlů a drátů.
Další informace o Přehrávači skriptů Dynamo v aplikaci Civil 3D naleznete v dokumentaci k aplikaci na stránce nápovědy k aplikaci Civil 3D.
Časem možná zjistíte, že potřebujete jít nad rámec základů a ponořit se do vnitřního fungování aplikace Dynamo. Stránky v této části vám poskytnou návod, jak používat pokročilé funkce v aplikaci Dynamo for Civil 3D, abyste mohli grafy posunout na vyšší úroveň.
Aplikace Dynamo představuje skvělou příležitostí, jak začít kódovat pro svět AEC. Mohly by vás zajímat některá z těchto témat, která vám pomohou začít s kódováním:
Možná jste si všimli běžného tématu v názvech uzlů v aplikaci Dynamo: každý uzel používá syntaxi se znakem "." bez mezer. Je tomu tak proto, že text v horní části každého uzlu představuje skutečnou syntaxi pro skriptování a "." (neboli tečková notace) odděluje prvek od možných metod, které je možné volat. Toto umožňuje snadný přesun od vizuálního skriptování k textovému.
Jak v rámci obecné analogie tečkové notace postupovat u parametrického jablka v aplikaci Dynamo? Níže je uvedeno několik metod, které použijeme na jablko než se rozhodneme, zda je sníst. (Poznámka: Nejedná se o skutečné metody aplikace Dynamo):
Jakou barvu má jablko?
Jablko.barva
červená
Je jablko zralé?
Jablko.jeZrale
ano
Kolik jablko váží?
Jablko.vaha
6 oz.
Z čeho jablko pochází?
Jablko.rodic
strom
Co to jablko vytváří?
Jablko.produkty
semena
Bylo toto jablko vypěstováno zde?
Jablko.vzdalenostOdSadu
60 mi.
Nevím, jak ty, ale soudě podle výstupů v tabulce výše, to vypadá, že jablko je chutné. Myslím, že provedu operaci Jablko.snist().
S ohledem na analogii jablka se podívejte na uzel Point.ByCoordinates a určete, jak můžeme vytvořit bod pomocí bloku kódu.
Syntaxe bloku kódu Point.ByCoordinates(0,10);
předává stejný výsledek jako uzel Point.ByCoordinates v aplikaci Dynamo, s výjimkou toho, že je možné vytvořit bod pomocí jednoho uzlu. Je to mnohem efektivnější než připojení dvou samostatných uzlů k hodnotám „X“ a „Y“.
Pokud použijete uzel Point.ByCoordinates v bloku kódu, určíte vstupy ve stejném pořadí jako uzel ve výchozím natavení (X,Y).
Jakýkoliv běžný uzel v knihovně je možné volat prostřednictvím bloku kódu, pokud uzel není speciálním „uzlem uživatelského rozhraní“: uzly se speciální funkcí uživatelského rozhraní. Můžete například volat uzel Circle.ByCenterPointRadius, ale nemělo by smysl volat uzel Watch 3D.
Běžné uzly (většina knihovny) jsou obvykle tří typů. Můžete vidět, že knihovna je organizována s ohledem na tyto kategorie. Metody nebo uzly těchto tří typů jsou při volání v bloku kódu zpracovávány odlišně.
Tvorba – něco se vytvoří (nebo zkonstruuje).
Akce – provede u položky nějakou akci.
Dotaz – získá vlastnost položky, která již existuje.
Kategorie „Tvorba“ vytvoří geometrii od začátku. V bloku kódu se zadají vstupní hodnoty zleva doprava. Tyto vstupy jsou ve stejném pořadí jako vstupy uzlu shora dolů.
Pokud použijete uzel Line.ByStartPointEndPoint a porovnáte výsledek s odpovídající syntaxí v bloku kódu, zjistíte, že výsledky jsou stejné.
Akce je něco, co se provede u objektu daného typu. Aplikace Dynamo používá k provedení akce u určité položky tečkovou notaci, která je běžná v mnoha jazycích kódů. Jakmile zadáte název položky, zadejte tečku a poté název akce. Vstup metody typu Akce je umístěn v závorkách stejně jako u metody typu Tvorba, jen není třeba určovat první vstup, který uvidíte na odpovídajícím uzlu. Místo toho určíte, u kterého prvku se akce provede:
Uzel Point.Add je uzel typu Akce, takže syntaxe funguje trochu jinak.
Vstupy jsou (1) bod a (2) vektor, které se mají přidat. V bloku kódu jsme bod (položku) pojmenovali výrazem „pt“. Chcete-li přidat vektor s názvem *„vec *k bodu „pt“, zadejte výraz pt.Add(vec) neboli položka, tečka, akce. Akce Add má pouze jeden vstup nebo všechny vstupy z uzlu **Point.Add **kromě prvního. První vstup uzlu Point.Add je samotný bod.
Metody typu Dotaz získají vlastnost objektu. Vzhledem k tomu, že objekt samotný je vstupem, není třeba určovat žádné vstupy. Nejsou třeba žádné závorky.
Vázání na uzly se poněkud liší od vázání na blok kódu. U uzlů klikne uživatel pravým tlačítkem na uzel a vybere možnost vázání, kterou chce provést. Díky bloku kódu má uživatel mnohem větší kontrolu nad tím, jak jsou data strukturována. Metoda zkratky bloku kódu používá vodítka replikací k nastavení způsobu, jakým by mělo být párováno několik jednorozměrných seznamů. Čísla v šikmých závorkách „<>“ definují hierarchii výsledného vnořeného seznamu: <1>,<2>,<3> atd.
V tomto příkladu definujeme dva rozsahy pomocí zkratky (více o zkratkách naleznete v následující části této kapitoly). Stručně řečeno,
0..1;
je ekvivalentní{0,1}
a-3..-7
je ekvivalentní{-3,-4,-5,-6,-7}
. Výsledkem je seznam 2 hodnot X a 5 hodnot Y. Pokud se nepoužijí vodítka replikací společně s těmito neshodujícími se seznamy, vznikne seznam dvou bodů, který má délku nejkratšího seznamu. Pomocí vodítek replikací je možné najít všechny možné kombinace 2 a 5 souřadnic (neboli kartézský součin).Pomocí syntaxe Point.ByCoordinates
(x_vals<1>,y_vals<2>);
získáte dva seznamy s pěti položkami v každém seznamu.Pomocí syntaxe Point.ByCoordinates
(x_vals<2>,y_vals<1>);
získáte pět seznamů s dvěma položkami v každém seznamu.
Pomocí této notace můžeme také určit, který seznam bude dominantní: 2 seznamy 5 položek nebo 5 seznamů 2 položek. V tomto příkladu změna pořadí vodítek replikací vytvoří seznam řádků bodů v osnově nebo seznam sloupců bodů v osnově.
Zatímco na výše uvedené metody bloku kódu si možná budete chvíli zvykat, v aplikace Dynamo existuje i funkce s názvem „Uzel na blok“ která celý proces usnadní. Chcete-li tuto funkci použít, vyberte pole uzlů v grafu aplikace Dynamo, klikněte pravým tlačítkem na kreslicí plochu a vyberte položku „Uzel na kód“. Aplikace Dynamo tyto uzly zhustí do bloku kódu včetně všech vstupů a výstupů. Nejenže se jedná o skvělý nástroj k výuce práce s blokem kódu, ale tato funkce také umožňuje práci s efektivnějším a parametrickým grafem aplikace Dynamo. Cvičení je zakončeno využitím funkce „Uzel na kód“, nepropásněte tuto část.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Nyní demonstrujeme sílu bloku kódu převedením existující definice pole atraktoru do tvaru bloku kódu. Práce s existující definicí ukazuje, jak blok kódu souvisí s vizuálním skriptem, a je užitečná k seznámení se se syntaxí jazyka DesignScript.
Začněte znovuvytvořením definice na obrázku výše (nebo otevřením vzorového souboru).
Všimněte si, že vázání uzlu Point.ByCoordinates bylo nastaveno na hodnotu Kartézský součin.
Každý bod v osnově se posune nahoru ve směru Z podle jeho vzdálenosti od referenčního bodu.
Povrch je znovu vytvořen a zesílen, čímž se vytvoří vyboulení v geometrii relativně ke vzdálenosti od referenčního bodu.
Na začátku nejprve definujeme referenční bod: Point.ByCoordinates
(x,y,0);
. Použijeme stejnou syntaxi Point.ByCoordinates, jaká je zadána v horní části uzlu referenčního bodu.Proměnné x a y se vloží do bloku kódu, aby bylo možné je dynamicky aktualizovat pomocí posuvníků.
Přidejte posuvníky ke vstupům bloku kódu, které se pohybují v rozsahu od -50 do 50. Tímto zajistíme dosah přes celou výchozí osnovu aplikace Dynamo.
Ve druhém řádku bloku kódu definujeme zkratku, která nahradí uzel posloupnosti čísel:
coordsXY = (-50..50..#11);
. Tímto se budeme dále zabývat v další části. V tuto chvíli si všimněte, že tato zkratka odpovídá uzlu Number Sequence ve vizuálním skriptu.
Nyní chceme vytvořit osnovu z bodů v posloupnosti položek coordsXY. Za tímto účelem je vhodné použít syntaxi Point.ByCoordinates, ale také je nutné spustit Kartézský součin seznamu stejným způsobem, jako to bylo provedeno ve vizuálním skriptu. Zadejte následující řádek:
gridPts = Point.ByCoordinates(coordsXY<1>,coordsXY<2>,0);
. Šikmé závorky označují odkaz na kartézský součin.Všimněte si, že v uzlu Watch3D se nachází osnova bodů přes celou osnovu aplikace Dynamo.
Nyní nastává ta náročná část: Je třeba přesunout osnovu bodů nahoru podle vzdáleností bodů od referenčního bodu. Nejprve pojmenujte tuto novou sadu bodů transPts. A vzhledem k tomu, že převod je akce na existujícím prvku, použijte místo výrazu
Geometry.Translate...
výrazgridPts.Translate
.Při čtení ze skutečného uzlu na kreslicí ploše je vidět, že obsahuje tři vstupy. Geometrie, kterou chcete převést, je již deklarována, protože na tomto prvku provádíme akci (pomocí metody gridPts.Translate). Zbývající dva vstupy budou vloženy do závorek funkce: směr a vzdálenost.
Směr je jednoduchý vstup, k jeho vertikálnímu posunutí se použije výraz
Vector.ZAxis()
.Dále je třeba vypočítat vzdálenost mezi referenčním bodem a každým bodem osnovy. Toto provedeme stejným způsobem jako akci u referenčního bodu:
refPt.DistanceTo(gridPts)
.Poslední řádek kódu nám poskytuje převedené body:
transPts=gridPts.Translate(Vector.ZAxis(),refPt.DistanceTo(gridPts));
Nyní máme osnovu bodů s vhodnou datovou strukturou k vytvoření povrchu Nurbs. Vytvoříme povrch pomocí
srf = NurbsSurface.ByControlPoints(transPts);
.
A nakonec, abychom povrchu dodali trochu hloubky, vytvoříme těleso pomocí výrazu
solid = srf.Thicken(5);
. V tomto případě jsme v kódu zesílili povrch o 5 jednotek, tuto hodnotu bychom však mohli deklarovat jako proměnnou (kterou můžete nazvat například tloušťka) a poté řídit její hodnotu pomocí posuvníku.
Funkce „Uzel na kód“ automatizuje celé toto právě dokončené cvičení pomocí kliknutí na tlačítko. Nejenže se jedná o výkonné řešení tvorby vlastních definic a opakovaně použitelných bloků kódu, ale také je to velmi užitečný nástroj k výuce skriptování v aplikaci Dynamo:
Začněte existujícím vizuálním skriptem z kroku 1 tohoto cvičení. Vyberte všechny uzly, klikněte pravým tlačítkem na kreslicí plochu a vyberte možnost Uzel na kód. Až tak jednoduché to je.
Aplikace Dynamo má automatizovanou textovou verzi vizuálního grafu, vázání a dalších. Vyzkoušejte si tuto funkci u vašich vizuálních skriptů a využijte výkon bloku kódu.
Práce s body COGO a skupinami bodů v aplikaci Civil 3D je základním prvkem mnoha komplexních procesů využívajících data získaná v terénu. Aplikace Dynamo skutečně vyniká v oblasti správy dat a v tomto příkladu si ukážeme jeden z případů možného použití.
Práce se seznamy
Seskupení podobných objektů pomocí uzlu List.GroupByKey
Zobrazení vlastního výstupu v Přehrávači skriptů Dynamo
Tento graf bude funkční v aplikaci Civil 3D 2020 a vyšších verzích.
Začněte stažením níže uvedených vzorových souborů a poté otevřete soubor DWG a graf aplikace Dynamo.
Zde je uveden přehled logiky tohoto grafu.
Získejte všechny body COGO v dokumentu.
Seskupte body COGO podle popisu.
Vytvořte skupiny bodů.
Odešlete souhrn do Přehrávače skriptů Dynamo.
Pojďme na to!
V prvním kroku získáme všechny skupiny bodů v dokumentu a potom všechny body COGO v každé skupině. Tím získáme vnořený seznam neboli „seznam seznamů“, se kterým se nám bude později lépe pracovat, pokud vše sloučíme do jediného seznamu pomocí uzlu List.Flatten.
Pokud se seznamy pracujete poprvé, přečtěte si část Práce se seznamy .
Nyní, když máme všechny body COGO, je třeba je rozdělit do skupin podle jejich popisů. Přesně to dělá uzel List.GroupByKey. V podstatě seskupuje všechny položky, které sdílejí stejný klíč.
To nejtěžší je za námi! Posledním krokem je vytvoření nových skupin bodů aplikace Civil 3D ze seskupených bodů COGO.
Při spuštění grafu není v náhledu na pozadí v aplikaci Dynamo nic vidět, protože nepracujeme s žádnou geometrií. Takže jediný způsob, jak zjistit, zda byl graf správně proveden, je zkontrolovat prostor nástrojů nebo se podívat na náhledy výstupu uzlu. Pokud však graf spustíme pomocí Přehrávače skriptů Dynamo, můžeme získat další zpětnou vazbu o výsledcích grafu vypsáním přehledu vytvořených skupin bodů. Stačí kliknout pravým tlačítkem myši na uzel a nastavit jej na možnost Je výstup. V tomto případě zobrazíme výsledky pomocí přejmenovaného uzlu Watch.
Zde je příklad spuštění grafu pomocí Přehrávače skriptů Dynamo.
Pokud je pro vás Přehrávač skriptů Dynamo novinkou, přečtěte si část Přehrávač skriptů Dynamo.
Zde je několik nápadů, jak byste mohli rozšířit možnosti tohoto grafu.
Upravte seskupení bodů tak, aby bylo založeno na úplném popisu místo hrubého popisu.
Seskupte body podle dalších předdefinovaných kategorií, které vyberete (například „Pozemní snímky“, „Vztažné body“ atd.)
Automaticky vytvořte povrchy TIN pro body v určitých skupinách.
Aplikace Dynamo je sice jako nástroj pro vizuální programování extrémně výkonná, ale můžete jít také nad rámec uzlů a drátů a psát kód v textové podobě. To lze provést dvěma způsoby:
Psát v jazyce DesignScript pomocí bloku kódu.
Psát v jazyce Python pomocí uzlu jazyka Python.
V této části se zaměříme na to, jak lze pomocí jazyka Python v prostředí aplikace Civil 3D efektivně využívat rozhraní .NET API aplikací AutoCAD a Civil 3D.
Další obecné informace o používání jazyka Python v aplikaci Dynamo naleznete v části Python .
Aplikace AutoCAD i Civil 3D mají k dispozici několik rozhraní API, která umožňují vývojářům, jako jste vy, rozšířit základní produkt o vlastní funkce. V kontextu aplikace Dynamo jsou relevantní spravovaná rozhraní .NET API. Následující odkazy jsou důležité pro pochopení struktury rozhraní API a způsobu jejich fungování.
Příručka pro vývojáře rozhraní .NET API pro aplikaci AutoCAD
Referenční příručka rozhraní .NET API pro aplikaci AutoCAD
Příručka pro vývojáře rozhraní .NET API pro aplikaci Civil 3D
Referenční příručka rozhraní .NET API pro aplikaci Civil 3D
Při procházení této části se můžete setkat s pojmy, které neznáte, jako jsou databáze, transakce, metody, vlastnosti atd. Mnoho z těchto pojmů tvoří základ pro práci s rozhraním .NET API a nejsou specifické pro aplikaci Dynamo nebo jazyk Python. Podrobné rozebírání těchto pojmů přesahuje rámec této části příručky Primer, proto doporučujeme často vyhledávat další informace na výše uvedených odkazech.
Při první úpravě nového uzlu jazyka Python bude tento uzel předvyplněn kódem šablony, abyste mohli začít. Zde je rozpis šablony s vysvětlením jednotlivých bloků.
Importuje moduly
sys
aclr
, které jsou nezbytné pro správnou funkci interpretu jazyka Python. Modulclr
zejména umožňuje, aby se se jmennými prostory .NET zacházelo v podstatě jako s balíčky jazyka Python.Načte standardní sestavy (tj. knihovny DLL) pro práci se spravovanými rozhraními .NET API pro aplikace AutoCAD a Civil 3D.
Přidá odkazy na standardní jmenné prostory aplikací AutoCAD a Civil 3D. Jsou ekvivalentní direktivám
using
neboImports
v jazyce C# nebo VB.NET (v uvedeném pořadí).Vstupní porty uzlu jsou přístupné pomocí předdefinovaného seznamu s názvem
IN
. K datům v určitém portu můžete přistupovat pomocí jeho čísla indexu, napříkladdataInFirstPort = IN[0]
.Vrátí aktivní dokument a editor.
Uzamkne dokument a zahájí transakci databáze.
Zde byste měli umístit většinu logiky skriptu.
Zrušte komentář tohoto řádku, aby se po dokončení hlavní práce provedla transakce.
Pokud chcete z uzlu získat výstup libovolných dat, přiřaďte je na konci skriptu proměnné
OUT
.
Chcete si šablonu přizpůsobit?
Výchozí šablonu jazyka Python si můžete přizpůsobit úpravou souboru PythonTemplate.py
, který se nachází v umístění C:\ProgramData\Autodesk\C3D <version>\Dynamo
.
Pojďme si na příkladu ukázat některé základní koncepty psaní skriptů jazyka Python v aplikaci Dynamo for Civil 3D.
Zde jsou příklady souborů, na které se můžete odkazovat v tomto cvičení.
Zde je uveden přehled logiky tohoto grafu.
Zkontrolujte dokumentaci rozhraní API aplikace Civil 3D.
Vyberte všechna povodí v dokumentu podle názvu hladiny.
„Rozbalte“ objekty aplikace Dynamo a získejte přístup k interním prvkům rozhraní API aplikace Civil 3D.
Vytvořte body aplikace Dynamo z bodů aplikace AutoCAD.
Vytvořte pomocí bodů objekty PolyCurve.
Pojďme na to!
Než začneme vytvářet graf a psát kód, je vhodné se podívat do dokumentace rozhraní API aplikace Civil 3D a získat představu o tom, co nám rozhraní API zpřístupňuje. V tomto případě existuje vlastnost ve třídě Catchment, která vrátí hraniční body povodí. Všimněte si, že tato vlastnost vrací objekt Point3dCollection
, který aplikace Dynamo nezná. Jinými slovy, z objektu Point3dCollection
nebude možné vytvořit objekt PolyCurve, takže nakonec bude nutné vše převést na body aplikace Dynamo. K tomu se vrátíme později.
Nyní můžeme začít vytvářet logiku grafu. Nejprve je nutné získat seznam všech povodí v dokumentu. Pro tuto operaci jsou k dispozici uzly, takže ji nemusíme zahrnovat do skriptu jazyka Python. Použití uzlů nabízí lepší přehlednost pro někoho, kdo by mohl graf číst (místo procházení velkého množství kódu ve skriptu jazyka Python), a také udržuje skript jazyka Python zaměřený na jednu věc: vrácení hraničních bodů povodí.
Všimněte si, že výstup z uzlu All Objects on Layer je seznam objektů CivilObject. Je tomu tak proto, že aplikace Dynamo for Civil 3D aktuálně nemá žádné uzly pro práci s povodími, což je celý důvod, proč přistupovat k rozhraní API prostřednictvím jazyka Python.
Než budeme pokračovat, musíme se krátce zastavit u důležitého pojmu. V části Knihovna uzlů jsme se zmínili, jak spolu souvisí objekty (Object) a objekty aplikace Civil 3D (CivilObject). Abychom to dále upřesnili, objekt aplikace Dynamo je obálka kolem entity aplikace AutoCAD. Podobně platí, že objekt Dynamo CivilObject je obálka kolem entity aplikace Civil 3D. Objekt můžete „rozbalit“ přístupem k jeho vlastnostem InternalDBObject
nebo InternalObjectId
.
Objekt Autodesk.AutoCAD.DynamoNodes.Object
Entita Autodesk.AutoCAD.DatabaseServices.Entity
CivilObject Autodesk.Civil.DynamoNodes.CivilObject
Entita Autodesk.Civil.DatabaseServices.Entity
Obecně je bezpečnější získat ID objektu pomocí vlastnosti InternalObjectId
a poté získat přístup k zabalenému objektu v transakci. Důvodem je, že vlastnost InternalDBObject
vrátí objekt DBObject aplikace AutoCAD, který není v zapisovatelném stavu.
Zde je úplný skript jazyka Python, který provádí přístup k vnitřním objektům povodí a získává jejich hraniční body. Zvýrazněné řádky jsou upraveny/přidány oproti výchozímu kódu šablony.
Kliknutím na podtržený text ve skriptu zobrazíte popis k jednotlivým řádkům.
Pravidlem je, že většinu logiky skriptu je vhodné zahrnout do transakce. Tím zajistíte bezpečný přístup k objektům, které váš skript čte/zapisuje. V mnoha případech může vynechání transakce způsobit závažnou chybu.
V této fázi by měl skript jazyka Python vygenerovat seznam bodů aplikace Dynamo, který si můžete prohlédnout v náhledu na pozadí. Posledním krokem je jednoduché vytvoření objektů PolyCurve z těchto bodů. To lze provést také přímo ve skriptu jazyka Python, ale záměrně jsme tento krok umístili mimo skript do uzlu kvůli lepší přehlednosti. Zde je výsledný graf.
A zde je výsledná geometrie aplikace Dynamo.
Jen stručná poznámka, než skončíme toto téma. V závislosti na používané verzi aplikace Civil 3D může být uzel jazyka Python konfigurován odlišně. V aplikacích Civil 3D 2020 a 2021 používala aplikace Dynamo k přesunu dat mezi objekty .NET a skripty jazyka Python nástroj IronPython. V aplikaci Civil 3D 2022 však aplikace Dynamo používá standardní nativní interpret jazyka Python (neboli CPython), který používá jazyk Python 3. Mezi výhody přechodu na tento interpret patří přístup k oblíbeným moderním knihovnám a novým funkcím platformy, nezbytná údržba a bezpečnostní opravy.
Další informace o tomto přechodu a o upgradu starších skriptů naleznete na blogu aplikace Dynamo. Pokud chcete i nadále používat nástroj IronPython, stačí nainstalovat balíček DynamoIronPython2.7 pomocí nástroje Dynamo Package Manager.
Tento řádek získá konkrétní třídu, kterou potřebujeme, z knihovny geometrie aplikace Dynamo. Všimněte si, že zde uvádíme import Point as DynPoint
místo import *
, protože druhá možnost by mohla způsobit kolizi názvů.
Zde přesně určíme, který vstupní port obsahuje požadovaná data, namísto výchozího zadání IN
, které odkazuje na celý seznam všech vstupů.
Nejjednodušším geometrickým objektem v knihovně standardních geometrií aplikace Dynamo je bod. Všechny geometrie se vytvářejí pomocí speciálních funkcí nazvaných konstruktory, které vrací nové instance geometrií daného typu. V aplikaci Dynamo konstruktory začínají názvem typu objektu, v tomto případě Point, a dále obsahují metodu jejich tvorby. Chcete-li vytvořit trojrozměrný bod určený kartézskými souřadnicemi X, Y a Z, použijte konstruktor ByCoordinates:
Konstruktory aplikace Dynamo obvykle obsahují předponu „By“ a po spuštění vrací nově vytvořený objekt daného typu. Tento nově vytvořený objekt se uloží do proměnné, jejíž název se nachází na levé straně rovnítka.
Většina objektů má mnoho různých konstruktorů, pomocí konstruktoru BySphericalCoordinates je možné vytvořit bod ležící na kouli, je nutné zadat poloměr koule, první úhel otáčení a druhý úhel otáčení (ve stupních):
Body je možné použít k vytvoření geometrie vyššího rozměru, například čáry. Pomocí konstruktoru ByStartPointEndPoint je možné vytvořit mezi dvěma body objekt čáry:
Podobně lze čáry použít k tvorbě geometrie vyššího rozměru (plocha), například pomocí konstruktoru Loft, který jako vstup přijímá řadu čar nebo křivek a interpoluje mezi nimi plochu.
Plochy lze použít k vytvoření geometrie vyššího rozměru (těleso), například zesílením plochy o určitou vzdálenost. K mnoha objektům jsou připojeny funkce, kterým se říká metody, a které umožňují nad daným objektem spouštět příkazy. Všechny geometrie mají společné metody Translate a Rotate, které posunou respektive otočí geometrii o zadanou hodnotu. Plochy mají metodu Thicken, která jako vstup přijímá novou tloušťku plochy.
Příkazy pro průsečík umožňují získat geometrii nižšího rozměru z objektů vyššího rozměru. Extrahované geometrie nižšího rozměru lze použít jako základ geometrií vyššího rozměru, čímž vzniká cyklický pracovní postup tvorby, extrahování a opakované tvorby geometrií. V tomto příkladu pomocí vygenerovaného tělesa vytvoříme plochu a plochu použijeme k vytvoření křivky.
Vytvořte skupinu bodů pro každý jedinečný popis bodu COGO.
Úkol splněn!
Získejte geometrii hranic všech povodí ve výkresu.
Úkol splněn!
Metody Intersect, Trim a SelectTrim se používají zejména u méněrozměrných geometrií, například u bodů, křivek a ploch. Geometrie těles obsahují další sadu metod, které umožňují upravovat jejich tvar, například odebráním materiálu podobně jako u metody Trim, nebo prvky kombinovat a vytvářet tak větší celky.
Metoda Union přijímá dvě tělesa a z prostoru, který tyto objekty zaujímají, vytváří jedno těleso. Překrývající se prostor mezi objekty se zkombinuje do konečného tvaru. Tento příklad kombinuje kouli a kvádr do jednoho tvaru:
Metoda Difference funguje podobně jako metoda Trim odečítá obsah vstupního tělesa od základního tělesa. V tomto příkladu odřízneme od koule malý kus:
Metoda Intersect vrací těleso tvořené překrývajícím se prostorem dvou vstupních těles. V následujícím příkladu je metoda Difference změněna na Intersect, výsledným tělesem je kus, který byl v předchozím příkladu odříznut:
Dvourozměrná varianta objektu NurbsCurve je objekt NurbsSurface, který lze stejně jako křivku Nurbs volného tvaru vytvořit dvěma základními způsoby: zadáním sady základních bodů a interpolací mezi nimi, nebo explicitním zadáním řídicích bodů plochy. Interpolované plochy jsou užitečné jako křivky volného tvaru v případě, kdy konstruktér zná přesný tvar potřebné plochy, nebo pokud musí plocha procházet určitými body. Na druhou stranu, plochy vytvořené pomocí řídicích bodů mohou být užitečnější pro průzkum různých návrhových možností a úrovní vyhlazování.
Chcete-li vytvořit interpolovanou plochu, jednoduše vygenerujte dvourozměrnou kolekci bodů s přibližným tvarem plochy. Kolekce musí mít rovné, nezubaté hrany. Plochu z těchto bodů lze vytvořit metodou NurbsSurface.ByPoints.
Plochu Nurbs volného tvaru lze vytvořit také určením řídicích bodů plochy. Podobně jako u křivek Nurbs, řídicí body si lze představit jako reprezentaci čtyřúhelníkové sítě s rovnými segmenty, která bude v závislosti na stupni plochy vyhlazena do konečné podoby. Chcete-li vytvořit plochu Nurbs pomocí řídicích bodů, zadejte do metody NurbsSurface.ByPoints další dva parametry, které budou naznačovat stupně podřazených křivek v obou směrech plochy.
Stupeň objektu NurbsSurface lze zvýšit a změnit tím výslednou geometrii plochy:
Podobně jako lze plochy vytvářet interpolací mezi sadou vstupních bodů, lze je vytvářet také interpolací mezi sadou základních křivek. Tomu se říká šablonování. Šablonovanou křivku lze vytvořit pomocí konstruktoru Surface.ByLoft, jediným jeho parametrem je kolekce vstupních křivek.
Plochy rotace jsou dalším typem ploch vytvořených tažením základní křivky kolem střední osy. Pokud jsou interpolované plochy dvourozměrnou analogií interpolovaných křivek, pak rotační plochy jsou dvourozměrnou analogií kružnic a oblouků.
Plochy rotace se určují pomocí základní křivky, která reprezentuje „hranu“ plochy, dále pomocí počátku osy, základního bodu plochy, směru osy, středního „hlavního“ směru a počátečního a koncového úhlu tažení. Tyto parametry se zadávají jako vstup do konstruktoru Surface.Revolve.
V aplikaci Dynamo 2.0 je možné určit výchozí šablonu (.py extension)
, která se použije při prvním otevření okna jazyka Python. Tato funkce byla dlouho požadována, protože urychluje používání jazyka Python v aplikaci Dynamo. Díky šabloně je možné při vývoji vlastního skriptu v jazyce Python mít připraveny veškeré importy.
Šablona se nachází v umístění APPDATA
instalace aplikace Dynamo.
Obvykle je to následující umístění: ( %appdata%\Dynamo\Dynamo Core\{version}\ )
.
Aby bylo možné tuto funkci používat, je nutné přidat do souboru DynamoSettings.xml
následující řádek. (Upravte v poznámkovém bloku)
Řetězec <PythonTemplateFilePath />
je možné jednoduše nahradit následujícím řetězcem:
Poznámka: Nahraďte proměnnou CURRENTUSER svým uživatelským jménem.
Dále je nutné vytvořit šablonu s funkcemi, které má obsahovat. V tomto případě do ní zahrneme importy související s aplikací Revit a další položky, které se s aplikací Revit obvykle používají.
Otevřete prázdný dokument v poznámkovém bloku a vložte do něj následující kód:
Poté tento soubor uložte pod názvem PythonTemplate.py
do umístění APPDATA
.
Po definování šablony jazyka Python aplikace Dynamo tuto šablonu vyhledá při každém vložení uzlu jazyka Python. Pokud ji nenajde, okno jazyka Python bude vypadat jako ve výchozím nastavení.
Pokud se podaří šablonu jazyka Python nalézt (například náš skript pro aplikaci Revit), zobrazí se všechny položky, které obsahuje.
Další informace o této skvělé nové funkci (autor: Radu Gidei) naleznete zde: https://github.com/DynamoDS/Dynamo/pull/8122
Určité geometrické objekty je možné vytvářet přímým zadáním souřadnic X, Y a Z v trojrozměrném prostoru. Geometrie se však častěji do konečné pozice přesunují pomocí geometrických transformací samotného objektu nebo souvisejícího objektu CoordinateSystem.
Nejjednodušší geometrickou transformací je posunutí, čímž se objekt posune o zadaný počet jednotek ve směru X, Y a Z.
Ačkoliv lze všechny objekty v aplikaci Dynamo posunout připojením metody .Translate na konec názvu objektu, pro složitější transformace je nutné provést transformaci souvisejícího objektu CoordinateSystem na nový. Například pro otočení objektu o 45 stupňů okolo osy Z je nutné pomocí metody .Transform provést transformaci existujícího objektu CoordinateSystem bez otočení na objekt CoordinateSystem s otočením 45 stupňů kolem osy X:
Kromě posunutí a otočení lze u objektů CoordinateSystem také měnit měřítko nebo provádět kolmý posun. Měřítko objektu CoordinateSystem lze změnit metodou .Scale:
Objekty CoordinateSystem s kolmým posunem lze vytvořit zadáním neortogonálních vektorů jako vstup konstruktoru CoordinateSystem.
Změny měřítka a kolmý posun jsou mnohem složitější geometrické transformace než otočení nebo posunutí, proto je na některé objekty aplikace Dynamo nemusí být možné použít. Následující tabulka uvádí, u kterých objektů aplikace Dynamo lze provést nerovnoměrnou změnu měřítka nebo kolmý posun u jejich objektů CoordinateSystem.
Oblouk
Ne
Ne
NurbsCurve
Ano
Ano
NurbsSurface
Ne
Ne
Kružnice
Ne
Ne
Úsečka
Ano
Ano
Rovina
Ne
Ne
Bod
Ano
Ano
Polygon
Ne
Ne
Těleso
Ne
Ne
Plocha
Ne
Ne
Text
Ne
Ne
Následující skripty jazyka Python vytvářejí pole bodů pro několik příkladů. Vložte je do uzlu skriptu jazyka Python následovně:
python_points_1
python_points_2
python_points_3
python_points_4
python_points_5
Ve výpočetních návrzích se křivky a plochy často používají jako základ pro tvorbu složitějších geometrií. Aby se tyto jednoduché geometrie daly použít jako základ pro složitější geometrie, skript musí být schopen získat hodnoty, například pozici a orientaci, na jakémkoliv místě objektu. Získávání těchto hodnot křivky i plochy podporují a tomuto procesu se říká parametrizace.
Všem bodům na křivce lze přiřadit jedinečný parametr v rozsahu od 0 do 1. Pokud bychom chtěli vytvořit objekt NurbsCurve podle několika řídicích nebo interpolovaných bodů, první bod by měl parametr 0 a poslední bod by měl parametr 1. Přesnou hodnotu parametrů jednotlivých bodů nelze předem zjistit, což může znít jako omezení – tento problém však řeší několik pomocných funkcí. Plochy mají podobnou parametrizaci jako křivky, ale se dvěma parametry (u a v) místo jednoho. Pokud bychom chtěli vytvořit plochu s následujícími body:
Pak by měl bod p1 parametry u = 0, v = 0 a bod p9 by měl parametry u = 1, v = 1.
Parametrizace primárně neslouží k určování bodů použitých ke generování křivek, jejím hlavním použitím je určení pozic bodů vygenerovaných konstruktory NurbsCurve a NurbsSurface.
Křivky mají metodu PointAtParameter, která přijímá jeden parametr typu double v rozsahu od 0 do 1 a vrací objekt Point v tomto parametru. Například tento skript vyhledá body v parametrech 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 a 1.0:
Podobně plochy mají metodu PointAtParameter, která přijímá dva parametry U a V generovaného bodu.
Ačkoliv získávání bodů na křivce nebo ploše může být užitečné, skripty často vyžadují určité geometrické vlastnosti v daném parametru, například směr křivky nebo plochy. Pomocí metody CoordinateSystemAtParameter lze získat nejen pozici, ale rovnou úplný orientovaný objekt CoordinateSystem v daném parametru křivky nebo plochy. Například následující skript získá orientované objekty CoordinateSystem podél rotované plochy a použije jejich orientaci k vygenerování čar, které budou vycházet z plochy kolmo:
Jak bylo zmíněno dříve, parametrizace není po celé délce křivky nebo plochy rovnoměrná, to znamená, že hodnota parametru 0.5 nemusí vždy znamenat střed a hodnota 0.25 nemusí vždy znamenat jednu čtvrtinu délky křivky nebo plochy. Z tohoto důvodu mají křivky další sadu parametrizačních příkazů, pomocí kterých lze najít bod v určité délce křivky.
Textové skriptování v prostředí vizuálního skriptování umožňuje tvorbu výkonných a vizuálních vztahů pomocí jazyků DesignScript, Python a ZeroTouch (C#). Uživatel může odhalovat prvky, například posuvníky vstupů, zhustit rozsáhlé operace do aplikace DesignScript a umožnit přístup k výkonným nástrojům a knihovnám prostřednictvím jazyka Python nebo C#, a to ve stejném pracovním prostoru. Pokud jsou strategie efektivně spravovány, mohou díky jejich kombinaci do celého programu zavést značné množství možností, přizpůsobení, ale také přehlednosti a efektivity. Následuje sada pokynů, které vám pomohou vylepšit vizuální skript pomocí textového skriptu.
Textové skriptování může vytvořit vztahy vyšší složitosti než vizuální programování, ale jejich možnosti se také značně překrývají. Toto dává smysl, protože uzly jsou efektivně předem zabalený kód a pravděpodobně bychom mohli napsat celý program aplikace Dynamo v aplikaci DesignScript nebo v jazyce Python. Vizuální skriptování však používáme kvůli tomu, že rozhraní uzlů a drátů vytváří intuitivní tok grafických informací. Pokud víte, kde možnosti textového skriptování jdou nad rámec vizuálního skriptování, budete mít k dispozici hlavní vodítka pro případy, kdy by se mělo textové skriptování použít, aniž by bylo nutné předvídat intuitivní povahu uzlů a drátů. Níže jsou uvedeny pokyny, kdy se má skriptovat a jaký jazyk k tomu použít.
Textové skriptování použijte pro:
Smyčky
Rekurze
Přístup k externím knihovnám
Vyberte jazyk:
Při skriptování v aplikaci Dynamo, což je nezbytně parametrické prostředí, je rozumné strukturovat kód podle systému uzlů a drátů, ve kterých bude kód existovat. Uzel obsahující textový skript je třeba považovat za uzel jako každý jiný v programu s několika specifickými vstupy, funkcí a předpokládaným výstupem. Kód uvnitř uzlu díky tomu ihned obdrží malou sadu proměnných, se kterými se bude pracovat, což je klíč k čistě parametrickému systému. Zde jsou některé pokyny pro lepší integraci kódu do vizuálního programu.
Určení externích proměnných:
Zkuste určit dané parametry v problému návrhu, tak aby bylo možné vytvořit model, který je přímo sestaven mimo tato data.
Před psaním kódu identifikujte proměnné:
Minimální sadu vstupů
Zamýšlený výstup
Konstanty
Před zapsáním kódu bylo vytvořeno několik proměnných.
Povrch, na kterém bude probíhat simulace dešťové srážky.
Požadovaný počet dešťových kapek (agentů).
Jak velkou vzdálenost mají dešťové kapky urazit.
Přepínač mezi sestupem po nejstrmější cestě a přechodem po povrchu.
Uzel jazyka Python s příslušným počtem vstupů.
Blok kódu pro nastavení vrácených oblouků na modrou barvu.
Návrh vnitřních vztahů:
Parametrismus umožňuje úpravu určitých parametrů nebo proměnných, aby bylo možné manipulovat s koncovým výsledkem rovnice nebo systému, případně tento výsledek změnit.
Kdykoli spolu entity ve skriptu logicky souvisí, je třeba je definovat jako vzájemné funkce. Tímto způsobem se při úpravě jedné funkce může proporcionálně aktualizovat druhá funkce.
Minimalizujte počet vstupů tím, že zobrazíte pouze klíčové parametry:
Pokud je možné sadu parametrů odvodit z více nadřazených parametrů, zobrazte pouze nadřazené parametry jako vstupy skriptu. Tím se zvýší použitelnost skriptu, protože se sníží složitost jeho rozhraní.
Vstupy.
Interní proměnné skriptu.
Smyčka, která pomocí těchto vstupů a proměnných provádí svou funkci.
Tip: Na proces klaďte tak velký důraz, jaký kladete na řešení.
Pokud máte ve skriptu více způsobů vyjádření stejné věci, duplicitní reprezentace v určitém bodě vypadnou ze synchronizace, což může vést k velkým potížím s údržbou, slabému faktorování a vnitřním rozporům.
Princip DRY zní takto: „Veškeré vědomosti musí mít v systému jedinou jednoznačnou, autoritativní reprezentaci“:
Pokud je tento princip úspěšně použit, všechny související prvky ve skriptu se mění předvídatelně a jednotně a nesouvisející prvky nezpůsobí u sebe navzájem logické následky.
Tip: Před duplikováním entit ve skriptu (například konstanty ve výše uvedeném příkladu) si můžete položit dotaz, zda se místo toho můžete připojit ke zdroji.
Během toho, jak se kód rozrůstá a zesložiťuje, „hlavní myšlenka“ neboli zastřešující algoritmus se postupně stává méně čitelným. Je také obtížnější sledovat, co (a kde) se konkrétně děje, hledat chyby v případě, že skript funguje chybně, integrovat jiný kód a přiřadit vývojové úkoly. Aby se těmto problémům zabránilo, je moudré psát kód v modulech, což je organizační strategie rozdělující kód na části podle úlohy jakou jednotlivé části vykonávají. Zde je několik tipů, které vám usnadní správu skriptů pomocí modularizace.
Zápis kódu v modulech:
„module“ je skupina kódu, která provádí určitou úlohu, podobně jako uzel aplikace Dynamo v pracovním prostoru.
Může to být cokoli, co by mělo být vizuálně odděleno od přilehlého kódu (funkce, třída, skupina vstupů nebo importované knihovny).
Vývoj kódu v modulech prováže vizuální, intuitivní kvalitu uzlů a také složité vztahy, kterých je možné dosáhnout pouze pomocí textového skriptování.
Tyto smyčky volají třídu s názvem „agent“, která bude vytvořena v tomto cvičení.
Modul kódu, který definuje počáteční bod každého agenta.
Modul kódu, který aktualizuje agenta.
Modul kódu, který kreslí stopu pro cestu agenta.
Využití opakovaného použití kódu:
Pokud zjistíte, že kód dělá stejnou (nebo velmi podobnou) věc více než jednou, najděte způsoby, jak tuto věc sloučit do jedné funkce, kterou je možné volat.
„Správcovské“ funkce řídí tok programu a primárně obsahují volání „pracovních“ funkcí, které zpracovávají detaily na nízké úrovni, například přesouvání dat mezi strukturami.
Tento příklad vytvoří koule s poloměry a barvou podle hodnoty Z středů.
Dvě „pracovní“ nadřazené funkce: jedna, která vytváří koule s poloměry, a jedna, která zobrazí barvy, obojí podle hodnoty Z středu.
„Správcovská“ nadřazená funkce, která kombinuje dvě pracovní funkce. Zavoláním této funkce zavoláte i funkce uvnitř ní.
Zobrazujte pouze to, co je potřeba vidět:
Rozhraní modulu vyjadřuje prvky, které jsou nabízené a vyžadované modulem.
Jakmile jsou definována rozhraní mezi jednotkami, podrobný návrh každé jednotky může probíhat samostatně.
Oddělitelnost/Nahraditelnost:
Moduly o sobě vzájemně neví a vzájemně se o sebe nestarají.
Obecné formy modularizace:
Seskupení kódů:
Funkce:
Třídy:
Při vývoji textových skriptů v aplikaci Dynamo je moudré neustále kontrolovat, že to, co se vytváří, je v souladu s tím, co očekáváte. Tím se zajistí, že nepředvídané události, jako jsou syntaktické chyby, logické nesrovnalosti, nepřesnosti hodnot, anomální výstupy atd, budou rychle odhaleny a řešeny v okamžiku, kdy se objeví, a ne všechny najednou na konci. Vzhledem k tomu, že jsou textové skripty uloženy uvnitř uzlů na pracovní ploše, jsou již integrovány do datového toku vašeho vizuálního programu. Díky tomu můžete snadno sledovat skript, přičemž budete přiřazovat data, která budou na výstupu, spouštět program a vyhodnocovat vytvořený výstup skriptu pomocí uzlu Watch. Následují několik tipů pro průběžnou kontrolu skriptů při jejich tvorbě.
Během tvorby provádějte testy:
Kdykoli dokončíte určitý celek funkcionality:
Vracejte se zpět a přitom kontrolujte kód.
Buďte kritičtí. Mohl by spolupracovník pochopit, co tento kód dělá? Je třeba toto dělat? Je možné tuto funkci provést efektivněji? Vytvářím nepotřebné duplicitní položky nebo závislosti?
Rychle proveďte test, abyste se ujistili, že skript vrací data, která „dávají smysl“.
Přiřaďte jako výstup nejaktuálnější data, se kterými budete ve skriptu pracovat, aby uzel při aktualizaci skriptu vždy prováděl výstup relevantních dat:
Zkontrolujte, zda jsou všechny hrany tělesa, kolem kterého se má vytvořit hraniční kvádr, vráceny jako křivky.
Zkontrolujte, zda jsou vstupní hodnoty počtu úspěšně převedeny na rozsahy.
Zkontrolujte, zda byly souřadnicové systémy v této smyčce správně převedeny a otočeny.
Předvídejte „okrajové případy“:
Při skriptování změňte vstupní parametry na minimální a maximální hodnoty jejich přidělené domény, aby bylo možné zkontrolovat, zda program stále funguje i za extrémních podmínek.
I v případě, že program pracuje v krajních hodnotách, zkontrolujte, zda vrací neúmyslné hodnoty null, prázdné hodnoty nebo nulové hodnoty.
Chyby, které odhalí některé základní problémy se skriptem, se někdy projeví pouze v těchto okrajových případech.
Zjistěte, co způsobuje chybu, a poté se rozhodněte, zda je nutné ji opravit interně nebo zda je nutné doménu parametrů předefinovat, aby se tomuto problému zabránilo.
Tip: Vždy předpokládejte, že uživatel použije všechny kombinace všech možných vstupních hodnot, které mu zpřístupníte. Tímto můžete zabránit nežádoucím překvapením
.
Ladění je proces, při kterém se ze skriptu odstraňují chyby. Mezi chyby patří chybová hlášení, neefektivity, nepřesnosti nebo neočekávané výsledky. Řešení chyby může být velmi jednoduché, protože může spočívat třeba jen v nesprávně napsaném názvu proměnné, který při opravě může vyřešit rozšířené, konstrukční problémy skriptu. V ideálním případě může kontrola skriptu během jeho tvorby pomoci ke včasnému zachycení potenciálních problémů, nezaručí však absolutní bezchybnost. Následuje přehled několika osvědčených postupů, které vám pomohou řešit chyby systematicky.
Využijte sledovací bublinu:
Kontrolujte data vrácená na různých místech kódu přiřazením do proměnné OUT, podobně jako při kontrole dat programu.
Pište smysluplné komentáře:
Pokud je požadovaný výstup jasně popsán, modul kódu tohoto výstupu bude možné ladit o dost snadněji.
Normálně by se jednalo o příliš rozsáhlé komentování a mnoho prázdných řádků, u ladění však tento postup může být užitečný k rozebrání problému na spravovatelné celky.
Využijte modularitu kódu:
Zdroj problému může být izolován v určitých modulech.
Po zjištění, který modul je chybný, je řešení problému značně jednodušší.
Pokud je nutné program upravit, kód, který byl vyvinut v modulech, bude mnohem snadnější změnit:
Do existujícího programu můžete vložit nové nebo vyladěné moduly a přitom se spolehnout na to, že se zbytek programu nezmění.
Vstupní geometrie vrací hraniční obdélník, který je větší než její vlastní velikost, což je vidět po přiřazení proměnných xDist a yDist do proměnné OUT.
Křivky hran vstupní geometrie vrátí odpovídající hraniční obdélník se správnými vzdálenostmi v proměnných xDist a yDist.
Byl vložen „modul“ kódu, abychom vyřešili problém s hodnotou xDist a yDist.
Kliknutím na odkaz níže si stáhněte vzorový soubor.
Úplný seznam vzorových souborů najdete v dodatku.
Pojďme napsat skript simulace deště a přitom se budeme řídit našimi nejlepšími postupy textového skriptování. I když bylo možné použít nejlepší metody na neorganizovaný vizuální program ve strategiích grafů, je mnohem obtížnější to provést pomocí textového skriptování. Logické vztahy zavedené v textovém skriptování jsou méně viditelné a v neuspořádaném kódu může být téměř nemožné je rozluštit. S textovým skriptováním přichází i větší zodpovědnost v organizaci. Projdeme si nyní každý krok a během toho budeme používat ty nejlepší postupy.
Skript byl použit na povrch deformovaný atraktorem.
Nejprve je nutné importovat nezbytné knihovny aplikace Dynamo. Pokud na začátku provedete tento krok, získáte globální přístup k funkcím aplikace Dynamo v jazyce Python.
Všechny knihovny, které chceme použít, je nutné importovat zde.
Dále je potřeba definovat vstupy a výstup skriptu, které se zobrazí jako porty u uzlu. Tyto externí vstupy jsou základem pro náš skript a klíčem k vytvoření parametrického prostředí.
Je třeba definovat vstupy, které odpovídají proměnným ve skriptu jazyka Python, a určit požadovaný výstup:
Povrch, který chceme projít.
Počet agentů, které chceme projít.
Maximální počet kroků, které mohou agenti provést.
Možnost jít nejkratší cestou po povrchu, nebo jej přejít.
Uzel jazyka Python se vstupními identifikátory, které odpovídají vstupům ve skriptu (IN[0], IN[1]).
Výstupní křivky, které je možné zobrazit jinou barvou.
Nyní pomocí praktiky modularity vytvoříme tělo skriptu. Simulace nejkratší cesty dolů po povrchu pro více počátečních bodů je důležitým úkolem, který bude vyžadovat několik funkcí. Místo toho, abychom volali různé funkce v celém skriptu, můžeme upravit kód shromážděním funkcí do jedné třídy, což bude agent. Různé funkce této třídy nebo „modulu“ je možné volat s různými proměnnými nebo je dokonce znovu použít v jiném skriptu.
Je potřeba definovat pro agenta třídu (neboli plán činnosti) s úmyslem pohybu dolů po povrchu, a to výběrem varianty pohybu směrem s největší strmostí při každém kroku:
Název.
Globální atributy, které sdílejí všichni agenti.
Atributy instance, které jsou jedinečné pro každého agenta.
Funkce pro vykonání kroku.
Funkce pro katalogizaci pozice každého kroku do seznamu trajektorií.
Inicializujeme agenty definováním jejich počátečního umístění. Toto je dobrá příležitost pro kontrolu skriptu a ujištění se, že třída agentů funguje.
Bude nutné vytvořit instance všech agentů, u kterých chceme sledovat jejich průchod po povrchu, a definovat jejich počáteční atributy:
Nový prázdný seznam trajektorií.
Kde začnou svou cestu po povrchu.
Jako výstup jsme přiřadili seznam agentů, abychom zkontrolovali, co zde skript vrací. Vrací se správný počet agentů, později však bude potřeba zkontrolovat data skriptu znovu, aby se ověřila geometrie, kterou vrátí.
V každém kroku aktualizujte každého agenta. Poté bude nutné u každého agenta v každém kroku vstoupit do vnořené smyčky, ve které se aktualizuje a zaznamená pozice do jejich seznamu trajektorií. V každém kroku se také ujistíme, že agent nedosáhl bodu na povrchu, kde nemůže provést další krok, který by mu umožnil sestup. Pokud bude tato podmínka splněna, cesta tohoto agenta bude ukončena.
Nyní, když jsou agenti plně aktualizováni, vrátíme geometrii, která je reprezentuje. Jakmile všichni agenti dosáhnou svého meze sestupu nebo maximálního počtu kroků, vytvoříme křivku PolyCurve pomocí bodů v jejich seznamu trajektorií a vypíšeme trajektorie PolyCurve.
Náš skript sloužící k nalezení nejstrmějších cest.
Předvolba, která simuluje déšť na základním povrchu.
Místo hledání nejstrmější cesty mohou být agenti přepnuti, tak aby mohli procházet přes základní povrch.
Úplný skript v jazyce Python.
Seznam toho, k čemu vám jednotlivé knihovny aplikace Dynamo poskytují přístup, naleznete v části .
Moduly kódu z příkladu v .
Ladění vzorového souboru z .
Smyčky
Rekurze
Zhuštění uzlů
Ext. knihovny
Zkratka
DesignScript
Ano
Ano
Ano
No
Ano
Python
Ano
Ano
Částečně
Ano
Ne
ZeroTouch (C#)
Ne
Ne
Ne
Ano
Ne