diff options
Diffstat (limited to 'Project/FileHanding.cpp')
-rw-r--r-- | Project/FileHanding.cpp | 2817 |
1 files changed, 1299 insertions, 1518 deletions
diff --git a/Project/FileHanding.cpp b/Project/FileHanding.cpp index 7ef66c7..6bfbdf0 100644 --- a/Project/FileHanding.cpp +++ b/Project/FileHanding.cpp @@ -41,849 +41,849 @@ void FileHanding::SaveProject(wxFileName path) rapidxml::xml_node<>* rootNode = doc.allocate_node(rapidxml::node_element, "Project"); doc.append_node(rootNode); - rapidxml::xml_node<>* projectNameNode = AppendNode(doc, rootNode, "Name"); - SetNodeValue(doc, projectNameNode, path.GetName()); + rapidxml::xml_node<>* projectNameNode = XMLParser::AppendNode(doc, rootNode, "Name"); + XMLParser::SetNodeValue(doc, projectNameNode, path.GetName()); //{ Simulation properties PropertiesData* properties = m_workspace->GetProperties(); - auto propertiesNode = AppendNode(doc, rootNode, "Properties"); + auto propertiesNode = XMLParser::AppendNode(doc, rootNode, "Properties"); SimulationData simulationData = properties->GetSimulationPropertiesData(); - auto simulationPropNode = AppendNode(doc, propertiesNode, "SimulationProperties"); - - auto generalPropNode = AppendNode(doc, simulationPropNode, "General"); - auto basePower = AppendNode(doc, generalPropNode, "BasePower"); - SetNodeValue(doc, basePower, simulationData.basePower); - SetNodeAttribute(doc, basePower, "UnitID", simulationData.basePowerUnit); - auto contCalc = AppendNode(doc, generalPropNode, "ContinuousCalculation"); - auto contCalcFault = AppendNode(doc, contCalc, "Fault"); - SetNodeValue(doc, contCalcFault, simulationData.faultAfterPowerFlow); - auto contCalcSCPower = AppendNode(doc, contCalc, "SCPower"); - SetNodeValue(doc, contCalcSCPower, simulationData.scPowerAfterPowerFlow); - - auto powerFlowPropNode = AppendNode(doc, simulationPropNode, "PowerFlow"); - auto solutionMethod = AppendNode(doc, powerFlowPropNode, "SolutionMethod"); - SetNodeValue(doc, solutionMethod, simulationData.powerFlowMethod); - auto accFactor = AppendNode(doc, powerFlowPropNode, "AccFactor"); - SetNodeValue(doc, accFactor, simulationData.accFator); - auto pfTolerance = AppendNode(doc, powerFlowPropNode, "Tolerance"); - SetNodeValue(doc, pfTolerance, simulationData.powerFlowTolerance); - auto pfMaxIter = AppendNode(doc, powerFlowPropNode, "MaxIterations"); - SetNodeValue(doc, pfMaxIter, simulationData.powerFlowMaxIterations); - - auto stabilityPropNode = AppendNode(doc, simulationPropNode, "Stability"); - auto timeStep = AppendNode(doc, stabilityPropNode, "TimeStep"); - SetNodeValue(doc, timeStep, simulationData.timeStep); - auto simTime = AppendNode(doc, stabilityPropNode, "SimulationTime"); - SetNodeValue(doc, simTime, simulationData.stabilitySimulationTime); - auto freq = AppendNode(doc, stabilityPropNode, "Frequency"); - SetNodeValue(doc, freq, simulationData.stabilityFrequency); - auto stabTolerance = AppendNode(doc, stabilityPropNode, "Tolerance"); - SetNodeValue(doc, stabTolerance, simulationData.stabilityTolerance); - auto stabTMaxIter = AppendNode(doc, stabilityPropNode, "MaxIterations"); - SetNodeValue(doc, stabTMaxIter, simulationData.stabilityMaxIterations); - auto controlRatio = AppendNode(doc, stabilityPropNode, "ControlStepRatio"); - SetNodeValue(doc, controlRatio, simulationData.controlTimeStepRatio); - auto plotStep = AppendNode(doc, stabilityPropNode, "PlotStep"); - SetNodeValue(doc, plotStep, simulationData.plotTime); - auto useCOI = AppendNode(doc, stabilityPropNode, "UseCOI"); - SetNodeValue(doc, useCOI, simulationData.useCOI); - - auto zipPropNode = AppendNode(doc, simulationPropNode, "ZIPLoad"); - auto useCompLoads = AppendNode(doc, zipPropNode, "UseCompositeLoad"); - SetNodeValue(doc, useCompLoads, simulationData.useCompLoads); - auto activePowerComp = AppendNode(doc, zipPropNode, "ActivePowerComposition"); - auto pz = AppendNode(doc, activePowerComp, "ConstantImpedance"); - SetNodeValue(doc, pz, simulationData.constImpedanceActive); - auto pi = AppendNode(doc, activePowerComp, "ConstantCurrent"); - SetNodeValue(doc, pi, simulationData.constCurrentActive); - auto pp = AppendNode(doc, activePowerComp, "ConstantPower"); - SetNodeValue(doc, pp, simulationData.constPowerActive); - auto reactivePowerComp = AppendNode(doc, zipPropNode, "ReactivePowerComposition"); - auto qz = AppendNode(doc, reactivePowerComp, "ConstantImpedance"); - SetNodeValue(doc, qz, simulationData.constImpedanceReactive); - auto qi = AppendNode(doc, reactivePowerComp, "ConstantCurrent"); - SetNodeValue(doc, qi, simulationData.constCurrentReactive); - auto qp = AppendNode(doc, reactivePowerComp, "ConstantPower"); - SetNodeValue(doc, qp, simulationData.constPowerReactive); - auto undervoltageLim = AppendNode(doc, zipPropNode, "UndervoltageLimit"); - auto uvi = AppendNode(doc, undervoltageLim, "ConstantCurrent"); - SetNodeValue(doc, uvi, simulationData.underVoltageConstCurrent); - auto uvp = AppendNode(doc, undervoltageLim, "ConstantPower"); - SetNodeValue(doc, uvp, simulationData.underVoltageConstPower); + auto simulationPropNode = XMLParser::XMLParser::AppendNode(doc, propertiesNode, "SimulationProperties"); + + auto generalPropNode = XMLParser::AppendNode(doc, simulationPropNode, "General"); + auto basePower = XMLParser::AppendNode(doc, generalPropNode, "BasePower"); + XMLParser::SetNodeValue(doc, basePower, simulationData.basePower); + XMLParser::SetNodeAttribute(doc, basePower, "UnitID", simulationData.basePowerUnit); + auto contCalc = XMLParser::AppendNode(doc, generalPropNode, "ContinuousCalculation"); + auto contCalcFault = XMLParser::AppendNode(doc, contCalc, "Fault"); + XMLParser::SetNodeValue(doc, contCalcFault, simulationData.faultAfterPowerFlow); + auto contCalcSCPower = XMLParser::AppendNode(doc, contCalc, "SCPower"); + XMLParser::SetNodeValue(doc, contCalcSCPower, simulationData.scPowerAfterPowerFlow); + + auto powerFlowPropNode = XMLParser::AppendNode(doc, simulationPropNode, "PowerFlow"); + auto solutionMethod = XMLParser::AppendNode(doc, powerFlowPropNode, "SolutionMethod"); + XMLParser::SetNodeValue(doc, solutionMethod, simulationData.powerFlowMethod); + auto accFactor = XMLParser::AppendNode(doc, powerFlowPropNode, "AccFactor"); + XMLParser::SetNodeValue(doc, accFactor, simulationData.accFator); + auto pfTolerance = XMLParser::AppendNode(doc, powerFlowPropNode, "Tolerance"); + XMLParser::SetNodeValue(doc, pfTolerance, simulationData.powerFlowTolerance); + auto pfMaxIter = XMLParser::AppendNode(doc, powerFlowPropNode, "MaxIterations"); + XMLParser::SetNodeValue(doc, pfMaxIter, simulationData.powerFlowMaxIterations); + + auto stabilityPropNode = XMLParser::AppendNode(doc, simulationPropNode, "Stability"); + auto timeStep = XMLParser::AppendNode(doc, stabilityPropNode, "TimeStep"); + XMLParser::SetNodeValue(doc, timeStep, simulationData.timeStep); + auto simTime = XMLParser::AppendNode(doc, stabilityPropNode, "SimulationTime"); + XMLParser::SetNodeValue(doc, simTime, simulationData.stabilitySimulationTime); + auto freq = XMLParser::AppendNode(doc, stabilityPropNode, "Frequency"); + XMLParser::SetNodeValue(doc, freq, simulationData.stabilityFrequency); + auto stabTolerance = XMLParser::AppendNode(doc, stabilityPropNode, "Tolerance"); + XMLParser::SetNodeValue(doc, stabTolerance, simulationData.stabilityTolerance); + auto stabTMaxIter = XMLParser::AppendNode(doc, stabilityPropNode, "MaxIterations"); + XMLParser::SetNodeValue(doc, stabTMaxIter, simulationData.stabilityMaxIterations); + auto controlRatio = XMLParser::AppendNode(doc, stabilityPropNode, "ControlStepRatio"); + XMLParser::SetNodeValue(doc, controlRatio, simulationData.controlTimeStepRatio); + auto plotStep = XMLParser::AppendNode(doc, stabilityPropNode, "PlotStep"); + XMLParser::SetNodeValue(doc, plotStep, simulationData.plotTime); + auto useCOI = XMLParser::AppendNode(doc, stabilityPropNode, "UseCOI"); + XMLParser::SetNodeValue(doc, useCOI, simulationData.useCOI); + + auto zipPropNode = XMLParser::AppendNode(doc, simulationPropNode, "ZIPLoad"); + auto useCompLoads = XMLParser::AppendNode(doc, zipPropNode, "UseCompositeLoad"); + XMLParser::SetNodeValue(doc, useCompLoads, simulationData.useCompLoads); + auto activePowerComp = XMLParser::AppendNode(doc, zipPropNode, "ActivePowerComposition"); + auto pz = XMLParser::AppendNode(doc, activePowerComp, "ConstantImpedance"); + XMLParser::SetNodeValue(doc, pz, simulationData.constImpedanceActive); + auto pi = XMLParser::AppendNode(doc, activePowerComp, "ConstantCurrent"); + XMLParser::SetNodeValue(doc, pi, simulationData.constCurrentActive); + auto pp = XMLParser::AppendNode(doc, activePowerComp, "ConstantPower"); + XMLParser::SetNodeValue(doc, pp, simulationData.constPowerActive); + auto reactivePowerComp = XMLParser::AppendNode(doc, zipPropNode, "ReactivePowerComposition"); + auto qz = XMLParser::AppendNode(doc, reactivePowerComp, "ConstantImpedance"); + XMLParser::SetNodeValue(doc, qz, simulationData.constImpedanceReactive); + auto qi = XMLParser::AppendNode(doc, reactivePowerComp, "ConstantCurrent"); + XMLParser::SetNodeValue(doc, qi, simulationData.constCurrentReactive); + auto qp = XMLParser::AppendNode(doc, reactivePowerComp, "ConstantPower"); + XMLParser::SetNodeValue(doc, qp, simulationData.constPowerReactive); + auto undervoltageLim = XMLParser::AppendNode(doc, zipPropNode, "UndervoltageLimit"); + auto uvi = XMLParser::AppendNode(doc, undervoltageLim, "ConstantCurrent"); + XMLParser::SetNodeValue(doc, uvi, simulationData.underVoltageConstCurrent); + auto uvp = XMLParser::AppendNode(doc, undervoltageLim, "ConstantPower"); + XMLParser::SetNodeValue(doc, uvp, simulationData.underVoltageConstPower); //} - auto elementsNode = AppendNode(doc, rootNode, "Elements"); + auto elementsNode = XMLParser::AppendNode(doc, rootNode, "Elements"); // Save all the data ElectricCalculation allElements; allElements.GetElementsFromList(m_workspace->GetElementList()); //{ Buses - auto busesNode = AppendNode(doc, elementsNode, "BusList"); + auto busesNode = XMLParser::AppendNode(doc, elementsNode, "BusList"); auto busList = allElements.GetBusList(); for(int i = 0; i < (int)busList.size(); i++) { Bus* bus = busList[i]; - auto busNode = AppendNode(doc, busesNode, "Bus"); - SetNodeAttribute(doc, busNode, "ID", i); - auto cadProp = AppendNode(doc, busNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, bus->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, bus->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, bus->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, bus->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, bus->GetAngle()); + auto busNode = XMLParser::AppendNode(doc, busesNode, "Bus"); + XMLParser::SetNodeAttribute(doc, busNode, "ID", i); + auto cadProp = XMLParser::AppendNode(doc, busNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, bus->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, bus->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, bus->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, bus->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, bus->GetAngle()); BusElectricalData data = bus->GetElectricalData(); - auto electricalProp = AppendNode(doc, busNode, "ElectricalProperties"); - auto name = AppendNode(doc, electricalProp, "Name"); - SetNodeValue(doc, name, data.name); - auto nominalVoltage = AppendNode(doc, electricalProp, "NominalVoltage"); - SetNodeValue(doc, nominalVoltage, data.nominalVoltage); - SetNodeAttribute(doc, nominalVoltage, "UnitID", data.nominalVoltageUnit); - auto isVoltageControlled = AppendNode(doc, electricalProp, "IsVoltageControlled"); - SetNodeValue(doc, isVoltageControlled, data.isVoltageControlled); - auto controlledVoltage = AppendNode(doc, electricalProp, "ControlledVoltage"); - SetNodeValue(doc, controlledVoltage, data.controlledVoltage); - SetNodeAttribute(doc, controlledVoltage, "Choice", data.controlledVoltageUnitChoice); - auto slackBus = AppendNode(doc, electricalProp, "SlackBus"); - SetNodeValue(doc, slackBus, data.slackBus); - - auto fault = AppendNode(doc, electricalProp, "Fault"); - auto hasFault = AppendNode(doc, fault, "HasFault"); - SetNodeValue(doc, hasFault, data.hasFault); - auto faultType = AppendNode(doc, fault, "Type"); - SetNodeValue(doc, faultType, data.faultType); - auto faultLocation = AppendNode(doc, fault, "Location"); - SetNodeValue(doc, faultLocation, data.faultLocation); - auto faultResistance = AppendNode(doc, fault, "Resistance"); - SetNodeValue(doc, faultResistance, data.faultResistance); - auto faultReactance = AppendNode(doc, fault, "Reactance"); - SetNodeValue(doc, faultReactance, data.faultReactance); - - auto stability = AppendNode(doc, electricalProp, "Stability"); - auto plotBus = AppendNode(doc, stability, "Plot"); - SetNodeValue(doc, plotBus, data.plotBus); - auto stabHasFault = AppendNode(doc, stability, "HasFault"); - SetNodeValue(doc, stabHasFault, data.stabHasFault); - auto stabFaultTime = AppendNode(doc, stability, "FaultTime"); - SetNodeValue(doc, stabFaultTime, data.stabFaultTime); - auto stabFaultLength = AppendNode(doc, stability, "FaultLength"); - SetNodeValue(doc, stabFaultLength, data.stabFaultLength); - auto stabFaultResistance = AppendNode(doc, stability, "FaultResistance"); - SetNodeValue(doc, stabFaultResistance, data.stabFaultResistance); - auto stabFaultReactance = AppendNode(doc, stability, "FaultReactance"); - SetNodeValue(doc, stabFaultReactance, data.stabFaultReactance); + auto electricalProp = XMLParser::AppendNode(doc, busNode, "ElectricalProperties"); + 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 isVoltageControlled = XMLParser::AppendNode(doc, electricalProp, "IsVoltageControlled"); + XMLParser::SetNodeValue(doc, isVoltageControlled, data.isVoltageControlled); + auto controlledVoltage = XMLParser::AppendNode(doc, electricalProp, "ControlledVoltage"); + XMLParser::SetNodeValue(doc, controlledVoltage, data.controlledVoltage); + XMLParser::SetNodeAttribute(doc, controlledVoltage, "Choice", data.controlledVoltageUnitChoice); + auto slackBus = XMLParser::AppendNode(doc, electricalProp, "SlackBus"); + XMLParser::SetNodeValue(doc, slackBus, data.slackBus); + + auto fault = XMLParser::AppendNode(doc, electricalProp, "Fault"); + auto hasFault = XMLParser::AppendNode(doc, fault, "HasFault"); + XMLParser::SetNodeValue(doc, hasFault, data.hasFault); + auto faultType = XMLParser::AppendNode(doc, fault, "Type"); + XMLParser::SetNodeValue(doc, faultType, data.faultType); + auto faultLocation = XMLParser::AppendNode(doc, fault, "Location"); + XMLParser::SetNodeValue(doc, faultLocation, data.faultLocation); + auto faultResistance = XMLParser::AppendNode(doc, fault, "Resistance"); + XMLParser::SetNodeValue(doc, faultResistance, data.faultResistance); + auto faultReactance = XMLParser::AppendNode(doc, fault, "Reactance"); + XMLParser::SetNodeValue(doc, faultReactance, data.faultReactance); + + auto stability = XMLParser::AppendNode(doc, electricalProp, "Stability"); + auto plotBus = XMLParser::AppendNode(doc, stability, "Plot"); + XMLParser::SetNodeValue(doc, plotBus, data.plotBus); + auto stabHasFault = XMLParser::AppendNode(doc, stability, "HasFault"); + XMLParser::SetNodeValue(doc, stabHasFault, data.stabHasFault); + auto stabFaultTime = XMLParser::AppendNode(doc, stability, "FaultTime"); + XMLParser::SetNodeValue(doc, stabFaultTime, data.stabFaultTime); + auto stabFaultLength = XMLParser::AppendNode(doc, stability, "FaultLength"); + XMLParser::SetNodeValue(doc, stabFaultLength, data.stabFaultLength); + auto stabFaultResistance = XMLParser::AppendNode(doc, stability, "FaultResistance"); + XMLParser::SetNodeValue(doc, stabFaultResistance, data.stabFaultResistance); + auto stabFaultReactance = XMLParser::AppendNode(doc, stability, "FaultReactance"); + XMLParser::SetNodeValue(doc, stabFaultReactance, data.stabFaultReactance); data.number = i; bus->SetElectricalData(data); } //} //{ Capacitor - auto capacitorsNode = AppendNode(doc, elementsNode, "CapacitorList"); + auto capacitorsNode = XMLParser::AppendNode(doc, elementsNode, "CapacitorList"); auto capacitorList = allElements.GetCapacitorList(); for(int i = 0; i < (int)capacitorList.size(); i++) { Capacitor* capacitor = capacitorList[i]; - auto capacitorNode = AppendNode(doc, capacitorsNode, "Capacitor"); - SetNodeAttribute(doc, capacitorNode, "ID", i); - auto cadProp = AppendNode(doc, capacitorNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, capacitor->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, capacitor->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, capacitor->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, capacitor->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, capacitor->GetAngle()); - auto nodePos = AppendNode(doc, cadProp, "NodePosition"); - auto nodePosX = AppendNode(doc, nodePos, "X"); - SetNodeValue(doc, nodePosX, capacitor->GetPointList()[0].m_x); - auto nodePosY = AppendNode(doc, nodePos, "Y"); - SetNodeValue(doc, nodePosY, capacitor->GetPointList()[0].m_y); - auto parentID = AppendNode(doc, cadProp, "ParentID"); + auto capacitorNode = XMLParser::AppendNode(doc, capacitorsNode, "Capacitor"); + XMLParser::SetNodeAttribute(doc, capacitorNode, "ID", i); + auto cadProp = XMLParser::AppendNode(doc, capacitorNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, capacitor->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, capacitor->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, capacitor->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, capacitor->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, capacitor->GetAngle()); + auto nodePos = XMLParser::AppendNode(doc, cadProp, "NodePosition"); + auto nodePosX = XMLParser::AppendNode(doc, nodePos, "X"); + XMLParser::SetNodeValue(doc, nodePosX, capacitor->GetPointList()[0].m_x); + auto nodePosY = XMLParser::AppendNode(doc, nodePos, "Y"); + XMLParser::SetNodeValue(doc, nodePosY, capacitor->GetPointList()[0].m_y); + auto parentID = XMLParser::AppendNode(doc, cadProp, "ParentID"); Bus* parent = static_cast<Bus*>(capacitor->GetParentList()[0]); - if(parent) SetNodeValue(doc, parentID, parent->GetElectricalData().number); + if(parent) XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number); CapacitorElectricalData data = capacitor->GetElectricalData(); - auto electricalProp = AppendNode(doc, capacitorNode, "ElectricalProperties"); - auto isOnline = AppendNode(doc, electricalProp, "IsOnline"); - SetNodeValue(doc, isOnline, capacitor->IsOnline()); - auto name = AppendNode(doc, electricalProp, "Name"); - SetNodeValue(doc, name, data.name); - auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower"); - SetNodeValue(doc, reactivePower, data.reactivePower); - SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit); - - auto switchingList = AppendNode(doc, electricalProp, "SwitchingList"); + auto electricalProp = XMLParser::AppendNode(doc, capacitorNode, "ElectricalProperties"); + auto isOnline = XMLParser::AppendNode(doc, electricalProp, "IsOnline"); + XMLParser::SetNodeValue(doc, isOnline, capacitor->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 = capacitor->GetSwitchingData(); for(int j = 0; j < (int)swData.swType.size(); j++) { - auto switching = AppendNode(doc, switchingList, "Switching"); - SetNodeAttribute(doc, switching, "ID", j); - auto swType = AppendNode(doc, switching, "Type"); - SetNodeValue(doc, swType, swData.swType[j]); - auto swTime = AppendNode(doc, switching, "Time"); - SetNodeValue(doc, swTime, swData.swTime[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]); } } //} //{ IndMotor - auto indMotorsNode = AppendNode(doc, elementsNode, "IndMotorList"); + auto indMotorsNode = XMLParser::AppendNode(doc, elementsNode, "IndMotorList"); auto indMotorList = allElements.GetIndMotorList(); for(int i = 0; i < (int)indMotorList.size(); i++) { IndMotor* indMotor = indMotorList[i]; - auto indMotorNode = AppendNode(doc, indMotorsNode, "IndMotor"); - SetNodeAttribute(doc, indMotorNode, "ID", i); - auto cadProp = AppendNode(doc, indMotorNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, indMotor->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, indMotor->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, indMotor->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, indMotor->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, indMotor->GetAngle()); - auto nodePos = AppendNode(doc, cadProp, "NodePosition"); - auto nodePosX = AppendNode(doc, nodePos, "X"); - SetNodeValue(doc, nodePosX, indMotor->GetPointList()[0].m_x); - auto nodePosY = AppendNode(doc, nodePos, "Y"); - SetNodeValue(doc, nodePosY, indMotor->GetPointList()[0].m_y); - auto parentID = AppendNode(doc, cadProp, "ParentID"); + auto indMotorNode = XMLParser::AppendNode(doc, indMotorsNode, "IndMotor"); + XMLParser::SetNodeAttribute(doc, indMotorNode, "ID", i); + auto cadProp = XMLParser::AppendNode(doc, indMotorNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, indMotor->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, indMotor->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, indMotor->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, indMotor->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, indMotor->GetAngle()); + auto nodePos = XMLParser::AppendNode(doc, cadProp, "NodePosition"); + auto nodePosX = XMLParser::AppendNode(doc, nodePos, "X"); + XMLParser::SetNodeValue(doc, nodePosX, indMotor->GetPointList()[0].m_x); + auto nodePosY = XMLParser::AppendNode(doc, nodePos, "Y"); + XMLParser::SetNodeValue(doc, nodePosY, indMotor->GetPointList()[0].m_y); + auto parentID = XMLParser::AppendNode(doc, cadProp, "ParentID"); Bus* parent = static_cast<Bus*>(indMotor->GetParentList()[0]); - if(parent) SetNodeValue(doc, parentID, parent->GetElectricalData().number); + if(parent) XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number); IndMotorElectricalData data = indMotor->GetElectricalData(); - auto electricalProp = AppendNode(doc, indMotorNode, "ElectricalProperties"); - auto isOnline = AppendNode(doc, electricalProp, "IsOnline"); - SetNodeValue(doc, isOnline, indMotor->IsOnline()); - auto name = AppendNode(doc, electricalProp, "Name"); - SetNodeValue(doc, name, data.name); - auto activePower = AppendNode(doc, electricalProp, "ActivePower"); - SetNodeValue(doc, activePower, data.activePower); - SetNodeAttribute(doc, activePower, "UnitID", data.activePowerUnit); - auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower"); - SetNodeValue(doc, reactivePower, data.reactivePower); - SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit); + auto electricalProp = XMLParser::AppendNode(doc, indMotorNode, "ElectricalProperties"); + auto isOnline = XMLParser::AppendNode(doc, electricalProp, "IsOnline"); + XMLParser::SetNodeValue(doc, isOnline, indMotor->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); } //} //{ Inductor - auto inductorsNode = AppendNode(doc, elementsNode, "InductorList"); + 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 = AppendNode(doc, inductorsNode, "Inductor"); - SetNodeAttribute(doc, inductorNode, "ID", i); - auto cadProp = AppendNode(doc, inductorNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, inductor->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, inductor->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, inductor->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, inductor->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, inductor->GetAngle()); - auto nodePos = AppendNode(doc, cadProp, "NodePosition"); - auto nodePosX = AppendNode(doc, nodePos, "X"); - SetNodeValue(doc, nodePosX, inductor->GetPointList()[0].m_x); - auto nodePosY = AppendNode(doc, nodePos, "Y"); - SetNodeValue(doc, nodePosY, inductor->GetPointList()[0].m_y); - auto parentID = AppendNode(doc, cadProp, "ParentID"); + 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) SetNodeValue(doc, parentID, parent->GetElectricalData().number); + if(parent) XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number); InductorElectricalData data = inductor->GetElectricalData(); - auto electricalProp = AppendNode(doc, inductorNode, "ElectricalProperties"); - auto isOnline = AppendNode(doc, electricalProp, "IsOnline"); - SetNodeValue(doc, isOnline, inductor->IsOnline()); - auto name = AppendNode(doc, electricalProp, "Name"); - SetNodeValue(doc, name, data.name); - auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower"); - SetNodeValue(doc, reactivePower, data.reactivePower); - SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit); - - auto switchingList = AppendNode(doc, electricalProp, "SwitchingList"); + 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 = AppendNode(doc, switchingList, "Switching"); - SetNodeAttribute(doc, switching, "ID", j); - auto swType = AppendNode(doc, switching, "Type"); - SetNodeValue(doc, swType, swData.swType[j]); - auto swTime = AppendNode(doc, switching, "Time"); - SetNodeValue(doc, swTime, swData.swTime[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]); } } //} //{ Line - auto linesNode = AppendNode(doc, elementsNode, "LineList"); + 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 = AppendNode(doc, linesNode, "Line"); - SetNodeAttribute(doc, lineNode, "ID", i); - auto cadProp = AppendNode(doc, lineNode, "CADProperties"); - auto nodeList = AppendNode(doc, cadProp, "NodeList"); + 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 = AppendNode(doc, nodeList, "Node"); - SetNodeAttribute(doc, nodePos, "ID", nodeID); - auto nodePosX = AppendNode(doc, nodePos, "X"); - SetNodeValue(doc, nodePosX, ptList[j].m_x); - auto nodePosY = AppendNode(doc, nodePos, "Y"); - SetNodeValue(doc, nodePosY, ptList[j].m_y); + 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 = AppendNode(doc, cadProp, "ParentIDList"); + 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 = AppendNode(doc, parentIDList, "ParentID"); - SetNodeAttribute(doc, parentID, "ID", j); - SetNodeValue(doc, parentID, parent->GetElectricalData().number); + 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 = AppendNode(doc, lineNode, "ElectricalProperties"); - auto isOnline = AppendNode(doc, electricalProp, "IsOnline"); - SetNodeValue(doc, isOnline, line->IsOnline()); - auto name = AppendNode(doc, electricalProp, "Name"); - SetNodeValue(doc, name, data.name); - auto nominalVoltage = AppendNode(doc, electricalProp, "NominalVoltage"); - SetNodeValue(doc, nominalVoltage, data.nominalVoltage); - SetNodeAttribute(doc, nominalVoltage, "UnitID", data.nominalVoltageUnit); - auto nominalPower = AppendNode(doc, electricalProp, "NominalPower"); - SetNodeValue(doc, nominalPower, data.nominalPower); - SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit); - auto resistance = AppendNode(doc, electricalProp, "Resistance"); - SetNodeValue(doc, resistance, data.resistance); - SetNodeAttribute(doc, resistance, "UnitID", data.resistanceUnit); - auto indReactance = AppendNode(doc, electricalProp, "IndReactance"); - SetNodeValue(doc, indReactance, data.indReactance); - SetNodeAttribute(doc, indReactance, "UnitID", data.indReactanceUnit); - auto capSusceptance = AppendNode(doc, electricalProp, "CapSusceptance"); - SetNodeValue(doc, capSusceptance, data.capSusceptance); - SetNodeAttribute(doc, capSusceptance, "UnitID", data.capSusceptanceUnit); - auto lineSize = AppendNode(doc, electricalProp, "LineSize"); - SetNodeValue(doc, lineSize, data.lineSize); - auto useLinePower = AppendNode(doc, electricalProp, "UseLinePower"); - SetNodeValue(doc, useLinePower, data.useLinePower); - - auto fault = AppendNode(doc, electricalProp, "Fault"); - auto zeroResistance = AppendNode(doc, fault, "ZeroResistance"); - SetNodeValue(doc, zeroResistance, data.zeroResistance); - auto zeroIndReactance = AppendNode(doc, fault, "ZeroIndReactance"); - SetNodeValue(doc, zeroIndReactance, data.zeroIndReactance); - auto zeroCapSusceptance = AppendNode(doc, fault, "ZeroCapSusceptance"); - SetNodeValue(doc, zeroCapSusceptance, data.zeroCapSusceptance); - - auto switchingList = AppendNode(doc, electricalProp, "SwitchingList"); + 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 = AppendNode(doc, switchingList, "Switching"); - SetNodeAttribute(doc, switching, "ID", j); - auto swType = AppendNode(doc, switching, "Type"); - SetNodeValue(doc, swType, swData.swType[j]); - auto swTime = AppendNode(doc, switching, "Time"); - SetNodeValue(doc, swTime, swData.swTime[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]); } } //} //{ Load - auto loadsNode = AppendNode(doc, elementsNode, "LoadList"); + 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 = AppendNode(doc, loadsNode, "Load"); - SetNodeAttribute(doc, loadNode, "ID", i); - auto cadProp = AppendNode(doc, loadNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, load->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, load->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, load->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, load->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, load->GetAngle()); - auto nodePos = AppendNode(doc, cadProp, "NodePosition"); - auto nodePosX = AppendNode(doc, nodePos, "X"); - SetNodeValue(doc, nodePosX, load->GetPointList()[0].m_x); - auto nodePosY = AppendNode(doc, nodePos, "Y"); - SetNodeValue(doc, nodePosY, load->GetPointList()[0].m_y); - auto parentID = AppendNode(doc, cadProp, "ParentID"); + 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) SetNodeValue(doc, parentID, parent->GetElectricalData().number); + if(parent) XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number); LoadElectricalData data = load->GetElectricalData(); - auto electricalProp = AppendNode(doc, loadNode, "ElectricalProperties"); - auto isOnline = AppendNode(doc, electricalProp, "IsOnline"); - SetNodeValue(doc, isOnline, load->IsOnline()); - auto name = AppendNode(doc, electricalProp, "Name"); - SetNodeValue(doc, name, data.name); - auto activePower = AppendNode(doc, electricalProp, "ActivePower"); - SetNodeValue(doc, activePower, data.activePower); - SetNodeAttribute(doc, activePower, "UnitID", data.activePowerUnit); - auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower"); - SetNodeValue(doc, reactivePower, data.reactivePower); - SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit); - auto loadType = AppendNode(doc, electricalProp, "LoadType"); - SetNodeValue(doc, loadType, data.loadType); - - auto stability = AppendNode(doc, electricalProp, "Stability"); - auto plotLoad = AppendNode(doc, stability, "PlotLoad"); - SetNodeValue(doc, plotLoad, data.plotLoad); - auto useCompLoad = AppendNode(doc, stability, "UseCompositeLoad"); - SetNodeValue(doc, useCompLoad, data.useCompLoad); - auto activePowerCompl = AppendNode(doc, stability, "ActivePowerComposition"); - auto pzl = AppendNode(doc, activePowerCompl, "ConstantImpedance"); - SetNodeValue(doc, pzl, data.constImpedanceActive); - auto pil = AppendNode(doc, activePowerCompl, "ConstantCurrent"); - SetNodeValue(doc, pil, data.constCurrentActive); - auto ppl = AppendNode(doc, activePowerCompl, "ConstantPower"); - SetNodeValue(doc, ppl, data.constPowerActive); - auto reactivePowerCompl = AppendNode(doc, stability, "ReactivePowerComposition"); - auto qzl = AppendNode(doc, reactivePowerCompl, "ConstantImpedance"); - SetNodeValue(doc, qzl, data.constImpedanceReactive); - auto qil = AppendNode(doc, reactivePowerCompl, "ConstantCurrent"); - SetNodeValue(doc, qil, data.constCurrentReactive); - auto qpl = AppendNode(doc, reactivePowerCompl, "ConstantPower"); - SetNodeValue(doc, qpl, data.constPowerReactive); - - auto switchingList = AppendNode(doc, electricalProp, "SwitchingList"); + 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 = AppendNode(doc, switchingList, "Switching"); - SetNodeAttribute(doc, switching, "ID", j); - auto swType = AppendNode(doc, switching, "Type"); - SetNodeValue(doc, swType, swData.swType[j]); - auto swTime = AppendNode(doc, switching, "Time"); - SetNodeValue(doc, swTime, swData.swTime[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]); } } //} //{ SyncGenerator - auto syncGeneratorsNode = AppendNode(doc, elementsNode, "SyncGeneratorList"); + 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 = AppendNode(doc, syncGeneratorsNode, "SyncGenerator"); - SetNodeAttribute(doc, syncGeneratorNode, "ID", i); - auto cadProp = AppendNode(doc, syncGeneratorNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, syncGenerator->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, syncGenerator->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, syncGenerator->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, syncGenerator->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, syncGenerator->GetAngle()); - auto nodePos = AppendNode(doc, cadProp, "NodePosition"); - auto nodePosX = AppendNode(doc, nodePos, "X"); - SetNodeValue(doc, nodePosX, syncGenerator->GetPointList()[0].m_x); - auto nodePosY = AppendNode(doc, nodePos, "Y"); - SetNodeValue(doc, nodePosY, syncGenerator->GetPointList()[0].m_y); - auto parentID = AppendNode(doc, cadProp, "ParentID"); + 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) SetNodeValue(doc, parentID, parent->GetElectricalData().number); + if(parent) XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number); SyncGeneratorElectricalData data = syncGenerator->GetElectricalData(); - auto electricalProp = AppendNode(doc, syncGeneratorNode, "ElectricalProperties"); - auto isOnline = AppendNode(doc, electricalProp, "IsOnline"); - SetNodeValue(doc, isOnline, syncGenerator->IsOnline()); - auto name = AppendNode(doc, electricalProp, "Name"); - SetNodeValue(doc, name, data.name); - auto nominalPower = AppendNode(doc, electricalProp, "NominalPower"); - SetNodeValue(doc, nominalPower, data.nominalPower); - SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit); - auto nominalVoltage = AppendNode(doc, electricalProp, "NominalVoltage"); - SetNodeValue(doc, nominalVoltage, data.nominalVoltage); - SetNodeAttribute(doc, nominalVoltage, "UnitID", data.nominalVoltageUnit); - auto activePower = AppendNode(doc, electricalProp, "ActivePower"); - SetNodeValue(doc, activePower, data.activePower); - SetNodeAttribute(doc, activePower, "UnitID", data.activePowerUnit); - auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower"); - SetNodeValue(doc, reactivePower, data.reactivePower); - SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit); - auto haveMaxReactive = AppendNode(doc, electricalProp, "HaveMaxReactive"); - SetNodeValue(doc, haveMaxReactive, data.haveMaxReactive); - auto maxReactive = AppendNode(doc, electricalProp, "MaxReactive"); - SetNodeValue(doc, maxReactive, data.maxReactive); - SetNodeAttribute(doc, maxReactive, "UnitID", data.maxReactiveUnit); - auto haveMinReactive = AppendNode(doc, electricalProp, "HaveMinReactive"); - SetNodeValue(doc, haveMinReactive, data.haveMinReactive); - auto minReactive = AppendNode(doc, electricalProp, "MinReactive"); - SetNodeValue(doc, minReactive, data.minReactive); - SetNodeAttribute(doc, minReactive, "UnitID", data.minReactiveUnit); - auto useMachineBase = AppendNode(doc, electricalProp, "UseMachineBase"); - SetNodeValue(doc, useMachineBase, data.useMachineBase); - - auto fault = AppendNode(doc, electricalProp, "Fault"); - auto positiveResistance = AppendNode(doc, fault, "PositiveResistance"); - SetNodeValue(doc, positiveResistance, data.positiveResistance); - auto positiveReactance = AppendNode(doc, fault, "PositiveReactance"); - SetNodeValue(doc, positiveReactance, data.positiveReactance); - auto negativeResistance = AppendNode(doc, fault, "NegativeResistance"); - SetNodeValue(doc, negativeResistance, data.negativeResistance); - auto negativeReactance = AppendNode(doc, fault, "NegativeReactance"); - SetNodeValue(doc, negativeReactance, data.negativeReactance); - auto zeroResistance = AppendNode(doc, fault, "ZeroResistance"); - SetNodeValue(doc, zeroResistance, data.zeroResistance); - auto zeroReactance = AppendNode(doc, fault, "ZeroReactance"); - SetNodeValue(doc, zeroReactance, data.zeroReactance); - auto groundResistance = AppendNode(doc, fault, "GroundResistance"); - SetNodeValue(doc, groundResistance, data.groundResistance); - auto groundReactance = AppendNode(doc, fault, "GroundReactance"); - SetNodeValue(doc, groundReactance, data.groundReactance); - auto groundNeutral = AppendNode(doc, fault, "GroundNeutral"); - SetNodeValue(doc, groundNeutral, data.groundNeutral); - - auto stability = AppendNode(doc, electricalProp, "Stability"); - auto plotSyncMachine = AppendNode(doc, stability, "PlotSyncMachine"); - SetNodeValue(doc, plotSyncMachine, data.plotSyncMachine); - auto inertia = AppendNode(doc, stability, "Inertia"); - SetNodeValue(doc, inertia, data.inertia); - auto damping = AppendNode(doc, stability, "Damping"); - SetNodeValue(doc, damping, data.damping); - auto useAVR = AppendNode(doc, stability, "UseAVR"); - SetNodeValue(doc, useAVR, data.useAVR); - auto useSpeedGovernor = AppendNode(doc, stability, "UseSpeedGovernor"); - SetNodeValue(doc, useSpeedGovernor, data.useSpeedGovernor); - auto armResistance = AppendNode(doc, stability, "ArmResistance"); - SetNodeValue(doc, armResistance, data.armResistance); - auto potierReactance = AppendNode(doc, stability, "PotierReactance"); - SetNodeValue(doc, potierReactance, data.potierReactance); - auto satFactor = AppendNode(doc, stability, "SatFactor"); - SetNodeValue(doc, satFactor, data.satFactor); - auto syncXd = AppendNode(doc, stability, "SyncXd"); - SetNodeValue(doc, syncXd, data.syncXd); - auto syncXq = AppendNode(doc, stability, "SyncXq"); - SetNodeValue(doc, syncXq, data.syncXq); - auto transXd = AppendNode(doc, stability, "TransXd"); - SetNodeValue(doc, transXd, data.transXd); - auto transXq = AppendNode(doc, stability, "TransXq"); - SetNodeValue(doc, transXq, data.transXq); - auto transTd0 = AppendNode(doc, stability, "TransTd0"); - SetNodeValue(doc, transTd0, data.transTd0); - auto transTq0 = AppendNode(doc, stability, "TransTq0"); - SetNodeValue(doc, transTq0, data.transTq0); - auto subXd = AppendNode(doc, stability, "SubXd"); - SetNodeValue(doc, subXd, data.subXd); - auto subXq = AppendNode(doc, stability, "SubXq"); - SetNodeValue(doc, subXq, data.subXq); - auto subTd0 = AppendNode(doc, stability, "SubTd0"); - SetNodeValue(doc, subTd0, data.subTd0); - auto subTq0 = AppendNode(doc, stability, "SubTq0"); - SetNodeValue(doc, subTq0, data.subTq0); - - auto avr = AppendNode(doc, stability, "AVR"); + 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); + + auto avr = XMLParser::AppendNode(doc, stability, "AVR"); if(data.avr) SaveControlElements(doc, avr, data.avr); - auto speedGov = AppendNode(doc, stability, "SpeedGovernor"); + auto speedGov = XMLParser::AppendNode(doc, stability, "SpeedGovernor"); if(data.speedGov) SaveControlElements(doc, speedGov, data.speedGov); - auto switchingList = AppendNode(doc, electricalProp, "SwitchingList"); + auto switchingList = XMLParser::AppendNode(doc, electricalProp, "SwitchingList"); SwitchingData swData = syncGenerator->GetSwitchingData(); for(int j = 0; j < (int)swData.swType.size(); j++) { - auto switching = AppendNode(doc, switchingList, "Switching"); - SetNodeAttribute(doc, switching, "ID", j); - auto swType = AppendNode(doc, switching, "Type"); - SetNodeValue(doc, swType, swData.swType[j]); - auto swTime = AppendNode(doc, switching, "Time"); - SetNodeValue(doc, swTime, swData.swTime[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]); } } //} //{ SyncMotor - auto syncMotorsNode = AppendNode(doc, elementsNode, "SyncMotorList"); + 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 = AppendNode(doc, syncMotorsNode, "SyncMotor"); - SetNodeAttribute(doc, syncMotorNode, "ID", i); - auto cadProp = AppendNode(doc, syncMotorNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, syncMotor->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, syncMotor->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, syncMotor->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, syncMotor->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, syncMotor->GetAngle()); - auto nodePos = AppendNode(doc, cadProp, "NodePosition"); - auto nodePosX = AppendNode(doc, nodePos, "X"); - SetNodeValue(doc, nodePosX, syncMotor->GetPointList()[0].m_x); - auto nodePosY = AppendNode(doc, nodePos, "Y"); - SetNodeValue(doc, nodePosY, syncMotor->GetPointList()[0].m_y); - auto parentID = AppendNode(doc, cadProp, "ParentID"); + 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) SetNodeValue(doc, parentID, parent->GetElectricalData().number); + if(parent) XMLParser::SetNodeValue(doc, parentID, parent->GetElectricalData().number); SyncMotorElectricalData data = syncMotor->GetElectricalData(); - auto electricalProp = AppendNode(doc, syncMotorNode, "ElectricalProperties"); - auto isOnline = AppendNode(doc, electricalProp, "IsOnline"); - SetNodeValue(doc, isOnline, syncMotor->IsOnline()); - auto name = AppendNode(doc, electricalProp, "Name"); - SetNodeValue(doc, name, data.name); - auto nominalPower = AppendNode(doc, electricalProp, "NominalPower"); - SetNodeValue(doc, nominalPower, data.nominalPower); - SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit); - // auto nominalVoltage = AppendNode(doc, electricalProp, "NominalVoltage"); - // SetNodeValue(doc, nominalVoltage, data.nominalVoltage); - // SetNodeAttribute(doc, nominalVoltage, "UnitID", data.nominalVoltageUnit); - auto activePower = AppendNode(doc, electricalProp, "ActivePower"); - SetNodeValue(doc, activePower, data.activePower); - SetNodeAttribute(doc, activePower, "UnitID", data.activePowerUnit); - auto reactivePower = AppendNode(doc, electricalProp, "ReactivePower"); - SetNodeValue(doc, reactivePower, data.reactivePower); - SetNodeAttribute(doc, reactivePower, "UnitID", data.reactivePowerUnit); - auto haveMaxReactive = AppendNode(doc, electricalProp, "HaveMaxReactive"); - SetNodeValue(doc, haveMaxReactive, data.haveMaxReactive); - auto maxReactive = AppendNode(doc, electricalProp, "MaxReactive"); - SetNodeValue(doc, maxReactive, data.maxReactive); - SetNodeAttribute(doc, maxReactive, "UnitID", data.maxReactiveUnit); - auto haveMinReactive = AppendNode(doc, electricalProp, "HaveMinReactive"); - SetNodeValue(doc, haveMinReactive, data.haveMinReactive); - auto minReactive = AppendNode(doc, electricalProp, "MinReactive"); - SetNodeValue(doc, minReactive, data.minReactive); - SetNodeAttribute(doc, minReactive, "UnitID", data.minReactiveUnit); - auto useMachineBase = AppendNode(doc, electricalProp, "UseMachineBase"); - SetNodeValue(doc, useMachineBase, data.useMachineBase); - - auto fault = AppendNode(doc, electricalProp, "Fault"); - auto positiveResistance = AppendNode(doc, fault, "PositiveResistance"); - SetNodeValue(doc, positiveResistance, data.positiveResistance); - auto positiveReactance = AppendNode(doc, fault, "PositiveReactance"); - SetNodeValue(doc, positiveReactance, data.positiveReactance); - auto negativeResistance = AppendNode(doc, fault, "NegativeResistance"); - SetNodeValue(doc, negativeResistance, data.negativeResistance); - auto negativeReactance = AppendNode(doc, fault, "NegativeReactance"); - SetNodeValue(doc, negativeReactance, data.negativeReactance); - auto zeroResistance = AppendNode(doc, fault, "ZeroResistance"); - SetNodeValue(doc, zeroResistance, data.zeroResistance); - auto zeroReactance = AppendNode(doc, fault, "ZeroReactance"); - SetNodeValue(doc, zeroReactance, data.zeroReactance); - auto groundResistance = AppendNode(doc, fault, "GroundResistance"); - SetNodeValue(doc, groundResistance, data.groundResistance); - auto groundReactance = AppendNode(doc, fault, "GroundReactance"); - SetNodeValue(doc, groundReactance, data.groundReactance); - auto groundNeutral = AppendNode(doc, fault, "GroundNeutral"); - SetNodeValue(doc, groundNeutral, data.groundNeutral); + 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 = AppendNode(doc, electricalProp, "Stability"); - auto plotSyncMachine = AppendNode(doc, stability, "PlotSyncMotor"); - SetNodeValue(doc, plotSyncMachine, data.plotSyncMachine); - auto inertia = AppendNode(doc, stability, "Inertia"); - SetNodeValue(doc, inertia, data.inertia); - auto damping = AppendNode(doc, stability, "Damping"); - SetNodeValue(doc, damping, data.damping); - auto useAVR = AppendNode(doc, stability, "UseAVR"); - SetNodeValue(doc, useAVR, data.useAVR); - auto armResistance = AppendNode(doc, stability, "ArmResistance"); - SetNodeValue(doc, armResistance, data.armResistance); - auto potierReactance = AppendNode(doc, stability, "PotierReactance"); - SetNodeValue(doc, potierReactance, data.potierReactance); - auto satFactor = AppendNode(doc, stability, "SatFactor"); - SetNodeValue(doc, satFactor, data.satFactor); - auto syncXd = AppendNode(doc, stability, "SyncXd"); - SetNodeValue(doc, syncXd, data.syncXd); - auto syncXq = AppendNode(doc, stability, "SyncXq"); - SetNodeValue(doc, syncXq, data.syncXq); - auto transXd = AppendNode(doc, stability, "TransXd"); - SetNodeValue(doc, transXd, data.transXd); - auto transXq = AppendNode(doc, stability, "TransXq"); - SetNodeValue(doc, transXq, data.transXq); - auto transTd0 = AppendNode(doc, stability, "TransTd0"); - SetNodeValue(doc, transTd0, data.transTd0); - auto transTq0 = AppendNode(doc, stability, "TransTq0"); - SetNodeValue(doc, transTq0, data.transTq0); - auto subXd = AppendNode(doc, stability, "SubXd"); - SetNodeValue(doc, subXd, data.subXd); - auto subXq = AppendNode(doc, stability, "SubXq"); - SetNodeValue(doc, subXq, data.subXq); - auto subTd0 = AppendNode(doc, stability, "SubTd0"); - SetNodeValue(doc, subTd0, data.subTd0); - auto subTq0 = AppendNode(doc, stability, "SubTq0"); - SetNodeValue(doc, subTq0, data.subTq0); - - auto switchingList = AppendNode(doc, electricalProp, "SwitchingList"); + /*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 = AppendNode(doc, switchingList, "Switching"); - SetNodeAttribute(doc, switching, "ID", j); - auto swType = AppendNode(doc, switching, "Type"); - SetNodeValue(doc, swType, swData.swType[j]); - auto swTime = AppendNode(doc, switching, "Time"); - SetNodeValue(doc, swTime, swData.swTime[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]); }*/ } //} //{ Transfomer - auto transformersNode = AppendNode(doc, elementsNode, "TransformerList"); + 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 = AppendNode(doc, transformersNode, "Transfomer"); - SetNodeAttribute(doc, transformerNode, "ID", i); - auto cadProp = AppendNode(doc, transformerNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, transfomer->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, transfomer->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, transfomer->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, transfomer->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, transfomer->GetAngle()); - auto nodeList = AppendNode(doc, cadProp, "NodeList"); - auto nodePos1 = AppendNode(doc, nodeList, "Node"); - SetNodeAttribute(doc, nodePos1, "ID", 0); - auto nodePosX1 = AppendNode(doc, nodePos1, "X"); - SetNodeValue(doc, nodePosX1, transfomer->GetPointList()[0].m_x); - auto nodePosY1 = AppendNode(doc, nodePos1, "Y"); - SetNodeValue(doc, nodePosY1, transfomer->GetPointList()[0].m_y); - auto nodePos2 = AppendNode(doc, nodeList, "Node"); - SetNodeAttribute(doc, nodePos2, "ID", 1); - auto nodePosX2 = AppendNode(doc, nodePos2, "X"); - SetNodeValue(doc, nodePosX2, transfomer->GetPointList()[transfomer->GetPointList().size() - 1].m_x); - auto nodePosY2 = AppendNode(doc, nodePos2, "Y"); - SetNodeValue(doc, nodePosY2, transfomer->GetPointList()[transfomer->GetPointList().size() - 1].m_y); - - auto parentIDList = AppendNode(doc, cadProp, "ParentIDList"); + 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 = AppendNode(doc, parentIDList, "ParentID"); - SetNodeAttribute(doc, parentID, "ID", j); - SetNodeValue(doc, parentID, parent->GetElectricalData().number); + 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 = AppendNode(doc, transformerNode, "ElectricalProperties"); - auto isOnline = AppendNode(doc, electricalProp, "IsOnline"); - SetNodeValue(doc, isOnline, transfomer->IsOnline()); - auto name = AppendNode(doc, electricalProp, "Name"); - SetNodeValue(doc, name, data.name); - auto primaryNominalVoltage = AppendNode(doc, electricalProp, "PrimaryNominalVoltage"); - SetNodeValue(doc, primaryNominalVoltage, data.primaryNominalVoltage); - SetNodeAttribute(doc, primaryNominalVoltage, "UnitID", data.primaryNominalVoltageUnit); - auto secondaryNominalVoltage = AppendNode(doc, electricalProp, "SecondaryNominalVoltage"); - SetNodeValue(doc, secondaryNominalVoltage, data.secondaryNominalVoltage); - SetNodeAttribute(doc, secondaryNominalVoltage, "UnitID", data.secondaryNominalVoltageUnit); - auto nominalPower = AppendNode(doc, electricalProp, "NominalPower"); - SetNodeValue(doc, nominalPower, data.nominalPower); - SetNodeAttribute(doc, nominalPower, "UnitID", data.nominalPowerUnit); - auto resistance = AppendNode(doc, electricalProp, "Resistance"); - SetNodeValue(doc, resistance, data.resistance); - SetNodeAttribute(doc, resistance, "UnitID", data.resistanceUnit); - auto indReactance = AppendNode(doc, electricalProp, "IndReactance"); - SetNodeValue(doc, indReactance, data.indReactance); - SetNodeAttribute(doc, indReactance, "UnitID", data.indReactanceUnit); - auto connection = AppendNode(doc, electricalProp, "Connection"); - SetNodeValue(doc, connection, data.connection); - auto turnsRatio = AppendNode(doc, electricalProp, "TurnsRatio"); - SetNodeValue(doc, turnsRatio, data.turnsRatio); - auto phaseShift = AppendNode(doc, electricalProp, "PhaseShift"); - SetNodeValue(doc, phaseShift, data.phaseShift); - auto useTransformerPower = AppendNode(doc, electricalProp, "UseTransfomerPower"); - SetNodeValue(doc, useTransformerPower, data.useTransformerPower); - - auto fault = AppendNode(doc, electricalProp, "Fault"); - auto zeroResistance = AppendNode(doc, fault, "ZeroResistance"); - SetNodeValue(doc, zeroResistance, data.zeroResistance); - auto zeroIndReactance = AppendNode(doc, fault, "ZeroIndReactance"); - SetNodeValue(doc, zeroIndReactance, data.zeroIndReactance); - auto primaryGrndResistance = AppendNode(doc, fault, "PrimaryGrndResistance"); - SetNodeValue(doc, primaryGrndResistance, data.primaryGrndResistance); - auto primaryGrndReactance = AppendNode(doc, fault, "PrimaryGrndReactance"); - SetNodeValue(doc, primaryGrndReactance, data.primaryGrndReactance); - auto secondaryGrndResistance = AppendNode(doc, fault, "SecondaryGrndResistance"); - SetNodeValue(doc, secondaryGrndResistance, data.secondaryGrndResistance); - auto secondaryGrndReactance = AppendNode(doc, fault, "SecondaryGrndReactance"); - SetNodeValue(doc, secondaryGrndReactance, data.secondaryGrndReactance); - - auto switchingList = AppendNode(doc, electricalProp, "SwitchingList"); + 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 = AppendNode(doc, switchingList, "Switching"); - SetNodeAttribute(doc, switching, "ID", j); - auto swType = AppendNode(doc, switching, "Type"); - SetNodeValue(doc, swType, swData.swType[j]); - auto swTime = AppendNode(doc, switching, "Time"); - SetNodeValue(doc, swTime, swData.swTime[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]); } } //} //{ Text - auto textsNode = AppendNode(doc, elementsNode, "TextList"); + 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 = AppendNode(doc, textsNode, "Text"); - SetNodeAttribute(doc, textNode, "ID", i); - auto cadProp = AppendNode(doc, textNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, text->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, text->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, text->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, text->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, text->GetAngle()); - auto textProperties = AppendNode(doc, textNode, "TextProperties"); - auto elementType = AppendNode(doc, textProperties, "ElementType"); - SetNodeValue(doc, elementType, text->GetElementType()); - auto elementNumber = AppendNode(doc, textProperties, "ElementNumber"); - SetNodeValue(doc, elementNumber, text->GetElementNumber()); - auto dataType = AppendNode(doc, textProperties, "DataType"); - SetNodeValue(doc, dataType, text->GetDataType()); - auto dataUnit = AppendNode(doc, textProperties, "DataUnit"); - SetNodeValue(doc, dataUnit, text->GetUnit()); - auto direction = AppendNode(doc, textProperties, "Direction"); - SetNodeValue(doc, direction, text->GetDirection()); - auto decimalPlaces = AppendNode(doc, textProperties, "DecimalPlaces"); - SetNodeValue(doc, decimalPlaces, text->GetDecimalPlaces()); + 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()); } //} @@ -915,44 +915,46 @@ bool FileHanding::OpenProject(wxFileName path) if(simPropertiesNode) { // General auto general = simPropertiesNode->first_node("General"); - simData.basePower = GetNodeValueDouble(general, "BasePower"); - simData.basePowerUnit = static_cast<ElectricalUnit>(GetAttributeValueInt(general, "BasePower", "UnitID")); + simData.basePower = XMLParser::GetNodeValueDouble(general, "BasePower"); + simData.basePowerUnit = + static_cast<ElectricalUnit>(XMLParser::GetAttributeValueInt(general, "BasePower", "UnitID")); auto contCalc = general->first_node("ContinuousCalculation"); - simData.faultAfterPowerFlow = GetNodeValueInt(contCalc, "Fault"); - simData.scPowerAfterPowerFlow = GetNodeValueInt(contCalc, "SCPower"); + simData.faultAfterPowerFlow = XMLParser::GetNodeValueInt(contCalc, "Fault"); + simData.scPowerAfterPowerFlow = XMLParser::GetNodeValueInt(contCalc, "SCPower"); // Power flow auto powerFlow = simPropertiesNode->first_node("PowerFlow"); - simData.powerFlowMethod = static_cast<PowerFlowMethod>(GetNodeValueInt(powerFlow, "SolutionMethod")); - simData.accFator = GetNodeValueDouble(powerFlow, "AccFactor"); - simData.powerFlowTolerance = GetNodeValueDouble(powerFlow, "Tolerance"); - simData.powerFlowMaxIterations = GetNodeValueInt(powerFlow, "MaxIterations"); + simData.powerFlowMethod = + static_cast<PowerFlowMethod>(XMLParser::GetNodeValueInt(powerFlow, "SolutionMethod")); + simData.accFator = XMLParser::GetNodeValueDouble(powerFlow, "AccFactor"); + simData.powerFlowTolerance = XMLParser::GetNodeValueDouble(powerFlow, "Tolerance"); + simData.powerFlowMaxIterations = XMLParser::GetNodeValueInt(powerFlow, "MaxIterations"); // Stability auto stability = simPropertiesNode->first_node("Stability"); - simData.timeStep = GetNodeValueDouble(stability, "TimeStep"); - simData.stabilitySimulationTime = GetNodeValueDouble(stability, "SimulationTime"); - simData.stabilityFrequency = GetNodeValueDouble(stability, "Frequency"); - simData.stabilityTolerance = GetNodeValueDouble(stability, "Tolerance"); - simData.stabilityMaxIterations = GetNodeValueDouble(stability, "MaxIterations"); - simData.controlTimeStepRatio = GetNodeValueInt(stability, "ControlStepRatio"); - simData.plotTime = GetNodeValueDouble(stability, "PlotStep"); - simData.useCOI = GetNodeValueInt(stability, "UseCOI"); + simData.timeStep = XMLParser::GetNodeValueDouble(stability, "TimeStep"); + simData.stabilitySimulationTime = XMLParser::GetNodeValueDouble(stability, "SimulationTime"); + simData.stabilityFrequency = XMLParser::GetNodeValueDouble(stability, "Frequency"); + simData.stabilityTolerance = XMLParser::GetNodeValueDouble(stability, "Tolerance"); + simData.stabilityMaxIterations = XMLParser::GetNodeValueDouble(stability, "MaxIterations"); + simData.controlTimeStepRatio = XMLParser::GetNodeValueInt(stability, "ControlStepRatio"); + simData.plotTime = XMLParser::GetNodeValueDouble(stability, "PlotStep"); + simData.useCOI = XMLParser::GetNodeValueInt(stability, "UseCOI"); // ZIP load auto compLoads = simPropertiesNode->first_node("ZIPLoad"); - simData.useCompLoads = GetNodeValueInt(compLoads, "UseCompositeLoad"); + simData.useCompLoads = XMLParser::GetNodeValueInt(compLoads, "UseCompositeLoad"); auto activePowerComp = compLoads->first_node("ActivePowerComposition"); - simData.constImpedanceActive = GetNodeValueDouble(activePowerComp, "ConstantImpedance"); - simData.constCurrentActive = GetNodeValueDouble(activePowerComp, "ConstantCurrent"); - simData.constPowerActive = GetNodeValueDouble(activePowerComp, "ConstantPower"); + simData.constImpedanceActive = XMLParser::GetNodeValueDouble(activePowerComp, "ConstantImpedance"); + simData.constCurrentActive = XMLParser::GetNodeValueDouble(activePowerComp, "ConstantCurrent"); + simData.constPowerActive = XMLParser::GetNodeValueDouble(activePowerComp, "ConstantPower"); auto reactivePowerComp = compLoads->first_node("ReactivePowerComposition"); - simData.constImpedanceReactive = GetNodeValueDouble(reactivePowerComp, "ConstantImpedance"); - simData.constCurrentReactive = GetNodeValueDouble(reactivePowerComp, "ConstantCurrent"); - simData.constPowerReactive = GetNodeValueDouble(reactivePowerComp, "ConstantPower"); + simData.constImpedanceReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantImpedance"); + simData.constCurrentReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantCurrent"); + simData.constPowerReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantPower"); auto uvLimit = compLoads->first_node("UndervoltageLimit"); - simData.underVoltageConstCurrent = GetNodeValueDouble(uvLimit, "ConstantCurrent"); - simData.underVoltageConstPower = GetNodeValueDouble(uvLimit, "ConstantPower"); + simData.underVoltageConstCurrent = XMLParser::GetNodeValueDouble(uvLimit, "ConstantCurrent"); + simData.underVoltageConstPower = XMLParser::GetNodeValueDouble(uvLimit, "ConstantPower"); } } // } @@ -984,14 +986,14 @@ bool FileHanding::OpenProject(wxFileName path) if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); Bus* bus = new Bus(wxPoint2DDouble(posX, posY)); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + double width = XMLParser::GetNodeValueDouble(size, "Width"); + double height = XMLParser::GetNodeValueDouble(size, "Height"); + double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle"); bus->SetWidth(width); bus->SetHeight(height); bus->SetPosition(bus->GetPosition()); // Update bus rectangle. @@ -1008,25 +1010,27 @@ bool FileHanding::OpenProject(wxFileName path) if(!electricalProp) return false; data.name = electricalProp->first_node("Name")->value(); - data.nominalVoltage = GetNodeValueDouble(electricalProp, "NominalVoltage"); - data.nominalVoltageUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalVoltage", "UnitID"); - data.isVoltageControlled = GetNodeValueInt(electricalProp, "IsVoltageControlled"); - data.controlledVoltage = GetNodeValueDouble(electricalProp, "ControlledVoltage"); - data.controlledVoltageUnitChoice = GetAttributeValueInt(electricalProp, "ControlledVoltage", "Choice"); - data.slackBus = GetNodeValueInt(electricalProp, "SlackBus"); + data.nominalVoltage = XMLParser::GetNodeValueDouble(electricalProp, "NominalVoltage"); + data.nominalVoltageUnit = + (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "NominalVoltage", "UnitID"); + data.isVoltageControlled = XMLParser::GetNodeValueInt(electricalProp, "IsVoltageControlled"); + data.controlledVoltage = XMLParser::GetNodeValueDouble(electricalProp, "ControlledVoltage"); + data.controlledVoltageUnitChoice = + XMLParser::GetAttributeValueInt(electricalProp, "ControlledVoltage", "Choice"); + data.slackBus = XMLParser::GetNodeValueInt(electricalProp, "SlackBus"); auto fault = electricalProp->first_node("Fault"); - data.hasFault = GetNodeValueInt(fault, "HasFault"); - data.faultType = (FaultData)GetNodeValueInt(fault, "Type"); - data.faultLocation = (FaultData)GetNodeValueInt(fault, "Location"); - data.faultResistance = GetNodeValueDouble(fault, "Resistance"); - data.faultReactance = GetNodeValueDouble(fault, "Reactance"); + data.hasFault = XMLParser::GetNodeValueInt(fault, "HasFault"); + data.faultType = (FaultData)XMLParser::GetNodeValueInt(fault, "Type"); + data.faultLocation = (FaultData)XMLParser::GetNodeValueInt(fault, "Location"); + data.faultResistance = XMLParser::GetNodeValueDouble(fault, "Resistance"); + data.faultReactance = XMLParser::GetNodeValueDouble(fault, "Reactance"); auto stability = electricalProp->first_node("Stability"); - data.plotBus = GetNodeValueInt(stability, "Plot"); - data.stabHasFault = GetNodeValueInt(stability, "HasFault"); - data.stabFaultTime = GetNodeValueDouble(stability, "FaultTime"); - data.stabFaultLength = GetNodeValueDouble(stability, "FaultLength"); - data.stabFaultResistance = GetNodeValueDouble(stability, "FaultResistance"); - data.stabFaultReactance = GetNodeValueDouble(stability, "FaultReactance"); + data.plotBus = XMLParser::GetNodeValueInt(stability, "Plot"); + data.stabHasFault = XMLParser::GetNodeValueInt(stability, "HasFault"); + data.stabFaultTime = XMLParser::GetNodeValueDouble(stability, "FaultTime"); + data.stabFaultLength = XMLParser::GetNodeValueDouble(stability, "FaultLength"); + data.stabFaultResistance = XMLParser::GetNodeValueDouble(stability, "FaultResistance"); + data.stabFaultReactance = XMLParser::GetNodeValueDouble(stability, "FaultReactance"); bus->SetElectricalData(data); @@ -1048,16 +1052,16 @@ bool FileHanding::OpenProject(wxFileName path) if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + 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 = GetNodeValueDouble(nodePosition, "X"); - double nodePosY = GetNodeValueDouble(nodePosition, "Y"); - int parentID = GetNodeValueInt(cadPropNode, "ParentID"); + 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)); @@ -1086,19 +1090,20 @@ bool FileHanding::OpenProject(wxFileName path) auto electricalProp = capacitorNode->first_node("ElectricalProperties"); if(!electricalProp) return false; - capacitor->SetOnline(GetNodeValueInt(electricalProp, "IsOnline")); + capacitor->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline")); CapacitorElectricalData data = capacitor->GetElectricalData(); data.name = electricalProp->first_node("Name")->value(); - data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower"); - data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID"); + 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)GetNodeValueInt(swNode, "Type")); - swData.swTime.push_back(GetNodeValueDouble(swNode, "Time")); + swData.swType.push_back((SwitchingType)XMLParser::GetNodeValueInt(swNode, "Type")); + swData.swTime.push_back(XMLParser::GetNodeValueDouble(swNode, "Time")); swNode = swNode->next_sibling("Switching"); } capacitor->SetSwitchingData(swData); @@ -1123,16 +1128,16 @@ bool FileHanding::OpenProject(wxFileName path) if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + 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 = GetNodeValueDouble(nodePosition, "X"); - double nodePosY = GetNodeValueDouble(nodePosition, "Y"); - int parentID = GetNodeValueInt(cadPropNode, "ParentID"); + 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)); @@ -1161,13 +1166,14 @@ bool FileHanding::OpenProject(wxFileName path) auto electricalProp = indMotorNode->first_node("ElectricalProperties"); if(!electricalProp) return false; - indMotor->SetOnline(GetNodeValueInt(electricalProp, "IsOnline")); + indMotor->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline")); IndMotorElectricalData data = indMotor->GetElectricalData(); data.name = electricalProp->first_node("Name")->value(); - data.activePower = GetNodeValueDouble(electricalProp, "ActivePower"); - data.activePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ActivePower", "UnitID"); - data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower"); - data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "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"); indMotor->SetElectricalData(data); elementList.push_back(indMotor); @@ -1186,16 +1192,16 @@ bool FileHanding::OpenProject(wxFileName path) if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + 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 = GetNodeValueDouble(nodePosition, "X"); - double nodePosY = GetNodeValueDouble(nodePosition, "Y"); - int parentID = GetNodeValueInt(cadPropNode, "ParentID"); + 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)); @@ -1224,19 +1230,20 @@ bool FileHanding::OpenProject(wxFileName path) auto electricalProp = inductorNode->first_node("ElectricalProperties"); if(!electricalProp) return false; - inductor->SetOnline(GetNodeValueInt(electricalProp, "IsOnline")); + inductor->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline")); InductorElectricalData data = inductor->GetElectricalData(); data.name = electricalProp->first_node("Name")->value(); - data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower"); - data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID"); + 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)GetNodeValueInt(swNode, "Type")); - swData.swTime.push_back(GetNodeValueDouble(swNode, "Time")); + 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); @@ -1266,8 +1273,8 @@ bool FileHanding::OpenProject(wxFileName path) if(!nodePosList) return false; auto nodePos = nodePosList->first_node("Node"); while(nodePos) { - double nodePosX = GetNodeValueDouble(nodePos, "X"); - double nodePosY = GetNodeValueDouble(nodePos, "Y"); + double nodePosX = XMLParser::GetNodeValueDouble(nodePos, "X"); + double nodePosY = XMLParser::GetNodeValueDouble(nodePos, "Y"); ptsList.push_back(wxPoint2DDouble(nodePosX, nodePosY)); nodePos = nodePos->next_sibling("Node"); } @@ -1320,34 +1327,38 @@ bool FileHanding::OpenProject(wxFileName path) auto electricalProp = lineNode->first_node("ElectricalProperties"); if(!electricalProp) return false; - line->SetOnline(GetNodeValueInt(electricalProp, "IsOnline")); + line->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline")); LineElectricalData data = line->GetElectricalData(); data.name = electricalProp->first_node("Name")->value(); - data.nominalVoltage = GetNodeValueDouble(electricalProp, "NominalVoltage"); - data.nominalVoltageUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalVoltage", "UnitID"); - data.nominalPower = GetNodeValueDouble(electricalProp, "NominalPower"); - data.nominalPowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalPower", "UnitID"); - data.resistance = GetNodeValueDouble(electricalProp, "Resistance"); - data.resistanceUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "Resistance", "UnitID"); - data.indReactance = GetNodeValueDouble(electricalProp, "IndReactance"); - data.indReactanceUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "IndReactance", "UnitID"); - data.capSusceptance = GetNodeValueDouble(electricalProp, "CapSusceptance"); - data.capSusceptanceUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "CapSusceptance", "UnitID"); - data.lineSize = GetNodeValueDouble(electricalProp, "LineSize"); - data.useLinePower = GetNodeValueInt(electricalProp, "UseLinePower"); + 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 = GetNodeValueDouble(fault, "ZeroResistance"); - data.zeroIndReactance = GetNodeValueDouble(fault, "ZeroIndReactance"); - data.zeroCapSusceptance = GetNodeValueDouble(fault, "ZeroCapSusceptance"); + 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)GetNodeValueInt(swNode, "Type")); - swData.swTime.push_back(GetNodeValueDouble(swNode, "Time")); + 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); @@ -1372,16 +1383,16 @@ bool FileHanding::OpenProject(wxFileName path) if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + 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 = GetNodeValueDouble(nodePosition, "X"); - double nodePosY = GetNodeValueDouble(nodePosition, "Y"); - int parentID = GetNodeValueInt(cadPropNode, "ParentID"); + 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)); @@ -1410,27 +1421,28 @@ bool FileHanding::OpenProject(wxFileName path) auto electricalProp = loadNode->first_node("ElectricalProperties"); if(!electricalProp) return false; - load->SetOnline(GetNodeValueInt(electricalProp, "IsOnline")); + load->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline")); LoadElectricalData data = load->GetElectricalData(); data.name = electricalProp->first_node("Name")->value(); - data.activePower = GetNodeValueDouble(electricalProp, "ActivePower"); - data.activePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ActivePower", "UnitID"); - data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower"); - data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID"); - data.loadType = (LoadType)GetNodeValueInt(electricalProp, "LoadType"); + 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 = GetNodeValueInt(stability, "PlotLoad"); - data.useCompLoad = GetNodeValueInt(stability, "UseCompositeLoad"); + data.plotLoad = XMLParser::GetNodeValueInt(stability, "PlotLoad"); + data.useCompLoad = XMLParser::GetNodeValueInt(stability, "UseCompositeLoad"); auto activePowerComp = stability->first_node("ActivePowerComposition"); - data.constImpedanceActive = GetNodeValueDouble(activePowerComp, "ConstantImpedance"); - data.constCurrentActive = GetNodeValueDouble(activePowerComp, "ConstantCurrent"); - data.constPowerActive = GetNodeValueDouble(activePowerComp, "ConstantPower"); + 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 = GetNodeValueDouble(reactivePowerComp, "ConstantImpedance"); - data.constCurrentReactive = GetNodeValueDouble(reactivePowerComp, "ConstantCurrent"); - data.constPowerReactive = GetNodeValueDouble(reactivePowerComp, "ConstantPower"); + data.constImpedanceReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantImpedance"); + data.constCurrentReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantCurrent"); + data.constPowerReactive = XMLParser::GetNodeValueDouble(reactivePowerComp, "ConstantPower"); } SwitchingData swData; @@ -1438,8 +1450,8 @@ bool FileHanding::OpenProject(wxFileName path) if(!switchingList) return false; auto swNode = switchingList->first_node("Switching"); while(swNode) { - swData.swType.push_back((SwitchingType)GetNodeValueInt(swNode, "Type")); - swData.swTime.push_back(GetNodeValueDouble(swNode, "Time")); + 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); @@ -1464,16 +1476,16 @@ bool FileHanding::OpenProject(wxFileName path) if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + 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 = GetNodeValueDouble(nodePosition, "X"); - double nodePosY = GetNodeValueDouble(nodePosition, "Y"); - int parentID = GetNodeValueInt(cadPropNode, "ParentID"); + 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)); @@ -1502,57 +1514,60 @@ bool FileHanding::OpenProject(wxFileName path) auto electricalProp = syncGeneratorNode->first_node("ElectricalProperties"); if(!electricalProp) return false; - syncGenerator->SetOnline(GetNodeValueInt(electricalProp, "IsOnline")); + syncGenerator->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline")); SyncGeneratorElectricalData data = syncGenerator->GetElectricalData(); data.name = electricalProp->first_node("Name")->value(); - data.nominalPower = GetNodeValueDouble(electricalProp, "NominalPower"); - data.nominalPowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalPower", "UnitID"); - data.nominalVoltage = GetNodeValueDouble(electricalProp, "NominalVoltage"); - data.nominalVoltageUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalVoltage", "UnitID"); - data.activePower = GetNodeValueDouble(electricalProp, "ActivePower"); - data.activePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ActivePower", "UnitID"); - data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower"); - data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID"); - data.haveMaxReactive = GetNodeValueInt(electricalProp, "HaveMaxReactive"); - data.maxReactive = GetNodeValueDouble(electricalProp, "MaxReactive"); - data.maxReactiveUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "MaxReactive", "UnitID"); - data.haveMinReactive = GetNodeValueInt(electricalProp, "HaveMinReactive"); - data.minReactive = GetNodeValueDouble(electricalProp, "MinReactive"); - data.minReactiveUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "MinReactive", "UnitID"); - data.useMachineBase = GetNodeValueInt(electricalProp, "UseMachineBase"); + 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 = GetNodeValueDouble(fault, "PositiveResistance"); - data.positiveReactance = GetNodeValueDouble(fault, "PositiveReactance"); - data.negativeResistance = GetNodeValueDouble(fault, "NegativeResistance"); - data.negativeReactance = GetNodeValueDouble(fault, "NegativeReactance"); - data.zeroResistance = GetNodeValueDouble(fault, "ZeroResistance"); - data.zeroReactance = GetNodeValueDouble(fault, "ZeroReactance"); - data.groundResistance = GetNodeValueDouble(fault, "GroundResistance"); - data.groundReactance = GetNodeValueDouble(fault, "GroundReactance"); - data.groundNeutral = GetNodeValueInt(fault, "GroundNeutral"); + 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 = GetNodeValueInt(stability, "PlotSyncMachine"); - data.inertia = GetNodeValueDouble(stability, "Inertia"); - data.damping = GetNodeValueDouble(stability, "Damping"); - data.useAVR = GetNodeValueInt(stability, "UseAVR"); - data.useSpeedGovernor = GetNodeValueInt(stability, "UseSpeedGovernor"); - data.armResistance = GetNodeValueDouble(stability, "ArmResistance"); - data.potierReactance = GetNodeValueDouble(stability, "PotierReactance"); - data.satFactor = GetNodeValueDouble(stability, "SatFactor"); - data.syncXd = GetNodeValueDouble(stability, "SyncXd"); - data.syncXq = GetNodeValueDouble(stability, "SyncXq"); - data.transXd = GetNodeValueDouble(stability, "TransXd"); - data.transXq = GetNodeValueDouble(stability, "TransXq"); - data.transTd0 = GetNodeValueDouble(stability, "TransTd0"); - data.transTq0 = GetNodeValueDouble(stability, "TransTq0"); - data.subXd = GetNodeValueDouble(stability, "SubXd"); - data.subXq = GetNodeValueDouble(stability, "SubXq"); - data.subTd0 = GetNodeValueDouble(stability, "SubTd0"); - data.subTq0 = GetNodeValueDouble(stability, "SubTq0"); + 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; @@ -1567,8 +1582,8 @@ bool FileHanding::OpenProject(wxFileName path) if(!switchingList) return false; auto swNode = switchingList->first_node("Switching"); while(swNode) { - swData.swType.push_back((SwitchingType)GetNodeValueInt(swNode, "Type")); - swData.swTime.push_back(GetNodeValueDouble(swNode, "Time")); + 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); @@ -1593,16 +1608,16 @@ bool FileHanding::OpenProject(wxFileName path) if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + 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 = GetNodeValueDouble(nodePosition, "X"); - double nodePosY = GetNodeValueDouble(nodePosition, "Y"); - int parentID = GetNodeValueInt(cadPropNode, "ParentID"); + 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)); @@ -1631,44 +1646,47 @@ bool FileHanding::OpenProject(wxFileName path) auto electricalProp = syncMotorNode->first_node("ElectricalProperties"); if(!electricalProp) return false; - syncMotor->SetOnline(GetNodeValueInt(electricalProp, "IsOnline")); + syncMotor->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline")); SyncMotorElectricalData data = syncMotor->GetElectricalData(); data.name = electricalProp->first_node("Name")->value(); - data.nominalPower = GetNodeValueDouble(electricalProp, "NominalPower"); - data.nominalPowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalPower", "UnitID"); - // data.nominalVoltage = GetNodeValueDouble(electricalProp, "NominalVoltage"); - // data.nominalVoltageUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalVoltage", "UnitID"); - data.activePower = GetNodeValueDouble(electricalProp, "ActivePower"); - data.activePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ActivePower", "UnitID"); - data.reactivePower = GetNodeValueDouble(electricalProp, "ReactivePower"); - data.reactivePowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "ReactivePower", "UnitID"); - data.haveMaxReactive = GetNodeValueInt(electricalProp, "HaveMaxReactive"); - data.maxReactive = GetNodeValueDouble(electricalProp, "MaxReactive"); - data.maxReactiveUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "MaxReactive", "UnitID"); - data.haveMinReactive = GetNodeValueInt(electricalProp, "HaveMinReactive"); - data.minReactive = GetNodeValueDouble(electricalProp, "MinReactive"); - data.minReactiveUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "MinReactive", "UnitID"); - data.useMachineBase = GetNodeValueInt(electricalProp, "UseMachineBase"); + 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 = GetNodeValueDouble(fault, "PositiveResistance"); - data.positiveReactance = GetNodeValueDouble(fault, "PositiveReactance"); - data.negativeResistance = GetNodeValueDouble(fault, "NegativeResistance"); - data.negativeReactance = GetNodeValueDouble(fault, "NegativeReactance"); - data.zeroResistance = GetNodeValueDouble(fault, "ZeroResistance"); - data.zeroReactance = GetNodeValueDouble(fault, "ZeroReactance"); - data.groundResistance = GetNodeValueDouble(fault, "GroundResistance"); - data.groundReactance = GetNodeValueDouble(fault, "GroundReactance"); - data.groundNeutral = GetNodeValueInt(fault, "GroundNeutral"); + 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)GetNodeValueInt(swNode, "Type")); - swData.swTime.push_back(GetNodeValueDouble(swNode, "Time")); + 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);*/ @@ -1690,12 +1708,12 @@ bool FileHanding::OpenProject(wxFileName path) if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + 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; @@ -1703,8 +1721,8 @@ bool FileHanding::OpenProject(wxFileName path) if(!nodePosList) return false; auto nodePos = nodePosList->first_node("Node"); while(nodePos) { - double nodePosX = GetNodeValueDouble(nodePos, "X"); - double nodePosY = GetNodeValueDouble(nodePos, "Y"); + double nodePosX = XMLParser::GetNodeValueDouble(nodePos, "X"); + double nodePosY = XMLParser::GetNodeValueDouble(nodePos, "Y"); ptsList.push_back(wxPoint2DDouble(nodePosX, nodePosY)); nodePos = nodePos->next_sibling("Node"); } @@ -1764,41 +1782,43 @@ bool FileHanding::OpenProject(wxFileName path) auto electricalProp = transfomerNode->first_node("ElectricalProperties"); if(!electricalProp) return false; - transformer->SetOnline(GetNodeValueInt(electricalProp, "IsOnline")); + transformer->SetOnline(XMLParser::GetNodeValueInt(electricalProp, "IsOnline")); TransformerElectricalData data = transformer->GetElectricalData(); data.name = electricalProp->first_node("Name")->value(); - data.primaryNominalVoltage = GetNodeValueDouble(electricalProp, "PrimaryNominalVoltage"); + data.primaryNominalVoltage = XMLParser::GetNodeValueDouble(electricalProp, "PrimaryNominalVoltage"); data.primaryNominalVoltageUnit = - (ElectricalUnit)GetAttributeValueInt(electricalProp, "PrimaryNominalVoltage", "UnitID"); - data.secondaryNominalVoltage = GetNodeValueDouble(electricalProp, "SecondaryNominalVoltage"); + (ElectricalUnit)XMLParser::GetAttributeValueInt(electricalProp, "PrimaryNominalVoltage", "UnitID"); + data.secondaryNominalVoltage = XMLParser::GetNodeValueDouble(electricalProp, "SecondaryNominalVoltage"); data.secondaryNominalVoltageUnit = - (ElectricalUnit)GetAttributeValueInt(electricalProp, "SecondaryNominalVoltage", "UnitID"); - data.nominalPower = GetNodeValueDouble(electricalProp, "NominalPower"); - data.nominalPowerUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "NominalPower", "UnitID"); - data.resistance = GetNodeValueDouble(electricalProp, "Resistance"); - data.resistanceUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "Resistance", "UnitID"); - data.indReactance = GetNodeValueDouble(electricalProp, "IndReactance"); - data.indReactanceUnit = (ElectricalUnit)GetAttributeValueInt(electricalProp, "IndReactance", "UnitID"); - data.connection = (TransformerConnection)GetNodeValueInt(electricalProp, "Connection"); - data.turnsRatio = GetNodeValueDouble(electricalProp, "TurnsRatio"); - data.phaseShift = GetNodeValueDouble(electricalProp, "PhaseShift"); - data.useTransformerPower = GetNodeValueInt(electricalProp, "UseTransfomerPower"); + (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 = GetNodeValueDouble(fault, "ZeroResistance"); - data.zeroIndReactance = GetNodeValueDouble(fault, "ZeroIndReactance"); - data.primaryGrndResistance = GetNodeValueDouble(fault, "PrimaryGrndResistance"); - data.primaryGrndReactance = GetNodeValueDouble(fault, "PrimaryGrndReactance"); - data.secondaryGrndResistance = GetNodeValueDouble(fault, "SecondaryGrndResistance"); - data.secondaryGrndReactance = GetNodeValueDouble(fault, "SecondaryGrndReactance"); + 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)GetNodeValueInt(swNode, "Type")); - swData.swTime.push_back(GetNodeValueDouble(swNode, "Time")); + 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); @@ -1823,12 +1843,12 @@ bool FileHanding::OpenProject(wxFileName path) if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + 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)); @@ -1838,13 +1858,13 @@ bool FileHanding::OpenProject(wxFileName path) auto textProperties = textNode->first_node("TextProperties"); if(!textProperties) return false; - text->SetElementType((ElementType)GetNodeValueDouble(textProperties, "ElementType")); - text->SetDataType((DataType)GetNodeValueDouble(textProperties, "DataType")); - text->SetUnit((ElectricalUnit)GetNodeValueDouble(textProperties, "DataUnit")); - text->SetDirection(GetNodeValueDouble(textProperties, "Direction")); - text->SetDecimalPlaces(GetNodeValueDouble(textProperties, "DecimalPlaces")); + 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(GetNodeValueInt(textProperties, "ElementNumber")); + text->SetElementNumber(XMLParser::GetNodeValueInt(textProperties, "ElementNumber")); switch(text->GetElementType()) { case TYPE_NONE: break; @@ -1922,10 +1942,10 @@ void FileHanding::SaveControl(wxFileName path) rapidxml::xml_node<>* rootNode = doc.allocate_node(rapidxml::node_element, "Control"); doc.append_node(rootNode); - rapidxml::xml_node<>* projectNameNode = AppendNode(doc, rootNode, "Name"); - SetNodeValue(doc, projectNameNode, path.GetName()); + rapidxml::xml_node<>* projectNameNode = XMLParser::AppendNode(doc, rootNode, "Name"); + XMLParser::SetNodeValue(doc, projectNameNode, path.GetName()); - auto elementsNode = AppendNode(doc, rootNode, "ControlElements"); + auto elementsNode = XMLParser::AppendNode(doc, rootNode, "ControlElements"); SaveControlElements(doc, elementsNode); std::ofstream writeXML(path.GetFullPath()); writeXML << doc; @@ -1951,7 +1971,7 @@ bool FileHanding::OpenControl(wxFileName path, auto elementsNode = projectNode->first_node("ControlElements"); if(!elementsNode) return false; - // auto elementsNode = AppendNode(doc, rootNode, "ControlElements"); + // auto elementsNode = XMLParser::AppendNode(doc, rootNode, "ControlElements"); ControlElementContainer* ctrlElementContainer = new ControlElementContainer(); if(!OpenControlElements(doc, elementsNode, ctrlElementContainer)) return false; ctrlElementList = ctrlElementContainer->GetControlElementsList(); @@ -1969,393 +1989,363 @@ void FileHanding::SaveControlElements(rapidxml::xml_document<>& doc, } //{ Constant - auto constsNode = AppendNode(doc, elementsNode, "ConstantList"); + auto constsNode = XMLParser::AppendNode(doc, elementsNode, "ConstantList"); auto constList = ctrlContainer->GetConstantList(); for(auto it = constList.begin(), itEnd = constList.end(); it != itEnd; ++it) { Constant* constant = *it; - auto constNode = AppendNode(doc, constsNode, "Constant"); - SetNodeAttribute(doc, constNode, "ID", constant->GetID()); - auto cadProp = AppendNode(doc, constNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, constant->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, constant->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, constant->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, constant->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, constant->GetAngle()); + auto constNode = XMLParser::AppendNode(doc, constsNode, "Constant"); + XMLParser::SetNodeAttribute(doc, constNode, "ID", constant->GetID()); + auto cadProp = XMLParser::AppendNode(doc, constNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, constant->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, constant->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, constant->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, constant->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, constant->GetAngle()); // Nodes - auto nodeList = AppendNode(doc, constNode, "NodeList"); - SaveControlNodes(doc, nodeList, constant->GetNodeList()); + auto nodeList = XMLParser::AppendNode(doc, constNode, "NodeList"); + constant->SaveControlNodes(doc, nodeList, constant->GetNodeList()); // Control properties - auto value = AppendNode(doc, constNode, "Value"); - SetNodeValue(doc, value, constant->GetValue()); + auto value = XMLParser::AppendNode(doc, constNode, "Value"); + XMLParser::SetNodeValue(doc, value, constant->GetValue()); } //} //{ Exponential - auto expsNode = AppendNode(doc, elementsNode, "ExponentialList"); + auto expsNode = XMLParser::AppendNode(doc, elementsNode, "ExponentialList"); auto expList = ctrlContainer->GetExponentialList(); for(auto it = expList.begin(), itEnd = expList.end(); it != itEnd; ++it) { Exponential* exponential = *it; - auto expNode = AppendNode(doc, expsNode, "Exponential"); - SetNodeAttribute(doc, expNode, "ID", exponential->GetID()); - auto cadProp = AppendNode(doc, expNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, exponential->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, exponential->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, exponential->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, exponential->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, exponential->GetAngle()); + auto expNode = XMLParser::AppendNode(doc, expsNode, "Exponential"); + XMLParser::SetNodeAttribute(doc, expNode, "ID", exponential->GetID()); + auto cadProp = XMLParser::AppendNode(doc, expNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, exponential->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, exponential->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, exponential->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, exponential->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, exponential->GetAngle()); // Nodes - auto nodeList = AppendNode(doc, expNode, "NodeList"); - SaveControlNodes(doc, nodeList, exponential->GetNodeList()); + auto nodeList = XMLParser::AppendNode(doc, expNode, "NodeList"); + exponential->SaveControlNodes(doc, nodeList, exponential->GetNodeList()); // Control properties double a, b; exponential->GetValues(a, b); - auto value = AppendNode(doc, expNode, "Value"); - auto aValue = AppendNode(doc, value, "A"); - SetNodeValue(doc, aValue, a); - auto bValue = AppendNode(doc, value, "B"); - SetNodeValue(doc, bValue, b); + auto value = XMLParser::AppendNode(doc, expNode, "Value"); + auto aValue = XMLParser::AppendNode(doc, value, "A"); + XMLParser::SetNodeValue(doc, aValue, a); + auto bValue = XMLParser::AppendNode(doc, value, "B"); + XMLParser::SetNodeValue(doc, bValue, b); } //} //{ Gain - auto gainsNode = AppendNode(doc, elementsNode, "GainList"); + auto gainsNode = XMLParser::AppendNode(doc, elementsNode, "GainList"); auto gainList = ctrlContainer->GetGainList(); for(auto it = gainList.begin(), itEnd = gainList.end(); it != itEnd; ++it) { Gain* gain = *it; - auto gainNode = AppendNode(doc, gainsNode, "Gain"); - SetNodeAttribute(doc, gainNode, "ID", gain->GetID()); - auto cadProp = AppendNode(doc, gainNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, gain->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, gain->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, gain->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, gain->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, gain->GetAngle()); + auto gainNode = XMLParser::AppendNode(doc, gainsNode, "Gain"); + XMLParser::SetNodeAttribute(doc, gainNode, "ID", gain->GetID()); + auto cadProp = XMLParser::AppendNode(doc, gainNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, gain->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, gain->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, gain->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, gain->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, gain->GetAngle()); // Nodes - auto nodeList = AppendNode(doc, gainNode, "NodeList"); - SaveControlNodes(doc, nodeList, gain->GetNodeList()); + auto nodeList = XMLParser::AppendNode(doc, gainNode, "NodeList"); + gain->SaveControlNodes(doc, nodeList, gain->GetNodeList()); // Control properties - auto value = AppendNode(doc, gainNode, "Value"); - SetNodeValue(doc, value, gain->GetValue()); + auto value = XMLParser::AppendNode(doc, gainNode, "Value"); + XMLParser::SetNodeValue(doc, value, gain->GetValue()); } //} //{ IO - auto iosNode = AppendNode(doc, elementsNode, "IOList"); + auto iosNode = XMLParser::AppendNode(doc, elementsNode, "IOList"); auto ioList = ctrlContainer->GetIOControlList(); for(auto it = ioList.begin(), itEnd = ioList.end(); it != itEnd; ++it) { IOControl* io = *it; - auto ioNode = AppendNode(doc, iosNode, "IO"); - SetNodeAttribute(doc, ioNode, "ID", io->GetID()); - auto cadProp = AppendNode(doc, ioNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, io->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, io->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, io->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, io->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, io->GetAngle()); + auto ioNode = XMLParser::AppendNode(doc, iosNode, "IO"); + XMLParser::SetNodeAttribute(doc, ioNode, "ID", io->GetID()); + auto cadProp = XMLParser::AppendNode(doc, ioNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, io->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, io->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, io->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, io->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, io->GetAngle()); // Nodes - auto nodeList = AppendNode(doc, ioNode, "NodeList"); - SaveControlNodes(doc, nodeList, io->GetNodeList()); + auto nodeList = XMLParser::AppendNode(doc, ioNode, "NodeList"); + io->SaveControlNodes(doc, nodeList, io->GetNodeList()); // Control properties - auto value = AppendNode(doc, ioNode, "Value"); - SetNodeValue(doc, value, io->GetValue()); - auto ioFlags = AppendNode(doc, ioNode, "IOFlags"); - SetNodeValue(doc, ioFlags, io->GetIOFlags()); + auto value = XMLParser::AppendNode(doc, ioNode, "Value"); + XMLParser::SetNodeValue(doc, value, io->GetValue()); + auto ioFlags = XMLParser::AppendNode(doc, ioNode, "IOFlags"); + XMLParser::SetNodeValue(doc, ioFlags, io->GetIOFlags()); } //} //{ Limiter - auto limitersNode = AppendNode(doc, elementsNode, "LimiterList"); + auto limitersNode = XMLParser::AppendNode(doc, elementsNode, "LimiterList"); auto limiterList = ctrlContainer->GetLimiterList(); for(auto it = limiterList.begin(), itEnd = limiterList.end(); it != itEnd; ++it) { Limiter* limiter = *it; - auto limiterNode = AppendNode(doc, limitersNode, "Limiter"); - SetNodeAttribute(doc, limiterNode, "ID", limiter->GetID()); - auto cadProp = AppendNode(doc, limiterNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, limiter->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, limiter->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, limiter->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, limiter->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, limiter->GetAngle()); + auto limiterNode = XMLParser::AppendNode(doc, limitersNode, "Limiter"); + XMLParser::SetNodeAttribute(doc, limiterNode, "ID", limiter->GetID()); + auto cadProp = XMLParser::AppendNode(doc, limiterNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, limiter->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, limiter->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, limiter->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, limiter->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, limiter->GetAngle()); // Nodes - auto nodeList = AppendNode(doc, limiterNode, "NodeList"); - SaveControlNodes(doc, nodeList, limiter->GetNodeList()); + auto nodeList = XMLParser::AppendNode(doc, limiterNode, "NodeList"); + limiter->SaveControlNodes(doc, nodeList, limiter->GetNodeList()); // Control properties - auto upLimit = AppendNode(doc, limiterNode, "UpperLimit"); - SetNodeValue(doc, upLimit, limiter->GetUpLimit()); - auto lowLimit = AppendNode(doc, limiterNode, "LowerLimit"); - SetNodeValue(doc, lowLimit, limiter->GetLowLimit()); + auto upLimit = XMLParser::AppendNode(doc, limiterNode, "UpperLimit"); + XMLParser::SetNodeValue(doc, upLimit, limiter->GetUpLimit()); + auto lowLimit = XMLParser::AppendNode(doc, limiterNode, "LowerLimit"); + XMLParser::SetNodeValue(doc, lowLimit, limiter->GetLowLimit()); } //} //{ Multiplier - auto multipliersNode = AppendNode(doc, elementsNode, "MultiplierList"); + auto multipliersNode = XMLParser::AppendNode(doc, elementsNode, "MultiplierList"); auto multiplierList = ctrlContainer->GetMultiplierList(); for(auto it = multiplierList.begin(), itEnd = multiplierList.end(); it != itEnd; ++it) { Multiplier* multiplier = *it; - auto multiplierNode = AppendNode(doc, multipliersNode, "Multiplier"); - SetNodeAttribute(doc, multiplierNode, "ID", multiplier->GetID()); - auto cadProp = AppendNode(doc, multiplierNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, multiplier->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, multiplier->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, multiplier->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, multiplier->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, multiplier->GetAngle()); + auto multiplierNode = XMLParser::AppendNode(doc, multipliersNode, "Multiplier"); + XMLParser::SetNodeAttribute(doc, multiplierNode, "ID", multiplier->GetID()); + auto cadProp = XMLParser::AppendNode(doc, multiplierNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, multiplier->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, multiplier->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, multiplier->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, multiplier->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, multiplier->GetAngle()); // Nodes - auto nodeList = AppendNode(doc, multiplierNode, "NodeList"); - SaveControlNodes(doc, nodeList, multiplier->GetNodeList()); + auto nodeList = XMLParser::AppendNode(doc, multiplierNode, "NodeList"); + multiplier->SaveControlNodes(doc, nodeList, multiplier->GetNodeList()); } //} //{ Divider - auto dividersNode = AppendNode(doc, elementsNode, "DividerList"); + auto dividersNode = XMLParser::AppendNode(doc, elementsNode, "DividerList"); auto dividersList = ctrlContainer->GetDividerList(); for(auto it = dividersList.begin(), itEnd = dividersList.end(); it != itEnd; ++it) { Divider* divider = *it; - auto dividerNode = AppendNode(doc, dividersNode, "Divider"); - SetNodeAttribute(doc, dividerNode, "ID", divider->GetID()); - auto cadProp = AppendNode(doc, dividerNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, divider->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, divider->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, divider->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, divider->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, divider->GetAngle()); + auto dividerNode = XMLParser::AppendNode(doc, dividersNode, "Divider"); + XMLParser::SetNodeAttribute(doc, dividerNode, "ID", divider->GetID()); + auto cadProp = XMLParser::AppendNode(doc, dividerNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, divider->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, divider->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, divider->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, divider->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, divider->GetAngle()); // Nodes - auto nodeList = AppendNode(doc, dividerNode, "NodeList"); - SaveControlNodes(doc, nodeList, divider->GetNodeList()); + auto nodeList = XMLParser::AppendNode(doc, dividerNode, "NodeList"); + divider->SaveControlNodes(doc, nodeList, divider->GetNodeList()); } //} //{ Rate limiter - auto rateLimitersNode = AppendNode(doc, elementsNode, "RateLimiterList"); + auto rateLimitersNode = XMLParser::AppendNode(doc, elementsNode, "RateLimiterList"); auto rateLimiterList = ctrlContainer->GetRateLimiterList(); for(auto it = rateLimiterList.begin(), itEnd = rateLimiterList.end(); it != itEnd; ++it) { RateLimiter* rateLimiter = *it; - auto rateLimiterNode = AppendNode(doc, rateLimitersNode, "RateLimiter"); - SetNodeAttribute(doc, rateLimiterNode, "ID", rateLimiter->GetID()); - auto cadProp = AppendNode(doc, rateLimiterNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, rateLimiter->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, rateLimiter->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, rateLimiter->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, rateLimiter->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, rateLimiter->GetAngle()); + auto rateLimiterNode = XMLParser::AppendNode(doc, rateLimitersNode, "RateLimiter"); + XMLParser::SetNodeAttribute(doc, rateLimiterNode, "ID", rateLimiter->GetID()); + auto cadProp = XMLParser::AppendNode(doc, rateLimiterNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, rateLimiter->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, rateLimiter->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, rateLimiter->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, rateLimiter->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, rateLimiter->GetAngle()); // Nodes - auto nodeList = AppendNode(doc, rateLimiterNode, "NodeList"); - SaveControlNodes(doc, nodeList, rateLimiter->GetNodeList()); + auto nodeList = XMLParser::AppendNode(doc, rateLimiterNode, "NodeList"); + rateLimiter->SaveControlNodes(doc, nodeList, rateLimiter->GetNodeList()); // Control properties - auto upLimit = AppendNode(doc, rateLimiterNode, "UpperLimit"); - SetNodeValue(doc, upLimit, rateLimiter->GetUpLimit()); - auto lowLimit = AppendNode(doc, rateLimiterNode, "LowerLimit"); - SetNodeValue(doc, lowLimit, rateLimiter->GetLowLimit()); + auto upLimit = XMLParser::AppendNode(doc, rateLimiterNode, "UpperLimit"); + XMLParser::SetNodeValue(doc, upLimit, rateLimiter->GetUpLimit()); + auto lowLimit = XMLParser::AppendNode(doc, rateLimiterNode, "LowerLimit"); + XMLParser::SetNodeValue(doc, lowLimit, rateLimiter->GetLowLimit()); } //} //{ Sum - auto sumsNode = AppendNode(doc, elementsNode, "SumList"); + auto sumsNode = XMLParser::AppendNode(doc, elementsNode, "SumList"); auto sumList = ctrlContainer->GetSumList(); for(auto it = sumList.begin(), itEnd = sumList.end(); it != itEnd; ++it) { Sum* sum = *it; - auto sumNode = AppendNode(doc, sumsNode, "Sum"); - SetNodeAttribute(doc, sumNode, "ID", sum->GetID()); - auto cadProp = AppendNode(doc, sumNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, sum->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, sum->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, sum->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, sum->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, sum->GetAngle()); + auto sumNode = XMLParser::AppendNode(doc, sumsNode, "Sum"); + XMLParser::SetNodeAttribute(doc, sumNode, "ID", sum->GetID()); + auto cadProp = XMLParser::AppendNode(doc, sumNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, sum->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, sum->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, sum->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, sum->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, sum->GetAngle()); // Nodes - auto nodeList = AppendNode(doc, sumNode, "NodeList"); - SaveControlNodes(doc, nodeList, sum->GetNodeList()); + auto nodeList = XMLParser::AppendNode(doc, sumNode, "NodeList"); + sum->SaveControlNodes(doc, nodeList, sum->GetNodeList()); // Control properties - auto signsNode = AppendNode(doc, sumNode, "Signs"); + auto signsNode = XMLParser::AppendNode(doc, sumNode, "Signs"); auto signs = sum->GetSignalList(); for(int i = 0; i < (int)signs.size(); ++i) { - auto value = AppendNode(doc, signsNode, "Value"); - SetNodeValue(doc, value, static_cast<int>(signs[i])); + auto value = XMLParser::AppendNode(doc, signsNode, "Value"); + XMLParser::SetNodeValue(doc, value, static_cast<int>(signs[i])); } } //} - + //{ Math expression - auto mathExprsNode = AppendNode(doc, elementsNode, "MathExprList"); + auto mathExprsNode = XMLParser::AppendNode(doc, elementsNode, "MathExprList"); auto mathExprList = ctrlContainer->GetMathExprList(); for(auto it = mathExprList.begin(), itEnd = mathExprList.end(); it != itEnd; ++it) { - MathExpression* mathExpr = *it; - auto mathExprNode = AppendNode(doc, mathExprsNode, "MathExpr"); - SetNodeAttribute(doc, mathExprNode, "ID", mathExpr->GetID()); - auto cadProp = AppendNode(doc, mathExprNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, mathExpr->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, mathExpr->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, mathExpr->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, mathExpr->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, mathExpr->GetAngle()); - - // Nodes - auto nodeList = AppendNode(doc, mathExprNode, "NodeList"); - SaveControlNodes(doc, nodeList, mathExpr->GetNodeList()); - - // Control properties - auto variablesNode = AppendNode(doc, mathExprNode, "VariableList"); - auto variables = mathExpr->GetVariables(); - for(unsigned int i = 0; i < variables.size(); ++i) { - auto variable = AppendNode(doc, variablesNode, "Variable"); - SetNodeValue(doc, variable, variables[i]); - } - auto mathExprValue = AppendNode(doc, mathExprNode, "MathExprValue"); - SetNodeValue(doc, mathExprValue, mathExpr->GetMathExpression()); - + (*it)->SaveElement(doc, mathExprsNode); } //} //{ Transfer function - auto tfsNode = AppendNode(doc, elementsNode, "TransferFunctionList"); + auto tfsNode = XMLParser::AppendNode(doc, elementsNode, "TransferFunctionList"); auto tfList = ctrlContainer->GetTFList(); for(auto it = tfList.begin(), itEnd = tfList.end(); it != itEnd; ++it) { TransferFunction* tf = *it; - auto tfNode = AppendNode(doc, tfsNode, "TransferFunction"); - SetNodeAttribute(doc, tfNode, "ID", tf->GetID()); - auto cadProp = AppendNode(doc, tfNode, "CADProperties"); - auto position = AppendNode(doc, cadProp, "Position"); - auto posX = AppendNode(doc, position, "X"); - SetNodeValue(doc, posX, tf->GetPosition().m_x); - auto posY = AppendNode(doc, position, "Y"); - SetNodeValue(doc, posY, tf->GetPosition().m_y); - auto size = AppendNode(doc, cadProp, "Size"); - auto width = AppendNode(doc, size, "Width"); - SetNodeValue(doc, width, tf->GetWidth()); - auto height = AppendNode(doc, size, "Height"); - SetNodeValue(doc, height, tf->GetHeight()); - auto angle = AppendNode(doc, cadProp, "Angle"); - SetNodeValue(doc, angle, tf->GetAngle()); + auto tfNode = XMLParser::AppendNode(doc, tfsNode, "TransferFunction"); + XMLParser::SetNodeAttribute(doc, tfNode, "ID", tf->GetID()); + auto cadProp = XMLParser::AppendNode(doc, tfNode, "CADProperties"); + auto position = XMLParser::AppendNode(doc, cadProp, "Position"); + auto posX = XMLParser::AppendNode(doc, position, "X"); + XMLParser::SetNodeValue(doc, posX, tf->GetPosition().m_x); + auto posY = XMLParser::AppendNode(doc, position, "Y"); + XMLParser::SetNodeValue(doc, posY, tf->GetPosition().m_y); + auto size = XMLParser::AppendNode(doc, cadProp, "Size"); + auto width = XMLParser::AppendNode(doc, size, "Width"); + XMLParser::SetNodeValue(doc, width, tf->GetWidth()); + auto height = XMLParser::AppendNode(doc, size, "Height"); + XMLParser::SetNodeValue(doc, height, tf->GetHeight()); + auto angle = XMLParser::AppendNode(doc, cadProp, "Angle"); + XMLParser::SetNodeValue(doc, angle, tf->GetAngle()); // Nodes - auto nodeList = AppendNode(doc, tfNode, "NodeList"); - SaveControlNodes(doc, nodeList, tf->GetNodeList()); + auto nodeList = XMLParser::AppendNode(doc, tfNode, "NodeList"); + tf->SaveControlNodes(doc, nodeList, tf->GetNodeList()); // Control properties - auto numeratorNode = AppendNode(doc, tfNode, "Numerator"); + auto numeratorNode = XMLParser::AppendNode(doc, tfNode, "Numerator"); auto numerator = tf->GetNumerator(); for(int i = 0; i < (int)numerator.size(); ++i) { - auto value = AppendNode(doc, numeratorNode, "Value"); - SetNodeValue(doc, value, numerator[i]); + auto value = XMLParser::AppendNode(doc, numeratorNode, "Value"); + XMLParser::SetNodeValue(doc, value, numerator[i]); } - auto denominatorNode = AppendNode(doc, tfNode, "Denominator"); + auto denominatorNode = XMLParser::AppendNode(doc, tfNode, "Denominator"); auto denominator = tf->GetDenominator(); for(int i = 0; i < (int)denominator.size(); ++i) { - auto value = AppendNode(doc, denominatorNode, "Value"); - SetNodeValue(doc, value, denominator[i]); + auto value = XMLParser::AppendNode(doc, denominatorNode, "Value"); + XMLParser::SetNodeValue(doc, value, denominator[i]); } } //} //{ Connection line - auto cLinesNode = AppendNode(doc, elementsNode, "ConnectionList"); + auto cLinesNode = XMLParser::AppendNode(doc, elementsNode, "ConnectionList"); auto connLineList = ctrlContainer->GetConnectionLineList(); for(auto it = connLineList.begin(), itEnd = connLineList.end(); it != itEnd; ++it) { ConnectionLine* cLine = *it; - auto cLineNode = AppendNode(doc, cLinesNode, "Connection"); - SetNodeAttribute(doc, cLineNode, "ID", cLine->GetID()); + auto cLineNode = XMLParser::AppendNode(doc, cLinesNode, "Connection"); + XMLParser::SetNodeAttribute(doc, cLineNode, "ID", cLine->GetID()); // CAD properties - auto cadProp = AppendNode(doc, cLineNode, "CADProperties"); - auto offset = AppendNode(doc, cadProp, "Offset"); - SetNodeValue(doc, offset, cLine->GetOffset()); + auto cadProp = XMLParser::AppendNode(doc, cLineNode, "CADProperties"); + auto offset = XMLParser::AppendNode(doc, cadProp, "Offset"); + XMLParser::SetNodeValue(doc, offset, cLine->GetOffset()); // Parent list - auto parentsNode = AppendNode(doc, cLineNode, "ParentList"); + auto parentsNode = XMLParser::AppendNode(doc, cLineNode, "ParentList"); auto parentList = cLine->GetParentList(); int nodeIndex = 0; for(auto itP = parentList.begin(), itPEnd = parentList.end(); itP != itPEnd; ++itP) { Element* parent = *itP; - auto parentNode = AppendNode(doc, parentsNode, "Parent"); - auto elementID = AppendNode(doc, parentNode, "ElementID"); - SetNodeValue(doc, elementID, parent->GetID()); - auto nodeID = AppendNode(doc, parentNode, "NodeID"); - SetNodeValue(doc, nodeID, cLine->GetNodeList()[nodeIndex]->GetID()); + auto parentNode = XMLParser::AppendNode(doc, parentsNode, "Parent"); + auto elementID = XMLParser::AppendNode(doc, parentNode, "ElementID"); + XMLParser::SetNodeValue(doc, elementID, parent->GetID()); + auto nodeID = XMLParser::AppendNode(doc, parentNode, "NodeID"); + XMLParser::SetNodeValue(doc, nodeID, cLine->GetNodeList()[nodeIndex]->GetID()); nodeIndex++; } - auto parentLine = AppendNode(doc, cLineNode, "ParentLine"); + auto parentLine = XMLParser::AppendNode(doc, cLineNode, "ParentLine"); if(cLine->GetParentLine()) { ConnectionLine* parent = cLine->GetParentLine(); - SetNodeAttribute(doc, parentLine, "ID", parent->GetID()); + XMLParser::SetNodeAttribute(doc, parentLine, "ID", parent->GetID()); } else { - SetNodeAttribute(doc, parentLine, "ID", -1); + XMLParser::SetNodeAttribute(doc, parentLine, "ID", -1); } } //} } @@ -2372,21 +2362,21 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, if(constListNode) { auto constNode = constListNode->first_node("Constant"); while(constNode) { - int id = GetAttributeValueInt(constNode, "ID"); + int id = XMLParser::GetAttributeValueInt(constNode, "ID"); Constant* constant = new Constant(id); auto cadPropNode = constNode->first_node("CADProperties"); if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + double width = XMLParser::GetNodeValueDouble(size, "Width"); + double height = XMLParser::GetNodeValueDouble(size, "Height"); + double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle"); - double value = GetNodeValueDouble(constNode, "Value"); + double value = XMLParser::GetNodeValueDouble(constNode, "Value"); constant->SetWidth(width); constant->SetHeight(height); @@ -2397,7 +2387,7 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, constant->SetValue(value); std::vector<Node*> nodeVector; - if(!OpenControlNodeList(constNode, nodeVector)) return false; + if(!constant->OpenControlNodeList(constNode, nodeVector)) return false; constant->SetNodeList(nodeVector); constant->UpdatePoints(); @@ -2413,23 +2403,23 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, if(expListNode) { auto expNode = expListNode->first_node("Exponential"); while(expNode) { - int id = GetAttributeValueInt(expNode, "ID"); + int id = XMLParser::GetAttributeValueInt(expNode, "ID"); Exponential* exponential = new Exponential(id); auto cadPropNode = expNode->first_node("CADProperties"); if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + double width = XMLParser::GetNodeValueDouble(size, "Width"); + double height = XMLParser::GetNodeValueDouble(size, "Height"); + double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle"); auto value = expNode->first_node("Value"); - double a = GetNodeValueDouble(value, "A"); - double b = GetNodeValueDouble(value, "B"); + double a = XMLParser::GetNodeValueDouble(value, "A"); + double b = XMLParser::GetNodeValueDouble(value, "B"); exponential->SetWidth(width); exponential->SetHeight(height); @@ -2440,7 +2430,7 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, exponential->SetValues(a, b); std::vector<Node*> nodeVector; - if(!OpenControlNodeList(expNode, nodeVector)) return false; + if(!exponential->OpenControlNodeList(expNode, nodeVector)) return false; exponential->SetNodeList(nodeVector); exponential->UpdatePoints(); @@ -2456,21 +2446,21 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, if(gainListNode) { auto gainNode = gainListNode->first_node("Gain"); while(gainNode) { - int id = GetAttributeValueInt(gainNode, "ID"); + int id = XMLParser::GetAttributeValueInt(gainNode, "ID"); Gain* gain = new Gain(id); auto cadPropNode = gainNode->first_node("CADProperties"); if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + double width = XMLParser::GetNodeValueDouble(size, "Width"); + double height = XMLParser::GetNodeValueDouble(size, "Height"); + double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle"); - double value = GetNodeValueDouble(gainNode, "Value"); + double value = XMLParser::GetNodeValueDouble(gainNode, "Value"); gain->SetWidth(width); gain->SetHeight(height); @@ -2480,7 +2470,7 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, gain->StartMove(gain->GetPosition()); std::vector<Node*> nodeVector; - if(!OpenControlNodeList(gainNode, nodeVector)) return false; + if(!gain->OpenControlNodeList(gainNode, nodeVector)) return false; gain->SetNodeList(nodeVector); gain->UpdatePoints(); @@ -2496,27 +2486,27 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, if(ioListNode) { auto ioNode = ioListNode->first_node("IO"); while(ioNode) { - int id = GetAttributeValueInt(ioNode, "ID"); + int id = XMLParser::GetAttributeValueInt(ioNode, "ID"); auto cadPropNode = ioNode->first_node("CADProperties"); if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); - - std::vector<Node*> nodeVector; - if(!OpenControlNodeList(ioNode, nodeVector)) return false; + double width = XMLParser::GetNodeValueDouble(size, "Width"); + double height = XMLParser::GetNodeValueDouble(size, "Height"); + double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle"); - IOControl::IOFlags value = static_cast<IOControl::IOFlags>(GetNodeValueInt(ioNode, "Value")); - int ioFlags = GetNodeValueInt(ioNode, "IOFlags"); + IOControl::IOFlags value = static_cast<IOControl::IOFlags>(XMLParser::GetNodeValueInt(ioNode, "Value")); + int ioFlags = XMLParser::GetNodeValueInt(ioNode, "IOFlags"); IOControl* io = new IOControl(ioFlags, id); + std::vector<Node*> nodeVector; + if(!io->OpenControlNodeList(ioNode, nodeVector)) return false; + io->SetWidth(width); io->SetHeight(height); io->SetAngle(angle); @@ -2537,25 +2527,25 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, if(limiterListNode) { auto limiterNode = limiterListNode->first_node("Limiter"); while(limiterNode) { - int id = GetAttributeValueInt(limiterNode, "ID"); + int id = XMLParser::GetAttributeValueInt(limiterNode, "ID"); Limiter* limiter = new Limiter(id); auto cadPropNode = limiterNode->first_node("CADProperties"); if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + double width = XMLParser::GetNodeValueDouble(size, "Width"); + double height = XMLParser::GetNodeValueDouble(size, "Height"); + double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle"); - double upLimit = GetNodeValueDouble(limiterNode, "UpperLimit"); - double lowLimit = GetNodeValueDouble(limiterNode, "LowerLimit"); + double upLimit = XMLParser::GetNodeValueDouble(limiterNode, "UpperLimit"); + double lowLimit = XMLParser::GetNodeValueDouble(limiterNode, "LowerLimit"); std::vector<Node*> nodeVector; - if(!OpenControlNodeList(limiterNode, nodeVector)) return false; + if(!limiter->OpenControlNodeList(limiterNode, nodeVector)) return false; limiter->SetWidth(width); limiter->SetHeight(height); @@ -2579,22 +2569,22 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, if(multiplierListNode) { auto multiplierNode = multiplierListNode->first_node("Multiplier"); while(multiplierNode) { - int id = GetAttributeValueInt(multiplierNode, "ID"); + int id = XMLParser::GetAttributeValueInt(multiplierNode, "ID"); Multiplier* multiplier = new Multiplier(id); auto cadPropNode = multiplierNode->first_node("CADProperties"); if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + double width = XMLParser::GetNodeValueDouble(size, "Width"); + double height = XMLParser::GetNodeValueDouble(size, "Height"); + double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle"); std::vector<Node*> nodeVector; - if(!OpenControlNodeList(multiplierNode, nodeVector)) return false; + if(!multiplier->OpenControlNodeList(multiplierNode, nodeVector)) return false; multiplier->SetWidth(width); multiplier->SetHeight(height); @@ -2616,22 +2606,22 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, if(dividerListNode) { auto dividerNode = dividerListNode->first_node("Divider"); while(dividerNode) { - int id = GetAttributeValueInt(dividerNode, "ID"); + int id = XMLParser::GetAttributeValueInt(dividerNode, "ID"); Divider* divider = new Divider(id); auto cadPropNode = dividerNode->first_node("CADProperties"); if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + double width = XMLParser::GetNodeValueDouble(size, "Width"); + double height = XMLParser::GetNodeValueDouble(size, "Height"); + double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle"); std::vector<Node*> nodeVector; - if(!OpenControlNodeList(dividerNode, nodeVector)) return false; + if(!divider->OpenControlNodeList(dividerNode, nodeVector)) return false; divider->SetWidth(width); divider->SetHeight(height); @@ -2653,25 +2643,25 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, if(rateLimiterListNode) { auto rateLimiterNode = rateLimiterListNode->first_node("RateLimiter"); while(rateLimiterNode) { - int id = GetAttributeValueInt(rateLimiterNode, "ID"); + int id = XMLParser::GetAttributeValueInt(rateLimiterNode, "ID"); RateLimiter* limiter = new RateLimiter(id); auto cadPropNode = rateLimiterNode->first_node("CADProperties"); if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + double width = XMLParser::GetNodeValueDouble(size, "Width"); + double height = XMLParser::GetNodeValueDouble(size, "Height"); + double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle"); - double upLimit = GetNodeValueDouble(rateLimiterNode, "UpperLimit"); - double lowLimit = GetNodeValueDouble(rateLimiterNode, "LowerLimit"); + double upLimit = XMLParser::GetNodeValueDouble(rateLimiterNode, "UpperLimit"); + double lowLimit = XMLParser::GetNodeValueDouble(rateLimiterNode, "LowerLimit"); std::vector<Node*> nodeVector; - if(!OpenControlNodeList(rateLimiterNode, nodeVector)) return false; + if(!limiter->OpenControlNodeList(rateLimiterNode, nodeVector)) return false; limiter->SetWidth(width); limiter->SetHeight(height); @@ -2695,91 +2685,26 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, if(sumListNode) { auto sumNode = sumListNode->first_node("Sum"); while(sumNode) { - int id = GetAttributeValueInt(sumNode, "ID"); + int id = XMLParser::GetAttributeValueInt(sumNode, "ID"); Sum* sum = new Sum(id); - auto cadPropNode = sumNode->first_node("CADProperties"); - if(!cadPropNode) return false; - - auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); - auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); - - std::vector<Sum::Signal> signs; - auto signsNode = sumNode->first_node("Signs"); - auto sign = signsNode->first_node("Value"); - while(sign) { - long value; - wxString(sign->value()).ToCLong(&value); - signs.push_back(static_cast<Sum::Signal>(value)); - sign = sign->next_sibling("Value"); - } - sum->SetSignalList(signs); - - std::vector<Node*> nodeVector; - if(!OpenControlNodeList(sumNode, nodeVector)) return false; - - sum->SetWidth(width); - sum->SetHeight(height); - sum->SetAngle(angle); - sum->SetPosition(wxPoint2DDouble(posX, posY)); - - sum->StartMove(sum->GetPosition()); - sum->SetNodeList(nodeVector); - sum->UpdatePoints(); + if(!sum->OpenElement(sumNode)) return false; elementList.push_back(sum); sumNode = sumNode->next_sibling("Sum"); } } //} - + //{ Math expression auto mathListNode = elementsNode->first_node("MathExprList"); if(mathListNode) { auto mathExprNode = mathListNode->first_node("MathExpr"); while(mathExprNode) { - int id = GetAttributeValueInt(mathExprNode, "ID"); + int id = XMLParser::GetAttributeValueInt(mathExprNode, "ID"); MathExpression* mathExpr = new MathExpression(id); - auto cadPropNode = mathExprNode->first_node("CADProperties"); - if(!cadPropNode) return false; - - auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); - auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); - - std::vector<wxString> variables; - auto variablesNode = mathExprNode->first_node("VariableList"); - auto variable = variablesNode->first_node("Variable"); - while(variable) { - variables.push_back(variable->value()); - variable = variable->next_sibling("Variable"); - } - mathExpr->SetVariables(variables); - - auto mathExprValueNode = mathExprNode->first_node("MathExprValue"); - mathExpr->SetMathExpression(mathExprValueNode->value()); - - std::vector<Node*> nodeVector; - if(!OpenControlNodeList(mathExprNode, nodeVector)) return false; - - mathExpr->SetWidth(width); - mathExpr->SetHeight(height); - mathExpr->SetAngle(angle); - mathExpr->SetPosition(wxPoint2DDouble(posX, posY)); - - mathExpr->StartMove(mathExpr->GetPosition()); - mathExpr->SetNodeList(nodeVector); - mathExpr->UpdatePoints(); + if(!mathExpr->OpenElement(mathExprNode)) return false; elementList.push_back(mathExpr); mathExprNode = mathExprNode->next_sibling("MathExpr"); @@ -2792,19 +2717,19 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, if(tfListNode) { auto tfNode = tfListNode->first_node("TransferFunction"); while(tfNode) { - int id = GetAttributeValueInt(tfNode, "ID"); + int id = XMLParser::GetAttributeValueInt(tfNode, "ID"); TransferFunction* tf = new TransferFunction(id); auto cadPropNode = tfNode->first_node("CADProperties"); if(!cadPropNode) return false; auto position = cadPropNode->first_node("Position"); - double posX = GetNodeValueDouble(position, "X"); - double posY = GetNodeValueDouble(position, "Y"); + double posX = XMLParser::GetNodeValueDouble(position, "X"); + double posY = XMLParser::GetNodeValueDouble(position, "Y"); auto size = cadPropNode->first_node("Size"); - double width = GetNodeValueDouble(size, "Width"); - double height = GetNodeValueDouble(size, "Height"); - double angle = GetNodeValueDouble(cadPropNode, "Angle"); + double width = XMLParser::GetNodeValueDouble(size, "Width"); + double height = XMLParser::GetNodeValueDouble(size, "Height"); + double angle = XMLParser::GetNodeValueDouble(cadPropNode, "Angle"); std::vector<double> numerator, denominator; auto numeratorNode = tfNode->first_node("Numerator"); @@ -2825,7 +2750,7 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, } std::vector<Node*> nodeVector; - if(!OpenControlNodeList(tfNode, nodeVector)) return false; + if(!tf->OpenControlNodeList(tfNode, nodeVector)) return false; tf->SetWidth(width); tf->SetHeight(height); @@ -2853,11 +2778,11 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, auto connNode = connectionListNode->first_node("Connection"); while(connNode) { ConnectionLine* cLine = NULL; - int id = GetAttributeValueInt(connNode, "ID"); + int id = XMLParser::GetAttributeValueInt(connNode, "ID"); auto cadPropNode = connNode->first_node("CADProperties"); if(!cadPropNode) return false; - double offset = GetNodeValueDouble(cadPropNode, "Offset"); + double offset = XMLParser::GetNodeValueDouble(cadPropNode, "Offset"); auto parentList = connNode->first_node("ParentList"); if(!parentList) return false; @@ -2865,10 +2790,10 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, auto parentNode = parentList->first_node("Parent"); bool firstNode = true; while(parentNode) { - int elementID = GetNodeValueInt(parentNode, "ElementID"); - int nodeID = GetNodeValueInt(parentNode, "NodeID"); + int elementID = XMLParser::GetNodeValueInt(parentNode, "ElementID"); + int nodeID = XMLParser::GetNodeValueInt(parentNode, "NodeID"); - ControlElement* element = GetControlElementFromID(elementList, elementID); + ControlElement* element = ControlElement::GetControlElementFromID(elementList, elementID); Node* node = element->GetNodeList()[nodeID]; if(firstNode) cLine = new ConnectionLine(node, id); @@ -2882,7 +2807,7 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, auto parentLine = connNode->first_node("ParentLine"); if(!parentLine) return false; - int parentLineID = GetAttributeValueInt(parentLine, "ID"); + int parentLineID = XMLParser::GetAttributeValueInt(parentLine, "ID"); if(parentLineID != -1) { for(auto it = connectionList.begin(), itEnd = connectionList.end(); it != itEnd; ++it) { ConnectionLine* parent = *it; @@ -2898,152 +2823,8 @@ bool FileHanding::OpenControlElements(rapidxml::xml_document<>& doc, connectionList.push_back(cLine); connNode = connNode->next_sibling("Connection"); } - } //} - - ctrlContainer->FillContainer(elementList, connectionList); - return true; -} - -void FileHanding::SaveControlNodes(rapidxml::xml_document<>& doc, - rapidxml::xml_node<>* nodesN, - std::vector<Node*> nodeList) -{ - int id = 0; - for(auto it = nodeList.begin(), itEnd = nodeList.end(); it != itEnd; ++it) { - Node* node = *it; - node->SetID(id); - auto nodeN = AppendNode(doc, nodesN, "Node"); - SetNodeAttribute(doc, nodeN, "ID", id); - auto nodePosition = AppendNode(doc, nodeN, "Position"); - auto posNodeX = AppendNode(doc, nodePosition, "X"); - SetNodeValue(doc, posNodeX, node->GetPosition().m_x); - auto posNodeY = AppendNode(doc, nodePosition, "Y"); - SetNodeValue(doc, posNodeY, node->GetPosition().m_y); - auto angle = AppendNode(doc, nodeN, "Angle"); - SetNodeValue(doc, angle, node->GetAngle()); - auto nodeType = AppendNode(doc, nodeN, "Type"); - SetNodeValue(doc, nodeType, node->GetNodeType()); - id++; - } -} - -ControlElement* FileHanding::GetControlElementFromID(std::vector<ControlElement*> elementList, int id) -{ - for(auto it = elementList.begin(), itEnd = elementList.end(); it != itEnd; ++it) { - ControlElement* element = *it; - if(element->GetID() == id) return element; - } - return NULL; -} + } //} -bool FileHanding::OpenControlNodeList(rapidxml::xml_node<>* elementNode, std::vector<Node*>& nodeVector) -{ - auto nodeList = elementNode->first_node("NodeList"); - if(!nodeList) return false; - auto nodeN = nodeList->first_node("Node"); - while(nodeN) { - auto nodePosition = nodeN->first_node("Position"); - double nodePosX = GetNodeValueDouble(nodePosition, "X"); - double nodePosY = GetNodeValueDouble(nodePosition, "Y"); - double nodeAngle = GetNodeValueDouble(nodeN, "Angle"); - Node::NodeType nodeType = (Node::NodeType)GetNodeValueInt(nodeN, "Type"); - Node* node = new Node(wxPoint2DDouble(nodePosX, nodePosY), nodeType, 2.0); - node->SetAngle(nodeAngle); - nodeVector.push_back(node); - nodeN = nodeN->next_sibling("Node"); - } + ctrlContainer->FillContainer(elementList, connectionList); return true; } - -rapidxml::xml_node<>* FileHanding::AppendNode(rapidxml::xml_document<>& doc, - rapidxml::xml_node<>* parentNode, - const char* name, - rapidxml::node_type nodeType) -{ - rapidxml::xml_node<>* node = doc.allocate_node(nodeType, name); - parentNode->append_node(node); - return node; -} - -void FileHanding::SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, wxString value) -{ - node->value(doc.allocate_string(value.mb_str())); -} - -void FileHanding::SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, int value) -{ - node->value(doc.allocate_string(wxString::Format("%d", value).mb_str())); -} - -void FileHanding::SetNodeValue(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* node, double value) -{ - node->value(doc.allocate_string(wxString::FromCDouble(value, 13).mb_str())); -} - -void FileHanding::SetNodeAttribute(rapidxml::xml_document<>& doc, - rapidxml::xml_node<>* node, - const char* atrName, - wxString value) -{ - node->append_attribute(doc.allocate_attribute(atrName, doc.allocate_string(value.mb_str()))); -} - -void FileHanding::SetNodeAttribute(rapidxml::xml_document<>& doc, - rapidxml::xml_node<>* node, - const char* atrName, - int value) -{ - node->append_attribute( - doc.allocate_attribute(atrName, doc.allocate_string(wxString::Format("%d", value).mb_str()))); -} - -void FileHanding::SetNodeAttribute(rapidxml::xml_document<>& doc, - rapidxml::xml_node<>* node, - const char* atrName, - double value) -{ - node->append_attribute( - doc.allocate_attribute(atrName, doc.allocate_string(wxString::FromCDouble(value, 13).mb_str()))); -} - -double FileHanding::GetNodeValueDouble(rapidxml::xml_node<>* parent, const char* nodeName) -{ - double dValue = 0.0; - if(parent) { - auto node = parent->first_node(nodeName); - if(node) wxString(node->value()).ToCDouble(&dValue); - } - return dValue; -} - -int FileHanding::GetNodeValueInt(rapidxml::xml_node<>* parent, const char* nodeName) -{ - long iValue = -1; - if(parent) { - auto node = parent->first_node(nodeName); - if(node) wxString(node->value()).ToCLong(&iValue); - } - return (int)iValue; -} - -int FileHanding::GetAttributeValueInt(rapidxml::xml_node<>* parent, const char* nodeName, const char* atrName) -{ - long iValue = -1; - if(parent) { - auto node = parent->first_node(nodeName); - if(node) { - auto atr = node->first_attribute(atrName); - if(atr) wxString(atr->value()).ToCLong(&iValue); - } - } - return (int)iValue; -} - -int FileHanding::GetAttributeValueInt(rapidxml::xml_node<>* node, const char* atrName) -{ - long intValue; - auto atr = node->first_attribute(atrName); - if(!atr) return false; - wxString(atr->value()).ToCLong(&intValue); - return (int)intValue; -} |