Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Visio中的形状连接器_C#_Coordinates_Visio_Shape_Connector - Fatal编程技术网

C# Visio中的形状连接器

C# Visio中的形状连接器,c#,coordinates,visio,shape,connector,C#,Coordinates,Visio,Shape,Connector,我正在C#上的Studio 2010中编写Visio 2010的加载项。我需要阅读Visio中当前打开的图表。我知道如何阅读图表的形状 问题是 如果我有一个shape对象,哪些属性可以为我提供页面上形状和其他形状(如果有)的坐标,当前的一个与 若我有一个连接器对象,那个么哪些属性可以为我提供它所连接的形状和连接方向 Visio中的连接通过连接对象进行处理。每个形状都有传入连接对象和传出连接对象的集合。它们的名称分别是fromConnect和Connects 每个连接对象都有一个FromSheet

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

问题是

  • 如果我有一个shape对象,哪些属性可以为我提供页面上形状和其他形状(如果有)的坐标,当前的一个与
  • 若我有一个连接器对象,那个么哪些属性可以为我提供它所连接的形状和连接方向
    Visio中的连接通过连接对象进行处理。每个形状都有传入连接对象和传出连接对象的集合。它们的名称分别是fromConnect和Connects

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

    因此,如果您有一个方形(shape1)通过连接线(connector)连接到另一个方形(shape2),那么您实际拥有的是: 连接器已连接到形状1 连接器已连接到shape2

    在shape1上,您可以查看FromConnects,看到一个连接项,FromSheet引用连接器,ToSheet引用shape1。 形状2将是相同的。 如果查看连接件形状上的连接,将看到相同的连接项,并引用相同的对象

    因此,弄清楚shape1是否连接到shape2,或者反过来连接到shape2,只需查看连接器上的顺序……连接对象1将是“From”形状,连接对象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
    
    对于坐标:

    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;
    

    好吧我们有联系。形状本身的坐标如何。如何在页面上获得形状的X和Y的合理数字?至于连接器,我还使用了Shape的ConnectedShapes()方法,该方法有两个参数:第一个参数允许查找传出连接,第二个参数允许查找传入连接。hey itried了您的代码,但我没有使用它找到任何连接的形状。取而代之的是我的连接器(形状名称-dynamic connector)在使用Result进行迭代时,将两个形状显示为tosheet项。添加hp.Connects.Item(i).tosheet