Files
qelectrotech-source-mirror/sources/import/edz
Shane Ringrose 756cfd98c0 Fix terminal grouping: use functiondefinition block, not pin designation
The previous grouping compared `connectionDesignation` values (e.g. "1",
"2", "3") to detect group boundaries.  Those values are pin position
numbers within a terminal block, not functional group identifiers, so
devices like the ABB ACS880 produced 11+ tiny single-pin "groups" instead
of the ~8 functional blocks (AC-IN, Motor-OUT, DC-Bus, Brake-Resistor,
Analog-I/O, Digital-I/O, ...) the reviewer identified.

Fix:
- Add `group` field to EdzPin, populated from the `functiondefinition`
  attribute on <functiontemplate> (newer EPLAN) or its parent <function>
  element (older EPLAN).
- Sort pins by group first (preserving XML appearance order per group),
  then by designation within each group using natural sort.
- Use `groupKey()` — group when present, designation as fallback — for
  the group-break detection that drives separator lines and Y-gaps.

Parts without any functiondefinition data retain the previous
designation-based behaviour unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-21 01:54:23 +12:00
..

EPLAN .edz part import

Imports a part from the EPLAN Data Portal (.edz) into a QElectroTech element collection. The EPLAN Data Portal is the de-facto parts catalogue for electrical CAD (ifm, Phoenix Contact, Siemens, Rittal, Weidmüller, Schneider…), and components ship as .edz; this lets a QET user drop one straight into a project.

Using it

Right-click a writable collection folder in the elements panel → Import an EPLAN part (.edz)… → choose the file. The generated element is written into that folder and the panel reloads.

What is imported

A .edz is a 7-Zip archive containing a part definition (*.part.xml), an EPLAN macro (*.ema), a product image and metadata. Only the portable part data is used:

  • Terminals — each <functiontemplate> with a physical connection designation becomes a QET terminal, labelled from its connection description.
  • Element information — manufacturer, order number, designation and comment fill the QET element-information fields used by the BOM / nomenclature.
  • Localized names — one <name lang="xx"> per language the part provides, so the element labels itself in any QET UI language.
  • Symbol — a generic symbol is generated (a body rectangle with one west-facing terminal per pin). The EPLAN .ema macro geometry is not reproduced: it is tokenised EPLAN PXF that references EPLAN's own symbol libraries. A generic symbol is sufficient for wiring and BOM; swap in a nicer symbol in the element editor afterwards if desired.

Structure

File Role
edzarchive.* Extract the .edz to a temp dir; locate part.xml
edzsevenzip.* 7-Zip extraction via the bundled LZMA SDK (no external 7-Zip)
edzpart.* Parse part.xml into a portable model
edzelementbuilder.* Build the .elmt element from the model
edzimporter.* Orchestrate the above and write into a collection folder
lzma/ Vendored public-domain LZMA SDK (decode-only subset)

The non-UI classes are deliberately decoupled from the widget so they can be tested headless.

Bundled LZMA SDK

lzma/ contains the decode-only subset of Igor Pavlov's LZMA SDK (public domain — see lzma/LZMA-SDK-LICENSE.txt), so a .edz can be unpacked without an external 7-Zip install. Only 7-Zip-format .edz files are supported; zip-format packages are detected and reported but not yet handled.