2011-06-23 79 views
1

我正在C#上编写Studio 2010中的Visio 2010加载项。我需要阅读当前在Visio中打开的图表。我知道如何阅读图的形状。Visio中的形状连接器

问题是

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

回答

3

Visio中的连接通过连接对象进行处理。每个形状都有一个传入连接对象和传出连接对象的集合。他们的名字分别是FromConnects和Connects。

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

所以,如果你有连接到另一个方形(shape2)与连接线(连接器)的正方形状(shape1),实际上你这是什么: 连接器连接到shape1 连接器连接到shape2

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

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

这里有两个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 
+0

所有权利。我们有了关系。形状本身的坐标如何。我怎样才能得到页面上Shape的X和Y的合理数字?至于连接器,我还使用Shape的ConnectedShapes()方法,它有两个参数:第一个允许找到传出连接,第二个允许找到传入连接。 –

+0

嘿你的代码,但我没有找到任何使用它的连续形状。相反,当使用Result.Add TheShp.Connects.Item(i).ToSheet时,我的连接器(形状名称 - 动态连接器)将两个形状显示为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;