Partager via


Comment : ouvrir un modèle UML à l'aide de l'API Visual Studio

Vous pouvez également ouvrir des modèles et des diagrammes dans l'interface utilisateur de Visual Studio à l'aide de l'API.

Si vous voulez seulement lire un modèle dans le code du programme sans le rendre visible pour l'utilisateur, vous pouvez utiliser les méthodes suivantes :

Ouverture des modèles et des diagrammes dans Visual Studio

Pour ouvrir un modèle dans l'interface utilisateur, utilisez l'API Visual Studio standard EnvDTE.DTE. Deux casts utiles peuvent être exécutés sur les éléments de projet de modélisation :

  • EnvDTE.Project peut être casté vers et depuis IModelingProject dans le cas d'un projet de modélisation chargé dans l'AppDomain actuel.

  • EnvDTE.ProjectItem peut être casté vers et depuis IDiagramContext, si l'élément est un diagramme UML.

Pour l'exemple suivant, votre projet doit importer ces références :

EnvDTE

Microsoft.VisualStudio.ArchitectureTools.Extensibility

Microsoft.VisualStudio.Modeling.Sdk.10.0

Microsoft.VisualStudio.Modeling.Sdk.Diagrams.10.0

Microsoft.VisualStudio.Uml.Interfaces

System.ComponentModel.Composition

Cet exemple ouvre un modèle UML dans Visual Studio :

using EnvDTE; // Visual Studio API for loading diagrams
using 
using System.ComponentModel.Composition;
using Microsoft.VisualStudio.Modeling; 
using Microsoft.VisualStudio.Modeling.ExtensionEnablement;  
   // for ICommandExtension and other handler types
using Microsoft.VisualStudio.Uml.Classes; 
   // for basic UML types
using Microsoft.VisualStudio.ArchitectureTools.Extensibility.Uml;
   // for model construction methods
using EnvDTE;
using Microsoft.VisualStudio.ArchitectureTools.Extensibility;
Microsoft.VisualStudio.ArchitectureTools.Extensibility.Presentation; 
                             // for IDiagram 
...

Dans une extension Visual Studio, vous pouvez définir la déclaration suivante pour obtenir l'accès au fournisseur de services hôte :

[Import] public Microsoft.VisualStudio.Shell.SVsServiceProvider ServiceProvider {get;set;}
...

Dans une méthode, vous pouvez accéder à un projet, tel que le projet actuel :

DTE dte = (DTE)ServiceProvider.GetService(typeof(DTE));
Project project = dte.ActiveDocument.ProjectItem.ContainingProject;
IModelingProject modelingProject = project as IModelingProject;
if (modelingProject == null) return; // not a modeling project

// Access the model's store and contents.
IModelStore store = modelingProject.Store;
foreach (IElement element in store.Root.OwnedElements) {...}

// Open all the project's diagrams.
foreach (ProjectItem item in project.ProjectItems)
{ 
     IDiagramContext modelingItem = item as IDiagramContext;
     if (modelingItem == null)
         continue; // not a model diagram
     IDiagram diagram = modelingItem.CurrentDiagram;
     if (diagram == null)
     {
        // Diagram is closed. Open it.
        item.Open().Activate();
        diagram = modelingItem.CurrentDiagram;
     }
     // Access the shapes.
     foreach (IShape<IElement> shape 
               in diagram.GetChildShapes<IElement>())
     {
       IElement displayedElement = shape.Element;
       ...
     }
   }
} 

Voir aussi

Autres ressources

Programmation à l'aide de l'API UML

Extension de modèles et de diagrammes UML