Visio中的形状连接器

我正在使用C#在Studio 2010中为Visio 2010编写一个加载项。 我需要阅读当前在Visio中打开的图表。 我知道如何阅读图表的形状。

问题是

  1. 如果我有一个形状对象,哪些属性可以给我页面上的形状坐标和其他形状(如果有的话),当前的一个是连接的,
  2. 如果我有一个连接器对象,哪些属性可以给我连接的形状和连接的方向。

Visio中的连接通过Connect对象处理。 每个形状都有一组传入的连接对象和传出的连接对象。 它们的名称分别是FromConnects和Connects。

每个连接对象都有一个FromSheet和ToSheet属性,它们只是指向Shape对象的指针,FromSheet形状是连接到ToSheet形状的形状。

因此,如果你有一个方形(shape1)连接到另一个方形(shape2)与连接线(连接器),你实际拥有的是:连接器连接到shape1连接器连接到shape2

因此,在shape1上,您将查看FromConnects并查看一个Connects项,使用FromSheet引用连接器,ToSheet引用shape1。 形状2将是相同的。 如果您查看连接器形状上的连接,您将看到相同的连接项,并引用相同的对象。

因此,确定shape1是否连接到shape2或反之亦然是查看连接器上的顺序…连接对象1将是“从”形状而连接对象2将是“到”形状。

这里有两个VBA例程,它们在您传入的形状上获取Incoming和Outgoing胶水,并返回一个集合对象。 我知道你说你正在使用C#,但我为Visio做VBA。 该代码仅说明了原始连接信息。 我建议你试着在VBA中逛一逛,看看这一切是如何运作的,因为它仍然让我感到困惑。

Public Function GetShapesThatConnectTo(TheShp As Visio.Shape) As Collection Dim Result As Collection Set Result = New Collection For i = 1 To TheShp.FromConnects.Count Result.Add TheShp.FromConnects.Item(i).FromSheet Next i Set GetShapesThatConnectTo = Result End Function Public Function GetWhatShapeConnectsTo(TheShp As Visio.Shape) As Collection Dim Result As Collection Set Result = New Collection For i = 1 To TheShp.Connects.Count Result.Add TheShp.Connects.Item(i).ToSheet Next i Set GetWhatShapeConnectsTo = Result End Function 

对于坐标:

 foreach (Visio.Page Page in Pages) { Visio.Shapes Shapes = Page.Shapes; foreach (Visio.Shape Shape in Shapes) { double x = Shape.Cells["PinX"].ResultIU; double y = Shape.Cells["PinY"].ResultIU;