Como: abrir um modelo UML usando a API de Visual Studio
Você também pode abrir modelos e diagramas na Visual Studio interface do usuário usando a API.
Se você quiser apenas ler um modelo no código de programa sem torná-lo visível para o usuário, você pode usar os seguintes métodos:
Visual StudioBarramento de modelo permite que você acesse os modelos e elementos dentro deles e fornece um método padrão de tornar os links entre um modelo e outro.Para obter mais informações, consulte Como: integrar modelos UML com outras ferramentas e modelos.
Você pode abrir um modelo no modo somente leitura.Para obter mais informações, consulte Como: ler um modelo UML no código de programa.
A abertura de modelos e diagramas no Visual Studio
Para abrir um modelo na interface do usuário, use o padrão de Visual Studio API EnvDTE.DTE.Há duas projeções úteis que podem ser realizadas em itens de projeto de modelagem:
EnvDTE.Projectpode ser convertido de e para IModelingProject, se o projeto for um projeto de modelagem e se o projeto for carregado no AppDomain atual.
EnvDTE.ProjectItempode ser convertido de e para IDiagramContext, se o item é um diagrama UML.
No exemplo a seguir, o seu projeto deve importar essas referências:
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
Este exemplo abre um modelo UML no 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
...
Em um Visual Studio extensão, você pode fazer essa declaração para obter acesso ao provedor de serviços de host:
[Import] public Microsoft.VisualStudio.Shell.SVsServiceProvider ServiceProvider {get;set;}
...
Em um método, você pode acessar um projeto, por exemplo, o projeto atual:
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;
...
}
}
}