2011-09-29 14 views
9

Qualcuno può indicarmi un esempio di come creare in modo programmatico una statechart in visio? Posso creare pagine vuote, rilasciare forme, aprire template ecc., Ma quando provo ad aggiungere transizioni si lamenta che la pagina non è del tipo giusto.Creazione di diagrammi di stato in Visio mediante C#

Impossibile trovare un campione da nessuna parte.

In alternativa: è possibile salvare le azioni dell'utente per creare il grafico come macro. Posso eseguirlo programmaticamente?

Grazie.

< Modifica>
passo dal PC per 2 minuti e ti rendi conto che avresti dovuto mettere il frammento di codice nella questione e non cercare di metterlo nei commenti. Foresta: incontrare alberi ...

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); 

Come si può vedere, molto simile al frammento nella risposta di seguito.
</Modifica>

+0

Potrebbe condividere un campione semplificata del codice C# che si sta utilizzando per creare lo statechart e questo replica il problema? Ciò aiuterebbe a rintracciare come evitare il problema. – saveenr

+0

Sfortunatamente, credo che il comportamento "4 spazio" sia valido solo per le risposte e non per i commenti. – saveenr

risposta

1

Questo è il codice che ho corso con Visual Studio 2010 sia contro Visio 2007 e 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

Questo è fondamentalmente il codice che ho, ma il problema si verifica quando rilasciare la transizione. La mia soluzione alternativa è disegnare il grafico usando forme "normali" (cioè non un diagramma di diagramma di stato reale) - attualmente lavorando di nuovo per provare a fare una statechart in modo da poter ottenere l'esatto messaggio di errore. – John3136

+0

Ok: molto spaventoso - il mio codice ora funziona. Il diagramma non è tuttavia etichettato come un diagramma di stato. Non ho modificato nulla di "importante": un'osservazione: in precedenza Visio ha mostrato tutti i modelli UML, ora è solo il diagramma di stato - immagino che sia così che sa che è una statechart. Non ho idea di cosa ho cambiato per causare questo - le mie uniche modifiche sono state modificare i miei metodi che selezionano le forme da uno stencil in base a se sto provando UML o usando la mia soluzione alternativa ... non sono pronto a mollare - Non lo faccio fidati di cose che non capisco ... – John3136

+0

Se clicco su "Proprietà" sulle transizioni ottengo Questa: la forma UML esiste su una pagina di disegno che non fa parte di un diagramma del modello UML. Questa forma è progettata per lavorare nei disegni creati usando il modello UML Model Diagram. Immagino di dover fare qualcosa quando creo la mia pagina. – John3136

Problemi correlati