summaryrefslogtreecommitdiffstats
path: root/Project/FileHanding.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Project/FileHanding.cpp')
-rw-r--r--Project/FileHanding.cpp1245
1 files changed, 74 insertions, 1171 deletions
diff --git a/Project/FileHanding.cpp b/Project/FileHanding.cpp
index 1393be7..7262c57 100644
--- a/Project/FileHanding.cpp
+++ b/Project/FileHanding.cpp
@@ -156,326 +156,48 @@ void FileHanding::SaveProject(wxFileName path)
//{ Inductor
auto inductorsNode = XMLParser::AppendNode(doc, elementsNode, "InductorList");
auto inductorList = allElements.GetInductorList();
- for(int i = 0; i < (int)inductorList.size(); i++) {
- Inductor* inductor = inductorList[i];
- auto inductorNode = XMLParser::AppendNode(doc, inductorsNode, "Inductor");
- XMLParser::SetNodeAttribute(doc, inductorNode, "ID", i);
- auto cadProp = XMLParser::AppendNode(doc, inductorNode, "CADProperties");
- auto position = XMLParser::AppendNode(doc, cadProp, "Position");
- auto posX = XMLParser::AppendNode(doc, position, "X");
- XMLParser::SetNodeValue(doc, posX, inductor->GetPosition().m_x);
- auto posY = XMLParser::AppendNode(doc, position, "Y");
- XMLParser::SetNodeValue(doc, posY, inductor->GetPosition().m_y);
- auto size = XMLParser::AppendNode(doc, cadProp, "Size");
- auto width = XMLParser::AppendNode(doc, size, "Width");
- XMLParser::SetNodeValue(doc, width, inductor->GetWidth());
- auto height = XMLParser::AppendNode(doc, size, "Height");
- XMLParser::SetNodeValue(doc, height, inductor->GetHeight());
- auto angle = XMLParser::AppendNode(doc, cadProp, "Angle");
- XMLParser::SetNodeValue(doc, angle, inductor->GetAngle());
- auto nodePos = XMLParser::AppendNode(doc, cadProp, "NodePosition");
- auto nodePosX = XMLParser::AppendNode(doc, nodePos, "X");
- XMLParser::SetNodeValue(doc, nodePosX, inductor->GetPointList()[0].m_x);
- auto nodePosY = XMLParser::AppendNode(doc, nodePos, "Y");
- XMLParser::SetNodeValue(doc, nodePosY, inductor->GetPointList()[0].m_y);
- auto parentID = XMLParser::AppendNode(doc, cadProp, "ParentID");
- Bus* parent = static_cast<Bus*>(inductor->GetParentList()[0]);
- if(parent) XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number);
-
- InductorElectricalData data = inductor->GetElectricalData();
- auto electricalProp = XMLParser::AppendNode(doc, inductorNode, "ElectricalProperties");
- auto isOnline = XMLParser::AppendNode(doc, electricalProp, "IsOnline");
- XMLParser::SetNodeValue(doc, isOnline, inductor->IsOnline());
- auto name = XMLParser::AppendNode(doc, electricalProp, "Name");
- XMLParser::SetNodeValue(doc, name, data.name);
- auto reactivePower = XMLParser::AppendNode(doc, electricalProp, "ReactivePower");
- XMLParser::SetNodeValue(doc, reactivePower, data.reactivePower);
- XMLParser::SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit);
-
- auto switchingList = XMLParser::AppendNode(doc, electricalProp, "SwitchingList");
- SwitchingData swData = inductor->GetSwitchingData();
- for(int j = 0; j < (int)swData.swType.size(); j++) {
- auto switching = XMLParser::AppendNode(doc, switchingList, "Switching");
- XMLParser::SetNodeAttribute(doc, switching, "ID", j);
- auto swType = XMLParser::AppendNode(doc, switching, "Type");
- XMLParser::SetNodeValue(doc, swType, swData.swType[j]);
- auto swTime = XMLParser::AppendNode(doc, switching, "Time");
- XMLParser::SetNodeValue(doc, swTime, swData.swTime[j]);
- }
- } //}
+ elementID = 0;
+ for(auto it = inductorList.begin(), itEnd = inductorList.end(); it != itEnd; ++it) {
+ (*it)->SetID(elementID);
+ (*it)->SaveElement(doc, inductorsNode);
+ elementID++;
+ }
+ //}
//{ Line
auto linesNode = XMLParser::AppendNode(doc, elementsNode, "LineList");
auto lineList = allElements.GetLineList();
- for(int i = 0; i < (int)lineList.size(); i++) {
- Line* line = lineList[i];
- auto lineNode = XMLParser::AppendNode(doc, linesNode, "Line");
- XMLParser::SetNodeAttribute(doc, lineNode, "ID", i);
- auto cadProp = XMLParser::AppendNode(doc, lineNode, "CADProperties");
- auto nodeList = XMLParser::AppendNode(doc, cadProp, "NodeList");
- auto ptList = line->GetPointList();
- int nodeID = 0;
- for(int j = 0; j < (int)ptList.size(); j++) {
- if((j != 1) && (j != (int)ptList.size() - 2)) {
- auto nodePos = XMLParser::AppendNode(doc, nodeList, "Node");
- XMLParser::SetNodeAttribute(doc, nodePos, "ID", nodeID);
- auto nodePosX = XMLParser::AppendNode(doc, nodePos, "X");
- XMLParser::SetNodeValue(doc, nodePosX, ptList[j].m_x);
- auto nodePosY = XMLParser::AppendNode(doc, nodePos, "Y");
- XMLParser::SetNodeValue(doc, nodePosY, ptList[j].m_y);
- nodeID++;
- }
- }
-
- auto parentIDList = XMLParser::AppendNode(doc, cadProp, "ParentIDList");
- for(int j = 0; j < (int)line->GetParentList().size(); j++) {
- Bus* parent = static_cast<Bus*>(line->GetParentList()[j]);
- if(parent) {
- auto parentID = XMLParser::AppendNode(doc, parentIDList, "ParentID");
- XMLParser::SetNodeAttribute(doc, parentID, "ID", j);
- XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number);
- }
- }
-
- LineElectricalData data = line->GetElectricalData();
- auto electricalProp = XMLParser::AppendNode(doc, lineNode, "ElectricalProperties");
- auto isOnline = XMLParser::AppendNode(doc, electricalProp, "IsOnline");
- XMLParser::SetNodeValue(doc, isOnline, line->IsOnline());
- auto name = XMLParser::AppendNode(doc, electricalProp, "Name");
- XMLParser::SetNodeValue(doc, name, data.name);
- auto nominalVoltage = XMLParser::AppendNode(doc, electricalProp, "NominalVoltage");
- XMLParser::SetNodeValue(doc, nominalVoltage, data.nominalVoltage);
- XMLParser::SetNodeAttribute(doc, nominalVoltage, "UnitID", data.nominalVoltageUnit);
- auto nominalPower = XMLParser::AppendNode(doc, electricalProp, "NominalPower");
- XMLParser::SetNodeValue(doc, nominalPower, data.nominalPower);
- XMLParser::SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit);
- auto resistance = XMLParser::AppendNode(doc, electricalProp, "Resistance");
- XMLParser::SetNodeValue(doc, resistance, data.resistance);
- XMLParser::SetNodeAttribute(doc, resistance, "UnitID", data.resistanceUnit);
- auto indReactance = XMLParser::AppendNode(doc, electricalProp, "IndReactance");
- XMLParser::SetNodeValue(doc, indReactance, data.indReactance);
- XMLParser::SetNodeAttribute(doc, indReactance, "UnitID", data.indReactanceUnit);
- auto capSusceptance = XMLParser::AppendNode(doc, electricalProp, "CapSusceptance");
- XMLParser::SetNodeValue(doc, capSusceptance, data.capSusceptance);
- XMLParser::SetNodeAttribute(doc, capSusceptance, "UnitID", data.capSusceptanceUnit);
- auto lineSize = XMLParser::AppendNode(doc, electricalProp, "LineSize");
- XMLParser::SetNodeValue(doc, lineSize, data.lineSize);
- auto useLinePower = XMLParser::AppendNode(doc, electricalProp, "UseLinePower");
- XMLParser::SetNodeValue(doc, useLinePower, data.useLinePower);
-
- auto fault = XMLParser::AppendNode(doc, electricalProp, "Fault");
- auto zeroResistance = XMLParser::AppendNode(doc, fault, "ZeroResistance");
- XMLParser::SetNodeValue(doc, zeroResistance, data.zeroResistance);
- auto zeroIndReactance = XMLParser::AppendNode(doc, fault, "ZeroIndReactance");
- XMLParser::SetNodeValue(doc, zeroIndReactance, data.zeroIndReactance);
- auto zeroCapSusceptance = XMLParser::AppendNode(doc, fault, "ZeroCapSusceptance");
- XMLParser::SetNodeValue(doc, zeroCapSusceptance, data.zeroCapSusceptance);
-
- auto switchingList = XMLParser::AppendNode(doc, electricalProp, "SwitchingList");
- SwitchingData swData = line->GetSwitchingData();
- for(int j = 0; j < (int)swData.swType.size(); j++) {
- auto switching = XMLParser::AppendNode(doc, switchingList, "Switching");
- XMLParser::SetNodeAttribute(doc, switching, "ID", j);
- auto swType = XMLParser::AppendNode(doc, switching, "Type");
- XMLParser::SetNodeValue(doc, swType, swData.swType[j]);
- auto swTime = XMLParser::AppendNode(doc, switching, "Time");
- XMLParser::SetNodeValue(doc, swTime, swData.swTime[j]);
- }
- } //}
+ elementID = 0;
+ for(auto it = lineList.begin(), itEnd = lineList.end(); it != itEnd; ++it) {
+ (*it)->SetID(elementID);
+ (*it)->SaveElement(doc, linesNode);
+ elementID++;
+ }
+ //}
//{ Load
auto loadsNode = XMLParser::AppendNode(doc, elementsNode, "LoadList");
auto loadList = allElements.GetLoadList();
- for(int i = 0; i < (int)loadList.size(); i++) {
- Load* load = loadList[i];
- auto loadNode = XMLParser::AppendNode(doc, loadsNode, "Load");
- XMLParser::SetNodeAttribute(doc, loadNode, "ID", i);
- auto cadProp = XMLParser::AppendNode(doc, loadNode, "CADProperties");
- auto position = XMLParser::AppendNode(doc, cadProp, "Position");
- auto posX = XMLParser::AppendNode(doc, position, "X");
- XMLParser::SetNodeValue(doc, posX, load->GetPosition().m_x);
- auto posY = XMLParser::AppendNode(doc, position, "Y");
- XMLParser::SetNodeValue(doc, posY, load->GetPosition().m_y);
- auto size = XMLParser::AppendNode(doc, cadProp, "Size");
- auto width = XMLParser::AppendNode(doc, size, "Width");
- XMLParser::SetNodeValue(doc, width, load->GetWidth());
- auto height = XMLParser::AppendNode(doc, size, "Height");
- XMLParser::SetNodeValue(doc, height, load->GetHeight());
- auto angle = XMLParser::AppendNode(doc, cadProp, "Angle");
- XMLParser::SetNodeValue(doc, angle, load->GetAngle());
- auto nodePos = XMLParser::AppendNode(doc, cadProp, "NodePosition");
- auto nodePosX = XMLParser::AppendNode(doc, nodePos, "X");
- XMLParser::SetNodeValue(doc, nodePosX, load->GetPointList()[0].m_x);
- auto nodePosY = XMLParser::AppendNode(doc, nodePos, "Y");
- XMLParser::SetNodeValue(doc, nodePosY, load->GetPointList()[0].m_y);
- auto parentID = XMLParser::AppendNode(doc, cadProp, "ParentID");
- Bus* parent = static_cast<Bus*>(load->GetParentList()[0]);
- if(parent) XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number);
-
- LoadElectricalData data = load->GetElectricalData();
- auto electricalProp = XMLParser::AppendNode(doc, loadNode, "ElectricalProperties");
- auto isOnline = XMLParser::AppendNode(doc, electricalProp, "IsOnline");
- XMLParser::SetNodeValue(doc, isOnline, load->IsOnline());
- auto name = XMLParser::AppendNode(doc, electricalProp, "Name");
- XMLParser::SetNodeValue(doc, name, data.name);
- auto activePower = XMLParser::AppendNode(doc, electricalProp, "ActivePower");
- XMLParser::SetNodeValue(doc, activePower, data.activePower);
- XMLParser::SetNodeAttribute(doc, activePower, "UnitID", data.activePowerUnit);
- auto reactivePower = XMLParser::AppendNode(doc, electricalProp, "ReactivePower");
- XMLParser::SetNodeValue(doc, reactivePower, data.reactivePower);
- XMLParser::SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit);
- auto loadType = XMLParser::AppendNode(doc, electricalProp, "LoadType");
- XMLParser::SetNodeValue(doc, loadType, data.loadType);
-
- auto stability = XMLParser::AppendNode(doc, electricalProp, "Stability");
- auto plotLoad = XMLParser::AppendNode(doc, stability, "PlotLoad");
- XMLParser::SetNodeValue(doc, plotLoad, data.plotLoad);
- auto useCompLoad = XMLParser::AppendNode(doc, stability, "UseCompositeLoad");
- XMLParser::SetNodeValue(doc, useCompLoad, data.useCompLoad);
- auto activePowerCompl = XMLParser::AppendNode(doc, stability, "ActivePowerComposition");
- auto pzl = XMLParser::AppendNode(doc, activePowerCompl, "ConstantImpedance");
- XMLParser::SetNodeValue(doc, pzl, data.constImpedanceActive);
- auto pil = XMLParser::AppendNode(doc, activePowerCompl, "ConstantCurrent");
- XMLParser::SetNodeValue(doc, pil, data.constCurrentActive);
- auto ppl = XMLParser::AppendNode(doc, activePowerCompl, "ConstantPower");
- XMLParser::SetNodeValue(doc, ppl, data.constPowerActive);
- auto reactivePowerCompl = XMLParser::AppendNode(doc, stability, "ReactivePowerComposition");
- auto qzl = XMLParser::AppendNode(doc, reactivePowerCompl, "ConstantImpedance");
- XMLParser::SetNodeValue(doc, qzl, data.constImpedanceReactive);
- auto qil = XMLParser::AppendNode(doc, reactivePowerCompl, "ConstantCurrent");
- XMLParser::SetNodeValue(doc, qil, data.constCurrentReactive);
- auto qpl = XMLParser::AppendNode(doc, reactivePowerCompl, "ConstantPower");
- XMLParser::SetNodeValue(doc, qpl, data.constPowerReactive);
-
- auto switchingList = XMLParser::AppendNode(doc, electricalProp, "SwitchingList");
- SwitchingData swData = load->GetSwitchingData();
- for(int j = 0; j < (int)swData.swType.size(); j++) {
- auto switching = XMLParser::AppendNode(doc, switchingList, "Switching");
- XMLParser::SetNodeAttribute(doc, switching, "ID", j);
- auto swType = XMLParser::AppendNode(doc, switching, "Type");
- XMLParser::SetNodeValue(doc, swType, swData.swType[j]);
- auto swTime = XMLParser::AppendNode(doc, switching, "Time");
- XMLParser::SetNodeValue(doc, swTime, swData.swTime[j]);
- }
- } //}
+ elementID = 0;
+ for(auto it = loadList.begin(), itEnd = loadList.end(); it != itEnd; ++it) {
+ (*it)->SetID(elementID);
+ (*it)->SaveElement(doc, loadsNode);
+ elementID++;
+ }
+ //}
//{ SyncGenerator
auto syncGeneratorsNode = XMLParser::AppendNode(doc, elementsNode, "SyncGeneratorList");
auto syncGeneratorList = allElements.GetSyncGeneratorList();
- for(int i = 0; i < (int)syncGeneratorList.size(); i++) {
- SyncGenerator* syncGenerator = syncGeneratorList[i];
- auto syncGeneratorNode = XMLParser::AppendNode(doc, syncGeneratorsNode, "SyncGenerator");
- XMLParser::SetNodeAttribute(doc, syncGeneratorNode, "ID", i);
- auto cadProp = XMLParser::AppendNode(doc, syncGeneratorNode, "CADProperties");
- auto position = XMLParser::AppendNode(doc, cadProp, "Position");
- auto posX = XMLParser::AppendNode(doc, position, "X");
- XMLParser::SetNodeValue(doc, posX, syncGenerator->GetPosition().m_x);
- auto posY = XMLParser::AppendNode(doc, position, "Y");
- XMLParser::SetNodeValue(doc, posY, syncGenerator->GetPosition().m_y);
- auto size = XMLParser::AppendNode(doc, cadProp, "Size");
- auto width = XMLParser::AppendNode(doc, size, "Width");
- XMLParser::SetNodeValue(doc, width, syncGenerator->GetWidth());
- auto height = XMLParser::AppendNode(doc, size, "Height");
- XMLParser::SetNodeValue(doc, height, syncGenerator->GetHeight());
- auto angle = XMLParser::AppendNode(doc, cadProp, "Angle");
- XMLParser::SetNodeValue(doc, angle, syncGenerator->GetAngle());
- auto nodePos = XMLParser::AppendNode(doc, cadProp, "NodePosition");
- auto nodePosX = XMLParser::AppendNode(doc, nodePos, "X");
- XMLParser::SetNodeValue(doc, nodePosX, syncGenerator->GetPointList()[0].m_x);
- auto nodePosY = XMLParser::AppendNode(doc, nodePos, "Y");
- XMLParser::SetNodeValue(doc, nodePosY, syncGenerator->GetPointList()[0].m_y);
- auto parentID = XMLParser::AppendNode(doc, cadProp, "ParentID");
- Bus* parent = static_cast<Bus*>(syncGenerator->GetParentList()[0]);
- if(parent) XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number);
-
- SyncGeneratorElectricalData data = syncGenerator->GetElectricalData();
- auto electricalProp = XMLParser::AppendNode(doc, syncGeneratorNode, "ElectricalProperties");
- auto isOnline = XMLParser::AppendNode(doc, electricalProp, "IsOnline");
- XMLParser::SetNodeValue(doc, isOnline, syncGenerator->IsOnline());
- auto name = XMLParser::AppendNode(doc, electricalProp, "Name");
- XMLParser::SetNodeValue(doc, name, data.name);
- auto nominalPower = XMLParser::AppendNode(doc, electricalProp, "NominalPower");
- XMLParser::SetNodeValue(doc, nominalPower, data.nominalPower);
- XMLParser::SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit);
- auto nominalVoltage = XMLParser::AppendNode(doc, electricalProp, "NominalVoltage");
- XMLParser::SetNodeValue(doc, nominalVoltage, data.nominalVoltage);
- XMLParser::SetNodeAttribute(doc, nominalVoltage, "UnitID", data.nominalVoltageUnit);
- auto activePower = XMLParser::AppendNode(doc, electricalProp, "ActivePower");
- XMLParser::SetNodeValue(doc, activePower, data.activePower);
- XMLParser::SetNodeAttribute(doc, activePower, "UnitID", data.activePowerUnit);
- auto reactivePower = XMLParser::AppendNode(doc, electricalProp, "ReactivePower");
- XMLParser::SetNodeValue(doc, reactivePower, data.reactivePower);
- XMLParser::SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit);
- auto haveMaxReactive = XMLParser::AppendNode(doc, electricalProp, "HaveMaxReactive");
- XMLParser::SetNodeValue(doc, haveMaxReactive, data.haveMaxReactive);
- auto maxReactive = XMLParser::AppendNode(doc, electricalProp, "MaxReactive");
- XMLParser::SetNodeValue(doc, maxReactive, data.maxReactive);
- XMLParser::SetNodeAttribute(doc, maxReactive, "UnitID", data.maxReactiveUnit);
- auto haveMinReactive = XMLParser::AppendNode(doc, electricalProp, "HaveMinReactive");
- XMLParser::SetNodeValue(doc, haveMinReactive, data.haveMinReactive);
- auto minReactive = XMLParser::AppendNode(doc, electricalProp, "MinReactive");
- XMLParser::SetNodeValue(doc, minReactive, data.minReactive);
- XMLParser::SetNodeAttribute(doc, minReactive, "UnitID", data.minReactiveUnit);
- auto useMachineBase = XMLParser::AppendNode(doc, electricalProp, "UseMachineBase");
- XMLParser::SetNodeValue(doc, useMachineBase, data.useMachineBase);
-
- auto fault = XMLParser::AppendNode(doc, electricalProp, "Fault");
- auto positiveResistance = XMLParser::AppendNode(doc, fault, "PositiveResistance");
- XMLParser::SetNodeValue(doc, positiveResistance, data.positiveResistance);
- auto positiveReactance = XMLParser::AppendNode(doc, fault, "PositiveReactance");
- XMLParser::SetNodeValue(doc, positiveReactance, data.positiveReactance);
- auto negativeResistance = XMLParser::AppendNode(doc, fault, "NegativeResistance");
- XMLParser::SetNodeValue(doc, negativeResistance, data.negativeResistance);
- auto negativeReactance = XMLParser::AppendNode(doc, fault, "NegativeReactance");
- XMLParser::SetNodeValue(doc, negativeReactance, data.negativeReactance);
- auto zeroResistance = XMLParser::AppendNode(doc, fault, "ZeroResistance");
- XMLParser::SetNodeValue(doc, zeroResistance, data.zeroResistance);
- auto zeroReactance = XMLParser::AppendNode(doc, fault, "ZeroReactance");
- XMLParser::SetNodeValue(doc, zeroReactance, data.zeroReactance);
- auto groundResistance = XMLParser::AppendNode(doc, fault, "GroundResistance");
- XMLParser::SetNodeValue(doc, groundResistance, data.groundResistance);
- auto groundReactance = XMLParser::AppendNode(doc, fault, "GroundReactance");
- XMLParser::SetNodeValue(doc, groundReactance, data.groundReactance);
- auto groundNeutral = XMLParser::AppendNode(doc, fault, "GroundNeutral");
- XMLParser::SetNodeValue(doc, groundNeutral, data.groundNeutral);
-
- auto stability = XMLParser::AppendNode(doc, electricalProp, "Stability");
- auto plotSyncMachine = XMLParser::AppendNode(doc, stability, "PlotSyncMachine");
- XMLParser::SetNodeValue(doc, plotSyncMachine, data.plotSyncMachine);
- auto inertia = XMLParser::AppendNode(doc, stability, "Inertia");
- XMLParser::SetNodeValue(doc, inertia, data.inertia);
- auto damping = XMLParser::AppendNode(doc, stability, "Damping");
- XMLParser::SetNodeValue(doc, damping, data.damping);
- auto useAVR = XMLParser::AppendNode(doc, stability, "UseAVR");
- XMLParser::SetNodeValue(doc, useAVR, data.useAVR);
- auto useSpeedGovernor = XMLParser::AppendNode(doc, stability, "UseSpeedGovernor");
- XMLParser::SetNodeValue(doc, useSpeedGovernor, data.useSpeedGovernor);
- auto armResistance = XMLParser::AppendNode(doc, stability, "ArmResistance");
- XMLParser::SetNodeValue(doc, armResistance, data.armResistance);
- auto potierReactance = XMLParser::AppendNode(doc, stability, "PotierReactance");
- XMLParser::SetNodeValue(doc, potierReactance, data.potierReactance);
- auto satFactor = XMLParser::AppendNode(doc, stability, "SatFactor");
- XMLParser::SetNodeValue(doc, satFactor, data.satFactor);
- auto syncXd = XMLParser::AppendNode(doc, stability, "SyncXd");
- XMLParser::SetNodeValue(doc, syncXd, data.syncXd);
- auto syncXq = XMLParser::AppendNode(doc, stability, "SyncXq");
- XMLParser::SetNodeValue(doc, syncXq, data.syncXq);
- auto transXd = XMLParser::AppendNode(doc, stability, "TransXd");
- XMLParser::SetNodeValue(doc, transXd, data.transXd);
- auto transXq = XMLParser::AppendNode(doc, stability, "TransXq");
- XMLParser::SetNodeValue(doc, transXq, data.transXq);
- auto transTd0 = XMLParser::AppendNode(doc, stability, "TransTd0");
- XMLParser::SetNodeValue(doc, transTd0, data.transTd0);
- auto transTq0 = XMLParser::AppendNode(doc, stability, "TransTq0");
- XMLParser::SetNodeValue(doc, transTq0, data.transTq0);
- auto subXd = XMLParser::AppendNode(doc, stability, "SubXd");
- XMLParser::SetNodeValue(doc, subXd, data.subXd);
- auto subXq = XMLParser::AppendNode(doc, stability, "SubXq");
- XMLParser::SetNodeValue(doc, subXq, data.subXq);
- auto subTd0 = XMLParser::AppendNode(doc, stability, "SubTd0");
- XMLParser::SetNodeValue(doc, subTd0, data.subTd0);
- auto subTq0 = XMLParser::AppendNode(doc, stability, "SubTq0");
- XMLParser::SetNodeValue(doc, subTq0, data.subTq0);
+ elementID = 0;
+ for(auto it = syncGeneratorList.begin(), itEnd = syncGeneratorList.end(); it != itEnd; ++it) {
+ (*it)->SetID(elementID);
+ auto elementNode = (*it)->SaveElement(doc, syncGeneratorsNode);
+
+ // Save controls
+ auto data = (*it)->GetElectricalData();
+ auto electricalProp = elementNode->first_node("ElectricalProperties");
+ auto stability = electricalProp->first_node("Stability");
auto avr = XMLParser::AppendNode(doc, stability, "AVR");
if(data.avr) SaveControlElements(doc, avr, data.avr);
@@ -483,280 +205,40 @@ void FileHanding::SaveProject(wxFileName path)
auto speedGov = XMLParser::AppendNode(doc, stability, "SpeedGovernor");
if(data.speedGov) SaveControlElements(doc, speedGov, data.speedGov);
- auto switchingList = XMLParser::AppendNode(doc, electricalProp, "SwitchingList");
- SwitchingData swData = syncGenerator->GetSwitchingData();
- for(int j = 0; j < (int)swData.swType.size(); j++) {
- auto switching = XMLParser::AppendNode(doc, switchingList, "Switching");
- XMLParser::SetNodeAttribute(doc, switching, "ID", j);
- auto swType = XMLParser::AppendNode(doc, switching, "Type");
- XMLParser::SetNodeValue(doc, swType, swData.swType[j]);
- auto swTime = XMLParser::AppendNode(doc, switching, "Time");
- XMLParser::SetNodeValue(doc, swTime, swData.swTime[j]);
- }
- } //}
+ elementID++;
+ }
+ //}
//{ SyncMotor
auto syncMotorsNode = XMLParser::AppendNode(doc, elementsNode, "SyncMotorList");
auto syncMotorList = allElements.GetSyncMotorList();
- for(int i = 0; i < (int)syncMotorList.size(); i++) {
- SyncMotor* syncMotor = syncMotorList[i];
- auto syncMotorNode = XMLParser::AppendNode(doc, syncMotorsNode, "SyncMotor");
- XMLParser::SetNodeAttribute(doc, syncMotorNode, "ID", i);
- auto cadProp = XMLParser::AppendNode(doc, syncMotorNode, "CADProperties");
- auto position = XMLParser::AppendNode(doc, cadProp, "Position");
- auto posX = XMLParser::AppendNode(doc, position, "X");
- XMLParser::SetNodeValue(doc, posX, syncMotor->GetPosition().m_x);
- auto posY = XMLParser::AppendNode(doc, position, "Y");
- XMLParser::SetNodeValue(doc, posY, syncMotor->GetPosition().m_y);
- auto size = XMLParser::AppendNode(doc, cadProp, "Size");
- auto width = XMLParser::AppendNode(doc, size, "Width");
- XMLParser::SetNodeValue(doc, width, syncMotor->GetWidth());
- auto height = XMLParser::AppendNode(doc, size, "Height");
- XMLParser::SetNodeValue(doc, height, syncMotor->GetHeight());
- auto angle = XMLParser::AppendNode(doc, cadProp, "Angle");
- XMLParser::SetNodeValue(doc, angle, syncMotor->GetAngle());
- auto nodePos = XMLParser::AppendNode(doc, cadProp, "NodePosition");
- auto nodePosX = XMLParser::AppendNode(doc, nodePos, "X");
- XMLParser::SetNodeValue(doc, nodePosX, syncMotor->GetPointList()[0].m_x);
- auto nodePosY = XMLParser::AppendNode(doc, nodePos, "Y");
- XMLParser::SetNodeValue(doc, nodePosY, syncMotor->GetPointList()[0].m_y);
- auto parentID = XMLParser::AppendNode(doc, cadProp, "ParentID");
- Bus* parent = static_cast<Bus*>(syncMotor->GetParentList()[0]);
- if(parent) XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number);
-
- SyncMotorElectricalData data = syncMotor->GetElectricalData();
- auto electricalProp = XMLParser::AppendNode(doc, syncMotorNode, "ElectricalProperties");
- auto isOnline = XMLParser::AppendNode(doc, electricalProp, "IsOnline");
- XMLParser::SetNodeValue(doc, isOnline, syncMotor->IsOnline());
- auto name = XMLParser::AppendNode(doc, electricalProp, "Name");
- XMLParser::SetNodeValue(doc, name, data.name);
- auto nominalPower = XMLParser::AppendNode(doc, electricalProp, "NominalPower");
- XMLParser::SetNodeValue(doc, nominalPower, data.nominalPower);
- XMLParser::SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit);
- // auto nominalVoltage = XMLParser::AppendNode(doc, electricalProp, "NominalVoltage");
- // XMLParser::SetNodeValue(doc, nominalVoltage, data.nominalVoltage);
- // XMLParser::SetNodeAttribute(doc, nominalVoltage, "UnitID", data.nominalVoltageUnit);
- auto activePower = XMLParser::AppendNode(doc, electricalProp, "ActivePower");
- XMLParser::SetNodeValue(doc, activePower, data.activePower);
- XMLParser::SetNodeAttribute(doc, activePower, "UnitID", data.activePowerUnit);
- auto reactivePower = XMLParser::AppendNode(doc, electricalProp, "ReactivePower");
- XMLParser::SetNodeValue(doc, reactivePower, data.reactivePower);
- XMLParser::SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit);
- auto haveMaxReactive = XMLParser::AppendNode(doc, electricalProp, "HaveMaxReactive");
- XMLParser::SetNodeValue(doc, haveMaxReactive, data.haveMaxReactive);
- auto maxReactive = XMLParser::AppendNode(doc, electricalProp, "MaxReactive");
- XMLParser::SetNodeValue(doc, maxReactive, data.maxReactive);
- XMLParser::SetNodeAttribute(doc, maxReactive, "UnitID", data.maxReactiveUnit);
- auto haveMinReactive = XMLParser::AppendNode(doc, electricalProp, "HaveMinReactive");
- XMLParser::SetNodeValue(doc, haveMinReactive, data.haveMinReactive);
- auto minReactive = XMLParser::AppendNode(doc, electricalProp, "MinReactive");
- XMLParser::SetNodeValue(doc, minReactive, data.minReactive);
- XMLParser::SetNodeAttribute(doc, minReactive, "UnitID", data.minReactiveUnit);
- auto useMachineBase = XMLParser::AppendNode(doc, electricalProp, "UseMachineBase");
- XMLParser::SetNodeValue(doc, useMachineBase, data.useMachineBase);
-
- auto fault = XMLParser::AppendNode(doc, electricalProp, "Fault");
- auto positiveResistance = XMLParser::AppendNode(doc, fault, "PositiveResistance");
- XMLParser::SetNodeValue(doc, positiveResistance, data.positiveResistance);
- auto positiveReactance = XMLParser::AppendNode(doc, fault, "PositiveReactance");
- XMLParser::SetNodeValue(doc, positiveReactance, data.positiveReactance);
- auto negativeResistance = XMLParser::AppendNode(doc, fault, "NegativeResistance");
- XMLParser::SetNodeValue(doc, negativeResistance, data.negativeResistance);
- auto negativeReactance = XMLParser::AppendNode(doc, fault, "NegativeReactance");
- XMLParser::SetNodeValue(doc, negativeReactance, data.negativeReactance);
- auto zeroResistance = XMLParser::AppendNode(doc, fault, "ZeroResistance");
- XMLParser::SetNodeValue(doc, zeroResistance, data.zeroResistance);
- auto zeroReactance = XMLParser::AppendNode(doc, fault, "ZeroReactance");
- XMLParser::SetNodeValue(doc, zeroReactance, data.zeroReactance);
- auto groundResistance = XMLParser::AppendNode(doc, fault, "GroundResistance");
- XMLParser::SetNodeValue(doc, groundResistance, data.groundResistance);
- auto groundReactance = XMLParser::AppendNode(doc, fault, "GroundReactance");
- XMLParser::SetNodeValue(doc, groundReactance, data.groundReactance);
- auto groundNeutral = XMLParser::AppendNode(doc, fault, "GroundNeutral");
- XMLParser::SetNodeValue(doc, groundNeutral, data.groundNeutral);
-
- // To future use...
- /*auto stability = XMLParser::AppendNode(doc, electricalProp, "Stability");
- auto plotSyncMachine = XMLParser::AppendNode(doc, stability, "PlotSyncMotor");
- XMLParser::SetNodeValue(doc, plotSyncMachine, data.plotSyncMachine);
- auto inertia = XMLParser::AppendNode(doc, stability, "Inertia");
- XMLParser::SetNodeValue(doc, inertia, data.inertia);
- auto damping = XMLParser::AppendNode(doc, stability, "Damping");
- XMLParser::SetNodeValue(doc, damping, data.damping);
- auto useAVR = XMLParser::AppendNode(doc, stability, "UseAVR");
- XMLParser::SetNodeValue(doc, useAVR, data.useAVR);
- auto armResistance = XMLParser::AppendNode(doc, stability, "ArmResistance");
- XMLParser::SetNodeValue(doc, armResistance, data.armResistance);
- auto potierReactance = XMLParser::AppendNode(doc, stability, "PotierReactance");
- XMLParser::SetNodeValue(doc, potierReactance, data.potierReactance);
- auto satFactor = XMLParser::AppendNode(doc, stability, "SatFactor");
- XMLParser::SetNodeValue(doc, satFactor, data.satFactor);
- auto syncXd = XMLParser::AppendNode(doc, stability, "SyncXd");
- XMLParser::SetNodeValue(doc, syncXd, data.syncXd);
- auto syncXq = XMLParser::AppendNode(doc, stability, "SyncXq");
- XMLParser::SetNodeValue(doc, syncXq, data.syncXq);
- auto transXd = XMLParser::AppendNode(doc, stability, "TransXd");
- XMLParser::SetNodeValue(doc, transXd, data.transXd);
- auto transXq = XMLParser::AppendNode(doc, stability, "TransXq");
- XMLParser::SetNodeValue(doc, transXq, data.transXq);
- auto transTd0 = XMLParser::AppendNode(doc, stability, "TransTd0");
- XMLParser::SetNodeValue(doc, transTd0, data.transTd0);
- auto transTq0 = XMLParser::AppendNode(doc, stability, "TransTq0");
- XMLParser::SetNodeValue(doc, transTq0, data.transTq0);
- auto subXd = XMLParser::AppendNode(doc, stability, "SubXd");
- XMLParser::SetNodeValue(doc, subXd, data.subXd);
- auto subXq = XMLParser::AppendNode(doc, stability, "SubXq");
- XMLParser::SetNodeValue(doc, subXq, data.subXq);
- auto subTd0 = XMLParser::AppendNode(doc, stability, "SubTd0");
- XMLParser::SetNodeValue(doc, subTd0, data.subTd0);
- auto subTq0 = XMLParser::AppendNode(doc, stability, "SubTq0");
- XMLParser::SetNodeValue(doc, subTq0, data.subTq0);
-
- auto switchingList = XMLParser::AppendNode(doc, electricalProp, "SwitchingList");
- SwitchingData swData = syncGenerator->GetSwitchingData();
- for(int j = 0; j < (int)swData.swType.size(); j++) {
- auto switching = XMLParser::AppendNode(doc, switchingList, "Switching");
- XMLParser::SetNodeAttribute(doc, switching, "ID", j);
- auto swType = XMLParser::AppendNode(doc, switching, "Type");
- XMLParser::SetNodeValue(doc, swType, swData.swType[j]);
- auto swTime = XMLParser::AppendNode(doc, switching, "Time");
- XMLParser::SetNodeValue(doc, swTime, swData.swTime[j]);
- }*/
- } //}
+ elementID = 0;
+ for(auto it = syncMotorList.begin(), itEnd = syncMotorList.end(); it != itEnd; ++it) {
+ (*it)->SetID(elementID);
+ (*it)->SaveElement(doc, syncMotorsNode);
+ elementID++;
+ }
+ //}
//{ Transfomer
auto transformersNode = XMLParser::AppendNode(doc, elementsNode, "TransformerList");
auto transformerList = allElements.GetTransformerList();
- for(int i = 0; i < (int)transformerList.size(); i++) {
- Transformer* transfomer = transformerList[i];
- auto transformerNode = XMLParser::AppendNode(doc, transformersNode, "Transfomer");
- XMLParser::SetNodeAttribute(doc, transformerNode, "ID", i);
- auto cadProp = XMLParser::AppendNode(doc, transformerNode, "CADProperties");
- auto position = XMLParser::AppendNode(doc, cadProp, "Position");
- auto posX = XMLParser::AppendNode(doc, position, "X");
- XMLParser::SetNodeValue(doc, posX, transfomer->GetPosition().m_x);
- auto posY = XMLParser::AppendNode(doc, position, "Y");
- XMLParser::SetNodeValue(doc, posY, transfomer->GetPosition().m_y);
- auto size = XMLParser::AppendNode(doc, cadProp, "Size");
- auto width = XMLParser::AppendNode(doc, size, "Width");
- XMLParser::SetNodeValue(doc, width, transfomer->GetWidth());
- auto height = XMLParser::AppendNode(doc, size, "Height");
- XMLParser::SetNodeValue(doc, height, transfomer->GetHeight());
- auto angle = XMLParser::AppendNode(doc, cadProp, "Angle");
- XMLParser::SetNodeValue(doc, angle, transfomer->GetAngle());
- auto nodeList = XMLParser::AppendNode(doc, cadProp, "NodeList");
- auto nodePos1 = XMLParser::AppendNode(doc, nodeList, "Node");
- XMLParser::SetNodeAttribute(doc, nodePos1, "ID", 0);
- auto nodePosX1 = XMLParser::AppendNode(doc, nodePos1, "X");
- XMLParser::SetNodeValue(doc, nodePosX1, transfomer->GetPointList()[0].m_x);
- auto nodePosY1 = XMLParser::AppendNode(doc, nodePos1, "Y");
- XMLParser::SetNodeValue(doc, nodePosY1, transfomer->GetPointList()[0].m_y);
- auto nodePos2 = XMLParser::AppendNode(doc, nodeList, "Node");
- XMLParser::SetNodeAttribute(doc, nodePos2, "ID", 1);
- auto nodePosX2 = XMLParser::AppendNode(doc, nodePos2, "X");
- XMLParser::SetNodeValue(doc, nodePosX2, transfomer->GetPointList()[transfomer->GetPointList().size() - 1].m_x);
- auto nodePosY2 = XMLParser::AppendNode(doc, nodePos2, "Y");
- XMLParser::SetNodeValue(doc, nodePosY2, transfomer->GetPointList()[transfomer->GetPointList().size() - 1].m_y);
-
- auto parentIDList = XMLParser::AppendNode(doc, cadProp, "ParentIDList");
- for(int j = 0; j < (int)transfomer->GetParentList().size(); j++) {
- Bus* parent = static_cast<Bus*>(transfomer->GetParentList()[j]);
- if(parent) {
- auto parentID = XMLParser::AppendNode(doc, parentIDList, "ParentID");
- XMLParser::SetNodeAttribute(doc, parentID, "ID", j);
- XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number);
- }
- }
-
- TransformerElectricalData data = transfomer->GetElectricalData();
- auto electricalProp = XMLParser::AppendNode(doc, transformerNode, "ElectricalProperties");
- auto isOnline = XMLParser::AppendNode(doc, electricalProp, "IsOnline");
- XMLParser::SetNodeValue(doc, isOnline, transfomer->IsOnline());
- auto name = XMLParser::AppendNode(doc, electricalProp, "Name");
- XMLParser::SetNodeValue(doc, name, data.name);
- auto primaryNominalVoltage = XMLParser::AppendNode(doc, electricalProp, "PrimaryNominalVoltage");
- XMLParser::SetNodeValue(doc, primaryNominalVoltage, data.primaryNominalVoltage);
- XMLParser::SetNodeAttribute(doc, primaryNominalVoltage, "UnitID", data.primaryNominalVoltageUnit);
- auto secondaryNominalVoltage = XMLParser::AppendNode(doc, electricalProp, "SecondaryNominalVoltage");
- XMLParser::SetNodeValue(doc, secondaryNominalVoltage, data.secondaryNominalVoltage);
- XMLParser::SetNodeAttribute(doc, secondaryNominalVoltage, "UnitID", data.secondaryNominalVoltageUnit);
- auto nominalPower = XMLParser::AppendNode(doc, electricalProp, "NominalPower");
- XMLParser::SetNodeValue(doc, nominalPower, data.nominalPower);
- XMLParser::SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit);
- auto resistance = XMLParser::AppendNode(doc, electricalProp, "Resistance");
- XMLParser::SetNodeValue(doc, resistance, data.resistance);
- XMLParser::SetNodeAttribute(doc, resistance, "UnitID", data.resistanceUnit);
- auto indReactance = XMLParser::AppendNode(doc, electricalProp, "IndReactance");
- XMLParser::SetNodeValue(doc, indReactance, data.indReactance);
- XMLParser::SetNodeAttribute(doc, indReactance, "UnitID", data.indReactanceUnit);
- auto connection = XMLParser::AppendNode(doc, electricalProp, "Connection");
- XMLParser::SetNodeValue(doc, connection, data.connection);
- auto turnsRatio = XMLParser::AppendNode(doc, electricalProp, "TurnsRatio");
- XMLParser::SetNodeValue(doc, turnsRatio, data.turnsRatio);
- auto phaseShift = XMLParser::AppendNode(doc, electricalProp, "PhaseShift");
- XMLParser::SetNodeValue(doc, phaseShift, data.phaseShift);
- auto useTransformerPower = XMLParser::AppendNode(doc, electricalProp, "UseTransfomerPower");
- XMLParser::SetNodeValue(doc, useTransformerPower, data.useTransformerPower);
-
- auto fault = XMLParser::AppendNode(doc, electricalProp, "Fault");
- auto zeroResistance = XMLParser::AppendNode(doc, fault, "ZeroResistance");
- XMLParser::SetNodeValue(doc, zeroResistance, data.zeroResistance);
- auto zeroIndReactance = XMLParser::AppendNode(doc, fault, "ZeroIndReactance");
- XMLParser::SetNodeValue(doc, zeroIndReactance, data.zeroIndReactance);
- auto primaryGrndResistance = XMLParser::AppendNode(doc, fault, "PrimaryGrndResistance");
- XMLParser::SetNodeValue(doc, primaryGrndResistance, data.primaryGrndResistance);
- auto primaryGrndReactance = XMLParser::AppendNode(doc, fault, "PrimaryGrndReactance");
- XMLParser::SetNodeValue(doc, primaryGrndReactance, data.primaryGrndReactance);
- auto secondaryGrndResistance = XMLParser::AppendNode(doc, fault, "SecondaryGrndResistance");
- XMLParser::SetNodeValue(doc, secondaryGrndResistance, data.secondaryGrndResistance);
- auto secondaryGrndReactance = XMLParser::AppendNode(doc, fault, "SecondaryGrndReactance");
- XMLParser::SetNodeValue(doc, secondaryGrndReactance, data.secondaryGrndReactance);
-
- auto switchingList = XMLParser::AppendNode(doc, electricalProp, "SwitchingList");
- SwitchingData swData = transfomer->GetSwitchingData();
- for(int j = 0; j < (int)swData.swType.size(); j++) {
- auto switching = XMLParser::AppendNode(doc, switchingList, "Switching");
- XMLParser::SetNodeAttribute(doc, switching, "ID", j);
- auto swType = XMLParser::AppendNode(doc, switching, "Type");
- XMLParser::SetNodeValue(doc, swType, swData.swType[j]);
- auto swTime = XMLParser::AppendNode(doc, switching, "Time");
- XMLParser::SetNodeValue(doc, swTime, swData.swTime[j]);
- }
- } //}
+ elementID = 0;
+ for(auto it = transformerList.begin(), itEnd = transformerList.end(); it != itEnd; ++it) {
+ (*it)->SetID(elementID);
+ (*it)->SaveElement(doc, transformersNode);
+ elementID++;
+ }
+ //}
//{ Text
auto textsNode = XMLParser::AppendNode(doc, elementsNode, "TextList");
auto textList = m_workspace->GetTextList();
- for(int i = 0; i < (int)textList.size(); i++) {
- Text* text = textList[i];
- auto textNode = XMLParser::AppendNode(doc, textsNode, "Text");
- XMLParser::SetNodeAttribute(doc, textNode, "ID", i);
- auto cadProp = XMLParser::AppendNode(doc, textNode, "CADProperties");
- auto position = XMLParser::AppendNode(doc, cadProp, "Position");
- auto posX = XMLParser::AppendNode(doc, position, "X");
- XMLParser::SetNodeValue(doc, posX, text->GetPosition().m_x);
- auto posY = XMLParser::AppendNode(doc, position, "Y");
- XMLParser::SetNodeValue(doc, posY, text->GetPosition().m_y);
- auto size = XMLParser::AppendNode(doc, cadProp, "Size");
- auto width = XMLParser::AppendNode(doc, size, "Width");
- XMLParser::SetNodeValue(doc, width, text->GetWidth());
- auto height = XMLParser::AppendNode(doc, size, "Height");
- XMLParser::SetNodeValue(doc, height, text->GetHeight());
- auto angle = XMLParser::AppendNode(doc, cadProp, "Angle");
- XMLParser::SetNodeValue(doc, angle, text->GetAngle());
- auto textProperties = XMLParser::AppendNode(doc, textNode, "TextProperties");
- auto elementType = XMLParser::AppendNode(doc, textProperties, "ElementType");
- XMLParser::SetNodeValue(doc, elementType, text->GetElementType());
- auto elementNumber = XMLParser::AppendNode(doc, textProperties, "ElementNumber");
- XMLParser::SetNodeValue(doc, elementNumber, text->GetElementNumber());
- auto dataType = XMLParser::AppendNode(doc, textProperties, "DataType");
- XMLParser::SetNodeValue(doc, dataType, text->GetDataType());
- auto dataUnit = XMLParser::AppendNode(doc, textProperties, "DataUnit");
- XMLParser::SetNodeValue(doc, dataUnit, text->GetUnit());
- auto direction = XMLParser::AppendNode(doc, textProperties, "Direction");
- XMLParser::SetNodeValue(doc, direction, text->GetDirection());
- auto decimalPlaces = XMLParser::AppendNode(doc, textProperties, "DecimalPlaces");
- XMLParser::SetNodeValue(doc, decimalPlaces, text->GetDecimalPlaces());
+ elementID = 0;
+ for(auto it = textList.begin(), itEnd = textList.end(); it != itEnd; ++it) {
+ (*it)->SetID(elementID);
+ (*it)->SaveElement(doc, textsNode);
+ elementID++;
}
//}
@@ -849,7 +331,7 @@ bool FileHanding::OpenProject(wxFileName path)
std::vector<SyncMotor*> syncMotorList;
std::vector<Transformer*> transformerList;
std::vector<Text*> textList;
-
+
// List of parents
std::vector<Element*> parentList;
@@ -859,12 +341,12 @@ bool FileHanding::OpenProject(wxFileName path)
auto busNode = busListNode->first_node("Bus");
while(busNode) {
Bus* bus = new Bus();
-
+
if(!bus->OpenElement(busNode)) return false;
elementList.push_back(bus);
busList.push_back(bus);
parentList.push_back(bus);
-
+
busNode = busNode->next_sibling("Bus");
} //}
@@ -874,7 +356,7 @@ bool FileHanding::OpenProject(wxFileName path)
auto capacitorNode = capacitorListNode->first_node("Capacitor");
while(capacitorNode) {
Capacitor* capacitor = new Capacitor();
-
+
if(!capacitor->OpenElement(capacitorNode, parentList)) return false;
elementList.push_back(capacitor);
capacitorList.push_back(capacitor);
@@ -888,11 +370,11 @@ bool FileHanding::OpenProject(wxFileName path)
auto indMotorNode = indMotorListNode->first_node("IndMotor");
while(indMotorNode) {
IndMotor* indMotor = new IndMotor();
-
+
if(!indMotor->OpenElement(indMotorNode, parentList)) return false;
elementList.push_back(indMotor);
indMotorList.push_back(indMotor);
-
+
indMotorNode = indMotorNode->next_sibling("IndMotor");
} //}
@@ -903,72 +385,10 @@ bool FileHanding::OpenProject(wxFileName path)
while(inductorNode) {
Inductor* inductor = new Inductor();
- auto cadPropNode = inductorNode->first_node("CADProperties");
- if(!cadPropNode) return false;
-
- auto position = cadPropNode->first_node("Position");
- double posX = XMLParser::GetNodeValueDouble(position, "X");
- double posY = XMLParser::GetNodeValueDouble(position, "Y");
- auto size = cadPropNode->first_node("Size");
- double width = XMLParser::GetNodeValueDouble(size, "Width");
- double height = XMLParser::GetNodeValueDouble(size, "Height");
- double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle");
- auto nodePosition = cadPropNode->first_node("NodePosition");
- double nodePosX = XMLParser::GetNodeValueDouble(nodePosition, "X");
- double nodePosY = XMLParser::GetNodeValueDouble(nodePosition, "Y");
- int parentID = XMLParser::GetNodeValueInt(cadPropNode, "ParentID");
- if(parentID == -1) {
- // If the element has no parent, create a temporary one, remove and delete.
- Bus* parent = new Bus(wxPoint2DDouble(nodePosX, nodePosY));
- inductor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
- inductor->StartMove(inductor->GetPosition());
- inductor->Move(wxPoint2DDouble(posX, posY));
- inductor->RemoveParent(parent);
- delete parent;
- } else {
- Bus* parent = busList[parentID];
- inductor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
- inductor->StartMove(inductor->GetPosition());
- inductor->Move(wxPoint2DDouble(posX, posY));
- }
- inductor->SetWidth(width);
- inductor->SetHeight(height);
-
- int numRot = angle / inductor->GetRotationAngle();
- bool clockwise = true;
- if(numRot < 0) {
- numRot = std::abs(numRot);
- clockwise = false;
- }
- for(int i = 0; i < numRot; i++) inductor->Rotate(clockwise);
-
- auto electricalProp = inductorNode->first_node("ElectricalProperties");
- if(!electricalProp) return false;
-
- inductor->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline"));
- InductorElectricalData data = inductor->GetElectricalData();
- data.name = electricalProp->first_node("Name")->value();
- data.reactivePower = XMLParser::GetNodeValueDouble(electricalProp, "ReactivePower");
- data.reactivePowerUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID");
-
- SwitchingData swData;
- auto switchingList = electricalProp->first_node("SwitchingList");
- if(!switchingList) return false;
- auto swNode = switchingList->first_node("Switching");
- while(swNode) {
- swData.swType.push_back((SwitchingType)XMLParser::GetNodeValueInt(swNode, "Type"));
- swData.swTime.push_back(XMLParser::GetNodeValueDouble(swNode, "Time"));
- swNode = swNode->next_sibling("Switching");
- }
- inductor->SetSwitchingData(swData);
-
- inductor->SetElectricalData(data);
-
- if(swData.swTime.size() != 0) inductor->SetDynamicEvent(true);
-
+ if(!inductor->OpenElement(inductorNode, parentList)) return false;
elementList.push_back(inductor);
inductorList.push_back(inductor);
+
inductorNode = inductorNode->next_sibling("Inductor");
} //}
@@ -979,109 +399,10 @@ bool FileHanding::OpenProject(wxFileName path)
while(lineNode) {
Line* line = new Line();
- auto cadPropNode = lineNode->first_node("CADProperties");
- if(!cadPropNode) return false;
-
- // Get nodes points
- std::vector<wxPoint2DDouble> ptsList;
- auto nodePosList = cadPropNode->first_node("NodeList");
- if(!nodePosList) return false;
- auto nodePos = nodePosList->first_node("Node");
- while(nodePos) {
- double nodePosX = XMLParser::GetNodeValueDouble(nodePos, "X");
- double nodePosY = XMLParser::GetNodeValueDouble(nodePos, "Y");
- ptsList.push_back(wxPoint2DDouble(nodePosX, nodePosY));
- nodePos = nodePos->next_sibling("Node");
- }
-
- // Get parents IDs
- auto parentIDList = cadPropNode->first_node("ParentIDList");
- if(!parentIDList) return false;
- auto parentNode = parentIDList->first_node("ParentID");
- long parentID[2] = {-1, -1};
- while(parentNode) {
- long index = 0;
- wxString(parentNode->first_attribute("ID")->value()).ToLong(&index);
- wxString(parentNode->value()).ToCLong(&parentID[index]);
- parentNode = parentNode->next_sibling("ParentID");
- }
-
- std::vector<wxPoint2DDouble> nodePtsList; // List of node points
- nodePtsList.push_back(ptsList[0]); // First point on the list
- nodePtsList.push_back(ptsList[ptsList.size() - 1]); // Last point on the list
-
- // List of dummy buses to set not connected nodes properly
- std::vector<Bus*> dummyBusList;
- for(unsigned int i = 0; i < nodePtsList.size(); ++i) {
- if(parentID[i] == -1) // No parent connected
- {
- Bus* dummyBus = new Bus(nodePtsList[i]);
- dummyBusList.push_back(dummyBus);
- line->AddParent(dummyBus, nodePtsList[i]);
- } else { // Parent connected (necessarily a bus, get from bus list)
- line->AddParent(busList[parentID[i]], nodePtsList[i]);
- }
- }
-
- // Add the others nodes (if exists)
- std::vector<wxPoint2DDouble> midPts;
- for(unsigned int i = 1; i < ptsList.size() - 1; i++) midPts.push_back(ptsList[i]);
- std::vector<wxPoint2DDouble> edgesPts = line->GetPointList();
- edgesPts.insert(edgesPts.begin() + 2, midPts.begin(), midPts.end());
- line->SetPointList(edgesPts);
-
- // Remove dummy buses
- for(auto it = dummyBusList.begin(), itEnd = dummyBusList.end(); it != itEnd; ++it) {
- line->RemoveParent(*it);
- delete *it;
- }
- dummyBusList.clear();
-
- auto electricalProp = lineNode->first_node("ElectricalProperties");
- if(!electricalProp) return false;
-
- line->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline"));
- LineElectricalData data = line->GetElectricalData();
- data.name = electricalProp->first_node("Name")->value();
- data.nominalVoltage = XMLParser::GetNodeValueDouble(electricalProp, "NominalVoltage");
- data.nominalVoltageUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "NominalVoltage", "UnitID");
- data.nominalPower = XMLParser::GetNodeValueDouble(electricalProp, "NominalPower");
- data.nominalPowerUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "NominalPower", "UnitID");
- data.resistance = XMLParser::GetNodeValueDouble(electricalProp, "Resistance");
- data.resistanceUnit = (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "Resistance", "UnitID");
- data.indReactance = XMLParser::GetNodeValueDouble(electricalProp, "IndReactance");
- data.indReactanceUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "IndReactance", "UnitID");
- data.capSusceptance = XMLParser::GetNodeValueDouble(electricalProp, "CapSusceptance");
- data.capSusceptanceUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "CapSusceptance", "UnitID");
- data.lineSize = XMLParser::GetNodeValueDouble(electricalProp, "LineSize");
- data.useLinePower = XMLParser::GetNodeValueInt(electricalProp, "UseLinePower");
-
- auto fault = electricalProp->first_node("Fault");
- data.zeroResistance = XMLParser::GetNodeValueDouble(fault, "ZeroResistance");
- data.zeroIndReactance = XMLParser::GetNodeValueDouble(fault, "ZeroIndReactance");
- data.zeroCapSusceptance = XMLParser::GetNodeValueDouble(fault, "ZeroCapSusceptance");
-
- SwitchingData swData;
- auto switchingList = electricalProp->first_node("SwitchingList");
- if(!switchingList) return false;
- auto swNode = switchingList->first_node("Switching");
- while(swNode) {
- swData.swType.push_back((SwitchingType)XMLParser::GetNodeValueInt(swNode, "Type"));
- swData.swTime.push_back(XMLParser::GetNodeValueDouble(swNode, "Time"));
- swNode = swNode->next_sibling("Switching");
- }
- line->SetSwitchingData(swData);
-
- line->SetElectricalData(data);
-
- if(swData.swTime.size() != 0) line->SetDynamicEvent(true);
-
+ if(!line->OpenElement(lineNode, parentList)) return false;
elementList.push_back(line);
lineList.push_back(line);
+
lineNode = lineNode->next_sibling("Line");
} //}
@@ -1092,89 +413,10 @@ bool FileHanding::OpenProject(wxFileName path)
while(loadNode) {
Load* load = new Load();
- auto cadPropNode = loadNode->first_node("CADProperties");
- if(!cadPropNode) return false;
-
- auto position = cadPropNode->first_node("Position");
- double posX = XMLParser::GetNodeValueDouble(position, "X");
- double posY = XMLParser::GetNodeValueDouble(position, "Y");
- auto size = cadPropNode->first_node("Size");
- double width = XMLParser::GetNodeValueDouble(size, "Width");
- double height = XMLParser::GetNodeValueDouble(size, "Height");
- double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle");
- auto nodePosition = cadPropNode->first_node("NodePosition");
- double nodePosX = XMLParser::GetNodeValueDouble(nodePosition, "X");
- double nodePosY = XMLParser::GetNodeValueDouble(nodePosition, "Y");
- int parentID = XMLParser::GetNodeValueInt(cadPropNode, "ParentID");
- if(parentID == -1) {
- // If the element has no parent, create a temporary one, remove and delete.
- Bus* parent = new Bus(wxPoint2DDouble(nodePosX, nodePosY));
- load->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
- load->StartMove(load->GetPosition());
- load->Move(wxPoint2DDouble(posX, posY));
- load->RemoveParent(parent);
- delete parent;
- } else {
- Bus* parent = busList[parentID];
- load->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
- load->StartMove(load->GetPosition());
- load->Move(wxPoint2DDouble(posX, posY));
- }
- load->SetWidth(width);
- load->SetHeight(height);
-
- int numRot = angle / load->GetRotationAngle();
- bool clockwise = true;
- if(numRot < 0) {
- numRot = std::abs(numRot);
- clockwise = false;
- }
- for(int i = 0; i < numRot; i++) load->Rotate(clockwise);
-
- auto electricalProp = loadNode->first_node("ElectricalProperties");
- if(!electricalProp) return false;
-
- load->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline"));
- LoadElectricalData data = load->GetElectricalData();
- data.name = electricalProp->first_node("Name")->value();
- data.activePower = XMLParser::GetNodeValueDouble(electricalProp, "ActivePower");
- data.activePowerUnit = (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "ActivePower", "UnitID");
- data.reactivePower = XMLParser::GetNodeValueDouble(electricalProp, "ReactivePower");
- data.reactivePowerUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID");
- data.loadType = (LoadType)XMLParser::GetNodeValueInt(electricalProp, "LoadType");
- // Stability
- auto stability = electricalProp->first_node("Stability");
- if(stability) {
- data.plotLoad = XMLParser::GetNodeValueInt(stability, "PlotLoad");
- data.useCompLoad = XMLParser::GetNodeValueInt(stability, "UseCompositeLoad");
- auto activePowerComp = stability->first_node("ActivePowerComposition");
- data.constImpedanceActive = XMLParser::GetNodeValueDouble(activePowerComp, "ConstantImpedance");
- data.constCurrentActive = XMLParser::GetNodeValueDouble(activePowerComp, "ConstantCurrent");
- data.constPowerActive = XMLParser::GetNodeValueDouble(activePowerComp, "ConstantPower");
- auto reactivePowerComp = stability->first_node("ReactivePowerComposition");
- data.constImpedanceReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantImpedance");
- data.constCurrentReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantCurrent");
- data.constPowerReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantPower");
- }
-
- SwitchingData swData;
- auto switchingList = electricalProp->first_node("SwitchingList");
- if(!switchingList) return false;
- auto swNode = switchingList->first_node("Switching");
- while(swNode) {
- swData.swType.push_back((SwitchingType)XMLParser::GetNodeValueInt(swNode, "Type"));
- swData.swTime.push_back(XMLParser::GetNodeValueDouble(swNode, "Time"));
- swNode = swNode->next_sibling("Switching");
- }
- load->SetSwitchingData(swData);
-
- load->SetElectricalData(data);
-
- if(swData.swTime.size() != 0) load->SetDynamicEvent(true);
-
+ if(!load->OpenElement(loadNode, parentList)) return false;
elementList.push_back(load);
loadList.push_back(load);
+
loadNode = loadNode->next_sibling("Load");
} //}
@@ -1182,105 +424,16 @@ bool FileHanding::OpenProject(wxFileName path)
auto syncGeneratorListNode = elementsNode->first_node("SyncGeneratorList");
if(!syncGeneratorListNode) return false;
auto syncGeneratorNode = syncGeneratorListNode->first_node("SyncGenerator");
+
while(syncGeneratorNode) {
SyncGenerator* syncGenerator = new SyncGenerator();
- auto cadPropNode = syncGeneratorNode->first_node("CADProperties");
- if(!cadPropNode) return false;
-
- auto position = cadPropNode->first_node("Position");
- double posX = XMLParser::GetNodeValueDouble(position, "X");
- double posY = XMLParser::GetNodeValueDouble(position, "Y");
- auto size = cadPropNode->first_node("Size");
- double width = XMLParser::GetNodeValueDouble(size, "Width");
- double height = XMLParser::GetNodeValueDouble(size, "Height");
- double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle");
- auto nodePosition = cadPropNode->first_node("NodePosition");
- double nodePosX = XMLParser::GetNodeValueDouble(nodePosition, "X");
- double nodePosY = XMLParser::GetNodeValueDouble(nodePosition, "Y");
- int parentID = XMLParser::GetNodeValueInt(cadPropNode, "ParentID");
- if(parentID == -1) {
- // If the element has no parent, create a temporary one, remove and delete.
- Bus* parent = new Bus(wxPoint2DDouble(nodePosX, nodePosY));
- syncGenerator->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
- syncGenerator->StartMove(syncGenerator->GetPosition());
- syncGenerator->Move(wxPoint2DDouble(posX, posY));
- syncGenerator->RemoveParent(parent);
- delete parent;
- } else {
- Bus* parent = busList[parentID];
- syncGenerator->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
- syncGenerator->StartMove(syncGenerator->GetPosition());
- syncGenerator->Move(wxPoint2DDouble(posX, posY));
- }
- syncGenerator->SetWidth(width);
- syncGenerator->SetHeight(height);
-
- int numRot = angle / syncGenerator->GetRotationAngle();
- bool clockwise = true;
- if(numRot < 0) {
- numRot = std::abs(numRot);
- clockwise = false;
- }
- for(int i = 0; i < numRot; i++) syncGenerator->Rotate(clockwise);
+ if(!syncGenerator->OpenElement(syncGeneratorNode, parentList)) return false;
+ // Open controls.
+ auto data = syncGenerator->GetElectricalData();
auto electricalProp = syncGeneratorNode->first_node("ElectricalProperties");
- if(!electricalProp) return false;
-
- syncGenerator->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline"));
- SyncGeneratorElectricalData data = syncGenerator->GetElectricalData();
- data.name = electricalProp->first_node("Name")->value();
- data.nominalPower = XMLParser::GetNodeValueDouble(electricalProp, "NominalPower");
- data.nominalPowerUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "NominalPower", "UnitID");
- data.nominalVoltage = XMLParser::GetNodeValueDouble(electricalProp, "NominalVoltage");
- data.nominalVoltageUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "NominalVoltage", "UnitID");
- data.activePower = XMLParser::GetNodeValueDouble(electricalProp, "ActivePower");
- data.activePowerUnit = (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "ActivePower", "UnitID");
- data.reactivePower = XMLParser::GetNodeValueDouble(electricalProp, "ReactivePower");
- data.reactivePowerUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID");
- data.haveMaxReactive = XMLParser::GetNodeValueInt(electricalProp, "HaveMaxReactive");
- data.maxReactive = XMLParser::GetNodeValueDouble(electricalProp, "MaxReactive");
- data.maxReactiveUnit = (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "MaxReactive", "UnitID");
- data.haveMinReactive = XMLParser::GetNodeValueInt(electricalProp, "HaveMinReactive");
- data.minReactive = XMLParser::GetNodeValueDouble(electricalProp, "MinReactive");
- data.minReactiveUnit = (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "MinReactive", "UnitID");
- data.useMachineBase = XMLParser::GetNodeValueInt(electricalProp, "UseMachineBase");
-
- auto fault = electricalProp->first_node("Fault");
- if(!fault) return false;
- data.positiveResistance = XMLParser::GetNodeValueDouble(fault, "PositiveResistance");
- data.positiveReactance = XMLParser::GetNodeValueDouble(fault, "PositiveReactance");
- data.negativeResistance = XMLParser::GetNodeValueDouble(fault, "NegativeResistance");
- data.negativeReactance = XMLParser::GetNodeValueDouble(fault, "NegativeReactance");
- data.zeroResistance = XMLParser::GetNodeValueDouble(fault, "ZeroResistance");
- data.zeroReactance = XMLParser::GetNodeValueDouble(fault, "ZeroReactance");
- data.groundResistance = XMLParser::GetNodeValueDouble(fault, "GroundResistance");
- data.groundReactance = XMLParser::GetNodeValueDouble(fault, "GroundReactance");
- data.groundNeutral = XMLParser::GetNodeValueInt(fault, "GroundNeutral");
-
auto stability = electricalProp->first_node("Stability");
- if(!stability) return false;
- data.plotSyncMachine = XMLParser::GetNodeValueInt(stability, "PlotSyncMachine");
- data.inertia = XMLParser::GetNodeValueDouble(stability, "Inertia");
- data.damping = XMLParser::GetNodeValueDouble(stability, "Damping");
- data.useAVR = XMLParser::GetNodeValueInt(stability, "UseAVR");
- data.useSpeedGovernor = XMLParser::GetNodeValueInt(stability, "UseSpeedGovernor");
- data.armResistance = XMLParser::GetNodeValueDouble(stability, "ArmResistance");
- data.potierReactance = XMLParser::GetNodeValueDouble(stability, "PotierReactance");
- data.satFactor = XMLParser::GetNodeValueDouble(stability, "SatFactor");
- data.syncXd = XMLParser::GetNodeValueDouble(stability, "SyncXd");
- data.syncXq = XMLParser::GetNodeValueDouble(stability, "SyncXq");
- data.transXd = XMLParser::GetNodeValueDouble(stability, "TransXd");
- data.transXq = XMLParser::GetNodeValueDouble(stability, "TransXq");
- data.transTd0 = XMLParser::GetNodeValueDouble(stability, "TransTd0");
- data.transTq0 = XMLParser::GetNodeValueDouble(stability, "TransTq0");
- data.subXd = XMLParser::GetNodeValueDouble(stability, "SubXd");
- data.subXq = XMLParser::GetNodeValueDouble(stability, "SubXq");
- data.subTd0 = XMLParser::GetNodeValueDouble(stability, "SubTd0");
- data.subTq0 = XMLParser::GetNodeValueDouble(stability, "SubTq0");
auto avr = stability->first_node("AVR");
if(!avr) return false;
@@ -1290,21 +443,8 @@ bool FileHanding::OpenProject(wxFileName path)
if(!speedGov) return false;
if(!OpenControlElements(doc, speedGov, data.speedGov)) return false;
- SwitchingData swData;
- auto switchingList = electricalProp->first_node("SwitchingList");
- if(!switchingList) return false;
- auto swNode = switchingList->first_node("Switching");
- while(swNode) {
- swData.swType.push_back((SwitchingType)XMLParser::GetNodeValueInt(swNode, "Type"));
- swData.swTime.push_back(XMLParser::GetNodeValueDouble(swNode, "Time"));
- swNode = swNode->next_sibling("Switching");
- }
- syncGenerator->SetSwitchingData(swData);
-
syncGenerator->SetElectricalData(data);
- if(swData.swTime.size() != 0) syncGenerator->SetDynamicEvent(true);
-
elementList.push_back(syncGenerator);
syncGeneratorList.push_back(syncGenerator);
syncGeneratorNode = syncGeneratorNode->next_sibling("SyncGenerator");
@@ -1317,96 +457,10 @@ bool FileHanding::OpenProject(wxFileName path)
while(syncMotorNode) {
SyncMotor* syncMotor = new SyncMotor();
- auto cadPropNode = syncMotorNode->first_node("CADProperties");
- if(!cadPropNode) return false;
-
- auto position = cadPropNode->first_node("Position");
- double posX = XMLParser::GetNodeValueDouble(position, "X");
- double posY = XMLParser::GetNodeValueDouble(position, "Y");
- auto size = cadPropNode->first_node("Size");
- double width = XMLParser::GetNodeValueDouble(size, "Width");
- double height = XMLParser::GetNodeValueDouble(size, "Height");
- double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle");
- auto nodePosition = cadPropNode->first_node("NodePosition");
- double nodePosX = XMLParser::GetNodeValueDouble(nodePosition, "X");
- double nodePosY = XMLParser::GetNodeValueDouble(nodePosition, "Y");
- int parentID = XMLParser::GetNodeValueInt(cadPropNode, "ParentID");
- if(parentID == -1) {
- // If the element has no parent, create a temporary one, remove and delete.
- Bus* parent = new Bus(wxPoint2DDouble(nodePosX, nodePosY));
- syncMotor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
- syncMotor->StartMove(syncMotor->GetPosition());
- syncMotor->Move(wxPoint2DDouble(posX, posY));
- syncMotor->RemoveParent(parent);
- delete parent;
- } else {
- Bus* parent = busList[parentID];
- syncMotor->AddParent(parent, wxPoint2DDouble(nodePosX, nodePosY));
- syncMotor->StartMove(syncMotor->GetPosition());
- syncMotor->Move(wxPoint2DDouble(posX, posY));
- }
- syncMotor->SetWidth(width);
- syncMotor->SetHeight(height);
-
- int numRot = angle / syncMotor->GetRotationAngle();
- bool clockwise = true;
- if(numRot < 0) {
- numRot = std::abs(numRot);
- clockwise = false;
- }
- for(int i = 0; i < numRot; i++) syncMotor->Rotate(clockwise);
-
- auto electricalProp = syncMotorNode->first_node("ElectricalProperties");
- if(!electricalProp) return false;
-
- syncMotor->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline"));
- SyncMotorElectricalData data = syncMotor->GetElectricalData();
- data.name = electricalProp->first_node("Name")->value();
- data.nominalPower = XMLParser::GetNodeValueDouble(electricalProp, "NominalPower");
- data.nominalPowerUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "NominalPower", "UnitID");
- // data.nominalVoltage = XMLParser::GetNodeValueDouble(electricalProp, "NominalVoltage");
- // data.nominalVoltageUnit = (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "NominalVoltage",
- // "UnitID");
- data.activePower = XMLParser::GetNodeValueDouble(electricalProp, "ActivePower");
- data.activePowerUnit = (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "ActivePower", "UnitID");
- data.reactivePower = XMLParser::GetNodeValueDouble(electricalProp, "ReactivePower");
- data.reactivePowerUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID");
- data.haveMaxReactive = XMLParser::GetNodeValueInt(electricalProp, "HaveMaxReactive");
- data.maxReactive = XMLParser::GetNodeValueDouble(electricalProp, "MaxReactive");
- data.maxReactiveUnit = (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "MaxReactive", "UnitID");
- data.haveMinReactive = XMLParser::GetNodeValueInt(electricalProp, "HaveMinReactive");
- data.minReactive = XMLParser::GetNodeValueDouble(electricalProp, "MinReactive");
- data.minReactiveUnit = (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "MinReactive", "UnitID");
- data.useMachineBase = XMLParser::GetNodeValueInt(electricalProp, "UseMachineBase");
-
- auto fault = electricalProp->first_node("Fault");
- if(!fault) return false;
- data.positiveResistance = XMLParser::GetNodeValueDouble(fault, "PositiveResistance");
- data.positiveReactance = XMLParser::GetNodeValueDouble(fault, "PositiveReactance");
- data.negativeResistance = XMLParser::GetNodeValueDouble(fault, "NegativeResistance");
- data.negativeReactance = XMLParser::GetNodeValueDouble(fault, "NegativeReactance");
- data.zeroResistance = XMLParser::GetNodeValueDouble(fault, "ZeroResistance");
- data.zeroReactance = XMLParser::GetNodeValueDouble(fault, "ZeroReactance");
- data.groundResistance = XMLParser::GetNodeValueDouble(fault, "GroundResistance");
- data.groundReactance = XMLParser::GetNodeValueDouble(fault, "GroundReactance");
- data.groundNeutral = XMLParser::GetNodeValueInt(fault, "GroundNeutral");
-
- /*SwitchingData swData;
- auto switchingList = electricalProp->first_node("SwitchingList");
- if(!switchingList) return false;
- auto swNode = switchingList->first_node("Switching");
- while(swNode) {
- swData.swType.push_back((SwitchingType)XMLParser::GetNodeValueInt(swNode, "Type"));
- swData.swTime.push_back(XMLParser::GetNodeValueDouble(swNode, "Time"));
- swNode = swNode->next_sibling("Switching");
- }
- syncMotor->SetSwitchingData(swData);*/
-
- syncMotor->SetElectricalData(data);
+ if(!syncMotor->OpenElement(syncMotorNode, parentList)) return false;
elementList.push_back(syncMotor);
syncMotorList.push_back(syncMotor);
+
syncMotorNode = syncMotorNode->next_sibling("SyncMotor");
} //}
@@ -1417,131 +471,10 @@ bool FileHanding::OpenProject(wxFileName path)
while(transfomerNode) {
Transformer* transformer = new Transformer();
- auto cadPropNode = transfomerNode->first_node("CADProperties");
- if(!cadPropNode) return false;
-
- auto position = cadPropNode->first_node("Position");
- double posX = XMLParser::GetNodeValueDouble(position, "X");
- double posY = XMLParser::GetNodeValueDouble(position, "Y");
- auto size = cadPropNode->first_node("Size");
- double width = XMLParser::GetNodeValueDouble(size, "Width");
- double height = XMLParser::GetNodeValueDouble(size, "Height");
- double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle");
-
- // Get nodes points
- std::vector<wxPoint2DDouble> ptsList;
- auto nodePosList = cadPropNode->first_node("NodeList");
- if(!nodePosList) return false;
- auto nodePos = nodePosList->first_node("Node");
- while(nodePos) {
- double nodePosX = XMLParser::GetNodeValueDouble(nodePos, "X");
- double nodePosY = XMLParser::GetNodeValueDouble(nodePos, "Y");
- ptsList.push_back(wxPoint2DDouble(nodePosX, nodePosY));
- nodePos = nodePos->next_sibling("Node");
- }
-
- // Get parents IDs
- auto parentIDList = cadPropNode->first_node("ParentIDList");
- if(!parentIDList) return false;
- auto parentNode = parentIDList->first_node("ParentID");
- long parentID[2] = {-1, -1};
- while(parentNode) {
- long index = 0;
- wxString(parentNode->first_attribute("ID")->value()).ToLong(&index);
- wxString(parentNode->value()).ToCLong(&parentID[index]);
- parentNode = parentNode->next_sibling("ParentID");
- }
-
- // Set parents (if have)
- Bus *parent1, *parent2;
- if(parentID[0] == -1) {
- parent1 = new Bus(ptsList[0]);
- transformer->AddParent(parent1, ptsList[0]);
- } else {
- parent1 = busList[parentID[0]];
- transformer->AddParent(parent1, ptsList[0]);
- }
- if(parentID[1] == -1) {
- parent2 = new Bus(ptsList[ptsList.size() - 1]);
- transformer->AddParent(parent2, ptsList[ptsList.size() - 1]);
- } else {
- parent2 = busList[parentID[1]];
- transformer->AddParent(parent2, ptsList[ptsList.size() - 1]);
- }
-
- transformer->StartMove(transformer->GetPosition());
- transformer->Move(wxPoint2DDouble(posX, posY));
-
- if(parentID[0] == -1) {
- transformer->RemoveParent(parent1);
- delete parent1;
- }
- if(parentID[1] == -1) {
- transformer->RemoveParent(parent2);
- delete parent2;
- }
-
- transformer->SetWidth(width);
- transformer->SetHeight(height);
-
- int numRot = angle / transformer->GetRotationAngle();
- bool clockwise = true;
- if(numRot < 0) {
- numRot = std::abs(numRot);
- clockwise = false;
- }
- for(int i = 0; i < numRot; i++) transformer->Rotate(clockwise);
-
- auto electricalProp = transfomerNode->first_node("ElectricalProperties");
- if(!electricalProp) return false;
-
- transformer->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline"));
- TransformerElectricalData data = transformer->GetElectricalData();
- data.name = electricalProp->first_node("Name")->value();
- data.primaryNominalVoltage = XMLParser::GetNodeValueDouble(electricalProp, "PrimaryNominalVoltage");
- data.primaryNominalVoltageUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "PrimaryNominalVoltage", "UnitID");
- data.secondaryNominalVoltage = XMLParser::GetNodeValueDouble(electricalProp, "SecondaryNominalVoltage");
- data.secondaryNominalVoltageUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "SecondaryNominalVoltage", "UnitID");
- data.nominalPower = XMLParser::GetNodeValueDouble(electricalProp, "NominalPower");
- data.nominalPowerUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "NominalPower", "UnitID");
- data.resistance = XMLParser::GetNodeValueDouble(electricalProp, "Resistance");
- data.resistanceUnit = (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "Resistance", "UnitID");
- data.indReactance = XMLParser::GetNodeValueDouble(electricalProp, "IndReactance");
- data.indReactanceUnit =
- (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "IndReactance", "UnitID");
- data.connection = (TransformerConnection)XMLParser::GetNodeValueInt(electricalProp, "Connection");
- data.turnsRatio = XMLParser::GetNodeValueDouble(electricalProp, "TurnsRatio");
- data.phaseShift = XMLParser::GetNodeValueDouble(electricalProp, "PhaseShift");
- data.useTransformerPower = XMLParser::GetNodeValueInt(electricalProp, "UseTransfomerPower");
-
- auto fault = electricalProp->first_node("Fault");
- data.zeroResistance = XMLParser::GetNodeValueDouble(fault, "ZeroResistance");
- data.zeroIndReactance = XMLParser::GetNodeValueDouble(fault, "ZeroIndReactance");
- data.primaryGrndResistance = XMLParser::GetNodeValueDouble(fault, "PrimaryGrndResistance");
- data.primaryGrndReactance = XMLParser::GetNodeValueDouble(fault, "PrimaryGrndReactance");
- data.secondaryGrndResistance = XMLParser::GetNodeValueDouble(fault, "SecondaryGrndResistance");
- data.secondaryGrndReactance = XMLParser::GetNodeValueDouble(fault, "SecondaryGrndReactance");
-
- SwitchingData swData;
- auto switchingList = electricalProp->first_node("SwitchingList");
- if(!switchingList) return false;
- auto swNode = switchingList->first_node("Switching");
- while(swNode) {
- swData.swType.push_back((SwitchingType)XMLParser::GetNodeValueInt(swNode, "Type"));
- swData.swTime.push_back(XMLParser::GetNodeValueDouble(swNode, "Time"));
- swNode = swNode->next_sibling("Switching");
- }
- transformer->SetSwitchingData(swData);
-
- transformer->SetElectricaData(data);
-
- if(swData.swTime.size() != 0) transformer->SetDynamicEvent(true);
-
+ if(!transformer->OpenElement(transfomerNode, parentList)) return false;
elementList.push_back(transformer);
transformerList.push_back(transformer);
+
transfomerNode = transfomerNode->next_sibling("Transfomer");
} //}
@@ -1552,32 +485,10 @@ bool FileHanding::OpenProject(wxFileName path)
if(!textListNode) return false;
auto textNode = textListNode->first_node("Text");
while(textNode) {
- auto cadPropNode = textNode->first_node("CADProperties");
- if(!cadPropNode) return false;
-
- auto position = cadPropNode->first_node("Position");
- double posX = XMLParser::GetNodeValueDouble(position, "X");
- double posY = XMLParser::GetNodeValueDouble(position, "Y");
- auto size = cadPropNode->first_node("Size");
- double width = XMLParser::GetNodeValueDouble(size, "Width");
- double height = XMLParser::GetNodeValueDouble(size, "Height");
- double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle");
-
- Text* text = new Text(wxPoint2DDouble(posX, posY));
+ Text* text = new Text();
- text->SetWidth(width);
- text->SetHeight(height);
+ if(!text->OpenElement(textNode)) return true;
- auto textProperties = textNode->first_node("TextProperties");
- if(!textProperties) return false;
-
- text->SetElementType((ElementType)XMLParser::GetNodeValueDouble(textProperties, "ElementType"));
- text->SetDataType((DataType)XMLParser::GetNodeValueDouble(textProperties, "DataType"));
- text->SetUnit((ElectricalUnit)XMLParser::GetNodeValueDouble(textProperties, "DataUnit"));
- text->SetDirection(XMLParser::GetNodeValueDouble(textProperties, "Direction"));
- text->SetDecimalPlaces(XMLParser::GetNodeValueDouble(textProperties, "DecimalPlaces"));
-
- text->SetElementNumber(XMLParser::GetNodeValueInt(textProperties, "ElementNumber"));
switch(text->GetElementType()) {
case TYPE_NONE:
break;
@@ -1619,14 +530,6 @@ bool FileHanding::OpenProject(wxFileName path)
} break;
}
- int numRot = angle / text->GetRotationAngle();
- bool clockwise = true;
- if(numRot < 0) {
- numRot = std::abs(numRot);
- clockwise = false;
- }
- for(int i = 0; i < numRot; i++) text->Rotate(clockwise);
-
textList.push_back(text);
textNode = textNode->next_sibling("Text");
} //}