通过 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 中找到详细描述,但您可以简单地查找参数 SX
和 SY
,它们指定相对的 X 和 Y 位置,它们可以变化 +- 一半 width/height起始对象。类似地 EX
和 EY
结束。最后,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。边缘总是根据连接元素的相对定位确定(除非连接器端被固定)。
我正在使用 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 中找到详细描述,但您可以简单地查找参数 SX
和 SY
,它们指定相对的 X 和 Y 位置,它们可以变化 +- 一半 width/height起始对象。类似地 EX
和 EY
结束。最后,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。边缘总是根据连接元素的相对定位确定(除非连接器端被固定)。