2011-06-23 78 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;