Shape connectors in Visio

后端 未结 2 596
别那么骄傲
别那么骄傲 2021-01-15 05:50

I\'m writing an Add-In to Visio 2010 in Studio 2010 on C#. I need to read a diagram currently opened in Visio. I know how to read shapes of the diagram.

The question

相关标签:
2条回答
  • 2021-01-15 06:32

    For coordinates:

    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;
    
    0 讨论(0)
  • 2021-01-15 06:54

    Connections in Visio are handled through Connect objects. Each shape has a collection of incoming connect objects and outgoing connect objects. Their names are FromConnects and Connects, respectively.

    Each connect object has a FromSheet and ToSheet property, which are just pointers to Shape objects, the FromSheet shape being the shape that connects to the ToSheet shape.

    So, if you have a square shape (shape1) connected to another square shape (shape2) with a connector line (connector), what you actually have is this: connector is connected to shape1 connector is connected to shape2

    So on shape1, you'd look at FromConnects and see one Connects item, with FromSheet referencing connector, and ToSheet referring to shape1. Shape 2 would be the same. If you look at Connects on the connector shape, you'd see the same Connects item, with the same objects referenced.

    So figuring out whether shape1 connects to shape2 or vice versa is a matter of looking at the order on connector...Connects object 1 would be the "From" shape and Connects object 2 would be the "To" shape.

    Here are two VBA routines that get Incoming and Outgoing glues on a shape you pass in, and return a collection object. I know you said you're using C#, but I do VBA for Visio. The code just illustrates raw connection information. I'd suggest you try stepping around in VBA and see how this all works, because it still confuses me.

    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 讨论(0)
提交回复
热议问题