Extensions
Last updated
Les extensions sont un outil de développement puissant dans l’écosystème Dynamo. Elles permettent aux développeurs de créer des fonctionnalités personnalisées basées sur les interactions et la logique de Dynamo. Les extensions peuvent être divisées en deux catégories principales : les extensions et les extensions de vue. Comme son nom l’indique, le cadre d’extension de vue vous permet d’étendre l’interface utilisateur Dynamo en enregistrant des éléments de menu personnalisés. Les extensions classiques fonctionnent de manière très similaire, à l’exception de l’interface utilisateur. Par exemple, nous pourrions générer une extension qui enregistre des informations spécifiques dans la console Dynamo. Ce scénario ne nécessite pas d’interface utilisateur personnalisée et pourrait donc être réalisé à l’aide d’une extension.
En suivant l’exemple SampleViewExtension du dépôt DynamoSamples de Github, nous allons parcourir les étapes nécessaires à la création d’une simple fenêtre sans modèle qui affiche les nœuds actifs du graphique en temps réel. Une extension de vue nécessite la création d’une interface utilisateur pour la fenêtre et l’association de valeurs à un modèle de vue.
La fenêtre d’extension de vue a été développée en suivant l’exemple SampleViewExtension dans le dépôt de Github.
Bien que nous allons générer l’exemple à partir de zéro, vous pouvez également télécharger et générer le dépôt DynamoSamples comme référence.
Le dépôt DynamoSamples : https://github.com/DynamoDS/DynamoSamples
Cette présentation fait référence au projet nommé SampleViewExtension qui se trouve dans
DynamoSamples/src/
.
Une extension de vue comporte trois parties essentielles :
un assemblage contenant une classe qui implémente IViewExtension
ainsi qu’une classe qui crée un modèle de vue ;
un fichier .xml
qui indique à Dynamo où il doit chercher cet assemblage lors de l’exécution, et le type d’extension ;
un fichier .xaml
qui lie les données à l’affichage graphique et détermine l’apparence de la fenêtre.
1. Créer la structure du projet
Commencez par créer un projet Class Library
nommé SampleViewExtension
.
Créez un projet en sélectionnant
File > New > Project
Sélectionnez
Class Library
Nommez le projet
SampleViewExtension
Sélectionnez
Ok
Dans ce projet, nous aurons besoin de deux classes. Une classe implémentera IViewExtension
et une autre qui implémentera NotificationObject.
IViewExtension
contiendra toutes les informations sur la façon dont l’extension sera déployée, chargée, référencée et supprimée. NotificationObject
fournira des notifications pour les modifications dans Dynamo et IDisposable
. Lorsqu’un changement se produit, le compte sera mis à jour en conséquence.
Un fichier de classe nommé
SampleViewExtension.cs
qui implémenteraIViewExtension
Un fichier de classe nommé
SampleWindowViewMode.cs
qui implémenteraNotificationObject
Pour utiliser IViewExtension
, nous aurons besoin du package NuGet WpfUILibrary. L’installation de ce package installera automatiquement les packages Core, Services et ZeroTouchLibrary.
Sélectionnez la bibliothèque WpfUILibrary
Sélectionnez
Install
pour installer tous les packages dépendants
2. Implémenter la classe IViewExtension
Dans la classe IViewExtension
, nous allons déterminer les actions qui se produisent au démarrage de Dynamo, au chargement de l’extension et à l’arrêt de Dynamo. Dans le fichier de classe SampleViewExtension.cs
, ajoutez le code suivant :
La classe SampleViewExtension
crée un élément de menu cliquable pour ouvrir la fenêtre et le relie au modèle de vue et à la fenêtre.
public class SampleViewExtension : IViewExtension
SampleViewExtension
hérite de l’interface IViewExtension
et fournit tout ce dont nous avons besoin pour créer l’élément de menu.
sampleMenuItem = new MenuItem { Header = "Show View Extension Sample Window" };
crée un élément MenuItem et l’ajoute au menu View
.
L’élément de menu
sampleMenuItem.Click += (sender, args)
déclenche un événement qui ouvre une nouvelle fenêtre lorsque vous cliquez sur l’élément de menu
MainGrid = { DataContext = viewModel }
définit le contexte de données pour la grille principale de la fenêtre, en se référant à Main Grid
dans le fichier .xaml
que nous allons créer
Owner = p.DynamoWindow
définit le propriétaire de la fenêtre contextuelle sur Dynamo. Cela signifie que la nouvelle fenêtre est dépendante de Dynamo, de sorte que les actions telles que la réduction, l’agrandissement et la restauration de Dynamo entraîneront le même comportement dans la nouvelle fenêtre
window.Show();
affiche la fenêtre dans laquelle les propriétés de fenêtre supplémentaires ont été définies
3. Implémentation du modèle de vue
Maintenant que nous avons établi certains des paramètres de base de la fenêtre, nous allons ajouter la logique de réponse aux différents événements liés à Dynamo et indiquer à l’interface utilisateur de se mettre à jour en fonction de ces événements. Copiez le code suivant dans le fichier de classe SampleWindowViewModel.cs
:
Cette implémentation de la classe de modèle de vue écoute le CurrentWorkspaceModel
et déclenche un événement lorsqu’un nœud est ajouté ou supprimé de l’espace de travail. Cela déclenche un changement de propriété qui signale à l’interface utilisateur ou aux éléments liés que les données ont changé et qu’elles doivent être mises à jour. Le getter ActiveNodeTypes
est appelé, ce qui appelle en interne une fonction d’assistant supplémentaire getNodeTypes()
. Cette fonction parcourt tous les nœuds actifs de la zone de dessin, remplit une chaîne contenant les noms de ces nœuds et renvoie cette chaîne à notre liaison dans le fichier .xaml pour qu’elle soit affichée dans notre fenêtre contextuelle.
Une fois la logique principale de l’extension définie, vous allez maintenant spécifier les détails d’apparence de la fenêtre avec un fichier .xaml
. Il suffit d’une simple fenêtre qui affiche la chaîne via la liaison de propriété ActiveNodeTypes
dans le TextBlock
Text
.
Cliquez avec le bouton droit de la souris sur le projet et choisissez
Add > New Item...
Sélectionnez le modèle de contrôle utilisateur que vous allez modifier pour créer une fenêtre
Nommez le nouveau fichier
SampleWindow.xaml
Sélectionnez
Add
Dans le code de la fenêtre .xaml
, vous devez lier SelectedNodesText
à un bloc de texte. Ajoutez le code suivant à SampleWindow.xaml
:
Text="{Binding ActiveNodeTypes}"
se lie à la valeur de propriété de ActiveNodeTypes
dans SampleWindowViewModel.cs
à la valeur de TextBlock
Text
dans la fenêtre.
Nous allons maintenant initialiser la fenêtre d’exemple dans le fichier de sauvegarde .xaml C# SampleWindow.xaml.cs
. Ajoutez le code suivant à SampleWindow.xaml
:
L’extension de vue est maintenant prête à être créée et ajoutée à Dynamo. Dynamo requiert un fichier xml
pour enregistrer la sortie .dll
en tant qu’extension.
Cliquez avec le bouton droit de la souris sur le projet et choisissez
Add > New Item...
Sélectionner un fichier XML
Nommez le fichier
SampleViewExtension_ViewExtensionDefinition.xml
Sélectionnez
Add
Le nom du fichier suit la norme Dynamo pour référencer un ensemble d’extension de la manière suivante : "extensionName"_ViewExtensionDefinition.xml
Dans le fichier xml
, ajoutez le code suivant pour indiquer à Dynamo où rechercher l’assemblage d’extension :
Dans cet exemple, nous avons créé l’assemblage dans le dossier par défaut du projet Visual Studio. Remplacez la cible <AssemblyPath>...</AssemblyPath>
par l’emplacement de l’assemblage.
La dernière étape consiste à copier le fichier SampleViewExtension_ViewExtensionDefinition.xml
dans le dossier des extensions de vue de Dynamo situé dans le répertoire d’installation de Dynamo Core C:\Program Files\Dynamo\Dynamo Core\1.3\viewExtensions
. Il est important de noter qu’il existe des dossiers distincts pour extensions
et viewExtensions
. Placer le fichier xml
dans un dossier incorrect peut entraîner un échec du chargement au moment de l’exécution.
Le fichier
.xml
que nous avons copié dans le dossier des extensions de vue de Dynamo
Il s’agit d’une introduction sommaire aux extensions de vues. Pour une étude de cas plus sophistiquée, consultez le package DynaShape, un projet open source sur Github. Le package utilise une extension de vue qui permet de modifier en direct la vue du modèle Dynamo.
Un programme d’installation du package pour Dynamo Shape peut être téléchargé à partir du forum Dynamo : https://forum.dynamobim.com/t/dynashape-published/11666
Le code source peut être cloné à partir de Github : https://github.com/LongNguyenP/DynaShape