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:
Visual Studio Model Bus permite tener acceso a los modelos y a los elementos que hay dentro de ellos. Proporciona también un método estándar para crear vínculos entre un modelo y otro.Para obtener más información, vea Cómo: Integrar modelos UML con otros modelos y herramientas.
Puede abrir un modelo en modo de solo lectura.Para obtener más información, vea Cómo: Leer un modelo UML en el código del programa.
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.11.0
Microsoft.VisualStudio.Modeling.Sdk.Diagrams.11.0
Microsoft.VisualStudio.Shell.Immutable.11.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, se puede tener acceso a un proyecto, por ejemplo, al 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;
...
}
}
}