在 visio 中识别形状父级

Identifying a shape parent in visio

你好,我有一个 BPMN 模板的 visio 文档。在那个 BPMN 文档中,我通过选择 Moreshapes- 放置了一个 BPMN 形状以及来自工程、流程图、网络、基本形状等的其他形状- >

所以我的 BPMN visio 文档如下所示

其中BPMN和Task named是一个BPMN形状,Computer是来自Network->Computer的形状,Rectangle来自General->BasicShapes 像那样其他的形状也一样。 (ie) 在 BPMN visio 文档中,BPMN 形状我也有其他形状。

如何在 C# 中识别形状父级..???

例如: BPMN 命名形状是来自 BPMN 的形状。 名为 shape 的任务是来自 BPMN 的形状。 名为 shape 的计算机是来自 Network 的 shape。 名为 shape 的矩形是 General 中的形状。

我必须承认,这比我想象的要难。模板实际上在文档集中,它们不包含形状,只包含母版。无论如何:这就是您为活动绘图的每个形状获取父模板名称的方式:

using Visio = Microsoft.Office.Interop.Visio;

var visio = (Visio.Application) System.Runtime.InteropServices.Marshal.GetActiveObject("Visio.Application");
var vsd = visio.ActiveDocument;
foreach(Visio.Shape shape in vsd.Pages[1].Shapes) {
  foreach(Visio.Document stencil in visio.Documents) {
    if (stencil.Type == Visio.VisDocumentTypes.visTypeStencil) {
      foreach(Visio.Master sh in stencil.Masters) {
        if (sh.Name == shape.Name) {
          Console.WriteLine(stencil.Name);
          break;
        }
      }
    }
  }
}

形状和模板之间没有依赖关系;图形可能来自任何模板(或其他图形)。 IE。形状不存储它们来自哪个模板的信息 "originate"。

例如,您可以创建自己的模板并在其中放置形状;因此,当您从该模板中删除一个形状时,它们将来自该模板。

唯一的顺序是 Microsoft 在模板之间排列它们的方式。请注意,相同的形状可能出现在多个内置模板中。

当您放下一个形状时,它 "master" 会被复制到文档中,并且与 "original" 模板的所有连接都会断开 - 形状不会 "know" 它的来源.

你需要这种信息有什么用?