Visio中的形状连接器

时间:2011-06-23 15:42:06

标签: c# coordinates visio shape connector

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

问题是

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

以下是两个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

答案 1 :(得分: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;