【问题标题】:Set the Startpoint and End point of a Connector in Enterprise Architect through C# add-ins通过 C# 插件在 Enterprise Architect 中设置连接器的起点和终点
【发布时间】:2017-06-08 11:51:17
【问题描述】:

我正在使用 Enterprise Architect C# 插件。我需要通过代码排列元素和连接器,以使连接器没有重叠。我已将图表链接的线型设置为自动布线。

EA 中是否有 API 可用于将连接器的起点/终点设置为源元素的尺寸值,以便连接器从元素的顶部开始。

请帮助。提前致谢。

编辑:我已尝试通过 API 进行如下更新,但无法看到连接器起始位置的变化:

            for (short i = 0; i < Diagram.DiagramLinks.Count; i++)
            {

                    EA.DiagramLink dl = Diagram.DiagramLinks.GetAt(i);
                    //set the line style and update
                    dl.LineStyle = EA.LinkLineStyle.LineStyleAutoRouting;
                    dl.Geometry = "EDGE=4;";
                    dl.Update();
                    Diagram.Update();
            }

【问题讨论】:

    标签: c# diagram enterprise-architect connector


    【解决方案1】:

    这是可能的,但很棘手。 DiagramLinks 有一个属性 Geometry 包含一个 csv 样式的列表。详细描述可以在我的 Inside book 中找到,但您可以简单地查找参数 SXSY,它们指定了相对 X 和 Y 位置,它们可以改变起始对象的 +- 半宽度/高度。类似地EXEY结束。最后,EDGE 参数指定连接器从起始对象开始的边缘:1=bottom; 2=左; 3=顶部; 4=正确

    Edit1:我摆弄了一下,但我现在没有开放的心态。您应该做的是创建一个空的 EAP 并将两个两个元素放在一个图表上并将它们连接起来。现在在 SQL 便笺簿中运行 SELECT geometry FROM t_diagramlinks。移动连接器/元素,保存图表(否则更改不会写入数据库)并重新发出 SQL 以查看对SX 等的影响。

    另外,您可以通过我推荐的 API 更新 Geometry。此外,您需要重新加载图表以查看图形中反映的更新。

    Edit2:可能是您问题的答案。 Edge 属性只是一个 r/o 属性。重要的是坐标参数。因此,如果您想让连接器从中间顶部边缘开始,您需要设置SX=0;SY=&lt;halfheight&gt;;,其中&lt;halfheight&gt; 是元素高度的一半。另请注意,您可以提供超出范围的值,EA 只会呈现有趣的结果(意味着它们不会检查 Update() 上属性的有效性)。

    这是我的测试代码(对不起 Perl ;-):

    my $d = $rep->GetCurrentDiagram();
    for my $dl (in $d->DiagramLinks) {
      print $dl->Geometry . "\n";
      $dl->{Geometry} = 'SX=0;SY=10;EX=0;EY=0;';
      $dl->Update();
    }
    $rep->ReloadDiagram($d->DiagramId);
    

    附:边缘始终由连接元素的相对位置确定(除非连接器末端被固定)。

    【讨论】:

    • 我正在使用以下查询,但我无法看到连接器起点的变化:Repository.Execute("UPDATE t_diagramlinks SET t_diagramlinks.Geometry='EDGE=1;' WHERE t_diagramlinks.DiagramID= 5");
    • 我晚上再看看。
    • 我更新了。对不起,我的大脑现在很迟钝。我可能会在睡完后明天赶上 :-)
    • 非常感谢..我现在就试试..我还添加了编辑,我试图通过 API 设置边缘,但它不起作用。
    • 就像中间的快速评论一样:Edge 似乎是那些没有相关性的僵尸属性之一。无论如何,我会深入研究。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    相关资源
    最近更新 更多