summaryrefslogtreecommitdiffstats
path: root/Project/HarmCurrentForm.cpp
diff options
context:
space:
mode:
authorThales Lima Oliveira <thaleslima.ufu@gmail.com>2019-04-25 01:25:41 -0300
committerThales Lima Oliveira <thaleslima.ufu@gmail.com>2019-04-25 01:25:41 -0300
commit2771fff79ac9c3c09b70f4668e7142b2e944d1f2 (patch)
treec55b0780b0da2ac270df16c5b92d7fc243ea0756 /Project/HarmCurrentForm.cpp
parentfdb50c49b323edf16ce72c7ee2c678aa1ac99777 (diff)
downloadPSP.git-2771fff79ac9c3c09b70f4668e7142b2e944d1f2.tar.gz
PSP.git-2771fff79ac9c3c09b70f4668e7142b2e944d1f2.tar.xz
PSP.git-2771fff79ac9c3c09b70f4668e7142b2e944d1f2.zip
Matpower Importer and power quality calculation
Power quality in implementation
Diffstat (limited to 'Project/HarmCurrentForm.cpp')
-rw-r--r--Project/HarmCurrentForm.cpp172
1 files changed, 172 insertions, 0 deletions
diff --git a/Project/HarmCurrentForm.cpp b/Project/HarmCurrentForm.cpp
new file mode 100644
index 0000000..812124c
--- /dev/null
+++ b/Project/HarmCurrentForm.cpp
@@ -0,0 +1,172 @@
+#include "HarmCurrent.h"
+#include "HarmCurrentForm.h"
+
+HarmCurrentForm::HarmCurrentForm(wxWindow* parent, HarmCurrent* harmCurrent) : HarmCurrentFormBase(parent)
+{
+ m_parent = parent;
+ m_harmCurrent = harmCurrent;
+
+ m_listCtrlHarmCurrentList->AppendColumn(_("Order"));
+ m_listCtrlHarmCurrentList->AppendColumn(_("Current"));
+ m_listCtrlHarmCurrentList->AppendColumn(_("Unit"));
+ m_listCtrlHarmCurrentList->AppendColumn(_("Angle"));
+
+ auto data = m_harmCurrent->GetElectricalData();
+ m_textCtrlName->SetValue(data.name);
+ for(unsigned int i = 0; i < data.harmonicOrder.size(); ++i) {
+ long item = m_listCtrlHarmCurrentList->InsertItem(m_maxID, wxString::Format("%d", data.harmonicOrder[i]));
+ m_listCtrlHarmCurrentList->SetItem(item, 1, m_harmCurrent->StringFromDouble(data.injHarmCurrent[i], 1));
+ m_listCtrlHarmCurrentList->SetItem(item, 2, data.injHarmCurrentUnit[i] == UNIT_A ? _("A") : _("p.u."));
+ m_listCtrlHarmCurrentList->SetItem(item, 3, m_harmCurrent->StringFromDouble(data.injHarmAngle[i], 1));
+ m_maxID++;
+ }
+
+ SetSize(GetBestSize());
+ Layout();
+}
+
+HarmCurrentForm::~HarmCurrentForm() {}
+
+void HarmCurrentForm::OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
+void HarmCurrentForm::OnOKButtonClick(wxCommandEvent& event)
+{
+ if(ValidateData()) EndModal(wxID_OK);
+}
+
+bool HarmCurrentForm::ValidateData()
+{
+ wxString name = m_textCtrlName->GetValue();
+ std::vector<int> harmonicOrder;
+ std::vector<double> injHarmCurrent;
+ std::vector<ElectricalUnit> injHarmCurrentUnit;
+ std::vector<double> injHarmAngle;
+
+ long item = -1;
+ while(true) {
+ item = m_listCtrlHarmCurrentList->GetNextItem(item, wxLIST_NEXT_ALL);
+ if(item == -1) break;
+ harmonicOrder.push_back(wxAtoi(m_listCtrlHarmCurrentList->GetItemText(item, 0)));
+ double injCurrent = 0.0;
+ if(!m_listCtrlHarmCurrentList->GetItemText(item, 1).ToDouble(&injCurrent)) { return false; }
+ injHarmCurrent.push_back(injCurrent);
+ if(m_listCtrlHarmCurrentList->GetItemText(item, 2) == "A")
+ injHarmCurrentUnit.push_back(UNIT_A);
+ else
+ injHarmCurrentUnit.push_back(UNIT_PU);
+ double injCAngle = 0.0;
+ if(!m_listCtrlHarmCurrentList->GetItemText(item, 3).ToDouble(&injCAngle)) { return false; }
+ injHarmAngle.push_back(injCAngle);
+ }
+
+ auto data = m_harmCurrent->GetElectricalData();
+ data.name = name;
+ data.harmonicOrder = harmonicOrder;
+ data.injHarmCurrent = injHarmCurrent;
+ data.injHarmCurrentUnit = injHarmCurrentUnit;
+ data.injHarmAngle = injHarmAngle;
+ m_harmCurrent->SetElectricalData(data);
+
+ return true;
+}
+void HarmCurrentForm::OnAddButtonClick(wxCommandEvent& event)
+{
+ wxString order = m_pgPropHarmOrder->GetValue().GetString(); // Get order in properties
+ // Look if already have the order in the list
+ long item = -1;
+ bool findOrder = false;
+ while(true) {
+ item = m_listCtrlHarmCurrentList->GetNextItem(item, wxLIST_NEXT_ALL);
+ if(item == -1) break;
+ if(m_listCtrlHarmCurrentList->GetItemText(item, 0) == order) {
+ findOrder = true;
+ break;
+ }
+ }
+
+ if(!findOrder) item = m_listCtrlHarmCurrentList->InsertItem(m_maxID, m_pgPropHarmOrder->GetValue().GetString());
+ m_listCtrlHarmCurrentList->SetItem(item, 1, m_pgPropHarmCurrent->GetValue().GetString());
+ m_listCtrlHarmCurrentList->SetItem(item, 2, m_pgPropUnit->GetValue().GetInteger() == 0 ? _("A") : _("p.u."));
+ m_listCtrlHarmCurrentList->SetItem(item, 3, m_pgPropHarmAngle->GetValue().GetString());
+ if(!findOrder) m_maxID++;
+
+ SortList();
+}
+void HarmCurrentForm::OnRemoveButtonClick(wxCommandEvent& event)
+{
+ std::vector<long> itemList;
+ long item = -1;
+ while(true) {
+ item = m_listCtrlHarmCurrentList->GetNextItem(item, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
+ if(item == -1) break;
+ itemList.push_back(item);
+ }
+ for(int i = static_cast<int>(itemList.size()) - 1; i >= 0; --i) {
+ m_listCtrlHarmCurrentList->DeleteItem(itemList[i]);
+ }
+}
+
+void HarmCurrentForm::SortList()
+{
+ // Get data, sort and recreate list.
+
+ std::vector<int> harmonicOrder;
+ std::vector<double> injHarmCurrent;
+ std::vector<ElectricalUnit> injHarmCurrentUnit;
+ std::vector<double> injHarmAngle;
+
+ // Get data
+ long item = -1;
+ while(true) {
+ item = m_listCtrlHarmCurrentList->GetNextItem(item, wxLIST_NEXT_ALL);
+ if(item == -1) break;
+ harmonicOrder.push_back(wxAtoi(m_listCtrlHarmCurrentList->GetItemText(item, 0)));
+ double injCurrent = 0.0;
+ if(!m_listCtrlHarmCurrentList->GetItemText(item, 1).ToDouble(&injCurrent)) return;
+ injHarmCurrent.push_back(injCurrent);
+ if(m_listCtrlHarmCurrentList->GetItemText(item, 2) == "A")
+ injHarmCurrentUnit.push_back(UNIT_A);
+ else
+ injHarmCurrentUnit.push_back(UNIT_PU);
+ double injCAngle = 0.0;
+ if(!m_listCtrlHarmCurrentList->GetItemText(item, 3).ToDouble(&injCAngle)) return;
+ injHarmAngle.push_back(injCAngle);
+ }
+
+ // Sort
+ for(unsigned int i = 0; i < harmonicOrder.size(); ++i) {
+ for(unsigned int j = 0; j < harmonicOrder.size(); ++j) {
+ if(harmonicOrder[i] < harmonicOrder[j]) {
+ int h = harmonicOrder[j];
+ harmonicOrder[j] = harmonicOrder[i];
+ harmonicOrder[i] = h;
+
+ double current = injHarmCurrent[j];
+ injHarmCurrent[j] = injHarmCurrent[i];
+ injHarmCurrent[i] = current;
+
+ auto unit = injHarmCurrentUnit[j];
+ injHarmCurrentUnit[j] = injHarmCurrentUnit[i];
+ injHarmCurrentUnit[i] = unit;
+
+ double angle = injHarmAngle[j];
+ injHarmAngle[j] = injHarmAngle[i];
+ injHarmAngle[i] = angle;
+ }
+ }
+ }
+
+ // Clear all and reconstruct list
+ m_listCtrlHarmCurrentList->ClearAll();
+ m_listCtrlHarmCurrentList->AppendColumn(_("Order"));
+ m_listCtrlHarmCurrentList->AppendColumn(_("Current"));
+ m_listCtrlHarmCurrentList->AppendColumn(_("Unit"));
+ m_listCtrlHarmCurrentList->AppendColumn(_("Angle"));
+ m_maxID = 0;
+ for(unsigned int i = 0; i < harmonicOrder.size(); ++i) {
+ long item = m_listCtrlHarmCurrentList->InsertItem(m_maxID, wxString::Format("%d", harmonicOrder[i]));
+ m_listCtrlHarmCurrentList->SetItem(item, 1, m_harmCurrent->StringFromDouble(injHarmCurrent[i], 1));
+ m_listCtrlHarmCurrentList->SetItem(item, 2, injHarmCurrentUnit[i] == UNIT_A ? _("A") : _("p.u."));
+ m_listCtrlHarmCurrentList->SetItem(item, 3, m_harmCurrent->StringFromDouble(injHarmAngle[i], 1));
+ m_maxID++;
+ }
+}