通过 C# 加载项在 Enterprise Architect 中设置连接器的起点和终点

Set the Startpoint and End point of a Connector in Enterprise Architect through C# add-ins

我正在使用 Enterprise Architect C# 加载项。我需要通过代码安排元素和连接器,这样连接器就不会重叠。我已将图表链接的线型设置为自动路由。

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

请帮忙。提前致谢。

编辑:我已尝试通过 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();
            }

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

Edit1: 胡思乱想了一阵子,暂时没脑子。您应该做的是创建一个空的 EAP 并将两个两个元素放在图表上并将它们连接起来。现在 运行 SELECT geometry FROM t_diagramlinks 在 SQL 草稿本中。移动 connector/elements,保存图表(否则更改不会写入数据库)并重新发出 SQL 以查看对 SX 等的影响

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

Edit2:可能是您问题的答案。 Edge 属性只是一个 r/o 属性。重要的是坐标参数。因此,如果您想让连接器从中间上边缘开始,您需要设置 SX=0;SY=<halfheight>;,其中 <halfheight> 是元素高度的一半。另请注意,您可以提供超出范围的值,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);

P.S。边缘总是根据连接元素的相对定位确定(除非连接器端被固定)。