2011-09-29 12 views
9

¿Alguien me puede indicar un ejemplo de cómo crear programáticamente un diagrama de estado en visio? Puedo crear páginas en blanco, soltar formas, abrir plantillas, etc., pero cuando trato de agregar transiciones me queja de que la página no es del tipo correcto.Crear diagramas de estado en Visio usando C#

No se puede encontrar una muestra en ningún lado.

Alternativamente: puedo guardar las acciones del usuario para crear el gráfico como una macro. ¿Puedo ejecutar ese programatically?

Gracias.

< edición>
Paso lejos de la PC durante 2 minutos y se dan cuenta de que debería haber puesto el fragmento de código en la pregunta y no tratar de ponerlo en los comentarios. Bosque: conocer árboles ...

Visio.Document umlStencil = visioApp.Documents.OpenEx(@"UMLSTA_M.vss", (short)VisOpenSaveArgs.visOpenDocked); 
Visio.Page page = visioDoc.Pages.Add(); 
Visio.Shape s1 = page.Drop(umlStencil[@"State"], 5.0, 5.0); 
Visio.Shape s2 = page.Drop(umlStencil[@"State"], 5.0, 5.0); 
Visio.Shape transition = page.Drop(umlStencil[@"Transition"], 1.0, 1.0); 

Como puedes ver, bastante similar al fragmento en la respuesta a continuación.
</edit>

+0

Podría compartir una muestra simplificada del código C# que está utilizando para crear el gráfico de estado y eso replica el problema? Eso ayudaría a rastrear cómo evitar el problema. – saveenr

+0

Desafortunadamente, creo que el comportamiento de "4 espacios" solo es válido para las respuestas y no para los comentarios. – saveenr

Respuesta

1

Este es el código que me encontré con Visual Studio 2010 en contra de ambos Visio 2007 y Visio 2010.

var visioApp = new Visio.Application(); 

// Load the UML Statechart stencil (docked) 
var stencil_open_flags = Visio.VisOpenSaveArgs.visOpenDocked; 
var umlStencil = visioApp.Documents.OpenEx(@"UMLSTA_M.vss", (short)stencil_open_flags); 

// create a new empty doc based on the UML Model Template 
var doc = visioApp.Documents.AddEx("UMLMOD_U.VST", Visio.VisMeasurementSystem.visMSUS, 0, 0); 
var page = doc.Pages.Add(); 

// Find and manually change the diagram's title 
var watermark = page.Shapes["Watermark Title"]; 
var LockTextEdit_cell = watermark.CellsU["LockTextEdit"]; 
LockTextEdit_cell.FormulaForceU = "GUARD(0)"; 
watermark.Text = "MyTitle"; 
LockTextEdit_cell.FormulaForceU = "GUARD(1)"; 

// Find the masters we need 
var state_master = umlStencil.Masters["State"]; 
var transition_master = umlStencil.Masters["Transition"]; 

// Drop the masters into the page 
var s1 = page.Drop(state_master, 5.0, 5.0); 
var s2 = page.Drop(state_master, 1.0, 1.0); 
var transition = page.Drop(transition_master, 3.0, 3.0); 
+0

Eso es básicamente el código que tengo, pero el problema ocurre cuando dejo la transición. Mi solución consiste simplemente en dibujar el gráfico con formas "normales" (es decir, no en un diagrama de gráfico de estado real), actualmente estoy trabajando para intentar hacer un diagrama de estado para poder obtener el mensaje de error exacto. – John3136

+0

Ok: muy aterrador: mi código ahora funciona. Sin embargo, el diagrama no está etiquetado como un gráfico de estado. No cambié nada "importante", una observación: anteriormente Visio mostraba todas las plantillas de UML, ahora es solo la de estado, supongo que así es como sabe que es un gráfico de estado. No tengo idea de lo que cambié para causar esto. Mis únicos cambios fueron modificar mis métodos que eligen formas de una galería de símbolos en función de si estoy probando UML o usando mi solución alternativa ... no estoy listo para renunciar. No lo hago. Confíe en cosas que no entiendo ... – John3136

+0

Si hago clic en 'Propiedades' en las transiciones, aparece Esto: La forma UML existe en una página de dibujo que no forma parte de un diagrama de modelo UML. Esta forma está diseñada para funcionar en dibujos creados con la plantilla de diagrama de modelo de UML. Supongo que necesito hacer algo cuando creo mi página. – John3136

Cuestiones relacionadas