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.
Aplikace Dynamo je sice jako nástroj pro 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 .
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ř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!
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.
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.
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ů.
Získejte geometrii hranic všech povodí ve výkresu.
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 , 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.
Než budeme pokračovat, musíme se krátce zastavit u důležitého pojmu. V části 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
.
Typ aplikace Dynamo | Zabalení |
---|
Úkol splněn!
Další informace o tomto přechodu a o upgradu starších skriptů naleznete na . Pokud chcete i nadále používat nástroj IronPython, stačí nainstalovat balíček DynamoIronPython2.7 pomocí nástroje Dynamo Package Manager.
Objekt Autodesk.AutoCAD.DynamoNodes.Object | Entita Autodesk.AutoCAD.DatabaseServices.Entity |
CivilObject Autodesk.Civil.DynamoNodes.CivilObject | Entita Autodesk.Civil.DatabaseServices.Entity |
Č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ň.