Compartir a través de


Cómo: Abrir un modelo UML mediante la API de Visual Studio

También se pueden abrir modelos y diagramas en la interfaz de usuario de Visual Studio a través de la API.

Si solamente desea leer un modelo en el código del programa sin hacerlo visible al usuario, puede usar los siguientes métodos:

Abrir modelos y diagramas en Visual Studio

Para abrir un modelo en la interfaz de usuario, use la API EnvDTE.DTE estándar de Visual Studio. Existen dos conversiones útiles que pueden realizarse en elementos de proyecto de modelado:

  • Si el proyecto es un proyecto de modelado y se carga en el AppDomain actual, EnvDTE.Project se puede convertir a IModelingProject, y viceversa.

  • Si el elemento es un diagrama de UML, EnvDTE.ProjectItem se puede convertir a IDiagramContext, y viceversa.

En el ejemplo siguiente, su proyecto debería importar estas referencias:

  • EnvDTE

  • Microsoft.VisualStudio.ArchitectureTools.Extensibility

  • Microsoft.VisualStudio.Modeling.Sdk.12.0

  • Microsoft.VisualStudio.Modeling.Sdk.Diagrams.12.0

  • Microsoft.VisualStudio.Shell.Immutable.12.0

  • Microsoft.VisualStudio.Uml.Interfaces

  • System.ComponentModel.Composition

En este ejemplo se abre un modelo UML en 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 
...

En una extensión de Visual Studio, puede realizar esta declaración para obtener acceso al proveedor de servicios de host:

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

En un método, puede tener acceso a un proyecto, por ejemplo, el proyecto actual:

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;
       ...
     }
   }
} 

Vea también

Conceptos

Programar con la API de UML

Ampliar modelos y diagramas UML