diff options
29 files changed, 540 insertions, 133 deletions
diff --git a/.codelite/.tern-port b/.codelite/.tern-port index 6659652..2fba11d 100644 --- a/.codelite/.tern-port +++ b/.codelite/.tern-port @@ -1 +1 @@ -61227
\ No newline at end of file +60504
\ No newline at end of file diff --git a/.codelite/PSP.session b/.codelite/PSP.session index 392393b..e686eb2 100644 --- a/.codelite/PSP.session +++ b/.codelite/PSP.session @@ -1,40 +1,40 @@ <?xml version="1.0" encoding="UTF-8"?> <Session Name="C:\Users\Thales\Documents\GitHub\PSP\PSP.workspace"> - <int Value="4" Name="m_selectedTab"/> + <int Value="0" Name="m_selectedTab"/> <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\PSP.workspace" Name="m_workspaceName"/> <TabInfoArray Name="TabInfoArray"> <TabInfo> <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Workspace.cpp" Name="FileName"/> - <int Value="0" Name="FirstVisibleLine"/> - <int Value="23" Name="CurrentLine"/> + <int Value="950" Name="FirstVisibleLine"/> + <int Value="973" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Workspace.h" Name="FileName"/> - <int Value="66" Name="FirstVisibleLine"/> - <int Value="100" Name="CurrentLine"/> + <int Value="60" Name="FirstVisibleLine"/> + <int Value="75" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Element.cpp" Name="FileName"/> - <int Value="332" Name="FirstVisibleLine"/> - <int Value="361" Name="CurrentLine"/> + <int Value="320" Name="FirstVisibleLine"/> + <int Value="344" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Element.h" Name="FileName"/> - <int Value="33" Name="FirstVisibleLine"/> - <int Value="59" Name="CurrentLine"/> + <int Value="184" Name="FirstVisibleLine"/> + <int Value="164" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\LineForm.cpp" Name="FileName"/> - <int Value="108" Name="FirstVisibleLine"/> - <int Value="132" Name="CurrentLine"/> + <int Value="38" Name="FirstVisibleLine"/> + <int Value="58" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> @@ -46,37 +46,37 @@ <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> - <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Line.h" Name="FileName"/> - <int Value="6" Name="FirstVisibleLine"/> - <int Value="56" Name="CurrentLine"/> + <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\MainFrame.cpp" Name="FileName"/> + <int Value="206" Name="FirstVisibleLine"/> + <int Value="234" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> - <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Line.cpp" Name="FileName"/> - <int Value="292" Name="FirstVisibleLine"/> - <int Value="314" Name="CurrentLine"/> + <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Branch.cpp" Name="FileName"/> + <int Value="0" Name="FirstVisibleLine"/> + <int Value="0" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> - <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\SyncGenerator.h" Name="FileName"/> - <int Value="48" Name="FirstVisibleLine"/> - <int Value="0" Name="CurrentLine"/> + <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Branch.h" Name="FileName"/> + <int Value="0" Name="FirstVisibleLine"/> + <int Value="4" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> - <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\SyncGenerator.cpp" Name="FileName"/> + <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Line.h" Name="FileName"/> <int Value="0" Name="FirstVisibleLine"/> - <int Value="56" Name="CurrentLine"/> + <int Value="2" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> <TabInfo> - <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\GeneratorStabForm.cpp" Name="FileName"/> - <int Value="33" Name="FirstVisibleLine"/> - <int Value="55" Name="CurrentLine"/> + <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Line.cpp" Name="FileName"/> + <int Value="101" Name="FirstVisibleLine"/> + <int Value="120" Name="CurrentLine"/> <wxArrayString Name="Bookmarks"/> <IntVector Name="CollapsedFolds"/> </TabInfo> diff --git a/.codelite/PSP.tags b/.codelite/PSP.tags Binary files differindex 61ed6f7..5c5e958 100644 --- a/.codelite/PSP.tags +++ b/.codelite/PSP.tags diff --git a/.codelite/compilation.db b/.codelite/compilation.db Binary files differindex fe810ac..2a3a9dc 100644 --- a/.codelite/compilation.db +++ b/.codelite/compilation.db diff --git a/.codelite/compile_commands.json b/.codelite/compile_commands.json index 8fbf923..e9e3006 100644 --- a/.codelite/compile_commands.json +++ b/.codelite/compile_commands.json @@ -1,13 +1,13 @@ [{ "directory": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project", - "command": "C:/TDM-GCC-64/bin/g++.exe -O2 -Wall -mthreads -DHAVE_W32API_H -D__WXMSW__ -DNDEBUG -D_UNICODE -IC:/wxWidgets-3.1.0/lib/gcc_dll/mswu -IC:/wxWidgets-3.1.0/include -DWXUSINGDLL -Wno-ctor-dtor-privacy -pipe -fmessage-length=0 -fno-keep-inline-dllexport -std=c++11 -DNDEBUG -DUNICODE -I. -I. -MG -MP -MT./Release/LineForm.cpp.o -MF./Release/LineForm.cpp.o.d -MM LineForm.cpp", - "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\LineForm.cpp" + "command": "C:/TDM-GCC-64/bin/g++.exe -O2 -Wall -mthreads -DHAVE_W32API_H -D__WXMSW__ -DNDEBUG -D_UNICODE -IC:/wxWidgets-3.1.0/lib/gcc_dll/mswu -IC:/wxWidgets-3.1.0/include -DWXUSINGDLL -Wno-ctor-dtor-privacy -pipe -fmessage-length=0 -fno-keep-inline-dllexport -std=c++11 -DNDEBUG -DUNICODE -I. -I. -MG -MP -MT./Release/Workspace.cpp.o -MF./Release/Workspace.cpp.o.d -MM Workspace.cpp", + "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Workspace.cpp" }, { "directory": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project", - "command": "C:/TDM-GCC-64/bin/g++.exe -c C:/Users/Thales/Documents/GitHub/PSP/Project/LineForm.cpp -O2 -Wall -mthreads -DHAVE_W32API_H -D__WXMSW__ -DNDEBUG -D_UNICODE -IC:/wxWidgets-3.1.0/lib/gcc_dll/mswu -IC:/wxWidgets-3.1.0/include -DWXUSINGDLL -Wno-ctor-dtor-privacy -pipe -fmessage-length=0 -fno-keep-inline-dllexport -std=c++11 -DNDEBUG -DUNICODE -o ./Release/LineForm.cpp.o -I. -I.", - "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\LineForm.cpp" + "command": "C:/TDM-GCC-64/bin/g++.exe -c C:/Users/Thales/Documents/GitHub/PSP/Project/MainFrame.cpp -O2 -Wall -mthreads -DHAVE_W32API_H -D__WXMSW__ -DNDEBUG -D_UNICODE -IC:/wxWidgets-3.1.0/lib/gcc_dll/mswu -IC:/wxWidgets-3.1.0/include -DWXUSINGDLL -Wno-ctor-dtor-privacy -pipe -fmessage-length=0 -fno-keep-inline-dllexport -std=c++11 -DNDEBUG -DUNICODE -o ./Release/MainFrame.cpp.o -I. -I.", + "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\MainFrame.cpp" }, { "directory": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project", - "command": "C:/TDM-GCC-64/bin/g++.exe -c C:/Users/Thales/Documents/GitHub/PSP/Project/Line.cpp -O2 -Wall -mthreads -DHAVE_W32API_H -D__WXMSW__ -DNDEBUG -D_UNICODE -IC:/wxWidgets-3.1.0/lib/gcc_dll/mswu -IC:/wxWidgets-3.1.0/include -DWXUSINGDLL -Wno-ctor-dtor-privacy -pipe -fmessage-length=0 -fno-keep-inline-dllexport -std=c++11 -DNDEBUG -DUNICODE -o ./Release/Line.cpp.o -I. -I.", - "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Line.cpp" + "command": "C:/TDM-GCC-64/bin/g++.exe -c C:/Users/Thales/Documents/GitHub/PSP/Project/Workspace.cpp -O2 -Wall -mthreads -DHAVE_W32API_H -D__WXMSW__ -DNDEBUG -D_UNICODE -IC:/wxWidgets-3.1.0/lib/gcc_dll/mswu -IC:/wxWidgets-3.1.0/include -DWXUSINGDLL -Wno-ctor-dtor-privacy -pipe -fmessage-length=0 -fno-keep-inline-dllexport -std=c++11 -DNDEBUG -DUNICODE -o ./Release/Workspace.cpp.o -I. -I.", + "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Workspace.cpp" }]
\ No newline at end of file diff --git a/.codelite/refactoring.db b/.codelite/refactoring.db Binary files differindex 46d3b51..e278706 100644 --- a/.codelite/refactoring.db +++ b/.codelite/refactoring.db diff --git a/Project/Branch.h b/Project/Branch.h index a39cef6..ba7108a 100644 --- a/Project/Branch.h +++ b/Project/Branch.h @@ -2,6 +2,7 @@ #define BRANCH_H #include "Element.h" +#include "Bus.h" class Branch : public Element { diff --git a/Project/Element.h b/Project/Element.h index dff68f7..b1a7163 100644 --- a/Project/Element.h +++ b/Project/Element.h @@ -169,6 +169,8 @@ class Element bool DoubleFromString(wxWindow* parent, wxString strValue, double& value, wxString errorMsg); bool IntFromString(wxWindow* parent, wxString strValue, int& value, wxString errorMsg); + virtual void + protected: std::vector<Element*> m_parentList; diff --git a/Project/ElementForm.cpp b/Project/ElementForm.cpp index b5517e4..893918c 100644 --- a/Project/ElementForm.cpp +++ b/Project/ElementForm.cpp @@ -1481,7 +1481,7 @@ LineFormBase::LineFormBase(wxWindow* parent, wxWindowID id, const wxString& titl wxBoxSizer* boxSizerLvl2_2 = new wxBoxSizer(wxVERTICAL); m_panelFault->SetSizer(boxSizerLvl2_2); - wxStaticBoxSizer* staticBoxSizerZeroImpSeq = new wxStaticBoxSizer( new wxStaticBox(m_panelFault, wxID_ANY, _("Zero-sequance impedances (p.u.)")), wxVERTICAL); + wxStaticBoxSizer* staticBoxSizerZeroImpSeq = new wxStaticBoxSizer( new wxStaticBox(m_panelFault, wxID_ANY, _("Zero-sequence impedances (p.u.)")), wxVERTICAL); boxSizerLvl2_2->Add(staticBoxSizerZeroImpSeq, 0, wxALL|wxEXPAND, WXC_FROM_DIP(5)); diff --git a/Project/ElementForm.wxcp b/Project/ElementForm.wxcp index 23f714a..0ff4383 100644 --- a/Project/ElementForm.wxcp +++ b/Project/ElementForm.wxcp @@ -16518,7 +16518,7 @@ }, { "type": "string", "m_label": "Label:", - "m_value": "Zero-sequance impedances (p.u.)" + "m_value": "Zero-sequence impedances (p.u.)" }], "m_events": [], "m_children": [{ diff --git a/Project/Line.cpp b/Project/Line.cpp index fb84b1e..25e0e4b 100644 --- a/Project/Line.cpp +++ b/Project/Line.cpp @@ -1,6 +1,7 @@ #include "Line.h" Line::Line() : Branch() {} +Line::Line(wxString name) : Branch() { m_electricaData.name = name; } Line::~Line() {} bool Line::Contains(wxPoint2DDouble position) const { @@ -41,8 +42,8 @@ void Line::Draw(wxPoint2DDouble translation, double scale) const glLineWidth(1.5); glColor4d(0.2, 0.2, 0.2, 1.0); DrawLine(pointList); - - DrawSwitches(); + + if(m_inserted) DrawSwitches(); // Draw nodes. if(pointList.size() > 0) { @@ -97,16 +98,32 @@ bool Line::AddParent(Element* parent, wxPoint2DDouble position) parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back. m_pointList.push_back(parentPt); // First point m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_position)); - - wxRect2DDouble genRect(0,0,0,0); - m_switchRect.push_back(genRect); - UpdateSwitches(); - + + wxRect2DDouble genRect(0, 0, 0, 0); + m_switchRect.push_back(genRect); + UpdateSwitches(); + + Bus* parentBus = (Bus*)parent; + m_electricaData.nominalVoltage = parentBus->GetEletricalData().nominalVoltage; + m_electricaData.nominalVoltageUnit = parentBus->GetEletricalData().nominalVoltageUnit; + return false; } // Second bus. else if(parent != m_parentList[0]) { + Bus* parentBus = (Bus*)parent; + if(m_electricaData.nominalVoltage != parentBus->GetEletricalData().nominalVoltage || + m_electricaData.nominalVoltageUnit != parentBus->GetEletricalData().nominalVoltageUnit) + { + wxMessageDialog msgDialog( + NULL, _("Unable to connect with a line two buses with different nominal voltages.\n" + "Use a transformer or edit the bus properties."), + _("Error"), wxOK | wxCENTRE | wxICON_ERROR); + msgDialog.ShowModal(); + return false; + } + m_parentList.push_back(parent); wxPoint2DDouble parentPt = parent->RotateAtPosition( position, -parent->GetAngle()); // Rotate click to horizontal position. @@ -124,11 +141,11 @@ bool Line::AddParent(Element* parent, wxPoint2DDouble position) m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_pointList[m_pointList.size() - 1])); m_pointList.push_back(parentPt); // Last point. - - wxRect2DDouble genRect(0,0,0,0); - m_switchRect.push_back(genRect); - UpdateSwitches(); - + + wxRect2DDouble genRect(0, 0, 0, 0); + m_switchRect.push_back(genRect); + UpdateSwitches(); + m_inserted = true; return true; } @@ -203,13 +220,13 @@ void Line::MoveNode(Element* parent, wxPoint2DDouble position) if(m_activeNodeID == 1) { m_pointList[0] = m_movePts[0] + position - m_moveStartPt; m_parentList[0] = NULL; - m_online = false; + m_online = false; } else if(m_activeNodeID == 2) { m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt; m_parentList[1] = NULL; - m_online = false; + m_online = false; } } @@ -267,7 +284,7 @@ bool Line::GetContextMenu(wxMenu& menu) { menu.Append(ID_LINE_REMOVE_NODE, _("Remove node")); } - menu.Append(ID_DELETE, _("Delete")); + menu.Append(ID_DELETE, _("Delete")); return true; } @@ -296,26 +313,26 @@ void Line::AddNode(wxPoint2DDouble point) void Line::CalculateBoundaries(wxPoint2DDouble& leftUp, wxPoint2DDouble& rightBottom) const { - if(m_pointList.size() > 0) { - // Check points list boundaries. - leftUp = m_pointList[0]; - rightBottom = m_pointList[0]; - for(int i = 1; i < (int)m_pointList.size(); i++) { - if(m_pointList[i].m_x < leftUp.m_x) leftUp.m_x = m_pointList[i].m_x; - if(m_pointList[i].m_y < leftUp.m_y) leftUp.m_y = m_pointList[i].m_y; - if(m_pointList[i].m_x > rightBottom.m_x) rightBottom.m_x = m_pointList[i].m_x; - if(m_pointList[i].m_y > rightBottom.m_y) rightBottom.m_y = m_pointList[i].m_y; + if(m_pointList.size() > 0) { + // Check points list boundaries. + leftUp = m_pointList[0]; + rightBottom = m_pointList[0]; + for(int i = 1; i < (int)m_pointList.size(); i++) { + if(m_pointList[i].m_x < leftUp.m_x) leftUp.m_x = m_pointList[i].m_x; + if(m_pointList[i].m_y < leftUp.m_y) leftUp.m_y = m_pointList[i].m_y; + if(m_pointList[i].m_x > rightBottom.m_x) rightBottom.m_x = m_pointList[i].m_x; + if(m_pointList[i].m_y > rightBottom.m_y) rightBottom.m_y = m_pointList[i].m_y; } } } bool Line::ShowForm(wxWindow* parent, Element* element) { - LineForm* lineForm = new LineForm(parent, this); - if(lineForm->ShowModal() == wxID_OK) { - lineForm->Destroy(); - return true; + LineForm* lineForm = new LineForm(parent, this); + if(lineForm->ShowModal() == wxID_OK) { + lineForm->Destroy(); + return true; } - lineForm->Destroy(); - return false; + lineForm->Destroy(); + return false; } diff --git a/Project/Line.h b/Project/Line.h index 8aa0c83..7dfe104 100644 --- a/Project/Line.h +++ b/Project/Line.h @@ -33,6 +33,7 @@ class Line : public Branch { public: Line(); + Line(wxString name); ~Line(); virtual bool Contains(wxPoint2DDouble position) const; virtual void Draw(wxPoint2DDouble translation, double scale) const; diff --git a/Project/LineForm.cpp b/Project/LineForm.cpp index 7cc9aca..e5efd3e 100644 --- a/Project/LineForm.cpp +++ b/Project/LineForm.cpp @@ -5,13 +5,13 @@ LineForm::LineForm(wxWindow* parent, Line* line) : LineFormBase(parent) { m_choiceResistance->SetString(1, L'\u03A9'); m_choiceResistance->SetString(2, (wxString)L'\u03A9' + "/km"); - m_choiceResistance->SetInitialSize(); - m_textCtrlResistance->SetInitialSize(); + m_choiceResistance->SetInitialSize(); + m_textCtrlResistance->SetInitialSize(); m_choiceReactance->SetString(1, L'\u03A9'); m_choiceReactance->SetString(2, (wxString)L'\u03A9' + "/km"); - m_choiceReactance->SetInitialSize(); - m_textCtrlReactance->SetInitialSize(); + m_choiceReactance->SetInitialSize(); + m_textCtrlReactance->SetInitialSize(); ReplaceStaticTextLabelChar(m_staticTextZeroResistance, L'\u2080'); ReplaceStaticTextLabelChar(m_staticTextZeroReactance, L'\u2080'); @@ -42,83 +42,110 @@ LineForm::LineForm(wxWindow* parent, Line* line) : LineFormBase(parent) default: break; } - m_staticTextNominalVoltageValue->SetLabel(nominalVoltageStr); - - m_textCtrlNominalPower->SetValue(wxString::FromDouble(data.nominalPower)); - switch(data.nominalPowerUnit) + m_staticTextNominalVoltageValue->SetLabel(nominalVoltageStr); + + m_textCtrlNominalPower->SetValue(wxString::FromDouble(data.nominalPower)); + switch(data.nominalPowerUnit) { - case UNIT_VA: - m_choiceResistance->SetSelection(0); + case UNIT_VA: + { + m_choiceNominalPower->SetSelection(0); + } break; - case UNIT_kVA: - m_choiceResistance->SetSelection(1); + case UNIT_kVA: + { + m_choiceNominalPower->SetSelection(1); + } break; - case UNIT_MVA: - m_choiceResistance->SetSelection(2); + case UNIT_MVA: + { + m_choiceNominalPower->SetSelection(2); + } break; - default: + default: break; } - - m_textCtrlResistance->SetValue(wxString::FromDouble(data.resistance)); - switch(data.resistanceUnit) + + m_textCtrlResistance->SetValue(wxString::FromDouble(data.resistance)); + switch(data.resistanceUnit) { - case UNIT_PU: - m_choiceResistance->SetSelection(0); + case UNIT_PU: + { + m_choiceResistance->SetSelection(0); + } break; - case UNIT_OHM: - m_choiceResistance->SetSelection(1); + case UNIT_OHM: + { + m_choiceResistance->SetSelection(1); + } break; - case UNIT_OHM_km: - m_choiceResistance->SetSelection(2); + case UNIT_OHM_km: + { + m_choiceResistance->SetSelection(2); + } break; - default: + default: break; } - - m_textCtrlReactance->SetValue(wxString::FromDouble(data.indReactance)); - switch(data.indReactanceUnit) + + m_textCtrlReactance->SetValue(wxString::FromDouble(data.indReactance)); + switch(data.indReactanceUnit) { - case UNIT_PU: - m_choiceResistance->SetSelection(0); + case UNIT_PU: + { + m_choiceReactance->SetSelection(0); + } break; - case UNIT_OHM: - m_choiceResistance->SetSelection(1); + case UNIT_OHM: + { + m_choiceReactance->SetSelection(1); + } break; - case UNIT_OHM_km: - m_choiceResistance->SetSelection(2); + case UNIT_OHM_km: + { + m_choiceReactance->SetSelection(2); + } break; - default: + default: break; } - - m_textCtrlSusceptance->SetValue(wxString::FromDouble(data.capSusceptance)); - switch(data.capSusceptanceUnit) + + m_textCtrlSusceptance->SetValue(wxString::FromDouble(data.capSusceptance)); + switch(data.capSusceptanceUnit) { - case UNIT_PU: - m_choiceResistance->SetSelection(0); + case UNIT_PU: + { + m_choiceSusceptance->SetSelection(0); + } break; - case UNIT_S: - m_choiceResistance->SetSelection(1); + case UNIT_S: + { + m_choiceSusceptance->SetSelection(1); + } break; - case UNIT_S_km: - m_choiceResistance->SetSelection(2); + case UNIT_S_km: + { + m_choiceSusceptance->SetSelection(2); + } break; - default: + default: break; } - - m_textCtrlLineSize->SetValue(wxString::FromDouble(data.lineSize)); - m_checkUseLinePower->SetValue(data.useLinePower); - - m_textCtrlZeroResistance->SetValue(wxString::FromDouble(data.zeroResistance)); - m_textCtrlZeroReactance->SetValue(wxString::FromDouble(data.zeroIndReactance)); - m_textCtrlZeroSusceptance->SetValue(wxString::FromDouble(data.zeroCapSusceptance)); + + m_textCtrlLineSize->SetValue(wxString::FromDouble(data.lineSize)); + m_checkUseLinePower->SetValue(data.useLinePower); + + m_textCtrlZeroResistance->SetValue(wxString::FromDouble(data.zeroResistance)); + m_textCtrlZeroReactance->SetValue(wxString::FromDouble(data.zeroIndReactance)); + m_textCtrlZeroSusceptance->SetValue(wxString::FromDouble(data.zeroCapSusceptance)); } LineForm::~LineForm() {} void LineForm::OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); } -void LineForm::OnOKButtonClick(wxCommandEvent& event) { EndModal(wxID_OK); } +void LineForm::OnOKButtonClick(wxCommandEvent& event) +{ + if(ValidateData()) EndModal(wxID_OK); +} void LineForm::OnStabilityButtonClick(wxCommandEvent& event) {} void LineForm::ReplaceStaticTextLabelChar(wxStaticText* staticText, wchar_t newChar) { @@ -129,8 +156,115 @@ void LineForm::ReplaceStaticTextLabelChar(wxStaticText* staticText, wchar_t newC bool LineForm::ValidateData() { - LineElectricalData data = m_line->GetElectricalData(); - - //if(!m_line->DoubleFromString(m_parent, m_textCtrlInertia->GetValue(), data.inertia, - // _("Value entered incorrectly in the field \"Inertia\"."))) + LineElectricalData data = m_line->GetElectricalData(); + + data.name = m_textCtrlName->GetValue(); + + if(!m_line->DoubleFromString(m_parent, m_textCtrlNominalPower->GetValue(), data.nominalPower, + _("Value entered incorrectly in the field \"Nominal power\"."))) + return false; + switch(m_choiceNominalPower->GetSelection()) + { + case 0: + { + data.nominalPowerUnit = UNIT_VA; + } + break; + case 1: + { + data.nominalPowerUnit = UNIT_kVA; + } + break; + case 2: + { + data.nominalPowerUnit = UNIT_MVA; + } + break; + } + + if(!m_line->DoubleFromString(m_parent, m_textCtrlResistance->GetValue(), data.resistance, + _("Value entered incorrectly in the field \"Resistance\"."))) + return false; + switch(m_choiceResistance->GetSelection()) + { + case 0: + { + data.resistanceUnit = UNIT_PU; + } + break; + case 1: + { + data.resistanceUnit = UNIT_OHM; + } + break; + case 2: + { + data.resistanceUnit = UNIT_OHM_km; + } + break; + } + + if(!m_line->DoubleFromString(m_parent, m_textCtrlReactance->GetValue(), data.indReactance, + _("Value entered incorrectly in the field \"Indutive Reactance\"."))) + return false; + switch(m_choiceReactance->GetSelection()) + { + case 0: + { + data.indReactanceUnit = UNIT_PU; + } + break; + case 1: + { + data.indReactanceUnit = UNIT_OHM; + } + break; + case 2: + { + data.indReactanceUnit = UNIT_OHM_km; + } + break; + } + + if(!m_line->DoubleFromString(m_parent, m_textCtrlSusceptance->GetValue(), data.capSusceptance, + _("Value entered incorrectly in the field \"Capacitive Susceptance\"."))) + return false; + switch(m_choiceSusceptance->GetSelection()) + { + case 0: + { + data.capSusceptanceUnit = UNIT_PU; + } + break; + case 1: + { + data.capSusceptanceUnit = UNIT_S; + } + break; + case 2: + { + data.capSusceptanceUnit = UNIT_S_km; + } + break; + } + + if(!m_line->DoubleFromString(m_parent, m_textCtrlLineSize->GetValue(), data.lineSize, + _("Value entered incorrectly in the field \"Line size\"."))) + return false; + + data.useLinePower = m_checkUseLinePower->GetValue(); + + if(!m_line->DoubleFromString(m_parent, m_textCtrlZeroResistance->GetValue(), data.zeroResistance, + _("Value entered incorrectly in the field \"Zero-sequence resistance\"."))) + return false; + if(!m_line->DoubleFromString(m_parent, m_textCtrlZeroReactance->GetValue(), data.zeroIndReactance, + _("Value entered incorrectly in the field \"Zero-sequence indutive reactance\"."))) + return false; + if(!m_line->DoubleFromString(m_parent, m_textCtrlZeroSusceptance->GetValue(), data.zeroCapSusceptance, + _("Value entered incorrectly in the field \"Zero-sequence capacitive susceptance\"."))) + return false; + + m_line->SetElectricalData(data); + + return true; } diff --git a/Project/MainFrame.cpp b/Project/MainFrame.cpp index 3b7e230..aedf7a8 100644 --- a/Project/MainFrame.cpp +++ b/Project/MainFrame.cpp @@ -229,8 +229,10 @@ void MainFrame::OnAddElementsClick(wxCommandEvent& event) break; case ID_ADDMENU_LINE: { - Line* newLine = new Line(); + Line* newLine = + new Line(wxString::Format(_("Line %d"), workspace->GetElementNumber(ID_LINE))); elementList.push_back(newLine); + workspace->IncrementElementNumber(ID_LINE); statusBarText = _("Insert Line: Click on two buses, ESC to cancel."); newElement = true; } diff --git a/Project/Project.mk b/Project/Project.mk index b8e0ec5..12e584f 100644 --- a/Project/Project.mk +++ b/Project/Project.mk @@ -13,7 +13,7 @@ CurrentFileName := CurrentFilePath := CurrentFileFullPath := User :=Thales -Date :=29/09/2016 +Date :=30/09/2016 CodeLitePath :="C:/Program Files/CodeLite" LinkerName :=C:/TDM-GCC-64/bin/g++.exe SharedObjectLinkerName :=C:/TDM-GCC-64/bin/g++.exe -shared -fPIC diff --git a/Project/Release/Branch.cpp.o b/Project/Release/Branch.cpp.o Binary files differindex 212064f..902af22 100644 --- a/Project/Release/Branch.cpp.o +++ b/Project/Release/Branch.cpp.o diff --git a/Project/Release/Branch.cpp.o.d b/Project/Release/Branch.cpp.o.d index bdd1cbb..ad389b7 100644 --- a/Project/Release/Branch.cpp.o.d +++ b/Project/Release/Branch.cpp.o.d @@ -130,7 +130,61 @@ Release/Branch.cpp.o: Branch.cpp Branch.h Element.h \ C:/wxWidgets-3.1.0/include/wx/msw/bitmap.h \ C:/wxWidgets-3.1.0/include/wx/ownerdrw.h \ C:/wxWidgets-3.1.0/include/wx/msw/ownerdrw.h \ - C:/wxWidgets-3.1.0/include/wx/msw/menu.h + C:/wxWidgets-3.1.0/include/wx/msw/menu.h Bus.h BusForm.h ElementForm.h \ + C:/wxWidgets-3.1.0/include/wx/xrc/xmlres.h \ + C:/wxWidgets-3.1.0/include/wx/filesys.h \ + C:/wxWidgets-3.1.0/include/wx/filename.h \ + C:/wxWidgets-3.1.0/include/wx/file.h \ + C:/wxWidgets-3.1.0/include/wx/convauto.h \ + C:/wxWidgets-3.1.0/include/wx/artprov.h \ + C:/wxWidgets-3.1.0/include/wx/xrc/xmlreshandler.h \ + C:/wxWidgets-3.1.0/include/wx/imaglist.h \ + C:/wxWidgets-3.1.0/include/wx/msw/imaglist.h \ + C:/wxWidgets-3.1.0/include/wx/xrc/xh_bmp.h \ + C:/wxWidgets-3.1.0/include/wx/sizer.h \ + C:/wxWidgets-3.1.0/include/wx/notebook.h \ + C:/wxWidgets-3.1.0/include/wx/bookctrl.h \ + C:/wxWidgets-3.1.0/include/wx/control.h \ + C:/wxWidgets-3.1.0/include/wx/msw/control.h \ + C:/wxWidgets-3.1.0/include/wx/withimages.h \ + C:/wxWidgets-3.1.0/include/wx/msw/notebook.h \ + C:/wxWidgets-3.1.0/include/wx/stattext.h \ + C:/wxWidgets-3.1.0/include/wx/msw/stattext.h \ + C:/wxWidgets-3.1.0/include/wx/textctrl.h \ + C:/wxWidgets-3.1.0/include/wx/textentry.h \ + C:/wxWidgets-3.1.0/include/wx/msw/textentry.h \ + C:/wxWidgets-3.1.0/include/wx/ioswrap.h \ + C:/wxWidgets-3.1.0/include/wx/msw/textctrl.h \ + C:/wxWidgets-3.1.0/include/wx/choice.h \ + C:/wxWidgets-3.1.0/include/wx/ctrlsub.h \ + C:/wxWidgets-3.1.0/include/wx/msw/ctrlsub.h \ + C:/wxWidgets-3.1.0/include/wx/msw/choice.h \ + C:/wxWidgets-3.1.0/include/wx/checkbox.h \ + C:/wxWidgets-3.1.0/include/wx/msw/checkbox.h \ + C:/wxWidgets-3.1.0/include/wx/msw/ownerdrawnbutton.h \ + C:/wxWidgets-3.1.0/include/wx/button.h \ + C:/wxWidgets-3.1.0/include/wx/anybutton.h \ + C:/wxWidgets-3.1.0/include/wx/msw/anybutton.h \ + C:/wxWidgets-3.1.0/include/wx/msw/button.h \ + C:/wxWidgets-3.1.0/include/wx/statbox.h \ + C:/wxWidgets-3.1.0/include/wx/msw/statbox.h \ + C:/wxWidgets-3.1.0/include/wx/statline.h \ + C:/wxWidgets-3.1.0/include/wx/msw/statline.h \ + C:/wxWidgets-3.1.0/include/wx/persist.h \ + C:/wxWidgets-3.1.0/include/wx/confbase.h \ + C:/wxWidgets-3.1.0/include/wx/base64.h \ + C:/wxWidgets-3.1.0/include/wx/persist/toplevel.h \ + C:/wxWidgets-3.1.0/include/wx/persist/window.h \ + C:/wxWidgets-3.1.0/include/wx/display.h \ + C:/wxWidgets-3.1.0/include/wx/vidmode.h \ + C:/wxWidgets-3.1.0/include/wx/persist/bookctrl.h \ + C:/wxWidgets-3.1.0/include/wx/persist/treebook.h \ + C:/wxWidgets-3.1.0/include/wx/treebook.h \ + C:/wxWidgets-3.1.0/include/wx/treectrl.h \ + C:/wxWidgets-3.1.0/include/wx/treebase.h \ + C:/wxWidgets-3.1.0/include/wx/itemid.h \ + C:/wxWidgets-3.1.0/include/wx/systhemectrl.h \ + C:/wxWidgets-3.1.0/include/wx/msw/treectrl.h Branch.h: @@ -401,3 +455,117 @@ C:/wxWidgets-3.1.0/include/wx/ownerdrw.h: C:/wxWidgets-3.1.0/include/wx/msw/ownerdrw.h: C:/wxWidgets-3.1.0/include/wx/msw/menu.h: + +Bus.h: + +BusForm.h: + +ElementForm.h: + +C:/wxWidgets-3.1.0/include/wx/xrc/xmlres.h: + +C:/wxWidgets-3.1.0/include/wx/filesys.h: + +C:/wxWidgets-3.1.0/include/wx/filename.h: + +C:/wxWidgets-3.1.0/include/wx/file.h: + +C:/wxWidgets-3.1.0/include/wx/convauto.h: + +C:/wxWidgets-3.1.0/include/wx/artprov.h: + +C:/wxWidgets-3.1.0/include/wx/xrc/xmlreshandler.h: + +C:/wxWidgets-3.1.0/include/wx/imaglist.h: + +C:/wxWidgets-3.1.0/include/wx/msw/imaglist.h: + +C:/wxWidgets-3.1.0/include/wx/xrc/xh_bmp.h: + +C:/wxWidgets-3.1.0/include/wx/sizer.h: + +C:/wxWidgets-3.1.0/include/wx/notebook.h: + +C:/wxWidgets-3.1.0/include/wx/bookctrl.h: + +C:/wxWidgets-3.1.0/include/wx/control.h: + +C:/wxWidgets-3.1.0/include/wx/msw/control.h: + +C:/wxWidgets-3.1.0/include/wx/withimages.h: + +C:/wxWidgets-3.1.0/include/wx/msw/notebook.h: + +C:/wxWidgets-3.1.0/include/wx/stattext.h: + +C:/wxWidgets-3.1.0/include/wx/msw/stattext.h: + +C:/wxWidgets-3.1.0/include/wx/textctrl.h: + +C:/wxWidgets-3.1.0/include/wx/textentry.h: + +C:/wxWidgets-3.1.0/include/wx/msw/textentry.h: + +C:/wxWidgets-3.1.0/include/wx/ioswrap.h: + +C:/wxWidgets-3.1.0/include/wx/msw/textctrl.h: + +C:/wxWidgets-3.1.0/include/wx/choice.h: + +C:/wxWidgets-3.1.0/include/wx/ctrlsub.h: + +C:/wxWidgets-3.1.0/include/wx/msw/ctrlsub.h: + +C:/wxWidgets-3.1.0/include/wx/msw/choice.h: + +C:/wxWidgets-3.1.0/include/wx/checkbox.h: + +C:/wxWidgets-3.1.0/include/wx/msw/checkbox.h: + +C:/wxWidgets-3.1.0/include/wx/msw/ownerdrawnbutton.h: + +C:/wxWidgets-3.1.0/include/wx/button.h: + +C:/wxWidgets-3.1.0/include/wx/anybutton.h: + +C:/wxWidgets-3.1.0/include/wx/msw/anybutton.h: + +C:/wxWidgets-3.1.0/include/wx/msw/button.h: + +C:/wxWidgets-3.1.0/include/wx/statbox.h: + +C:/wxWidgets-3.1.0/include/wx/msw/statbox.h: + +C:/wxWidgets-3.1.0/include/wx/statline.h: + +C:/wxWidgets-3.1.0/include/wx/msw/statline.h: + +C:/wxWidgets-3.1.0/include/wx/persist.h: + +C:/wxWidgets-3.1.0/include/wx/confbase.h: + +C:/wxWidgets-3.1.0/include/wx/base64.h: + +C:/wxWidgets-3.1.0/include/wx/persist/toplevel.h: + +C:/wxWidgets-3.1.0/include/wx/persist/window.h: + +C:/wxWidgets-3.1.0/include/wx/display.h: + +C:/wxWidgets-3.1.0/include/wx/vidmode.h: + +C:/wxWidgets-3.1.0/include/wx/persist/bookctrl.h: + +C:/wxWidgets-3.1.0/include/wx/persist/treebook.h: + +C:/wxWidgets-3.1.0/include/wx/treebook.h: + +C:/wxWidgets-3.1.0/include/wx/treectrl.h: + +C:/wxWidgets-3.1.0/include/wx/treebase.h: + +C:/wxWidgets-3.1.0/include/wx/itemid.h: + +C:/wxWidgets-3.1.0/include/wx/systhemectrl.h: + +C:/wxWidgets-3.1.0/include/wx/msw/treectrl.h: diff --git a/Project/Release/ElementForm.cpp.o b/Project/Release/ElementForm.cpp.o Binary files differindex b482f79..cd8d195 100644 --- a/Project/Release/ElementForm.cpp.o +++ b/Project/Release/ElementForm.cpp.o diff --git a/Project/Release/Line.cpp.o b/Project/Release/Line.cpp.o Binary files differindex 5111c67..6a6185e 100644 --- a/Project/Release/Line.cpp.o +++ b/Project/Release/Line.cpp.o diff --git a/Project/Release/Line.cpp.o.d b/Project/Release/Line.cpp.o.d index b1190dc..62ce48e 100644 --- a/Project/Release/Line.cpp.o.d +++ b/Project/Release/Line.cpp.o.d @@ -184,7 +184,7 @@ Release/Line.cpp.o: Line.cpp Line.h LineForm.h ElementForm.h \ C:/wxWidgets-3.1.0/include/wx/msw/menuitem.h \ C:/wxWidgets-3.1.0/include/wx/ownerdrw.h \ C:/wxWidgets-3.1.0/include/wx/msw/ownerdrw.h \ - C:/wxWidgets-3.1.0/include/wx/msw/menu.h + C:/wxWidgets-3.1.0/include/wx/msw/menu.h Bus.h BusForm.h Line.h: @@ -569,3 +569,7 @@ C:/wxWidgets-3.1.0/include/wx/ownerdrw.h: C:/wxWidgets-3.1.0/include/wx/msw/ownerdrw.h: C:/wxWidgets-3.1.0/include/wx/msw/menu.h: + +Bus.h: + +BusForm.h: diff --git a/Project/Release/LineForm.cpp.o b/Project/Release/LineForm.cpp.o Binary files differindex 04c2b17..484099c 100644 --- a/Project/Release/LineForm.cpp.o +++ b/Project/Release/LineForm.cpp.o diff --git a/Project/Release/MainFrame.cpp.o b/Project/Release/MainFrame.cpp.o Binary files differindex 5a3b6cb..fd06139 100644 --- a/Project/Release/MainFrame.cpp.o +++ b/Project/Release/MainFrame.cpp.o diff --git a/Project/Release/MainFrame.cpp.o.d b/Project/Release/MainFrame.cpp.o.d index 8cb7a84..f9579f0 100644 --- a/Project/Release/MainFrame.cpp.o.d +++ b/Project/Release/MainFrame.cpp.o.d @@ -222,9 +222,9 @@ Release/MainFrame.cpp.o: MainFrame.cpp MainFrame.h \ C:/wxWidgets-3.1.0/include/wx/statbox.h \ C:/wxWidgets-3.1.0/include/wx/msw/statbox.h \ C:/wxWidgets-3.1.0/include/wx/statline.h \ - C:/wxWidgets-3.1.0/include/wx/msw/statline.h Element.h Line.h Branch.h \ - Transformer.h SyncGenerator.h GeneratorForm.h Machines.h IndMotor.h \ - SyncMotor.h Load.h Shunt.h Inductor.h Capacitor.h + C:/wxWidgets-3.1.0/include/wx/msw/statline.h Element.h Line.h LineForm.h \ + Branch.h Transformer.h SyncGenerator.h GeneratorForm.h Machines.h \ + IndMotor.h SyncMotor.h Load.h Shunt.h Inductor.h Capacitor.h MainFrame.h: @@ -696,6 +696,8 @@ Element.h: Line.h: +LineForm.h: + Branch.h: Transformer.h: diff --git a/Project/Release/PSP-UFU.exe b/Project/Release/PSP-UFU.exe Binary files differindex fd66311..f0389d9 100644 --- a/Project/Release/PSP-UFU.exe +++ b/Project/Release/PSP-UFU.exe diff --git a/Project/Release/Transformer.cpp.o b/Project/Release/Transformer.cpp.o Binary files differindex 81f065f..1229ebf 100644 --- a/Project/Release/Transformer.cpp.o +++ b/Project/Release/Transformer.cpp.o diff --git a/Project/Release/Workspace.cpp.o b/Project/Release/Workspace.cpp.o Binary files differindex 7a829ff..7458807 100644 --- a/Project/Release/Workspace.cpp.o +++ b/Project/Release/Workspace.cpp.o diff --git a/Project/Release/Workspace.cpp.o.d b/Project/Release/Workspace.cpp.o.d index d91267c..bf7cf23 100644 --- a/Project/Release/Workspace.cpp.o.d +++ b/Project/Release/Workspace.cpp.o.d @@ -207,9 +207,9 @@ Release/Workspace.cpp.o: Workspace.cpp Workspace.h \ C:/wxWidgets-3.1.0/include/wx/msw/menuitem.h \ C:/wxWidgets-3.1.0/include/wx/ownerdrw.h \ C:/wxWidgets-3.1.0/include/wx/msw/ownerdrw.h \ - C:/wxWidgets-3.1.0/include/wx/msw/menu.h Line.h Branch.h Transformer.h \ - SyncGenerator.h GeneratorForm.h Machines.h IndMotor.h SyncMotor.h Load.h \ - Shunt.h Inductor.h Capacitor.h + C:/wxWidgets-3.1.0/include/wx/msw/menu.h Line.h LineForm.h Branch.h \ + Transformer.h SyncGenerator.h GeneratorForm.h Machines.h IndMotor.h \ + SyncMotor.h Load.h Shunt.h Inductor.h Capacitor.h Workspace.h: @@ -645,6 +645,8 @@ C:/wxWidgets-3.1.0/include/wx/msw/menu.h: Line.h: +LineForm.h: + Branch.h: Transformer.h: diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp index c0d380a..698ae81 100644 --- a/Project/Workspace.cpp +++ b/Project/Workspace.cpp @@ -235,7 +235,43 @@ void Workspace::OnLeftDoubleClick(wxMouseEvent& event) // Click in an element. if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) { + bool elementIsBus = false; + Bus oldBus; + if(typeid(*element) == typeid(Bus)) { + elementIsBus = true; + oldBus = *(Bus*)element; + } element->ShowForm(this, element); + + // If the edited element is a bus and was changed the nominal voltage, this voltage must be + // propagated through the lines + if(elementIsBus) { + // The voltage was changed + if(oldBus.GetEletricalData().nominalVoltage != + ((Bus*)element)->GetEletricalData().nominalVoltage || + oldBus.GetEletricalData().nominalVoltageUnit != + ((Bus*)element)->GetEletricalData().nominalVoltageUnit) + { + // Check if the lines has this bus as parent + for(auto it = m_elementList.begin(); it != m_elementList.end(); it++) { + Element* child = *it; + + bool elementIsParent = false; + if(typeid(*child) == typeid(Line)) { + for(int i = 0; i < (int)child->GetParentList().size(); i++) { + Element* parent = child->GetParentList()[i]; + if(parent == element) { + // TODO: Ask the user if he wants to change all + // voltages + ValidateBusesVoltages(element); + elementIsParent = true; + } + } + } + if(elementIsParent) break; + } + } + } } // Click in a switch. @@ -601,7 +637,9 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } else // Insert a power line. { - Line* newLine = new Line(); + Line* newLine = + new Line(wxString::Format(_("Line %d"), GetElementNumber(ID_LINE))); + IncrementElementNumber(ID_LINE); m_elementList.push_back(newLine); m_mode = MODE_INSERT; m_statusBar->SetStatusText( @@ -901,3 +939,37 @@ void Workspace::Fit() Redraw(); } } + +void Workspace::ValidateBusesVoltages(Element* initialBus) +{ + double nominalVoltage = ((Bus*)initialBus)->GetEletricalData().nominalVoltage; + ElectricalUnit nominalVoltageUnit = ((Bus*)initialBus)->GetEletricalData().nominalVoltageUnit; + + for(auto it = m_elementList.begin(); it != m_elementList.end(); it++) { + Element* child = *it; + + if(typeid(*child) == typeid(Line)) { + BusElectricalData data1 = ((Bus*)child->GetParentList()[0])->GetEletricalData(); + BusElectricalData data2 = ((Bus*)child->GetParentList()[1])->GetEletricalData(); + + if(data1.nominalVoltage != data2.nominalVoltage || + data1.nominalVoltageUnit != data2.nominalVoltageUnit) + { + data1.nominalVoltage = nominalVoltage; + data2.nominalVoltage = nominalVoltage; + data1.nominalVoltageUnit = nominalVoltageUnit; + data2.nominalVoltageUnit = nominalVoltageUnit; + + ((Bus*)child->GetParentList()[0])->SetElectricalData(data1); + ((Bus*)child->GetParentList()[1])->SetElectricalData(data2); + + it = m_elementList.begin();// Restart search. + } + } + } +} + +void Workspace::ValidateElementsVoltages() +{ + //continua... +} diff --git a/Project/Workspace.h b/Project/Workspace.h index c5c0547..a4c84d8 100644 --- a/Project/Workspace.h +++ b/Project/Workspace.h @@ -72,6 +72,9 @@ class Workspace : public WorkspaceBase void DeleteSelectedElements(); void Fit(); + void ValidateBusesVoltages(Element* initialBus); + void ValidateElementsVoltages(); + int GetElementNumber(ElementID elementID) { return m_elementNumber[elementID]; } void IncrementElementNumber(ElementID elementID) { m_elementNumber[elementID]++; } @@ -98,7 +101,6 @@ class Workspace : public WorkspaceBase WorkspaceMode m_mode = MODE_EDIT; std::vector<Element*> m_elementList; - //int m_numElements = NUM_ELEMENTS; int m_elementNumber[NUM_ELEMENTS]; void UpdateStatusBar(); |