Создание диаграмм состояний в Visio с использованием c # - PullRequest
8 голосов
/ 29 сентября 2011

Может кто-нибудь указать мне пример того, как программно создать диаграмму состояний в Visio? Я могу создать пустые страницы, формы перетаскивания, открыть шаблон и т. Д., Но когда я пытаюсь добавить переходы, он жалуется, что страница имеет неправильный тип.

Нигде не могу найти образец.

В качестве альтернативы: я могу сохранить действия пользователя, чтобы создать график в виде макроса. Можно ли запустить это программно?

Спасибо.


Отойдите от ПК на 2 минуты, и вы поймете, что должны были вставить фрагмент кода в вопрос, а не пытаться поместить его в комментарии. Лес: встретить деревья ...

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

Как видите, очень похоже на фрагмент в ответе ниже.

1 Ответ

1 голос
/ 05 октября 2011

Это код, который я запускал в Visual Studio 2010 как для Visio 2007, так и для 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);
...