Visio中的形状连接器

3
我正在使用C#的Visual Studio 2010编写Visio 2010插件。我需要读取当前在Visio中打开的图表。我知道如何读取图表的形状。
问题是:
1.如果我有一个形状对象,哪些属性可以给我该形状在页面上和与其连接的其他形状(如果有的话)的坐标? 2.如果我有一个连接器对象,哪些属性可以给我它连接的形状和连接方向?
2个回答

4

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

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

因此,如果您有一个正方形形状(shape1)通过连接器线(connector)连接到另一个正方形形状(shape2),实际上您拥有的是: 连接器连接到shape1 连接器连接到shape2

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

因此,确定shape1连接到shape2还是反之亦然是查看连接器上的顺序...Connects对象1将是“From”形状,而Connects对象2将是“To”形状。

这里有两个VBA例程,可以获取传入和传出的胶水,您需要传入一个形状,并返回一个集合对象。我知道您说您正在使用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

好的,我们已经建立了连接。那么形状本身的坐标怎么样呢?我如何在页面上获得形状X和Y的合理数字?至于连接器,我也使用Shape的ConnectedShapes()方法,它有两个参数:第一个允许查找出站连接,第二个允许查找入站连接。 - Daniil Belonin
嗨,我尝试了你的代码,但是我没有找到任何连接形状。相反,当使用Result.Add迭代TheShp.Connects.Item(i).ToSheet时,我的连接器(形状名称 - 动态连接器)显示为两个工作表项。 - 0cool

0

对于坐标:

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;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接