Erweiterungen
Erweiterungen sind ein leistungsstarkes Entwicklungswerkzeug im Dynamo-Ökosystem. Sie ermöglichen Entwicklern, benutzerdefinierte Funktionen basierend auf Dynamo-Interaktionen und -Logik zu steuern. Erweiterungen können in zwei Hauptkategorien unterteilt werden: Erweiterungen und Ansichtserweiterungen. Wie die Namen schon sagen, können Sie mit dem Ansichtserweiterungs-Framework die Dynamo-Benutzeroberfläche durch Registrieren benutzerdefinierter Menüelemente erweitern. Normale Erweiterungen funktionieren auf ähnliche Weise, nur ohne Benutzeroberfläche. Wir können beispielsweise eine Erweiterung erstellen, die bestimmte Informationen in der Dynamo-Konsole protokolliert. Dieses Szenario erfordert keine angepasste Benutzeroberfläche und kann daher auch mit einer Erweiterung durchgeführt werden.
Fallstudie für Erweiterungen
Im Anschluss an das Beispiel SampleViewExtension aus dem DynamoSamples-GitHub-Repository gehen wir die Schritte zum Erstellen eines einfachen, modusunabhängigen Fensters durch, in dem die aktiven Blöcke im Diagramm in Echtzeit angezeigt werden. Für eine Ansichtserweiterung müssen wir eine Benutzeroberfläche für das Fenster erstellen und Werte an ein Ansichtsmodell binden.
Das Fenster der Ansichtserweiterung, das nach dem Beispiel SampleViewExtension im GitHub-Repository entwickelt wurde.
Wir erstellen das Beispiel zwar von Grund auf. Sie können aber auch das DynamoSamples-Repository herunterladen und erstellen, um es als Referenz zu verwenden.
DynamoSamples-Repository: https://github.com/DynamoDS/DynamoSamples
Diese exemplarische Vorgehensweise referenziert speziell das Projekt mit dem Namen SampleViewExtension, das unter
DynamoSamples/src/
zu finden ist.
So implementieren Sie eine Ansichtserweiterung
Eine Ansichtserweiterung besteht aus drei wesentlichen Teilen:
Einer Assembly, die eine Klasse enthält, die
IViewExtension
implementiert, sowie einer Klasse, die ein Ansichtsmodell erstelltEiner
.xml
-Datei, die Dynamo mitteilt, wo zur Laufzeit nach dieser Assembly gesucht werden soll, und dem Typ der ErweiterungEiner
.xaml
-Datei, die Daten an die grafische Darstellung bindet und die Darstellung des Fensters bestimmt
1. Erstellen der Projektstruktur
Erstellen Sie zunächst ein neues Class Library
-Projekt mit dem Namen SampleViewExtension
.
Erstellen Sie ein neues Projekt, indem Sie
File > New > Project
auswählen.Wählen Sie
Class Library
aus.Geben Sie dem Projekt den Namen
SampleViewExtension
.Wählen Sie
Ok
aus.
In diesem Projekt benötigen wir zwei Klassen. Eine Klasse, die IViewExtension
, und eine andere, die NotificationObject.
implementiert. IViewExtension
enthält alle Informationen darüber, wie die Erweiterung bereitgestellt, geladen, referenziert und verworfen wird. NotificationObject
informiert über Änderungen in Dynamo und IDisposable
. Bei einer Änderung wird die Anzahl entsprechend aktualisiert.
Eine Klassendatei mit dem Namen
SampleViewExtension.cs
, dieIViewExtension
implementiert.Eine Klassendatei mit dem Namen
SampleWindowViewMode.cs
, dieNotificationObject
implementiert.
Um IViewExtension
verwenden zu können, benötigen wir das NuGet-Paket WpfUILibrary. Bei der Installation dieses Pakets werden automatisch die Pakete Core, Services und ZeroTouchLibrary installiert.
Wählen Sie WpfUILibrary aus.
Wählen Sie
Install
aus, um alle abhängigen Pakete zu installieren.
2. Implementieren der IViewExtension-Klasse
In der IViewExtension
-Klasse legen wir fest, was geschieht, wenn Dynamo gestartet, die Erweiterung geladen und Dynamo beendet wird. Fügen Sie in der Klassendatei SampleViewExtension.cs
den folgenden Code hinzu:
Die SampleViewExtension
-Klasse erstellt ein anklickbares Menüelement, um das Fenster zu öffnen, und verbindet es mit dem Ansichtsmodell und dem Ansichtsfenster.
public class SampleViewExtension : IViewExtension
SampleViewExtension
übernimmt Daten von derIViewExtension
-Schnittstelle und stellt alles bereit, was wir zur Erstellung des Menüelements benötigen.sampleMenuItem = new MenuItem { Header = "Show View Extension Sample Window" };
erstellt ein MenuItem und fügt es dem MenüView
hinzu.
Menüelement
sampleMenuItem.Click += (sender, args)
löst ein Ereignis aus, das ein neues Fenster öffnet, wenn auf das Menüelement geklickt wird.MainGrid = { DataContext = viewModel }
legt den Datenkontext für das Hauptraster im Fenster fest, wobei aufMain Grid
in der zu erstellenden Datei.xaml
verwiesen wird.Owner = p.DynamoWindow
legt den Eigentümer des Popup-Fensters auf Dynamo fest. Das bedeutet, dass das neue Fenster von Dynamo abhängig ist. Aktionen wie das Minimieren, Maximieren und Wiederherstellen von Dynamo bewirken daher, dass das neue Fenster dasselbe Verhalten aufweist.window.Show();
zeigt das Fenster an, für das die zusätzlichen Fenstereigenschaften festgelegt wurden.
3. Implementieren des Ansichtsmodells
Nachdem wir einige der grundlegenden Parameter des Fensters festgelegt haben, fügen wir die Logik für die Reaktion auf verschiedene Dynamo-bezogene Ereignisse hinzu und weisen die Benutzeroberfläche an, basierend auf diesen Ereignissen zu aktualisieren. Kopieren Sie den folgenden Code in die Klassendatei SampleWindowViewModel.cs
:
Diese Implementierung der Ansichtsmodellklasse überwacht CurrentWorkspaceModel
und löst ein Ereignis aus, wenn ein Block zum Arbeitsbereich hinzugefügt oder aus diesem entfernt wird. Dadurch wird eine Eigenschaftsänderung ausgelöst, die die Benutzeroberfläche oder gebundenen Elemente darüber informiert, dass die Daten geändert wurden und aktualisiert werden müssen. Der ActiveNodeTypes
-Getter wird aufgerufen, der intern eine zusätzliche Hilfsfunktion getNodeTypes()
aufruft. Diese Funktion durchläuft alle aktiven Blöcke im Ansichtsbereich, füllt eine Zeichenfolge mit den Namen dieser Blöcke aus und gibt diese Zeichenfolge an die Bindung in der XAML-Datei zurück, die im Popup-Fenster angezeigt werden soll.
Nachdem wir die Kernlogik der Erweiterung definiert haben, legen wir nun die Darstellungsdetails des Fensters mit einer .xaml
-Datei fest. Wir benötigen lediglich ein einfaches Fenster, in dem die Zeichenfolge über die ActiveNodeTypes
-Eigenschaftenbindung in TextBlock
Text
angezeigt wird.
Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie
Add > New Item...
.Wählen Sie die Vorlage des Benutzersteuerelements aus, die wir später zum Erstellen eines Fensters ändern werden.
Geben Sie der neuen Datei den Namen
SampleWindow.xaml
.Wählen Sie
Add
aus.
Im .xaml
-Code des Fensters müssen wir SelectedNodesText
an einen Textblock binden. Fügen Sie den folgenden Code zu SampleWindow.xaml
hinzu:
Text="{Binding ActiveNodeTypes}"
bindet den Eigenschaftswert vonActiveNodeTypes
inSampleWindowViewModel.cs
an den WertTextBlock
Text
im Fenster.
Als Nächstes initialisieren wir das Beispielfenster in der XAML-C#-Sicherungsdatei SampleWindow.xaml.cs
. Fügen Sie den folgenden Code zu SampleWindow.xaml
hinzu:
Die Ansichtserweiterung kann jetzt erstellt und zu Dynamo hinzugefügt werden. Dynamo benötigt eine xml
-Datei, um die .dll
-Ausgabedatei als Erweiterung zu registrieren.
Klicken Sie mit der rechten Maustaste auf das Projekt, und wählen Sie
Add > New Item...
.Wählen Sie die XML-Datei aus.
Geben Sie der Datei den Namen
SampleViewExtension_ViewExtensionDefinition.xml
.Wählen Sie
Add
aus.
Der Dateiname entspricht dem Dynamo-Standard zum Referenzieren einer Erweiterungs-Assembly wie folgt:
"extensionName"_ViewExtensionDefinition.xml
Fügen Sie in der xml
-Datei den folgenden Code hinzu, um Dynamo anzuweisen, wo nach der Erweiterungs-Assembly gesucht werden soll:
In diesem Beispiel haben wir die Assembly im Vorgabeprojektordner von Visual Studio erstellt. Ersetzen Sie das Ziel
<AssemblyPath>...</AssemblyPath>
durch den Speicherort der Assembly.
Der letzte Schritt besteht darin, die Datei SampleViewExtension_ViewExtensionDefinition.xml
in den Ordner der Ansichtserweiterungen von Dynamo zu kopieren, der sich im Dynamo Core-Installationsverzeichnis C:\Program Files\Dynamo\Dynamo Core\1.3\viewExtensions
befindet. Beachten Sie, dass separate Ordner für extensions
und viewExtensions
existieren. Wenn Sie die xml
-Datei in den falschen Ordner verschieben, wird sie zur Laufzeit möglicherweise nicht ordnungsgemäß geladen.
Die
.xml
-Datei, die wir in den Dynamo-Ordner mit den Ansichtserweiterungen kopiert haben.
Dies ist eine grundlegende Einführung in Ansichtserweiterungen. Eine detailliertere Fallstudie finden Sie im DynaShape-Paket, einem Open-Source-Projekt auf GitHub. Das Paket verwendet eine Ansichtserweiterung, die die Live-Bearbeitung in der Dynamo-Modellansicht ermöglicht.
Ein Paket-Installationsprogramm für DynaShape kann im Dynamo-Forum heruntergeladen werden: https://forum.dynamobim.com/t/dynashape-published/11666.
Der Quellcode kann von GitHub geklont werden: https://github.com/LongNguyenP/DynaShape.
Last updated