Merge pull request #1184 from ispyisail/fix/wiring-list-folio-arrows

Fix the wiring list export dropping wires at folio reports
This commit is contained in:
ispyisail
2026-10-01 09:11:33 +13:00
committed by GitHub
5 changed files with 1056 additions and 62 deletions
+58 -62
View File
@@ -1,5 +1,6 @@
#include "wiringlistexport.h"
#include "qetproject.h"
#include "diagram.h"
#include <QFileDialog>
#include <QMessageBox>
#include <QTextStream>
@@ -24,6 +25,13 @@ QString WiringListExport::normalizeUuid(const QString &u) const
QString WiringListExport::findDiagramFolio(const QDomElement &diagramElem) const
{
if (diagramElem.isNull()) return "";
// The folio number as the folio shows it ("3/12"). The saved "folio"
// attribute is its template ("%id/%total").
const int index = diagramElem.attribute("order").toInt();
if (m_project && index >= 1 && index <= m_project->diagrams().size()) {
return m_project->diagrams().at(index - 1)->border_and_titleblock
.titleblockInformation().value("folio").toString();
}
if (diagramElem.hasAttribute("folio")) return diagramElem.attribute("folio");
if (diagramElem.hasAttribute("title")) return diagramElem.attribute("title");
return "";
@@ -140,6 +148,7 @@ QList<ConductorData> WiringListExport::collectConductors(const QDomElement &root
QDomElement diag = climbToDiagram(cond);
data.folio = findDiagramFolio(diag);
data.folio_index = diag.attribute("order").toInt();
if (data.folio.isEmpty()) data.folio = cond.attribute("folio", cond.attribute("page", ""));
conductors.append(data);
@@ -227,7 +236,10 @@ QString WiringListExport::toCsvString() const
QList<ConductorData> conductors = collectConductors(doc.documentElement());
QList<ConductorData> uniqueConductors;
QMap<QString, ConductorData> partialWires;
// Conductors with one end on a folio report, by that report. All of them
// are collected before any is merged, so the result does not depend on
// the order the folios are saved in.
QMap<QString, QList<ConductorData>> partialWires;
auto normalizePartial = [](ConductorData c, const QString &ph_uuid) {
if (c.el1_uuid == ph_uuid) {
@@ -277,40 +289,50 @@ QString WiringListExport::toCsvString() const
}
QString ph_uuid = el1_ph ? c.el1_uuid : c.el2_uuid;
ConductorData normC = normalizePartial(c, ph_uuid);
QString matching_ph_uuid;
if (!elementsInfo[ph_uuid].links.isEmpty()) {
matching_ph_uuid = elementsInfo[ph_uuid].links.first();
}
if (!matching_ph_uuid.isEmpty() && partialWires.contains(matching_ph_uuid)) {
ConductorData otherHalf = partialWires.take(matching_ph_uuid);
ConductorData merged;
merged.folio = mergeField(otherHalf.folio, normC.folio);
merged.el1_uuid = otherHalf.el1_uuid;
merged.element1_label = otherHalf.element1_label;
merged.terminalname1 = otherHalf.terminalname1;
merged.el2_uuid = normC.el1_uuid;
merged.element2_label = normC.element1_label;
merged.terminalname2 = normC.terminalname1;
merged.tension_protocol = mergeField(otherHalf.tension_protocol, normC.tension_protocol);
merged.conductor_color = mergeField(otherHalf.conductor_color, normC.conductor_color);
merged.conductor_section = mergeField(otherHalf.conductor_section, normC.conductor_section);
merged.function = mergeField(otherHalf.function, normC.function);
uniqueConductors.append(merged);
} else {
partialWires.insert(ph_uuid, normC);
}
partialWires[ph_uuid].append(normalizePartial(c, ph_uuid));
}
for (const ConductorData &leftover : partialWires.values()) {
uniqueConductors.append(leftover);
// Two halves are one wire only when each report of a linked pair carries
// exactly one conductor. With several on a side, the diagram does not say
// which terminal is wired to which, so each conductor gets its own row,
// ending at the report.
QSet<QString> written;
for (auto it = partialWires.cbegin(); it != partialWires.cend(); ++it) {
const QString &ph_uuid = it.key();
if (written.contains(ph_uuid)) continue;
written.insert(ph_uuid);
const QStringList links = elementsInfo.value(ph_uuid).links;
const QString matching_ph_uuid = links.isEmpty() ? QString() : links.first();
const QList<ConductorData> others = partialWires.value(matching_ph_uuid);
if (it.value().size() != 1 || others.size() != 1 || written.contains(matching_ph_uuid)) {
uniqueConductors.append(it.value());
continue;
}
written.insert(matching_ph_uuid);
const ConductorData &otherHalf = it.value().first();
const ConductorData &normC = others.first();
ConductorData merged;
merged.folio = mergeField(otherHalf.folio, normC.folio);
merged.folio_index = std::min(otherHalf.folio_index, normC.folio_index);
merged.el1_uuid = otherHalf.el1_uuid;
merged.element1_label = otherHalf.element1_label;
merged.terminalname1 = otherHalf.terminalname1;
merged.el2_uuid = normC.el1_uuid;
merged.element2_label = normC.element1_label;
merged.terminalname2 = normC.terminalname1;
merged.tension_protocol = mergeField(otherHalf.tension_protocol, normC.tension_protocol);
merged.conductor_color = mergeField(otherHalf.conductor_color, normC.conductor_color);
merged.conductor_section = mergeField(otherHalf.conductor_section, normC.conductor_section);
merged.function = mergeField(otherHalf.function, normC.function);
uniqueConductors.append(merged);
}
for (ConductorData &c : uniqueConductors) {
@@ -322,35 +344,9 @@ QString WiringListExport::toCsvString() const
}
std::sort(uniqueConductors.begin(), uniqueConductors.end(), [](const ConductorData &a, const ConductorData &b) {
QStringList partsA = a.folio.split(',');
QStringList partsB = b.folio.split(',');
int minLen = std::min(partsA.size(), partsB.size());
int folioCmp = 0;
for (int i = 0; i < minLen; ++i) {
bool okA, okB;
int numA = partsA[i].trimmed().toInt(&okA);
int numB = partsB[i].trimmed().toInt(&okB);
if (okA && okB) {
if (numA != numB) {
folioCmp = (numA < numB) ? -1 : 1;
break;
}
} else {
int strCmp = partsA[i].trimmed().compare(partsB[i].trimmed(), Qt::CaseInsensitive);
if (strCmp != 0) {
folioCmp = strCmp;
break;
}
}
}
if (folioCmp == 0 && partsA.size() != partsB.size()) {
folioCmp = (partsA.size() < partsB.size()) ? -1 : 1;
}
if (folioCmp != 0) return folioCmp < 0;
// By the folio's position in the project: its number is free text
// ("3/12", "A-2") and does not sort.
if (a.folio_index != b.folio_index) return a.folio_index < b.folio_index;
int el1Cmp = a.element1_label.toLower().compare(b.element1_label.toLower());
if (el1Cmp != 0) return el1Cmp < 0;
+1
View File
@@ -33,6 +33,7 @@ struct ConductorData {
QString conductor_section;
QString function;
QString folio;
int folio_index = 0; // position of the folio in the project, from 1
};
/**
+14
View File
@@ -362,6 +362,20 @@ target_link_libraries(tst_conductorselfretrace PRIVATE Qt::Test)
target_compile_definitions(tst_conductorselfretrace PRIVATE
"QET_TEST_BINARY_PATH=\"$<TARGET_FILE:qelectrotech>\"")
# The wiring list export (--export-cables) keeps every wire drawn to a folio
# report when a report has several, joins only one-to-one report pairs, and
# prints the folio number rather than its template. fixtures/wiring_list_arrows.qet
# has one of each report pair; the examples check the page column.
add_executable(
tst_wiringlistexport
tst_wiringlistexport.cpp)
add_test(NAME tst_wiringlistexport COMMAND tst_wiringlistexport)
add_dependencies(tst_wiringlistexport qelectrotech)
target_link_libraries(tst_wiringlistexport PRIVATE Qt::Test)
target_compile_definitions(tst_wiringlistexport PRIVATE
"QET_TEST_BINARY_PATH=\"$<TARGET_FILE:qelectrotech>\""
"QET_EXAMPLES_DIR=\"${QET_DIR}/examples\"")
# qet.conductorUuids() / qet.conductorEnds(): a script lists a folio's
# conductors by uuid and finds each one's two ends. Runs a script through
# the real binary's --run on fixtures/qet_bug_repro_resaved.qet, so only
@@ -0,0 +1,871 @@
<project title="ENA006 E-101 QET TRIAL V2 - PILOT ARTIFACT" uuid="{8b9c15ab-71fd-543c-9b8a-70911bd09457}" version="0.200.1">
<titleblocktemplates>
<titleblocktemplate name="ENA006_D">
<information>ENA006 SLD probe title block � generated.</information>
<logos/>
<grid cols="t5%;t9%;t44%;t6%;t12%;t12%;t6%;t6%;" rows="26;26;26;40;34;34;">
<field align="left" col="3" displaylabel="true" fontsize="8" hadjust="true" name="" row="0" valign="center">
<value>
<translation lang="en">Z</translation>
</value>
<label>
<translation lang="en">REV</translation>
</label>
</field>
<field align="left" col="4" displaylabel="true" fontsize="8" hadjust="true" name="" row="0" valign="center">
<value>
<translation lang="en">2026-08-11</translation>
</value>
<label/>
</field>
<field align="left" col="5" displaylabel="true" fontsize="8" hadjust="true" name="" row="0" valign="center">
<value>
<translation lang="en">E-110: G4 CLOSED - LEVITON B3277-YB SIDE-MOUNT SPD + 3P 20 A CB-SPD</translation>
</value>
<label/>
</field>
<field align="left" col="6" displaylabel="true" fontsize="8" hadjust="true" name="" row="0" valign="center">
<value>
<translation lang="en">CC</translation>
</value>
<label>
<translation lang="en">BY</translation>
</label>
</field>
<field align="left" col="7" displaylabel="true" fontsize="8" hadjust="true" name="" row="0" valign="center">
<value>
<translation lang="en">PRELIMINARY</translation>
</value>
<label/>
</field>
<field align="left" col="2" displaylabel="true" fontsize="9" hadjust="true" name="" row="0" valign="center">
<value>
<translation lang="en">NOT FOR CONSTRUCTION</translation>
</value>
<label/>
</field>
<field align="left" col="3" displaylabel="true" fontsize="8" hadjust="true" name="" row="1" valign="center">
<value>
<translation lang="en">Y</translation>
</value>
<label>
<translation lang="en">REV</translation>
</label>
</field>
<field align="left" col="4" displaylabel="true" fontsize="8" hadjust="true" name="" row="1" valign="center">
<value>
<translation lang="en">2026-08-11</translation>
</value>
<label/>
</field>
<field align="left" col="5" displaylabel="true" fontsize="8" hadjust="true" name="" row="1" valign="center">
<value>
<translation lang="en">BREAKER AUX/POSITION DELETED - s60 GOVERNS; G6 CLOSED-DEL; A-5 RETIRED</translation>
</value>
<label/>
</field>
<field align="left" col="6" displaylabel="true" fontsize="8" hadjust="true" name="" row="1" valign="center">
<value>
<translation lang="en">CC</translation>
</value>
<label>
<translation lang="en">BY</translation>
</label>
</field>
<field align="left" col="7" displaylabel="true" fontsize="8" hadjust="true" name="" row="1" valign="center">
<value/>
<label/>
</field>
<field align="left" col="2" displaylabel="true" fontsize="9" hadjust="true" name="" row="1" valign="center">
<value/>
<label/>
</field>
<field align="left" col="3" displaylabel="true" fontsize="8" hadjust="true" name="" row="2" valign="center">
<value>
<translation lang="en">X</translation>
</value>
<label>
<translation lang="en">REV</translation>
</label>
</field>
<field align="left" col="4" displaylabel="true" fontsize="8" hadjust="true" name="" row="2" valign="center">
<value>
<translation lang="en">2026-08-11</translation>
</value>
<label/>
</field>
<field align="left" col="5" displaylabel="true" fontsize="8" hadjust="true" name="" row="2" valign="center">
<value>
<translation lang="en">COUNCIL REVIEW - WRAP/REFS/T3/TEE; KEY-2 PAWL; G14 ACCESS; H-OTD</translation>
</value>
<label/>
</field>
<field align="left" col="6" displaylabel="true" fontsize="8" hadjust="true" name="" row="2" valign="center">
<value>
<translation lang="en">CC</translation>
</value>
<label>
<translation lang="en">BY</translation>
</label>
</field>
<field align="left" col="7" displaylabel="true" fontsize="8" hadjust="true" name="" row="2" valign="center">
<value/>
<label/>
</field>
<field align="left" col="2" displaylabel="true" fontsize="9" hadjust="true" name="" row="2" valign="center">
<value/>
<label/>
</field>
<field align="left" col="2" displaylabel="true" fontsize="12" hadjust="true" name="" row="3" valign="center">
<value>
<translation lang="en">MEDIUM VOLTAGE POWER ELECTRONICS LABORATORY � UNIVERSITY OF CALGARY, SCHULICH SCHOOL OF ENGINEERING</translation>
</value>
<label/>
</field>
<field align="left" col="4" displaylabel="true" fontsize="10" hadjust="true" name="" row="3" valign="center">
<value>
<translation lang="en">%plant</translation>
</value>
<label>
<translation lang="en">PROJECT NO.</translation>
</label>
</field>
<field align="left" col="5" displaylabel="true" fontsize="10" hadjust="true" name="" row="3" valign="center">
<value>
<translation lang="en">%locmach</translation>
</value>
<label>
<translation lang="en">DRAWING NO.</translation>
</label>
</field>
<field align="left" col="6" displaylabel="true" fontsize="10" hadjust="true" name="" row="3" valign="center">
<value>
<translation lang="en">%indexrev</translation>
</value>
<label>
<translation lang="en">REV</translation>
</label>
</field>
<field align="left" col="7" displaylabel="true" fontsize="10" hadjust="true" name="" row="3" valign="center">
<value>
<translation lang="en">%folio</translation>
</value>
<label>
<translation lang="en">SHEET</translation>
</label>
</field>
<field align="left" col="2" displaylabel="true" fontsize="11" hadjust="true" name="" row="4" valign="center">
<value>
<translation lang="en">%title</translation>
</value>
<label>
<translation lang="en">TITLE</translation>
</label>
</field>
<field align="left" col="4" displaylabel="true" fontsize="9" hadjust="true" name="" row="4" valign="center">
<value>
<translation lang="en">%author</translation>
</value>
<label>
<translation lang="en">DRAWN</translation>
</label>
</field>
<field align="left" col="5" displaylabel="true" fontsize="9" hadjust="true" name="" row="4" valign="center">
<value>
<translation lang="en">%date</translation>
</value>
<label>
<translation lang="en">DATE</translation>
</label>
</field>
<field align="left" col="6" displaylabel="true" fontsize="9" hadjust="true" name="" row="4" valign="center">
<value>
<translation lang="en">NTS</translation>
</value>
<label>
<translation lang="en">SCALE</translation>
</label>
</field>
<field align="left" col="7" displaylabel="true" fontsize="9" hadjust="true" name="" row="4" valign="center">
<value>
<translation lang="en">D</translation>
</value>
<label>
<translation lang="en">SIZE</translation>
</label>
</field>
<field align="left" col="2" displaylabel="true" fontsize="11" hadjust="true" name="" row="5" valign="center">
<value>
<translation lang="en">ENA006 MV TEST FACILITY � ENG A 006</translation>
</value>
<label>
<translation lang="en">PROJECT</translation>
</label>
</field>
<field align="left" col="4" displaylabel="true" fontsize="9" hadjust="true" name="" row="5" valign="center">
<value>
<translation lang="en">PILOT ARTIFACT</translation>
</value>
<label/>
</field>
<field align="left" col="5" displaylabel="true" fontsize="9" hadjust="true" name="" row="5" valign="center">
<value>
<translation lang="en">NOT A DELIVERABLE</translation>
</value>
<label/>
</field>
</grid>
</titleblocktemplate>
</titleblocktemplates>
<properties>
<property name="saveddate" show="1">8/12/2026</property>
<property name="saveddate-eu" show="1">12-08-2026</property>
<property name="saveddate-us" show="1">2026-08-12</property>
<property name="savedfilename" show="1">qet_bug_repro</property>
<property name="savedfilepath" show="1">C:/Users/phili/.claude/skills/cabinet-drawings/pilot_qet/out/qet_bug_repro.qet</property>
<property name="savedtime" show="1">19:09</property>
</properties>
<usage enabled="true" time_spent="0"/>
<newdiagrams>
<border cols="17" colsize="60" displaycols="true" displayrows="true" rows="8" rowsize="80"/>
<inset author="" auto_page_num="" date="null" displayAt="bottom" filename="" folio="%id/%total" indexrev="" locmach="" plant="" title="" version=""/>
<conductors bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" formula="" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" text_color="#000000" type="multi" vertical-alignment="AlignRight" vertirotatetext="270"/>
<report label="%f-%l%c"/>
<xrefs>
<xref delayprefix="" displayhas="contacts" master_label="%f-%l%c" offset="0" powerprefix="" showallconfiguredslaves="false" showpowerctc="false" showterminalname="true" slave_label="(%f-%l%c)" slave_offset="0" snapto="bottom" switchprefix="" type="coil" xrefpos="AlignBottom"/>
<xref delayprefix="" displayhas="cross" master_label="%f-%l%c" offset="0" powerprefix="" showallconfiguredslaves="false" showpowerctc="false" showterminalname="true" slave_label="(%f-%l%c)" slave_offset="0" snapto="label" switchprefix="" type="commutator" xrefpos=""/>
<xref delayprefix="" displayhas="cross" master_label="%f-%l%c" offset="0" powerprefix="" showallconfiguredslaves="false" showpowerctc="true" showterminalname="true" slave_label="(%f-%l%c)" slave_offset="0" snapto="label" switchprefix="" type="plc" xrefpos=""/>
<xref delayprefix="" displayhas="contacts" master_label="%f-%l%c" offset="0" powerprefix="" showallconfiguredslaves="false" showpowerctc="false" showterminalname="true" slave_label="(%f-%l%c)" slave_offset="0" snapto="label" switchprefix="" type="protection" xrefpos="AlignBottom"/>
</xrefs>
<conductors_autonums auto_break_conductors="false" current_autonum="" freeze_new_conductors="false"/>
<folio_autonums/>
<element_autonums current_autonum="" freeze_new_elements="false"/>
<guides/>
</newdiagrams>
<diagram author="" auto_page_num="" cols="17" colsize="60" date="null" displayAt="bottom" displaycols="true" displayrows="true" filename="" folio="%id/%total" freezeNewConductor="false" freezeNewElement="false" height="660" indexrev="" locmach="" order="1" plant="" rows="8" rowsize="80" title="" uuid="{12d8812a-af75-4fe9-859e-964e5e12efde}" version="0.200.1-dev">
<defaultconductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" formula="" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" text_color="#000000" type="multi" vertical-alignment="AlignRight" vertirotatetext="270"/>
<elements>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="P" type="embed://import/10_electric/10_allpole/380_signaling_operating/12_acoustic_signaling/sirene.elmt" uuid="{9dafa64c-b032-4170-9477-cef28498f621}" x="100" y="100" z="10">
<terminals>
<terminal id="0" orientation="0" x="0" y="-16"/>
<terminal id="1" orientation="2" x="0" y="16"/>
</terminals>
<inputs/>
<elementInformations>
<elementInformation name="label" show="1">PA</elementInformation>
</elementInformations>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="false" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{f8302ee9-9eeb-4811-835f-7caf74c203b6}" x="35" y="-8.5">
<text>PA</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="" type="embed://import/10_electric/10_allpole/100_folio_referencing/02going_arrow.elmt" uuid="{1f305ff0-207f-4e56-856e-3d1987d9ce7c}" x="400" y="100" z="10">
<terminals>
<terminal id="2" orientation="3" x="-9" y="0"/>
</terminals>
<inputs/>
<links_uuids>
<link_uuid uuid="{58834c97-a236-44e9-abe8-26cf8e7864f8}"/>
</links_uuids>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="true" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{fc7c14e7-07d7-44bb-8e99-9f6f5790e1e9}" x="6" y="-11.5">
<text>2-A1</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
</elements>
<conductors>
<conductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" element1="{9dafa64c-b032-4170-9477-cef28498f621}" element1_label="PA" element1_name="Siren" element2="{1f305ff0-207f-4e56-856e-3d1987d9ce7c}" element2_label="" element2_linked="" element2_name="Going arrow" formula="" freezeLabel="false" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" terminal1="{95da3481-88c4-4a1e-9419-7033b26f198f}" terminal2="{975add6f-4ba5-44af-a4c0-e1f1c2024601}" terminalname1="A1" terminalname2="1" text_color="#000000" type="multi" uuid="{9712b002-7e13-49f3-88be-bab32f3afd47}" vertical-alignment="AlignRight" vertirotatetext="270" x="0" y="0">
<sequentialNumbers/>
</conductor>
</conductors>
</diagram>
<diagram author="" auto_page_num="" cols="17" colsize="60" date="null" displayAt="bottom" displaycols="true" displayrows="true" filename="" folio="%id/%total" freezeNewConductor="false" freezeNewElement="false" height="660" indexrev="" locmach="" order="2" plant="" rows="8" rowsize="80" title="" uuid="{13c8750a-f56e-4bd0-9205-d5d75c007335}" version="0.200.1-dev">
<defaultconductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" formula="" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" text_color="#000000" type="multi" vertical-alignment="AlignRight" vertirotatetext="270"/>
<elements>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="" type="embed://import/10_electric/10_allpole/100_folio_referencing/01coming_arrow.elmt" uuid="{58834c97-a236-44e9-abe8-26cf8e7864f8}" x="100" y="100" z="10">
<terminals>
<terminal id="0" orientation="1" x="9" y="0"/>
</terminals>
<inputs/>
<links_uuids>
<link_uuid uuid="{1f305ff0-207f-4e56-856e-3d1987d9ce7c}"/>
</links_uuids>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignRight" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="true" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{cdb3752e-49fe-4098-b01e-14194093925a}" x="-37.3281" y="-11.5">
<text>1-A6</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="P" type="embed://import/10_electric/10_allpole/380_signaling_operating/12_acoustic_signaling/sirene.elmt" uuid="{c595e215-ba4d-42a1-909c-c57d7b3aa043}" x="400" y="100" z="10">
<terminals>
<terminal id="1" orientation="0" x="0" y="-16"/>
<terminal id="2" orientation="2" x="0" y="16"/>
</terminals>
<inputs/>
<elementInformations>
<elementInformation name="label" show="1">PB</elementInformation>
</elementInformations>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="false" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{18f1bb8a-8b37-42ae-a499-89fad3e7aa04}" x="35" y="-8.5">
<text>PB</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
</elements>
<conductors>
<conductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" element1="{58834c97-a236-44e9-abe8-26cf8e7864f8}" element1_label="" element1_linked="" element1_name="Coming arrow" element2="{c595e215-ba4d-42a1-909c-c57d7b3aa043}" element2_label="PB" element2_name="Siren" formula="" freezeLabel="false" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" terminal1="{d7fd0bec-9f05-4651-a50b-29d7ffabeb41}" terminal2="{95da3481-88c4-4a1e-9419-7033b26f198f}" terminalname1="1" terminalname2="A1" text_color="#000000" type="multi" uuid="{2e88cd90-387f-4b21-a690-79d0e79880b7}" vertical-alignment="AlignRight" vertirotatetext="270" x="0" y="0">
<sequentialNumbers/>
</conductor>
</conductors>
</diagram>
<diagram author="" auto_page_num="" cols="17" colsize="60" date="null" displayAt="bottom" displaycols="true" displayrows="true" filename="" folio="%id/%total" freezeNewConductor="false" freezeNewElement="false" height="660" indexrev="" locmach="" order="3" plant="" rows="8" rowsize="80" title="" uuid="{8fda2627-d600-456d-b1b3-bf2a8d58ec93}" version="0.200.1-dev">
<defaultconductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" formula="" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" text_color="#000000" type="multi" vertical-alignment="AlignRight" vertirotatetext="270"/>
<elements>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="P" type="embed://import/10_electric/10_allpole/380_signaling_operating/12_acoustic_signaling/sirene.elmt" uuid="{479b12ca-3279-4563-9e85-7965f156bafa}" x="100" y="100" z="10">
<terminals>
<terminal id="0" orientation="0" x="0" y="-16"/>
<terminal id="1" orientation="2" x="0" y="16"/>
</terminals>
<inputs/>
<elementInformations>
<elementInformation name="label" show="1">EA</elementInformation>
</elementInformations>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="false" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{6eb83333-6597-4faa-88f7-fb0e149bf3ad}" x="35" y="-8.5">
<text>EA</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="P" type="embed://import/10_electric/10_allpole/380_signaling_operating/12_acoustic_signaling/sirene.elmt" uuid="{8226560b-85fc-4097-97ef-3f460ede188c}" x="100" y="300" z="10">
<terminals>
<terminal id="2" orientation="0" x="0" y="-16"/>
<terminal id="3" orientation="2" x="0" y="16"/>
</terminals>
<inputs/>
<elementInformations>
<elementInformation name="label" show="1">EA2</elementInformation>
</elementInformations>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="false" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{dbf8171e-4297-41c1-a0cb-81f4ce8932d4}" x="35" y="-8.5">
<text>EA2</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="" type="embed://import/10_electric/10_allpole/100_folio_referencing/02going_arrow.elmt" uuid="{3cea8881-25c7-4aef-89f3-8fa9f397f536}" x="400" y="100" z="10">
<terminals>
<terminal id="4" orientation="3" x="-9" y="0"/>
</terminals>
<inputs/>
<links_uuids>
<link_uuid uuid="{02f8958b-d216-45ee-a6d0-472444f62d3e}"/>
</links_uuids>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="true" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{0bd2be9c-d414-440e-aed5-00e425366766}" x="6" y="-11.5">
<text>4-A1</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
</elements>
<conductors>
<conductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" element1="{479b12ca-3279-4563-9e85-7965f156bafa}" element1_label="EA" element1_name="Siren" element2="{3cea8881-25c7-4aef-89f3-8fa9f397f536}" element2_label="" element2_linked="" element2_name="Going arrow" formula="" freezeLabel="false" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" terminal1="{95da3481-88c4-4a1e-9419-7033b26f198f}" terminal2="{975add6f-4ba5-44af-a4c0-e1f1c2024601}" terminalname1="A1" terminalname2="1" text_color="#000000" type="multi" uuid="{960b77b9-328b-4a1f-b8d2-02859ca9a92e}" vertical-alignment="AlignRight" vertirotatetext="270" x="0" y="0">
<sequentialNumbers/>
</conductor>
<conductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" element1="{8226560b-85fc-4097-97ef-3f460ede188c}" element1_label="EA2" element1_name="Siren" element2="{3cea8881-25c7-4aef-89f3-8fa9f397f536}" element2_label="" element2_linked="" element2_name="Going arrow" formula="" freezeLabel="false" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" terminal1="{95da3481-88c4-4a1e-9419-7033b26f198f}" terminal2="{975add6f-4ba5-44af-a4c0-e1f1c2024601}" terminalname1="A1" terminalname2="1" text_color="#000000" type="multi" uuid="{ed1c6376-9f6c-4ace-9906-e92b1f2dd3d9}" vertical-alignment="AlignRight" vertirotatetext="270" x="0" y="0">
<sequentialNumbers/>
</conductor>
</conductors>
</diagram>
<diagram author="" auto_page_num="" cols="17" colsize="60" date="null" displayAt="bottom" displaycols="true" displayrows="true" filename="" folio="%id/%total" freezeNewConductor="false" freezeNewElement="false" height="660" indexrev="" locmach="" order="4" plant="" rows="8" rowsize="80" title="" uuid="{7c7aaf79-80f0-4262-b95a-366f04110eb0}" version="0.200.1-dev">
<defaultconductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" formula="" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" text_color="#000000" type="multi" vertical-alignment="AlignRight" vertirotatetext="270"/>
<elements>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="" type="embed://import/10_electric/10_allpole/100_folio_referencing/01coming_arrow.elmt" uuid="{02f8958b-d216-45ee-a6d0-472444f62d3e}" x="100" y="100" z="10">
<terminals>
<terminal id="0" orientation="1" x="9" y="0"/>
</terminals>
<inputs/>
<links_uuids>
<link_uuid uuid="{3cea8881-25c7-4aef-89f3-8fa9f397f536}"/>
</links_uuids>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignRight" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="true" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{bfc663af-e400-4cd9-90b2-7624bf6ba5b9}" x="-37.3281" y="-11.5">
<text>3-A6</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="P" type="embed://import/10_electric/10_allpole/380_signaling_operating/12_acoustic_signaling/sirene.elmt" uuid="{9fed8203-ab0a-4cf4-9d6c-64d36e2f273c}" x="400" y="100" z="10">
<terminals>
<terminal id="1" orientation="0" x="0" y="-16"/>
<terminal id="2" orientation="2" x="0" y="16"/>
</terminals>
<inputs/>
<elementInformations>
<elementInformation name="label" show="1">EB</elementInformation>
</elementInformations>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="false" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{479016a7-05c1-4984-8d59-c8709dbc182c}" x="35" y="-8.5">
<text>EB</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
</elements>
<conductors>
<conductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" element1="{02f8958b-d216-45ee-a6d0-472444f62d3e}" element1_label="" element1_linked="" element1_name="Coming arrow" element2="{9fed8203-ab0a-4cf4-9d6c-64d36e2f273c}" element2_label="EB" element2_name="Siren" formula="" freezeLabel="false" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" terminal1="{d7fd0bec-9f05-4651-a50b-29d7ffabeb41}" terminal2="{95da3481-88c4-4a1e-9419-7033b26f198f}" terminalname1="1" terminalname2="A1" text_color="#000000" type="multi" uuid="{1e9d1438-3052-4b83-a868-60fbaf2df619}" vertical-alignment="AlignRight" vertirotatetext="270" x="0" y="0">
<sequentialNumbers/>
</conductor>
</conductors>
</diagram>
<diagram author="" auto_page_num="" cols="17" colsize="60" date="null" displayAt="bottom" displaycols="true" displayrows="true" filename="" folio="%id/%total" freezeNewConductor="false" freezeNewElement="false" height="660" indexrev="" locmach="" order="5" plant="" rows="8" rowsize="80" title="" uuid="{49892c9d-4f0c-4f4c-ad9a-c5fb06bbcda2}" version="0.200.1-dev">
<defaultconductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" formula="" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" text_color="#000000" type="multi" vertical-alignment="AlignRight" vertirotatetext="270"/>
<elements>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="P" type="embed://import/10_electric/10_allpole/380_signaling_operating/12_acoustic_signaling/sirene.elmt" uuid="{0aee3e9b-80c2-4e9e-97b8-44446b6b7cee}" x="100" y="100" z="10">
<terminals>
<terminal id="0" orientation="0" x="0" y="-16"/>
<terminal id="1" orientation="2" x="0" y="16"/>
</terminals>
<inputs/>
<elementInformations>
<elementInformation name="label" show="1">LA</elementInformation>
</elementInformations>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="false" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{c0986530-3db5-4c52-8ebb-4d5e3cfc629d}" x="35" y="-8.5">
<text>LA</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="" type="embed://import/10_electric/10_allpole/100_folio_referencing/02going_arrow.elmt" uuid="{de35dcf2-26bd-4339-9443-3e8119722350}" x="400" y="100" z="10">
<terminals>
<terminal id="2" orientation="3" x="-9" y="0"/>
</terminals>
<inputs/>
<links_uuids>
<link_uuid uuid="{129e9d14-dcb0-4c61-9584-90ce7063dc52}"/>
</links_uuids>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="true" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{8ed11545-49d8-4ab2-aa04-918d9525d653}" x="6" y="-11.5">
<text>6-A1</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
</elements>
<conductors>
<conductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" element1="{0aee3e9b-80c2-4e9e-97b8-44446b6b7cee}" element1_label="LA" element1_name="Siren" element2="{de35dcf2-26bd-4339-9443-3e8119722350}" element2_label="" element2_linked="" element2_name="Going arrow" formula="" freezeLabel="false" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" terminal1="{95da3481-88c4-4a1e-9419-7033b26f198f}" terminal2="{975add6f-4ba5-44af-a4c0-e1f1c2024601}" terminalname1="A1" terminalname2="1" text_color="#000000" type="multi" uuid="{7ffb5063-f859-4267-b8e4-9b080f12f728}" vertical-alignment="AlignRight" vertirotatetext="270" x="0" y="0">
<sequentialNumbers/>
</conductor>
</conductors>
</diagram>
<diagram author="" auto_page_num="" cols="17" colsize="60" date="null" displayAt="bottom" displaycols="true" displayrows="true" filename="" folio="%id/%total" freezeNewConductor="false" freezeNewElement="false" height="660" indexrev="" locmach="" order="6" plant="" rows="8" rowsize="80" title="" uuid="{fd96ec1f-a6ba-41ee-b994-7e12283c896e}" version="0.200.1-dev">
<defaultconductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" formula="" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" text_color="#000000" type="multi" vertical-alignment="AlignRight" vertirotatetext="270"/>
<elements>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="" type="embed://import/10_electric/10_allpole/100_folio_referencing/01coming_arrow.elmt" uuid="{129e9d14-dcb0-4c61-9584-90ce7063dc52}" x="100" y="100" z="10">
<terminals>
<terminal id="0" orientation="1" x="9" y="0"/>
</terminals>
<inputs/>
<links_uuids>
<link_uuid uuid="{de35dcf2-26bd-4339-9443-3e8119722350}"/>
</links_uuids>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignRight" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="true" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{8676c577-8484-491c-8f43-f0acbce4515d}" x="-37.3281" y="-11.5">
<text>5-A6</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="P" type="embed://import/10_electric/10_allpole/380_signaling_operating/12_acoustic_signaling/sirene.elmt" uuid="{d84dbc3c-4969-4fe6-b229-0a5812adf734}" x="400" y="100" z="10">
<terminals>
<terminal id="1" orientation="0" x="0" y="-16"/>
<terminal id="2" orientation="2" x="0" y="16"/>
</terminals>
<inputs/>
<elementInformations>
<elementInformation name="label" show="1">LB</elementInformation>
</elementInformations>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="false" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{f80e029e-b0f5-4936-88a9-fb4252bac180}" x="35" y="-8.5">
<text>LB</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
<element freezeLabel="false" is_movable="1" orientation="0" prefix="P" type="embed://import/10_electric/10_allpole/380_signaling_operating/12_acoustic_signaling/sirene.elmt" uuid="{65e05437-b566-44a8-b747-708078dd6154}" x="400" y="300" z="10">
<terminals>
<terminal id="3" orientation="0" x="0" y="-16"/>
<terminal id="4" orientation="2" x="0" y="16"/>
</terminals>
<inputs/>
<elementInformations>
<elementInformation name="label" show="1">LD</elementInformation>
</elementInformations>
<dynamic_texts>
<dynamic_elmt_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="false" rotation="0" rotation_point_center="false" text_from="ElementInfo" text_width="-1" uuid="{86dcfc39-0598-4c94-927b-630ec4248727}" x="35" y="-8.5">
<text>LD</text>
<info_name>label</info_name>
</dynamic_elmt_text>
</dynamic_texts>
<texts_groups/>
</element>
</elements>
<conductors>
<conductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" element1="{129e9d14-dcb0-4c61-9584-90ce7063dc52}" element1_label="" element1_linked="" element1_name="Coming arrow" element2="{d84dbc3c-4969-4fe6-b229-0a5812adf734}" element2_label="LB" element2_name="Siren" formula="" freezeLabel="false" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" terminal1="{d7fd0bec-9f05-4651-a50b-29d7ffabeb41}" terminal2="{95da3481-88c4-4a1e-9419-7033b26f198f}" terminalname1="1" terminalname2="A1" text_color="#000000" type="multi" uuid="{16dfdcf6-595a-4644-aa37-2237920cdd4b}" vertical-alignment="AlignRight" vertirotatetext="270" x="0" y="0">
<sequentialNumbers/>
</conductor>
<conductor bicolor="false" bus="" cable="" color2="#000000" condsize="1" conductor_color="" conductor_section="" dash-size="1" displaytext="1" element1="{129e9d14-dcb0-4c61-9584-90ce7063dc52}" element1_label="" element1_linked="" element1_name="Coming arrow" element2="{65e05437-b566-44a8-b747-708078dd6154}" element2_label="LD" element2_name="Siren" formula="" freezeLabel="false" function="" horizontal-alignment="AlignBottom" horizrotatetext="0" num="_" numsize="7" onetextperfolio="1" tension_protocol="" terminal1="{d7fd0bec-9f05-4651-a50b-29d7ffabeb41}" terminal2="{95da3481-88c4-4a1e-9419-7033b26f198f}" terminalname1="1" terminalname2="A1" text_color="#000000" type="multi" uuid="{7f8b1240-07ba-441c-8141-405947f1af85}" vertical-alignment="AlignRight" vertirotatetext="270" x="0" y="0">
<sequentialNumbers/>
</conductor>
</conductors>
</diagram>
<collection>
<category name="import">
<category name="10_electric">
<names>
<name lang="ar">كهربائي</name>
<name lang="ca">Elèctric</name>
<name lang="cs">Elektrotechnika</name>
<name lang="da">Elektrisk</name>
<name lang="de">Elektrik</name>
<name lang="el">Ηλεκτρικά</name>
<name lang="en">Electric</name>
<name lang="es">Eléctrica</name>
<name lang="fi">Sähkö</name>
<name lang="fr">Electrique</name>
<name lang="hr">Električno</name>
<name lang="hu">Elektromos</name>
<name lang="it">Elettrica</name>
<name lang="ja">電気</name>
<name lang="ko">전기</name>
<name lang="mn">Цахилгаан</name>
<name lang="nb">Elektrisk</name>
<name lang="nl">Elektrotechniek</name>
<name lang="nl_BE">Elektrisch</name>
<name lang="pl">Elektrotechnika</name>
<name lang="pt">Elétrico</name>
<name lang="pt_BR">Elétrica</name>
<name lang="ro">Electric</name>
<name lang="ru">Электротехника</name>
<name lang="sk">Elektrické</name>
<name lang="sl">Elektrika</name>
<name lang="sr">Електрика</name>
<name lang="sv">El</name>
<name lang="tr">Elektrik</name>
<name lang="uk">Електрика</name>
<name lang="zh">10_电气</name>
<name lang="zn">电气工程</name>
</names>
<category name="10_allpole">
<names>
<name lang="ar">متعدد الأقطاب</name>
<name lang="ca">Multifilar</name>
<name lang="cs">Vícežilový</name>
<name lang="da">Flere ledere</name>
<name lang="de">Allpolig</name>
<name lang="el">Πολυγραμμικό</name>
<name lang="en">All-pole</name>
<name lang="es">Multifilar</name>
<name lang="fi">Yleisnapa</name>
<name lang="fr">Multifilaire</name>
<name lang="hr">Univerzalni</name>
<name lang="hu">Többvonalas szimbólumok</name>
<name lang="it">Multifilare</name>
<name lang="ja">複線</name>
<name lang="ko">다-극</name>
<name lang="mn">Бүх туйл</name>
<name lang="nb">Alle poler</name>
<name lang="nl">Veel polig</name>
<name lang="nl_BE">All-pole</name>
<name lang="pl">Schematy wieloliniowe</name>
<name lang="pt">Multipolar</name>
<name lang="pt_BR">Multifilar</name>
<name lang="ro">Bipolar</name>
<name lang="ru">Многополюсные</name>
<name lang="sk">Všepólové</name>
<name lang="sl">Vsi poli</name>
<name lang="sr">Свe-полни</name>
<name lang="sv">Allpolig</name>
<name lang="tr">Çok kutuplu</name>
<name lang="uk">Багатополюсні</name>
<name lang="zh">10_全极</name>
</names>
<category name="100_folio_referencing">
<names>
<name lang="ar">إحالات</name>
<name lang="ca">Referències als fulls</name>
<name lang="cs">Odkazování listů</name>
<name lang="da">Ark henvisninger</name>
<name lang="de">Folienverweise</name>
<name lang="el">Αναφορές σελίδας</name>
<name lang="en">Folio referencing</name>
<name lang="es">Referencias</name>
<name lang="fi">Lehtiviittaus</name>
<name lang="fr">Reports de folio</name>
<name lang="hr">Referenciranje folija</name>
<name lang="hu">Tervlap hivatkozások</name>
<name lang="it">Riferimenti</name>
<name lang="ja">フォリオ参照</name>
<name lang="ko">도면 간 참조</name>
<name lang="mn">Хуудасны холбоос</name>
<name lang="nb">Folio-referanse</name>
<name lang="nl">Referenties</name>
<name lang="nl_BE">Folioverwijzing</name>
<name lang="pl">Odsyłacze</name>
<name lang="pt">Renvoi de folio</name>
<name lang="pt_BR">Referências</name>
<name lang="ro">Renvoi de folio</name>
<name lang="ru">Точки разрыва</name>
<name lang="sk">Odkazy na listy</name>
<name lang="sl">Sklici na list</name>
<name lang="sr">Референцирање фолија</name>
<name lang="sv">Bladhänvisning</name>
<name lang="tr">Sayfa referansı</name>
<name lang="uk">Посилання на аркуші</name>
<name lang="zh">图页引用</name>
</names>
<element name="02going_arrow.elmt">
<definition height="20" hotspot_x="23" hotspot_y="10" link_type="next_report" type="element" version="0.80" width="30">
<uuid uuid="{5ec3a096-68e7-9b2c-d1b8-b960176e2512}"/>
<names>
<name lang="ar">الصفحة التالية</name>
<name lang="ca">Enllaç sortint</name>
<name lang="cs">Další list</name>
<name lang="da">Går pil</name>
<name lang="de">Nächste Folie</name>
<name lang="el">Επόμενη σελίδα</name>
<name lang="en">Going arrow</name>
<name lang="es">Folio siguiente</name>
<name lang="fi">Lähtevä nuoli</name>
<name lang="fr">Folio suivant</name>
<name lang="hr">Odlazna strelica</name>
<name lang="hu">Elmenő hivatkozás</name>
<name lang="it">Foglio successivo</name>
<name lang="ja">出矢印</name>
<name lang="ko">나가는 화살표</name>
<name lang="mn">Явж буй сум</name>
<name lang="nb">Går pil</name>
<name lang="nl">Referentie volgend</name>
<name lang="nl_BE">Gaande pijl</name>
<name lang="pl">Wyjście adresowe</name>
<name lang="pt">Seta de saída</name>
<name lang="pt_BR">Seta de saída (vai)</name>
<name lang="ro">Săgeată de ieșire</name>
<name lang="ru">Следующая страница</name>
<name lang="sk">Odchádzajúca šípka</name>
<name lang="sl">Odhodna puščica</name>
<name lang="sr">Одлазна стрелица</name>
<name lang="sv">Utgående pil</name>
<name lang="tr">Giden ok</name>
<name lang="uk">Стрілка виходу</name>
<name lang="zh">02引出箭头</name>
</names>
<informations>Author: The QElectroTech team
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
<description>
<polygon antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-9" x2="-9" x3="2" y1="-4" y2="4" y3="0"/>
<line antialias="false" end1="none" end2="none" length1="1.5" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-9" x2="-12" y1="0" y2="0"/>
<dynamic_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" rotation="0" text_from="ElementInfo" text_width="-1" uuid="{93888a84-3ffd-438d-acef-5396acba0750}" x="6" y="-11.5" z="3">
<text/>
<info_name>label</info_name>
</dynamic_text>
<terminal name="1" orientation="w" type="Generic" uuid="{975add6f-4ba5-44af-a4c0-e1f1c2024601}" x="-13" y="0"/>
</description>
</definition>
</element>
<element name="01coming_arrow.elmt">
<definition height="20" hotspot_x="6" hotspot_y="10" link_type="previous_report" type="element" version="0.100.0" width="30">
<uuid uuid="{52169153-2558-21ab-63ec-96ce53bfc7c1}"/>
<names>
<name lang="ar">الصفحة السابقة</name>
<name lang="ca">Enllaç entrant</name>
<name lang="cs">Předchozí list</name>
<name lang="da">Kommer pil</name>
<name lang="de">Vorherige Folie</name>
<name lang="el">Προηγούμενη σελίδα</name>
<name lang="en">Coming arrow</name>
<name lang="es">folio anterior</name>
<name lang="fi">Saapuva nuoli</name>
<name lang="fr">Folio précédent</name>
<name lang="hr">Dolazna strelica</name>
<name lang="hu">Beérkező hivatkozás</name>
<name lang="it">Foglio precedente</name>
<name lang="ja">入り矢印</name>
<name lang="ko">들어오는 화살표</name>
<name lang="mn">Ирж буй сум</name>
<name lang="nb">Kommer pil</name>
<name lang="nl">Referentie Vorig</name>
<name lang="nl_BE">Komende pijl</name>
<name lang="pl">Wejście adresowe</name>
<name lang="pt">Seta de entrada</name>
<name lang="pt_BR">Seta de entrada (vem)</name>
<name lang="ro">Săgeată de intrare</name>
<name lang="ru">Предыдущая страница</name>
<name lang="sk">Prichádzajúca šípka</name>
<name lang="sl">Prihajajoča puščica</name>
<name lang="sr">Долазна стрелица</name>
<name lang="sv">Inkommande pil</name>
<name lang="tr">Gelen ok</name>
<name lang="uk">Стрілка входу</name>
<name lang="zh">01引入箭头</name>
</names>
<informations>Author: The QElectroTech team
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
<description>
<polygon antialias="true" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="-1" x2="-1" x3="9" y1="-4" y2="4" y3="0"/>
<line antialias="false" end1="none" end2="none" length1="1.5" length2="1.5" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="9" x2="12" y1="0" y2="0"/>
<dynamic_text Halignment="AlignRight" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" rotation="0" text_from="ElementInfo" text_width="-1" uuid="{8ec41ce2-36d6-4fe3-b299-c8a48cb2182c}" x="-12" y="-11.5" z="3">
<text/>
<info_name>label</info_name>
</dynamic_text>
<terminal name="1" orientation="e" type="Generic" uuid="{d7fd0bec-9f05-4651-a50b-29d7ffabeb41}" x="13" y="0"/>
</description>
</definition>
</element>
</category>
<category name="380_signaling_operating">
<names>
<name lang="ar">الإشارات والتشغيل</name>
<name lang="ca">Senyalització i commandament</name>
<name lang="cs">Značení a příkazy</name>
<name lang="da">Signalering og betjening</name>
<name lang="de">Melde- und Bedieneinrichtungen</name>
<name lang="el">Σήμανση και χειρισμός</name>
<name lang="en">Signaling and operating</name>
<name lang="es">Señalización y comando</name>
<name lang="fi">Merkinnät ja käyttö</name>
<name lang="fr">Signalétique et commande</name>
<name lang="hr">Signalizacija i upravljanje</name>
<name lang="hu">Jelzés és kezelés</name>
<name lang="it">Segnalazione e comando</name>
<name lang="ja">信号と操作</name>
<name lang="ko">신호 및 작동</name>
<name lang="mn">Дохиолол ба удирдлага</name>
<name lang="nb">Signalering og betjening</name>
<name lang="nl">Signalering en bediening</name>
<name lang="nl_BE">Signalering en bediening</name>
<name lang="pl">Obwody sterownicze</name>
<name lang="pt">Sinalização e comando</name>
<name lang="pt_BR">Sinalização e Comando</name>
<name lang="ro">Semnalizare și operare</name>
<name lang="ru">Сигнализация и управление</name>
<name lang="sk">Signalizácia a ovládanie</name>
<name lang="sl">Signalizacija in upravljanje</name>
<name lang="sr">Сигнализација и управљање</name>
<name lang="sv">Signalering och manövrering</name>
<name lang="tr">Sinyalizasyon ve kumanda</name>
<name lang="uk">Сигналізація та керування</name>
<name lang="zh">信号与操作</name>
</names>
<category name="12_acoustic_signaling">
<names>
<name lang="ar">أجهزة إشارة صوتية</name>
<name lang="ca">Dispositius de senyalització acústica</name>
<name lang="cs">Akustická signalizace</name>
<name lang="da">Akustisk signaludstyr</name>
<name lang="de">Akustische Meldeeinrichtungen</name>
<name lang="el">Συσκευές ηχητικής σήμανσης</name>
<name lang="en">Acoustic signaling devices</name>
<name lang="es">Dispositivos de señalamiento acustico</name>
<name lang="fi">Akustiset merkinantolaitteet</name>
<name lang="fr">Signalements sonores</name>
<name lang="hr">Akustični signalni uređaji</name>
<name lang="hu">Hangjelző eszközök</name>
<name lang="it">Segnalazione acustica</name>
<name lang="ja">音響信号装置</name>
<name lang="ko">음향 신호 장치</name>
<name lang="mn">Дуут дохиоллын төхөөрөмж</name>
<name lang="nb">Akustiske signalenheter</name>
<name lang="nl">Akoestische signaaltoestellen</name>
<name lang="nl_BE">Akoestische signaaltoestellen</name>
<name lang="pl">Sygnalizatory dźwiękowe</name>
<name lang="pt">Dispositivos de sinalização acústica</name>
<name lang="pt_BR">Dispositivos de sinalizacao acustica</name>
<name lang="ro">Dispozitive de semnalizare acustică</name>
<name lang="ru">Звуковая сигнализация</name>
<name lang="sk">Akustické signalizačné zariadenia</name>
<name lang="sl">Zvočne signalne naprave</name>
<name lang="sr">Звучни сигнални уређаји</name>
<name lang="sv">Akustiska signaldon</name>
<name lang="tr">Akustik sinyalizasyon cihazları</name>
<name lang="uk">Акустичні сигнальні пристрої</name>
<name lang="zh">12_声音信号</name>
</names>
<element name="sirene.elmt">
<definition height="60" hotspot_x="7" hotspot_y="30" link_type="simple" type="element" version="0.90" width="40">
<uuid uuid="{5ce5ee2e-7c23-f4bb-1244-96498afc5aca}"/>
<names>
<name lang="ar">صفّارة إنذار</name>
<name lang="ca">Sirena</name>
<name lang="cs">Siréna</name>
<name lang="da">Sirene</name>
<name lang="de">Sirene</name>
<name lang="el">Σειρήνα</name>
<name lang="en">Siren</name>
<name lang="es">Sirena</name>
<name lang="fi">Sireeni</name>
<name lang="fr">Sirène</name>
<name lang="hr">Sirena</name>
<name lang="hu">Sziréna</name>
<name lang="it">Sirena</name>
<name lang="ja">サイレン</name>
<name lang="ko">사이렌</name>
<name lang="mn">Сирена</name>
<name lang="nb">Sirene</name>
<name lang="nl">Sirene</name>
<name lang="nl_BE">Sirene</name>
<name lang="pl">Syrena</name>
<name lang="pt">Sirene</name>
<name lang="pt_BR">Sirene</name>
<name lang="ro">Sirenă</name>
<name lang="ru">Сирена</name>
<name lang="sk">Siréna</name>
<name lang="sl">Sirena</name>
<name lang="sr">Сирена</name>
<name lang="sv">Siren</name>
<name lang="tr">Siren</name>
<name lang="uk">Сирена</name>
<name lang="zh">警笛</name>
</names>
<informations>Author: The QElectroTech team
License: see http://qelectrotech.org/wiki/doc/elements_license</informations>
<description>
<dynamic_text Halignment="AlignLeft" Valignment="AlignTop" font="Liberation Sans,9,-1,5,50,0,0,0,0,0,Regular" frame="false" keep_visual_rotation="false" rotation="0" text_from="ElementInfo" text_width="-1" uuid="{4202f0f5-05ab-41af-9612-da9c24b976cc}" x="35" y="-8.5" z="1">
<text/>
<info_name>label</info_name>
</dynamic_text>
<polygon antialias="false" style="line-style:normal;line-weight:normal;filling:white;color:black" x1="20" x2="20" x3="30" y1="-10" y2="10" y3="0"/>
<polygon antialias="false" closed="false" style="line-style:normal;line-weight:normal;filling:none;color:black" x1="0" x2="0" x3="20" x4="20" x5="0" x6="0" y1="-20" y2="-5" y3="-5" y4="5" y5="5" y6="20"/>
<terminal name="A2" orientation="s" type="Generic" uuid="{112f4a5d-3a40-48f9-8746-dcd5c64bffb9}" x="0" y="20"/>
<terminal name="A1" orientation="n" type="Generic" uuid="{95da3481-88c4-4a1e-9419-7033b26f198f}" x="0" y="-20"/>
</description>
</definition>
</element>
</category>
</category>
</category>
</category>
</category>
</collection>
</project>
+112
View File
@@ -0,0 +1,112 @@
// SPDX-License-Identifier: GPL-2.0-or-later
#include <QtTest>
#include <QDir>
#include <QFile>
#include <QProcess>
#include <QProcessEnvironment>
#include <QTemporaryDir>
// The wiring list (--export-cables, and the wiring plan CSV export of the
// GUI) joins the two halves of a wire drawn to a folio report. The fixture
// has three pairs of folios, each joined by a linked going/coming report:
// P: one wire on each side -> one row, both folios
// E: two wires on the first side, one -> three rows, none dropped
// L: one wire, two on the second side -> three rows
// With several wires on a side the diagram does not say which terminal is
// wired to which, so those wires are not joined. The Page column is the
// folio number as the folio shows it, not its "%id/%total" template, and
// rows come in folio order.
class tst_wiringlistexport : public QObject
{
Q_OBJECT
QTemporaryDir m_dir;
int m_run = 0;
// The rows of the wiring list, header left out. Sets @p ok to whether
// the export ran, so a project with no wires is not mistaken for a
// failed run.
QStringList exportCables(const QString &project, bool *ok)
{
*ok = false;
const QString home = m_dir.filePath(QStringLiteral("home%1").arg(m_run));
const QString tmp = m_dir.filePath(QStringLiteral("tmp%1").arg(m_run));
const QString out = m_dir.filePath(QStringLiteral("out%1.csv").arg(m_run++));
QDir().mkpath(home);
QDir().mkpath(tmp);
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
env.insert(QStringLiteral("QT_QPA_PLATFORM"), QStringLiteral("offscreen"));
env.insert(QStringLiteral("HOME"), home);
env.insert(QStringLiteral("XDG_CONFIG_HOME"), home + QStringLiteral("/.config"));
env.insert(QStringLiteral("XDG_DATA_HOME"), home + QStringLiteral("/.local/share"));
env.insert(QStringLiteral("TMPDIR"), tmp);
QProcess proc;
proc.setProcessEnvironment(env);
proc.start(QStringLiteral(QET_TEST_BINARY_PATH),
{QStringLiteral("--export-cables"), project, out});
if (!proc.waitForFinished(60000) || proc.exitCode() != 0)
return {};
QFile file(out);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return {};
*ok = true;
QStringList rows = QString::fromUtf8(file.readAll()).split(QLatin1Char('\n'),
Qt::SkipEmptyParts);
if (!rows.isEmpty())
rows.removeFirst(); // header, translated
return rows;
}
private slots:
void initTestCase()
{
QVERIFY(m_dir.isValid());
QVERIFY(QFile::exists(QStringLiteral(QET_TEST_BINARY_PATH)));
}
void reportPairs()
{
const QString fixture = QFINDTESTDATA("fixtures/wiring_list_arrows.qet");
QVERIFY2(!fixture.isEmpty(), "fixture project not found");
const QStringList expected {
QStringLiteral("1/6, 2/6;PA;A1;PB;A1;;;;"),
QStringLiteral("3/6;EA;A1;;1;;;;"),
QStringLiteral("3/6;EA2;A1;;1;;;;"),
QStringLiteral("4/6;EB;A1;;1;;;;"),
QStringLiteral("5/6;LA;A1;;1;;;;"),
QStringLiteral("6/6;LB;A1;;1;;;;"),
QStringLiteral("6/6;LD;A1;;1;;;;"),
};
bool ok;
QCOMPARE(exportCables(fixture, &ok), expected);
QVERIFY(ok);
}
void pageIsTheFolioNumber_data()
{
QTest::addColumn<QString>("project");
const QDir examples(QStringLiteral(QET_EXAMPLES_DIR));
for (const QString &f : examples.entryList({QStringLiteral("*.qet")}, QDir::Files, QDir::Name))
QTest::newRow(f.toUtf8().constData()) << examples.filePath(f);
}
void pageIsTheFolioNumber()
{
QFETCH(QString, project);
bool ok;
const QStringList rows = exportCables(project, &ok);
QVERIFY2(ok, "--export-cables failed");
for (const QString &row : rows) {
const QString page = row.section(QLatin1Char(';'), 0, 0);
QVERIFY2(!page.contains(QLatin1Char('%')), qPrintable(row));
}
}
};
QTEST_APPLESS_MAIN(tst_wiringlistexport)
#include "tst_wiringlistexport.moc"