Rozšíření jsou v ekosystému aplikace Dynamo velmi účinným nástrojem pro vývoj. Umožňují vývojářům vytvářet vlastní funkce založené na interakcích a logice aplikace Dynamo. Rozšíření lze rozdělit na dvě hlavní kategorie: rozšíření a rozšíření pohledu. Jak již název napovídá, systém rozšíření pohledu umožňuje rozšířit uživatelské rozhraní aplikace Dynamo registrací vlastních položek nabídky. Běžná rozšíření fungují velmi podobným způsobem bez uživatelského rozhraní. Můžeme například vytvořit rozšíření, které bude do konzoly aplikace Dynamo zaznamenávat konkrétní informace. Tento scénář nevyžaduje žádné vlastní uživatelské rozhraní, a proto by jej bylo možné provést také pomocí rozšíření.
S využitím příkladu SampleViewExtension z úložiště DynamoSamples na Githubu projdeme kroky potřebné k vytvoření jednoduchého nemodálního okna, které zobrazuje aktivní uzly v grafu v reálném čase Rozšíření pohledu vyžaduje, abychom pro okno vytvořili uživatelské rozhraní a svázali hodnoty s modelem pohledu.
Okno rozšíření pohledu vytvořené podle příkladu SampleViewExtension v úložišti na Githubu.
Ačkoliv budeme tento příklad vytvářet od základů, můžete si také stáhnout a vytvořit úložiště DynamoSamples, které vám poslouží jako reference.
Úložiště DynamoSamples: https://github.com/DynamoDS/DynamoSamples
Tato ukázka bude konkrétně odkazovat na projekt s názvem SampleViewExtension, který se nachází v umístění
DynamoSamples/src/
.
Rozšíření pohledu má tři základní součásti:
Sestava obsahující třídu, která implementuje IViewExtension
, a třídu, která vytváří model pohledu.
Soubor .xml
, který aplikaci Dynamo říká, kde má tuto sestavu za běhu hledat a jaký typ rozšíření má hledat.
Soubor .xaml
, který sváže data s grafickým zobrazením a určuje vzhled okna.
1. Vytvoření struktury projektu
Začněte vytvořením nového projektu Class Library
s názvem SampleViewExtension
.
Vytvořte nový projekt výběrem možnosti
File > New > Project
.Vyberte
Class Library
.Pojmenujte projekt jako
SampleViewExtension
.Klikněte na tlačítko
Ok
.
V tomto projektu budeme potřebovat dvě třídy. Jedna třída implementuje IViewExtension
a druhá implementuje NotificationObject.
. IViewExtension
bude obsahovat všechny informace o tom, jak bude rozšíření nasazeno, načteno, odkazováno a zrušeno. NotificationObject
bude poskytovat oznámení o změnách v aplikaci Dynamo a IDisposable
. Pokud dojde ke změně, počet se odpovídajícím způsobem aktualizuje.
Soubor třídy s názvem
SampleViewExtension.cs
, který implementujeIViewExtension
.Soubor třídy s názvem
SampleWindowViewMode.cs
, který implementujeNotificationObject
.
K použití IViewExtension
budeme potřebovat balíček NuGet WpfUILibrary. Instalace tohoto balíčku automaticky nainstaluje balíčky Core, Services a ZeroTouchLibrary.
Vyberte balíček WpfUILibrary.
Kliknutím na tlačítko
Install
nainstalujte všechny závislé balíčky.
2. Implementace třídy IViewExtension
Ve třídě IViewExtension
určíme, co se stane při spuštění aplikace Dynamo, při načtení rozšíření a při ukončení aplikace Dynamo. Do souboru třídy SampleViewExtension.cs
přidejte následující kód:
Třída SampleViewExtension
vytvoří položku nabídky pro otevření okna, na kterou lze kliknout, a propojí ji k modelu pohledu a oknu.
public class SampleViewExtension : IViewExtension
SampleViewExtension
zdědí z rozhraní IViewExtension
vše, co je k vytvoření položky nabídky potřeba.
sampleMenuItem = new MenuItem { Header = "Show View Extension Sample Window" };
vytvoří objekt MenuItem a přidá jej do nabídky View
.
Položka nabídky
sampleMenuItem.Click += (sender, args)
aktivuje událost, která při kliknutí na položku nabídky otevře nové okno.
MainGrid = { DataContext = viewModel }
nastaví kontext dat pro hlavní osnovu v okně, s odkazem na Main Grid
v souboru .xaml
, který vytvoříme
Owner = p.DynamoWindow
nastaví jako vlastníka našeho místního okna aplikaci Dynamo. To znamená, že nové okno je závislé na aplikaci Dynamo, takže akce, například minimalizace, maximalizace a obnovení aplikace Dynamo, způsobí, že nové okno bude mít stejné chování.
window.Show();
zobrazí okno, kterému byly nastaveny další vlastnosti okna.
3. Implementace modelu pohledu
Nyní, když jsme zadali některé základní parametry okna, přidáme logiku pro reakci na různé události související s aplikací Dynamo a instruujeme uživatelské rozhraní, aby se aktualizovalo na základě těchto událostí. Do souboru třídy SampleWindowViewModel.cs
zkopírujte následující kód:
Tato implementace třídy modelu pohledu naslouchá CurrentWorkspaceModel
a aktivuje událost, když je uzel přidán nebo odstraněn z pracovního prostoru. To vyvolá změnu vlastnosti, která upozorní uživatelské rozhraní nebo vázané prvky, že data byla změněna a je nutné je aktualizovat. Je volán getter ActiveNodeTypes
, který interně volá další pomocnou funkcigetNodeTypes()
. Tato funkce iteruje všechny aktivní uzly na kreslicí ploše, vyplní řetězec obsahující názvy těchto uzlů a vrátí tento řetězec do vazby v souboru XAML, který se zobrazí v našem místním okně.
Po definování základní logiky rozšíření nyní zadáme podrobnosti týkající se vzhledu okna pomocí souboru .xaml
. Vše, co potřebujeme, je jednoduché okno, které zobrazí řetězec prostřednictvím vazby vlastnosti ActiveNodeTypes
v TextBlock
Text
.
Klikněte pravým tlačítkem na projekt a vyberte
Add > New Item...
.Vyberte šablonu User Control, kterou změníme a vytvoříme okno.
Pojmenujte nový soubor jako
SampleWindow.xaml
.Klikněte na tlačítko
Add
.
V kódu .xaml
okna bude nutné svázat SelectedNodesText
k textovému bloku. Přidejte následující kód do souboru SampleWindow.xaml
:
Text="{Binding ActiveNodeTypes}"
se váže k hodnotě vlastnosti ActiveNodeTypes
v souboru SampleWindowViewModel.cs
s hodnotou TextBlock
Text
v okně.
Nyní inicializujeme ukázkové okno v záložním souboru XAML C# SampleWindow.xaml.cs
. Přidejte následující kód do souboru SampleWindow.xaml
:
Rozšíření pohledu je nyní připraveno k sestavení a přidání do aplikace Dynamo. Aplikace Dynamo vyžaduje soubor xml
, aby bylo možné zaregistrovat výstup .dll
jako rozšíření.
Klikněte pravým tlačítkem na projekt a vyberte
Add > New Item...
.Vyberte soubor XML.
Pojmenujte soubor jako
SampleViewExtension_ViewExtensionDefinition.xml
.Klikněte na tlačítko
Add
.
Název souboru se řídí standardem aplikace Dynamo pro odkazování na sestavu rozšíření takto: "extensionName"_ViewExtensionDefinition.xml
V souboru xml
přidejte následující kód, který aplikaci Dynamo řekne, kde má hledat sestavu rozšíření:
V tomto příkladu jsme sestavu vytvořili do výchozí složky projektu aplikace Visual Studio. Nahraďte cíl <AssemblyPath>...</AssemblyPath>
umístěním sestavy.
Posledním krokem je zkopírování souboru SampleViewExtension_ViewExtensionDefinition.xml
do složky rozšíření pohledů aplikace Dynamo, která se nachází v instalačním adresáři jádra aplikace Dynamo C:\Program Files\Dynamo\Dynamo Core\1.3\viewExtensions
. Je důležité si uvědomit, že existují samostatné složky pro extensions
a viewExtensions
. Umístění souboru xml
do nesprávné složky může způsobit nesprávné načtení za běhu.
Soubor
.xml
, který jsme zkopírovali do složky rozšíření pohledů aplikace Dynamo.
Toto je základní úvod k rozšířením pohledu. Propracovanější případovou studii naleznete v balíčku DynaShape, projektu s otevřeným zdrojovým kódem na Githubu. Tento balíček používá rozšíření pohledu, které umožňuje živé úpravy v pohledu modelu aplikace Dynamo.
Instalační program balíčku DynaShape lze stáhnout z fóra aplikace Dynamo: https://forum.dynamobim.com/t/dynashape-published/11666
Zdrojový kód lze klonovat z Githubu: https://github.com/LongNguyenP/DynaShape