edz: group terminals by physical connector (terminalNr), drop separator lines

EPLAN 2022-style part.xml files (e.g. IFM AL1122) use a numeric
functiondefgroup attribute and do not carry the text functiondefinition
block name that the previous grouping logic relied on.  Those parts
fell back to grouping by pin designation, producing symbols with all
pin "1"s stacked together, then all "2"s, etc. — the bug reported in
PR #513.

Fix: read terminalNr first (the physical M12/connector socket identifier,
e.g. "X01", "X31") as the primary group key; fall back to functiondefinition
text for older EPLAN formats that omit terminalNr.  Pins within each
connector group are still sorted by designation using natural sort.

Also remove the dashed inter-group separator lines; the existing 5 px
gap between groups provides sufficient visual separation.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Shane Ringrose
2026-06-21 02:57:14 +12:00
parent 756cfd98c0
commit 2aeeb74e72
3 changed files with 12 additions and 25 deletions
-17
View File
@@ -209,23 +209,6 @@ QDomDocument EdzElementBuilder::build(const EdzPart &part)
: QStringLiteral("PART"));
desc.appendChild(makeText(doc, body_left + 6, body_top + 7, title, TITLE_FONT));
// Group separator lines — thin dashed line halfway through each inter-group
// gap so the eye can immediately see which terminals belong together.
const QString SEP_STYLE =
QStringLiteral("line-style:dashed;line-weight:thin;filling:none;color:black");
for (int i = 1; i < n; ++i) {
if (!is_group_break[i]) continue;
const int sep_y = (pin_y[i - 1] + pitch + pin_y[i]) / 2;
QDomElement sep = doc.createElement(QStringLiteral("line"));
sep.setAttribute(QStringLiteral("x1"), body_left + 2);
sep.setAttribute(QStringLiteral("y1"), sep_y);
sep.setAttribute(QStringLiteral("x2"), body_right - 2);
sep.setAttribute(QStringLiteral("y2"), sep_y);
sep.setAttribute(QStringLiteral("style"), SEP_STYLE);
sep.setAttribute(QStringLiteral("antialias"), QStringLiteral("false"));
desc.appendChild(sep);
}
// Per-pin labels.
for (int i = 0; i < n; ++i) {
QString label = pins.at(i).designation;