mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-07-30 07:44:13 +02:00
2aeeb74e72
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>
70 lines
2.5 KiB
C++
70 lines
2.5 KiB
C++
/*
|
|
Copyright 2006-2026 The QElectroTech Team
|
|
This file is part of QElectroTech.
|
|
|
|
QElectroTech is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
QElectroTech is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with QElectroTech. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#ifndef EDZPART_H
|
|
#define EDZPART_H
|
|
|
|
#include <QString>
|
|
#include <QList>
|
|
#include <QMap>
|
|
|
|
/** One physical connection of an EPLAN part (a pin/terminal). */
|
|
struct EdzPin {
|
|
QString designation; ///< terminal id, e.g. "1", "PE"
|
|
QString description; ///< function label, e.g. "L+"
|
|
QString group; ///< connector group: terminalNr if present, else functiondefinition
|
|
};
|
|
|
|
/**
|
|
@brief The portable data of an EPLAN part, read from its part.xml.
|
|
|
|
Mirrors the fields the standalone edz2qet.py prototype maps: identity and
|
|
metadata, localized names (2-letter language -> text) and the connection
|
|
list. Geometry from the EPLAN macro is intentionally ignored — the importer
|
|
generates a generic symbol from the pin list instead.
|
|
*/
|
|
class EdzPart
|
|
{
|
|
public:
|
|
bool parse(const QString &part_xml_path);
|
|
QString errorString() const { return m_error; }
|
|
|
|
QString partNumber() const { return m_part_number; }
|
|
QString manufacturer() const { return m_manufacturer; }
|
|
QString orderNumber() const { return m_order_number; }
|
|
QString typeNumber() const { return m_type_number; }
|
|
QString description() const { return m_description; }
|
|
QString comment() const { return m_comment; }
|
|
QString picture() const { return m_picture; }
|
|
QMap<QString, QString> names() const { return m_names; }
|
|
QList<EdzPin> pins() const { return m_pins; }
|
|
|
|
private:
|
|
QString m_error;
|
|
QString m_part_number;
|
|
QString m_manufacturer;
|
|
QString m_order_number;
|
|
QString m_type_number;
|
|
QString m_description; ///< DESCR1, preferred English (for element-info)
|
|
QString m_comment; ///< DESCR2, preferred English
|
|
QString m_picture; ///< picture file name, if any
|
|
QMap<QString, QString> m_names; ///< 2-letter lang -> localized name
|
|
QList<EdzPin> m_pins;
|
|
};
|
|
|
|
#endif // EDZPART_H
|