2011-06-23 7 views
1

C#でStudio 2010にVisio 2010へのアドインを作成しています。 Visioで現在開いている図を読む必要があります。私はダイアグラムの形をどのように読み取るかを知っています。Visioのシェイプコネクタ

質問が

  1. I形状のプロパティがページに私形状の座標を与えることができるオブジェクト、および他の形状を(もしあれば)がある場合、現在のものを用いて接続され、
  2. あります私はコネクターオブジェクトを持っている場合、どのプロパティが接続を接続し、接続の方向を与えることができます。

答えて

3

接続はConnectオブジェクトで処理されます。各シェイプには、着信接続オブジェクトと発信接続オブジェクトの集合があります。彼らの名前はそれぞれFromConnectsとConnectsです。

各接続オブジェクトには、FromSheetおよびToSheetプロパティがあります。これは、Shapeオブジェクトへのポインタであり、FromSheetシェイプはToSheetシェイプに接続するシェイプです。

コネクタのライン(コネクタ)を持つ別の正方形(shape2)に接続されている正方形(shape1)を持っているのであれば、あなたが実際に持っていることはこれです: コネクタが コネクタをshape1に接続されているshape2に接続されています

したがって、shape1ではFromConnectsを見て、FromSheetを参照するConnectsアイテムとshape1を参照するToSheetを参照します。 形状2は同じです。 コネクタシェイプの[接続]を見ると、同じオブジェクトが参照されている同じ[接続]項目が表示されます。

shape1がshape2に、またはその逆に接続するかどうかは、コネクタの順序を調べることで決まります。オブジェクト1は「From」形状になり、Connectsオブジェクト2は「To」形状になります。

ここでは、渡すシェイプにIncomingグルーとOutgoingグルーを取得し、コレクションオブジェクトを返す2つのVBAルーチンを示します。私はあなたがC#を使用していると言ったことは知っていますが、私はVBA for Visioを行っています。コードは生の接続情報を示しています。私はあなたが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の合理的な数字をページでどのように取得できますか?コネクターに関しては、2つのパラメーターを持つShapeのConnectedShapes()メソッドも使用しています。最初には発信接続を見つけることができ、2番目は着信接続を見つけることができます。 –

+0

あなたのコードはちょっと怪しかったけど、それを使用していてどんな形状でも見つけられない。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;