【问题标题】:Shape connectors in VisioVisio 中的形状连接器
【发布时间】:2011-06-23 15:42:05
【问题描述】:

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

问题是

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

【问题讨论】:

    标签: c# coordinates visio shape connector


    【解决方案1】:

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

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

    所以,如果你有一个正方形 (shape1) 用连接线 (connector) 连接到另一个正方形 (shape2),那么你实际拥有的是这样的: 连接器连接到 shape1 连接器连接到 shape2

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

    因此,弄清楚 shape1 是否连接到 shape2 或反之亦然是查看连接器上的顺序的问题...连接对象 1 将是“From”形状,Connects 对象 2 将是“To”形状。

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

    【讨论】:

    • 好的。我们得到了联系。形状本身的坐标怎么样。如何在页面上获得 Shape 的 X 和 Y 的合理数字?至于连接器,我也使用 Shape 的 ConnectedShapes() 方法,它有两个参数:第一个允许查找传出连接,第二个允许查找传入连接。
    • 嘿 itried 你的代码,但我没有找到任何使用它的 coonected 形状。相反,我的连接器(形状名称 - 动态连接器)在使用 Result.Add TheShp.Connects.Item 迭代时将两个形状都显示为 tosheet 项(i).ToSheet
    【解决方案2】:

    坐标:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多