summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorThales1330 <thaleslima.ufu@gmail.com>2016-10-29 17:46:00 -0200
committerThales1330 <thaleslima.ufu@gmail.com>2016-10-29 17:46:00 -0200
commit7d4df7195202eaea0e84f227e96f19dec4144081 (patch)
tree894064c78359c2eca33b344353dbf290ba4df9a3
parent468ba7581675a23567746628d6777ca411b150d3 (diff)
downloadPSP.git-7d4df7195202eaea0e84f227e96f19dec4144081.tar.gz
PSP.git-7d4df7195202eaea0e84f227e96f19dec4144081.tar.xz
PSP.git-7d4df7195202eaea0e84f227e96f19dec4144081.zip
Power flow arrows implemented
-rw-r--r--.codelite/.tern-port2
-rw-r--r--.codelite/PSP.session85
-rw-r--r--.codelite/PSP.tagsbin83022848 -> 83038208 bytes
-rw-r--r--.codelite/compilation.dbbin57344 -> 57344 bytes
-rw-r--r--.codelite/compile_commands.json48
-rw-r--r--.codelite/refactoring.dbbin1832960 -> 1842176 bytes
-rw-r--r--Project/Element.cpp36
-rw-r--r--Project/Element.h13
-rw-r--r--Project/IndMotor.cpp7
-rw-r--r--Project/Line.cpp54
-rw-r--r--Project/Line.h2
-rw-r--r--Project/Load.cpp4
-rw-r--r--Project/Machines.cpp39
-rw-r--r--Project/Machines.h1
-rw-r--r--Project/Project.mk2
-rw-r--r--Project/Release/Branch.cpp.obin31796 -> 33186 bytes
-rw-r--r--Project/Release/Bus.cpp.obin39399 -> 40789 bytes
-rw-r--r--Project/Release/BusForm.cpp.obin112442 -> 112442 bytes
-rw-r--r--Project/Release/Capacitor.cpp.obin41429 -> 42819 bytes
-rw-r--r--Project/Release/Element.cpp.obin153721 -> 155347 bytes
-rw-r--r--Project/Release/GeneratorStabForm.cpp.obin103823 -> 103823 bytes
-rw-r--r--Project/Release/IndMotor.cpp.obin34879 -> 36269 bytes
-rw-r--r--Project/Release/IndMotorForm.cpp.obin87201 -> 87201 bytes
-rw-r--r--Project/Release/Inductor.cpp.obin41335 -> 42725 bytes
-rw-r--r--Project/Release/Line.cpp.obin157876 -> 160828 bytes
-rw-r--r--Project/Release/LineForm.cpp.obin100269 -> 100269 bytes
-rw-r--r--Project/Release/Load.cpp.obin38807 -> 40310 bytes
-rw-r--r--Project/Release/Machines.cpp.obin37516 -> 39478 bytes
-rw-r--r--Project/Release/MainFrame.cpp.obin141166 -> 141166 bytes
-rw-r--r--Project/Release/PSP-UFU.exebin3987450 -> 3994603 bytes
-rw-r--r--Project/Release/ReactiveShuntElementForm.cpp.obin93200 -> 93200 bytes
-rw-r--r--Project/Release/Shunt.cpp.obin31760 -> 34219 bytes
-rw-r--r--Project/Release/SyncGenerator.cpp.obin39400 -> 40790 bytes
-rw-r--r--Project/Release/SyncMachineForm.cpp.obin123326 -> 123326 bytes
-rw-r--r--Project/Release/SyncMotor.cpp.obin35540 -> 36930 bytes
-rw-r--r--Project/Release/Transformer.cpp.obin45125 -> 49577 bytes
-rw-r--r--Project/Release/TransformerForm.cpp.obin108025 -> 108025 bytes
-rw-r--r--Project/Release/Workspace.cpp.obin156051 -> 156067 bytes
-rw-r--r--Project/Shunt.cpp188
-rw-r--r--Project/Shunt.h1
-rw-r--r--Project/Transformer.cpp113
-rw-r--r--Project/Transformer.h29
42 files changed, 483 insertions, 141 deletions
diff --git a/.codelite/.tern-port b/.codelite/.tern-port
index 7aa4ddc..2e5161a 100644
--- a/.codelite/.tern-port
+++ b/.codelite/.tern-port
@@ -1 +1 @@
-55270 \ No newline at end of file
+49844 \ No newline at end of file
diff --git a/.codelite/PSP.session b/.codelite/PSP.session
index 1a35eca..d290852 100644
--- a/.codelite/PSP.session
+++ b/.codelite/PSP.session
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Session Name="C:\Users\Thales\Documents\GitHub\PSP\PSP.workspace">
- <int Value="3" Name="m_selectedTab"/>
+ <int Value="15" Name="m_selectedTab"/>
<wxString Value="C:\Users\Thales\Documents\GitHub\PSP\PSP.workspace" Name="m_workspaceName"/>
<TabInfoArray Name="TabInfoArray">
<TabInfo>
@@ -12,7 +12,7 @@
</TabInfo>
<TabInfo>
<wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Workspace.h" Name="FileName"/>
- <int Value="60" Name="FirstVisibleLine"/>
+ <int Value="18" Name="FirstVisibleLine"/>
<int Value="75" Name="CurrentLine"/>
<wxArrayString Name="Bookmarks"/>
<IntVector Name="CollapsedFolds"/>
@@ -26,29 +26,92 @@
</TabInfo>
<TabInfo>
<wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Element.cpp" Name="FileName"/>
- <int Value="394" Name="FirstVisibleLine"/>
- <int Value="430" Name="CurrentLine"/>
+ <int Value="397" Name="FirstVisibleLine"/>
+ <int Value="424" 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="192" Name="FirstVisibleLine"/>
- <int Value="211" Name="CurrentLine"/>
+ <int Value="206" Name="FirstVisibleLine"/>
+ <int Value="232" 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="15" Name="FirstVisibleLine"/>
- <int Value="28" Name="CurrentLine"/>
+ <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Line.h" Name="FileName"/>
+ <int Value="0" Name="FirstVisibleLine"/>
+ <int Value="52" Name="CurrentLine"/>
+ <wxArrayString Name="Bookmarks"/>
+ <IntVector Name="CollapsedFolds"/>
+ </TabInfo>
+ <TabInfo>
+ <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Branch.h" Name="FileName"/>
+ <int Value="0" Name="FirstVisibleLine"/>
+ <int Value="26" Name="CurrentLine"/>
+ <wxArrayString Name="Bookmarks"/>
+ <IntVector Name="CollapsedFolds"/>
+ </TabInfo>
+ <TabInfo>
+ <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Branch.cpp" Name="FileName"/>
+ <int Value="16" Name="FirstVisibleLine"/>
+ <int Value="25" Name="CurrentLine"/>
+ <wxArrayString Name="Bookmarks"/>
+ <IntVector Name="CollapsedFolds"/>
+ </TabInfo>
+ <TabInfo>
+ <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Transformer.h" Name="FileName"/>
+ <int Value="44" Name="FirstVisibleLine"/>
+ <int Value="71" Name="CurrentLine"/>
+ <wxArrayString Name="Bookmarks"/>
+ <IntVector Name="CollapsedFolds"/>
+ </TabInfo>
+ <TabInfo>
+ <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Transformer.cpp" Name="FileName"/>
+ <int Value="245" Name="FirstVisibleLine"/>
+ <int Value="255" Name="CurrentLine"/>
+ <wxArrayString Name="Bookmarks"/>
+ <IntVector Name="CollapsedFolds"/>
+ </TabInfo>
+ <TabInfo>
+ <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Shunt.cpp" Name="FileName"/>
+ <int Value="102" Name="FirstVisibleLine"/>
+ <int Value="127" Name="CurrentLine"/>
+ <wxArrayString Name="Bookmarks"/>
+ <IntVector Name="CollapsedFolds"/>
+ </TabInfo>
+ <TabInfo>
+ <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Shunt.h" Name="FileName"/>
+ <int Value="0" Name="FirstVisibleLine"/>
+ <int Value="24" Name="CurrentLine"/>
+ <wxArrayString Name="Bookmarks"/>
+ <IntVector Name="CollapsedFolds"/>
+ </TabInfo>
+ <TabInfo>
+ <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Capacitor.cpp" Name="FileName"/>
+ <int Value="18" Name="FirstVisibleLine"/>
+ <int Value="40" Name="CurrentLine"/>
+ <wxArrayString Name="Bookmarks"/>
+ <IntVector Name="CollapsedFolds"/>
+ </TabInfo>
+ <TabInfo>
+ <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Machines.h" Name="FileName"/>
+ <int Value="0" Name="FirstVisibleLine"/>
+ <int Value="23" Name="CurrentLine"/>
<wxArrayString Name="Bookmarks"/>
<IntVector Name="CollapsedFolds"/>
</TabInfo>
<TabInfo>
<wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Machines.cpp" Name="FileName"/>
- <int Value="75" Name="FirstVisibleLine"/>
- <int Value="113" Name="CurrentLine"/>
+ <int Value="204" Name="FirstVisibleLine"/>
+ <int Value="225" Name="CurrentLine"/>
+ <wxArrayString Name="Bookmarks"/>
+ <IntVector Name="CollapsedFolds"/>
+ </TabInfo>
+ <TabInfo>
+ <wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Load.cpp" Name="FileName"/>
+ <int Value="15" Name="FirstVisibleLine"/>
+ <int Value="38" Name="CurrentLine"/>
<wxArrayString Name="Bookmarks"/>
<IntVector Name="CollapsedFolds"/>
</TabInfo>
diff --git a/.codelite/PSP.tags b/.codelite/PSP.tags
index da3f478..9851901 100644
--- a/.codelite/PSP.tags
+++ b/.codelite/PSP.tags
Binary files differ
diff --git a/.codelite/compilation.db b/.codelite/compilation.db
index b7b2f1a..d466c4c 100644
--- a/.codelite/compilation.db
+++ b/.codelite/compilation.db
Binary files differ
diff --git a/.codelite/compile_commands.json b/.codelite/compile_commands.json
index b642e2f..cfefd7a 100644
--- a/.codelite/compile_commands.json
+++ b/.codelite/compile_commands.json
@@ -1,9 +1,49 @@
[{
"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/Element.cpp.o -MF./Release/Element.cpp.o.d -MM Element.cpp",
- "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Element.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/Transformer.cpp.o -MF./Release/Transformer.cpp.o.d -MM Transformer.cpp",
+ "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Transformer.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/Element.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/Element.cpp.o -I. -I.",
- "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Element.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/Load.cpp.o -MF./Release/Load.cpp.o.d -MM Load.cpp",
+ "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Load.cpp"
+ }, {
+ "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/Shunt.cpp.o -MF./Release/Shunt.cpp.o.d -MM Shunt.cpp",
+ "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Shunt.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/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/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"
+ }, {
+ "directory": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project",
+ "command": "C:/TDM-GCC-64/bin/g++.exe -c C:/Users/Thales/Documents/GitHub/PSP/Project/Transformer.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/Transformer.cpp.o -I. -I.",
+ "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Transformer.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/Shunt.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/Shunt.cpp.o -I. -I.",
+ "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Shunt.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/Load.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/Load.cpp.o -I. -I.",
+ "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Load.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/Inductor.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/Inductor.cpp.o -I. -I.",
+ "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Inductor.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/Capacitor.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/Capacitor.cpp.o -I. -I.",
+ "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Capacitor.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/ReactiveShuntElementForm.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/ReactiveShuntElementForm.cpp.o -I. -I.",
+ "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\ReactiveShuntElementForm.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/LoadForm.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/LoadForm.cpp.o -I. -I.",
+ "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\LoadForm.cpp"
}] \ No newline at end of file
diff --git a/.codelite/refactoring.db b/.codelite/refactoring.db
index dab2cd8..cee3a31 100644
--- a/.codelite/refactoring.db
+++ b/.codelite/refactoring.db
Binary files differ
diff --git a/Project/Element.cpp b/Project/Element.cpp
index 3f6e111..91ed61f 100644
--- a/Project/Element.cpp
+++ b/Project/Element.cpp
@@ -390,6 +390,8 @@ wxString Element::StringFromDouble(double value, int minDecimal)
void Element::CalculatePowerFlowPts(std::vector<wxPoint2DDouble> edges)
{
+ double arrowRate = 100.0; // One arrow to each "arrowRate" distance in pixels.
+
if(edges.size() < 2) return;
// Clear all power flow points
@@ -401,26 +403,32 @@ void Element::CalculatePowerFlowPts(std::vector<wxPoint2DDouble> edges)
wxPoint2DDouble pt2 = edges[i];
double angle = std::atan2(pt2.m_y - pt1.m_y, pt2.m_x - pt1.m_x);
-
- //wxLogMessage(wxString::Format("(%f, %f) (%f, %f)"), pt1.m_x, pt1.m_y, pt2.m_x, pt2.m_y);
wxPoint2DDouble rotPt2(
std::cos(-angle) * (pt2.m_x - pt1.m_x) - std::sin(-angle) * (pt2.m_y - pt1.m_y) + pt1.m_x,
std::sin(-angle) * (pt2.m_x - pt1.m_x) + std::cos(-angle) * (pt2.m_y - pt1.m_y) + pt1.m_y);
- wxPoint2DDouble mid((rotPt2.m_x + pt1.m_x) / 2.0, (rotPt2.m_y + pt1.m_y) / 2.0); // test
- std::vector<wxPoint2DDouble> triPts;
- triPts.push_back(mid + wxPoint2DDouble(5.0, 0.0));
- triPts.push_back(mid + wxPoint2DDouble(-5.0, 5.0));
- triPts.push_back(mid + wxPoint2DDouble(-5.0, -5.0));
-
- // Rotate back.
- for(int i = 0; i < 3; i++) {
- triPts[i] = wxPoint2DDouble(
- std::cos(angle) * (triPts[i].m_x - pt1.m_x) - std::sin(angle) * (triPts[i].m_y - pt1.m_y) + pt1.m_x,
- std::sin(angle) * (triPts[i].m_x - pt1.m_x) + std::cos(angle) * (triPts[i].m_y - pt1.m_y) + pt1.m_y);
+ int numArrows = std::abs(pt1.m_x - rotPt2.m_x) / arrowRate;
+ if(numArrows == 0) numArrows = 1;
+
+ for(int i = 0; i < numArrows; i++) {
+ wxPoint2DDouble arrowCenter(pt1.m_x + ((rotPt2.m_x - pt1.m_x) / double(numArrows + 1)) * double(i + 1),
+ pt1.m_y + ((rotPt2.m_y - pt1.m_y) / double(numArrows + 1)) * double(i + 1));
+
+ std::vector<wxPoint2DDouble> triPts;
+ triPts.push_back(arrowCenter + wxPoint2DDouble(5.0, 0.0));
+ triPts.push_back(arrowCenter + wxPoint2DDouble(-5.0, 5.0));
+ triPts.push_back(arrowCenter + wxPoint2DDouble(-5.0, -5.0));
+
+ // Rotate back.
+ for(int i = 0; i < 3; i++) {
+ triPts[i] = wxPoint2DDouble(
+ std::cos(angle) * (triPts[i].m_x - pt1.m_x) - std::sin(angle) * (triPts[i].m_y - pt1.m_y) + pt1.m_x,
+ std::sin(angle) * (triPts[i].m_x - pt1.m_x) + std::cos(angle) * (triPts[i].m_y - pt1.m_y) +
+ pt1.m_y);
+ }
+ m_powerFlowArrow.push_back(triPts);
}
- m_powerFlowArrow.push_back(triPts);
}
}
diff --git a/Project/Element.h b/Project/Element.h
index ec18ccd..672723f 100644
--- a/Project/Element.h
+++ b/Project/Element.h
@@ -81,6 +81,15 @@ enum SwitchingType
SW_REMOVE
};
+enum PowerFlowDirection
+{
+ PF_NONE = 0,
+ PF_TO_BUS,
+ PF_TO_ELEMENT,
+ PF_BUS1_TO_BUS2,
+ PF_BUS2_TO_BUS1
+};
+
struct SwitchingData
{
std::vector<SwitchingType> swType;
@@ -192,6 +201,8 @@ class Element
virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit) {}
virtual void SetSwitchingData(SwitchingData data) { m_swData = data; }
virtual SwitchingData GetSwitchingData() { return m_swData; }
+ virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection) { m_pfDirection = pfDirection; }
+ virtual PowerFlowDirection GetPowerFlowDirection() const { return m_pfDirection; }
//Static methods
static wxString StringFromDouble(double value, int minDecimal = 1);
@@ -209,7 +220,9 @@ class Element
double m_switchSize = 10.0;
std::vector<wxRect2DDouble> m_switchRect;
+
std::vector< std::vector<wxPoint2DDouble> > m_powerFlowArrow;
+ PowerFlowDirection m_pfDirection = PF_NONE;
bool m_selected = false;
bool m_dragging = false;
diff --git a/Project/IndMotor.cpp b/Project/IndMotor.cpp
index 26d19e9..1c3b252 100644
--- a/Project/IndMotor.cpp
+++ b/Project/IndMotor.cpp
@@ -1,8 +1,11 @@
#include "IndMotorForm.h"
#include "IndMotor.h"
-IndMotor::IndMotor() : Machines() {}
-IndMotor::IndMotor(wxString name) : Machines() { m_electricalData.name = name; }
+IndMotor::IndMotor() : Machines() { }
+IndMotor::IndMotor(wxString name) : Machines()
+{
+ m_electricalData.name = name;
+}
IndMotor::~IndMotor() {}
void IndMotor::DrawSymbol() const
{
diff --git a/Project/Line.cpp b/Project/Line.cpp
index 20edb2e..a473562 100644
--- a/Project/Line.cpp
+++ b/Project/Line.cpp
@@ -43,7 +43,10 @@ void Line::Draw(wxPoint2DDouble translation, double scale) const
glColor4d(0.2, 0.2, 0.2, 1.0);
DrawLine(pointList);
- if(m_inserted) DrawSwitches();
+ if(m_inserted){
+ DrawSwitches();
+ DrawPowerFlowPts();
+ }
// Draw nodes.
if(pointList.size() > 0) {
@@ -72,10 +75,12 @@ void Line::Move(wxPoint2DDouble position)
if(!m_parentList[0]) {
m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
if(!m_parentList[1]) {
m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt;
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
if(!m_parentList[0] && !m_parentList[1]) {
@@ -144,6 +149,7 @@ bool Line::AddParent(Element* parent, wxPoint2DDouble position)
UpdateSwitches();
m_inserted = true;
+ UpdatePowerFlowArrowsPosition();
return true;
}
}
@@ -164,6 +170,7 @@ void Line::MovePickbox(wxPoint2DDouble position)
if(m_activePickboxID == i) {
m_pointList[i] = m_movePts[i] + position - m_moveStartPt;
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
}
}
@@ -224,6 +231,7 @@ void Line::MoveNode(Element* parent, wxPoint2DDouble position)
// Recalculate switches positions
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
double Line::PointToLineDistance(wxPoint2DDouble point, int* segmentNumber) const
@@ -284,6 +292,7 @@ void Line::RemoveNode(wxPoint2DDouble point)
}
}
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
void Line::AddNode(wxPoint2DDouble point)
@@ -294,6 +303,7 @@ void Line::AddNode(wxPoint2DDouble point)
m_pointList.insert(m_pointList.begin() + segmentNumber + 1, point);
}
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
void Line::CalculateBoundaries(wxPoint2DDouble& leftUp, wxPoint2DDouble& rightBottom) const
@@ -381,6 +391,7 @@ bool Line::SetNodeParent(Element* parent)
m_pointList[0] = parentPt;
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
return true;
}
if(m_activeNodeID == 2) {
@@ -398,6 +409,7 @@ bool Line::SetNodeParent(Element* parent)
m_pointList[m_pointList.size() - 1] = parentPt;
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
return true;
}
} else {
@@ -407,3 +419,43 @@ bool Line::SetNodeParent(Element* parent)
}
return false;
}
+
+void Line::UpdatePowerFlowArrowsPosition()
+{
+ std::vector<wxPoint2DDouble> edges;
+ switch(m_pfDirection) {
+ case PF_NONE: {
+ m_powerFlowArrow.clear();
+ } break;
+ case PF_BUS1_TO_BUS2: {
+ for(int i = 1; i < (int)m_pointList.size() - 1; i++) {
+ edges.push_back(m_pointList[i]);
+ }
+ } break;
+ case PF_BUS2_TO_BUS1: {
+ for(int i = (int)m_pointList.size() - 2; i > 0; i--) {
+ edges.push_back(m_pointList[i]);
+ }
+ } break;
+ default:
+ break;
+ }
+ CalculatePowerFlowPts(edges);
+}
+
+void Line::RotateNode(Element* parent, bool clockwise)
+{
+ double rotAngle = m_rotationAngle;
+ if(!clockwise) rotAngle = -m_rotationAngle;
+
+ if(parent == m_parentList[0]) {
+ m_pointList[0] = parent->RotateAtPosition(m_pointList[0], rotAngle);
+ }
+ else if(parent == m_parentList[1])
+ {
+ m_pointList[m_pointList.size() - 1] =
+ parent->RotateAtPosition(m_pointList[m_pointList.size() - 1], rotAngle);
+ }
+ UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
+}
diff --git a/Project/Line.h b/Project/Line.h
index afabb17..2310126 100644
--- a/Project/Line.h
+++ b/Project/Line.h
@@ -50,6 +50,7 @@ class Line : public Branch
virtual bool GetContextMenu(wxMenu& menu);
virtual void RemoveNode(wxPoint2DDouble point);
virtual void AddNode(wxPoint2DDouble point);
+ virtual void RotateNode(Element* parent, bool clockwise = true);
virtual void CalculateBoundaries(wxPoint2DDouble& leftUp, wxPoint2DDouble& rightBottom) const;
virtual bool ShowForm(wxWindow* parent, Element* element);
virtual LineElectricalData GetElectricalData() const { return m_electricaData; }
@@ -58,6 +59,7 @@ class Line : public Branch
protected:
double PointToLineDistance(wxPoint2DDouble point, int* segmentNumber = NULL) const;
+ void UpdatePowerFlowArrowsPosition();
LineElectricalData m_electricaData;
};
diff --git a/Project/Load.cpp b/Project/Load.cpp
index 25793b1..ec2297b 100644
--- a/Project/Load.cpp
+++ b/Project/Load.cpp
@@ -30,6 +30,8 @@ bool Load::AddParent(Element* parent, wxPoint2DDouble position)
wxRect2DDouble genRect(0, 0, 0, 0);
m_switchRect.push_back(genRect); // Push a general rectangle.
UpdateSwitches();
+ m_pfDirection = PF_TO_ELEMENT;
+ UpdatePowerFlowArrowsPosition();
return true;
}
@@ -73,6 +75,7 @@ void Load::Draw(wxPoint2DDouble translation, double scale) const
DrawLine(m_pointList);
DrawSwitches();
+ DrawPowerFlowPts();
std::vector<wxPoint2DDouble> triangPts;
for(int i = 0; i < 3; i++) {
@@ -97,6 +100,7 @@ void Load::Rotate(bool clockwise)
m_pointList[2] = RotateAtPosition(m_pointList[2], rotAngle);
m_pointList[3] = RotateAtPosition(m_pointList[3], rotAngle);
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
bool Load::GetContextMenu(wxMenu& menu)
diff --git a/Project/Machines.cpp b/Project/Machines.cpp
index c86f7b7..0f2dc43 100644
--- a/Project/Machines.cpp
+++ b/Project/Machines.cpp
@@ -24,6 +24,7 @@ bool Machines::AddParent(Element* parent, wxPoint2DDouble position)
wxRect2DDouble genRect(0,0,0,0);
m_switchRect.push_back(genRect); // Push a general rectangle.
UpdateSwitches();
+ UpdatePowerFlowArrowsPosition();
return true;
}
return false;
@@ -90,12 +91,7 @@ void Machines::Move(wxPoint2DDouble position)
m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
}
UpdateSwitchesPosition();
-
- //Power flow arrows
- std::vector<wxPoint2DDouble> edges;
- edges.push_back(m_pointList[1]);
- edges.push_back(m_pointList[2]);
- CalculatePowerFlowPts(edges);
+ UpdatePowerFlowArrowsPosition();
}
void Machines::MoveNode(Element* element, wxPoint2DDouble position)
@@ -110,12 +106,14 @@ void Machines::MoveNode(Element* element, wxPoint2DDouble position)
if(m_activeNodeID == 1) {
m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
m_parentList[0] = NULL;
+ m_pfDirection = PF_NONE;
m_online = false;
}
}
// Recalculate switches positions
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
void Machines::StartMove(wxPoint2DDouble position)
@@ -140,7 +138,9 @@ void Machines::RemoveParent(Element* parent)
{
if(parent == m_parentList[0]) {
m_parentList[0] = NULL;
+ m_pfDirection = PF_NONE;
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
}
@@ -175,11 +175,13 @@ bool Machines::SetNodeParent(Element* parent)
m_pointList[0] = parentPt;
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
return true;
}
else
{
m_parentList[0] = NULL;
+ m_pfDirection = PF_NONE;
m_online = false;
}
}
@@ -194,8 +196,10 @@ void Machines::UpdateNodes()
if(!m_parentList[0]->Intersects(nodeRect)) {
m_parentList[0] = NULL;
+ m_pfDirection = PF_NONE;
m_online = false;
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
}
}
@@ -208,4 +212,27 @@ void Machines::Rotate(bool clockwise)
m_pointList[2] = RotateAtPosition(m_pointList[2], rotAngle);
m_pointList[3] = RotateAtPosition(m_pointList[3], rotAngle);
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
+}
+
+void Machines::UpdatePowerFlowArrowsPosition()
+{
+ std::vector<wxPoint2DDouble> edges;
+ switch(m_pfDirection) {
+ case PF_NONE: {
+ m_powerFlowArrow.clear();
+ } break;
+ case PF_TO_BUS: {
+ edges.push_back(m_pointList[2]);
+ edges.push_back(m_pointList[1]);
+ } break;
+ case PF_TO_ELEMENT: {
+ edges.push_back(m_pointList[1]);
+ edges.push_back(m_pointList[2]);
+ } break;
+ default:
+ break;
+ }
+
+ CalculatePowerFlowPts(edges);
}
diff --git a/Project/Machines.h b/Project/Machines.h
index 8c60631..b296f99 100644
--- a/Project/Machines.h
+++ b/Project/Machines.h
@@ -26,6 +26,7 @@ public:
protected:
void UpdateSwitchesPosition();
+ void UpdatePowerFlowArrowsPosition();
bool m_inserted = false;
};
diff --git a/Project/Project.mk b/Project/Project.mk
index b53fbf5..e46ae7a 100644
--- a/Project/Project.mk
+++ b/Project/Project.mk
@@ -13,7 +13,7 @@ CurrentFileName :=
CurrentFilePath :=
CurrentFileFullPath :=
User :=Thales
-Date :=28/10/2016
+Date :=29/10/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
index 9d35f07..098ca04 100644
--- a/Project/Release/Branch.cpp.o
+++ b/Project/Release/Branch.cpp.o
Binary files differ
diff --git a/Project/Release/Bus.cpp.o b/Project/Release/Bus.cpp.o
index 050e9af..ddced0e 100644
--- a/Project/Release/Bus.cpp.o
+++ b/Project/Release/Bus.cpp.o
Binary files differ
diff --git a/Project/Release/BusForm.cpp.o b/Project/Release/BusForm.cpp.o
index 8e2aa6b..15a25e0 100644
--- a/Project/Release/BusForm.cpp.o
+++ b/Project/Release/BusForm.cpp.o
Binary files differ
diff --git a/Project/Release/Capacitor.cpp.o b/Project/Release/Capacitor.cpp.o
index b7b887a..b109288 100644
--- a/Project/Release/Capacitor.cpp.o
+++ b/Project/Release/Capacitor.cpp.o
Binary files differ
diff --git a/Project/Release/Element.cpp.o b/Project/Release/Element.cpp.o
index 54cb60c..6833467 100644
--- a/Project/Release/Element.cpp.o
+++ b/Project/Release/Element.cpp.o
Binary files differ
diff --git a/Project/Release/GeneratorStabForm.cpp.o b/Project/Release/GeneratorStabForm.cpp.o
index c0ee1ba..b38d859 100644
--- a/Project/Release/GeneratorStabForm.cpp.o
+++ b/Project/Release/GeneratorStabForm.cpp.o
Binary files differ
diff --git a/Project/Release/IndMotor.cpp.o b/Project/Release/IndMotor.cpp.o
index bd75e9a..f4bdf37 100644
--- a/Project/Release/IndMotor.cpp.o
+++ b/Project/Release/IndMotor.cpp.o
Binary files differ
diff --git a/Project/Release/IndMotorForm.cpp.o b/Project/Release/IndMotorForm.cpp.o
index aa7071b..36b0724 100644
--- a/Project/Release/IndMotorForm.cpp.o
+++ b/Project/Release/IndMotorForm.cpp.o
Binary files differ
diff --git a/Project/Release/Inductor.cpp.o b/Project/Release/Inductor.cpp.o
index b666ec7..31aa9ea 100644
--- a/Project/Release/Inductor.cpp.o
+++ b/Project/Release/Inductor.cpp.o
Binary files differ
diff --git a/Project/Release/Line.cpp.o b/Project/Release/Line.cpp.o
index dd750f9..bd3ca4f 100644
--- a/Project/Release/Line.cpp.o
+++ b/Project/Release/Line.cpp.o
Binary files differ
diff --git a/Project/Release/LineForm.cpp.o b/Project/Release/LineForm.cpp.o
index b0762e5..170955e 100644
--- a/Project/Release/LineForm.cpp.o
+++ b/Project/Release/LineForm.cpp.o
Binary files differ
diff --git a/Project/Release/Load.cpp.o b/Project/Release/Load.cpp.o
index 18e6d63..081c266 100644
--- a/Project/Release/Load.cpp.o
+++ b/Project/Release/Load.cpp.o
Binary files differ
diff --git a/Project/Release/Machines.cpp.o b/Project/Release/Machines.cpp.o
index 9db50de..306a204 100644
--- a/Project/Release/Machines.cpp.o
+++ b/Project/Release/Machines.cpp.o
Binary files differ
diff --git a/Project/Release/MainFrame.cpp.o b/Project/Release/MainFrame.cpp.o
index 51effa4..6a99d6d 100644
--- a/Project/Release/MainFrame.cpp.o
+++ b/Project/Release/MainFrame.cpp.o
Binary files differ
diff --git a/Project/Release/PSP-UFU.exe b/Project/Release/PSP-UFU.exe
index 775cb72..704c0f9 100644
--- a/Project/Release/PSP-UFU.exe
+++ b/Project/Release/PSP-UFU.exe
Binary files differ
diff --git a/Project/Release/ReactiveShuntElementForm.cpp.o b/Project/Release/ReactiveShuntElementForm.cpp.o
index dd57691..2535b1c 100644
--- a/Project/Release/ReactiveShuntElementForm.cpp.o
+++ b/Project/Release/ReactiveShuntElementForm.cpp.o
Binary files differ
diff --git a/Project/Release/Shunt.cpp.o b/Project/Release/Shunt.cpp.o
index a0985c1..475aad5 100644
--- a/Project/Release/Shunt.cpp.o
+++ b/Project/Release/Shunt.cpp.o
Binary files differ
diff --git a/Project/Release/SyncGenerator.cpp.o b/Project/Release/SyncGenerator.cpp.o
index 1e5282d..8d3af19 100644
--- a/Project/Release/SyncGenerator.cpp.o
+++ b/Project/Release/SyncGenerator.cpp.o
Binary files differ
diff --git a/Project/Release/SyncMachineForm.cpp.o b/Project/Release/SyncMachineForm.cpp.o
index 00e1157..928bce0 100644
--- a/Project/Release/SyncMachineForm.cpp.o
+++ b/Project/Release/SyncMachineForm.cpp.o
Binary files differ
diff --git a/Project/Release/SyncMotor.cpp.o b/Project/Release/SyncMotor.cpp.o
index ecb3f5c..47c24b1 100644
--- a/Project/Release/SyncMotor.cpp.o
+++ b/Project/Release/SyncMotor.cpp.o
Binary files differ
diff --git a/Project/Release/Transformer.cpp.o b/Project/Release/Transformer.cpp.o
index 52e3555..ea4649a 100644
--- a/Project/Release/Transformer.cpp.o
+++ b/Project/Release/Transformer.cpp.o
Binary files differ
diff --git a/Project/Release/TransformerForm.cpp.o b/Project/Release/TransformerForm.cpp.o
index 0388483..8707099 100644
--- a/Project/Release/TransformerForm.cpp.o
+++ b/Project/Release/TransformerForm.cpp.o
Binary files differ
diff --git a/Project/Release/Workspace.cpp.o b/Project/Release/Workspace.cpp.o
index b04b8ca..7b283eb 100644
--- a/Project/Release/Workspace.cpp.o
+++ b/Project/Release/Workspace.cpp.o
Binary files differ
diff --git a/Project/Shunt.cpp b/Project/Shunt.cpp
index 7df5330..d932abd 100644
--- a/Project/Shunt.cpp
+++ b/Project/Shunt.cpp
@@ -1,55 +1,47 @@
#include "Shunt.h"
-Shunt::Shunt() : Element()
-{
-}
-
-Shunt::~Shunt()
-{
-}
-
+Shunt::Shunt() : Element() {}
+Shunt::~Shunt() {}
void Shunt::UpdateSwitchesPosition()
{
if(m_parentList[0]) {
- m_pointList[1] = GetSwitchPoint(m_parentList[0], m_pointList[0], m_pointList[2]);
- }
- else
- {
- m_pointList[1] = m_pointList[0];
- }
- UpdateSwitches();
+ m_pointList[1] = GetSwitchPoint(m_parentList[0], m_pointList[0], m_pointList[2]);
+ } else {
+ m_pointList[1] = m_pointList[0];
+ }
+ UpdateSwitches();
}
void Shunt::Move(wxPoint2DDouble position)
{
SetPosition(m_movePos + position - m_moveStartPt);
for(int i = 2; i < (int)m_pointList.size(); i++) {
- m_pointList[i] = m_movePts[i] + position - m_moveStartPt;
- }
- if(!m_parentList[0]) {
- m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
- }
+ m_pointList[i] = m_movePts[i] + position - m_moveStartPt;
+ }
+ if(!m_parentList[0]) {
+ m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
+ }
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
void Shunt::MoveNode(Element* element, wxPoint2DDouble position)
{
if(element) {
- if(element == m_parentList[0]) {
- m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
- }
- }
- else
- {
- if(m_activeNodeID == 1) {
- m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
- m_parentList[0] = NULL;
- m_online = false;
- }
- }
+ if(element == m_parentList[0]) {
+ m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
+ }
+ } else {
+ if(m_activeNodeID == 1) {
+ m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
+ m_parentList[0] = NULL;
+ m_online = false;
+ }
+ }
// Recalculate switches positions
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
void Shunt::StartMove(wxPoint2DDouble position)
@@ -62,10 +54,11 @@ void Shunt::StartMove(wxPoint2DDouble position)
void Shunt::RemoveParent(Element* parent)
{
if(parent == m_parentList[0]) {
- m_parentList[0] = NULL;
- m_online = false;
- UpdateSwitchesPosition();
- }
+ m_parentList[0] = NULL;
+ m_online = false;
+ UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
+ }
}
bool Shunt::NodeContains(wxPoint2DDouble position)
@@ -74,9 +67,9 @@ bool Shunt::NodeContains(wxPoint2DDouble position)
10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
if(nodeRect.Contains(position)) {
- m_activeNodeID = 1;
- return true;
- }
+ m_activeNodeID = 1;
+ return true;
+ }
m_activeNodeID = 0;
return false;
@@ -85,68 +78,89 @@ bool Shunt::NodeContains(wxPoint2DDouble position)
bool Shunt::SetNodeParent(Element* parent)
{
if(parent && m_activeNodeID != 0) {
- wxRect2DDouble nodeRect(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
- 10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
-
- if(parent->Intersects(nodeRect)) {
- m_parentList[0] = parent;
-
- // Centralize the node on bus.
- wxPoint2DDouble parentPt = parent->RotateAtPosition(
- m_pointList[0], -parent->GetAngle()); // Rotate click to horizontal position.
- parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
- parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
- m_pointList[0] = parentPt;
-
- UpdateSwitchesPosition();
- return true;
- }
- else
- {
- m_parentList[0] = NULL;
- m_online = false;
- }
- }
+ wxRect2DDouble nodeRect(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
+ 10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
+
+ if(parent->Intersects(nodeRect)) {
+ m_parentList[0] = parent;
+
+ // Centralize the node on bus.
+ wxPoint2DDouble parentPt =
+ parent->RotateAtPosition(m_pointList[0], -parent->GetAngle()); // Rotate click to horizontal position.
+ parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
+ parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
+ m_pointList[0] = parentPt;
+
+ UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
+ return true;
+ } else {
+ m_parentList[0] = NULL;
+ m_online = false;
+ }
+ }
return false;
}
void Shunt::UpdateNodes()
{
if(m_parentList[0]) {
- wxRect2DDouble nodeRect(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
- 10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
-
- if(!m_parentList[0]->Intersects(nodeRect)) {
- m_parentList[0] = NULL;
- m_online = false;
- UpdateSwitchesPosition();
- }
- }
+ wxRect2DDouble nodeRect(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
+ 10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
+
+ if(!m_parentList[0]->Intersects(nodeRect)) {
+ m_parentList[0] = NULL;
+ m_online = false;
+ UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
+ }
+ }
}
void Shunt::RotateNode(Element* parent, bool clockwise)
{
- double rotAngle = m_rotationAngle;
- if(!clockwise) rotAngle = -m_rotationAngle;
-
+ double rotAngle = m_rotationAngle;
+ if(!clockwise) rotAngle = -m_rotationAngle;
+
if(parent == m_parentList[0]) {
- m_pointList[0] = parent->RotateAtPosition(m_pointList[0], rotAngle);
- UpdateSwitchesPosition();
- }
+ m_pointList[0] = parent->RotateAtPosition(m_pointList[0], rotAngle);
+ UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
+ }
}
void Shunt::DrawGround(wxPoint2DDouble position) const
{
- std::vector<wxPoint2DDouble> groundPts;
- groundPts.push_back(position);
- groundPts.push_back(position + wxPoint2DDouble(0, 10));
- groundPts.push_back(position + wxPoint2DDouble(-10, 10));
- groundPts.push_back(position + wxPoint2DDouble(10, 10));
- groundPts.push_back(position + wxPoint2DDouble(-6, 15));
- groundPts.push_back(position + wxPoint2DDouble(6, 15));
- groundPts.push_back(position + wxPoint2DDouble(-3, 20));
- groundPts.push_back(position + wxPoint2DDouble(3, 20));
-
- DrawLine(groundPts, GL_LINES);
+ std::vector<wxPoint2DDouble> groundPts;
+ groundPts.push_back(position);
+ groundPts.push_back(position + wxPoint2DDouble(0, 10));
+ groundPts.push_back(position + wxPoint2DDouble(-10, 10));
+ groundPts.push_back(position + wxPoint2DDouble(10, 10));
+ groundPts.push_back(position + wxPoint2DDouble(-6, 15));
+ groundPts.push_back(position + wxPoint2DDouble(6, 15));
+ groundPts.push_back(position + wxPoint2DDouble(-3, 20));
+ groundPts.push_back(position + wxPoint2DDouble(3, 20));
+
+ DrawLine(groundPts, GL_LINES);
}
+void Shunt::UpdatePowerFlowArrowsPosition()
+{
+ std::vector<wxPoint2DDouble> edges;
+ switch(m_pfDirection) {
+ case PF_NONE: {
+ m_powerFlowArrow.clear();
+ } break;
+ case PF_TO_BUS: {
+ edges.push_back(m_pointList[2]);
+ edges.push_back(m_pointList[1]);
+ } break;
+ case PF_TO_ELEMENT: {
+ edges.push_back(m_pointList[1]);
+ edges.push_back(m_pointList[2]);
+ } break;
+ default:
+ break;
+ }
+ CalculatePowerFlowPts(edges);
+} \ No newline at end of file
diff --git a/Project/Shunt.h b/Project/Shunt.h
index e44f735..cf1681d 100644
--- a/Project/Shunt.h
+++ b/Project/Shunt.h
@@ -22,6 +22,7 @@ public:
protected:
void UpdateSwitchesPosition();
+ void UpdatePowerFlowArrowsPosition();
void DrawGround(wxPoint2DDouble position) const;
bool m_inserted = false;
diff --git a/Project/Transformer.cpp b/Project/Transformer.cpp
index 57614bb..8ebf4f3 100644
--- a/Project/Transformer.cpp
+++ b/Project/Transformer.cpp
@@ -59,6 +59,7 @@ bool Transformer::AddParent(Element* parent, wxPoint2DDouble position)
wxRect2DDouble genRect(0, 0, 0, 0);
m_switchRect.push_back(genRect);
UpdateSwitches();
+ UpdatePowerFlowArrowsPosition();
return true;
}
@@ -119,6 +120,7 @@ void Transformer::Draw(wxPoint2DDouble translation, double scale) const
}
DrawSwitches();
+ DrawPowerFlowPts();
// Push the current matrix on stack.
glPushMatrix();
@@ -159,6 +161,8 @@ void Transformer::Rotate(bool clockwise)
for(int i = 2; i < (int)m_pointList.size() - 2; i++) {
m_pointList[i] = RotateAtPosition(m_pointList[i], rotAngle);
}
+ UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
void Transformer::Move(wxPoint2DDouble position)
@@ -178,6 +182,7 @@ void Transformer::Move(wxPoint2DDouble position)
}
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
void Transformer::MoveNode(Element* parent, wxPoint2DDouble position)
@@ -205,6 +210,7 @@ void Transformer::MoveNode(Element* parent, wxPoint2DDouble position)
// Recalculate switches positions
UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
}
void Transformer::StartMove(wxPoint2DDouble position)
@@ -244,3 +250,110 @@ void Transformer::SetNominalVoltage(std::vector<double> nominalVoltage, std::vec
m_electricalData.secondaryNominalVoltageUnit = nominalVoltageUnit[1];
}
}
+
+void Transformer::UpdatePowerFlowArrowsPosition()
+{
+ std::vector<wxPoint2DDouble> edges;
+ switch(m_pfDirection) {
+ case PF_NONE: {
+ m_powerFlowArrow.clear();
+ } break;
+ case PF_BUS1_TO_BUS2: {
+ for(int i = 1; i < (int)m_pointList.size() - 1; i++) {
+ edges.push_back(m_pointList[i]);
+ }
+ } break;
+ case PF_BUS2_TO_BUS1: {
+ for(int i = (int)m_pointList.size() - 2; i > 0; i--) {
+ edges.push_back(m_pointList[i]);
+ }
+ } break;
+ default:
+ break;
+ }
+ CalculatePowerFlowPts(edges);
+}
+
+void Transformer::RotateNode(Element* parent, bool clockwise)
+{
+ double rotAngle = m_rotationAngle;
+ if(!clockwise) rotAngle = -m_rotationAngle;
+
+ if(parent == m_parentList[0]) {
+ m_pointList[0] = parent->RotateAtPosition(m_pointList[0], rotAngle);
+ }
+ else if(parent == m_parentList[1])
+ {
+ m_pointList[m_pointList.size() - 1] =
+ parent->RotateAtPosition(m_pointList[m_pointList.size() - 1], rotAngle);
+ }
+ UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
+}
+
+bool Transformer::SetNodeParent(Element* parent)
+{
+ if(m_activeNodeID == 1 && parent == m_parentList[0]) return false;
+ if(m_activeNodeID == 2 && parent == m_parentList[1]) return false;
+
+ if(parent && m_activeNodeID != 0) {
+ wxRect2DDouble nodeRect(0, 0, 0, 0);
+ if(m_activeNodeID == 1) {
+ nodeRect =
+ wxRect2DDouble(m_pointList[0].m_x - 5.0 - m_borderSize, m_pointList[0].m_y - 5.0 - m_borderSize,
+ 10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
+ }
+ if(m_activeNodeID == 2) {
+ nodeRect = wxRect2DDouble(m_pointList[m_pointList.size() - 1].m_x - 5.0 - m_borderSize,
+ m_pointList[m_pointList.size() - 1].m_y - 5.0 - m_borderSize,
+ 10 + 2.0 * m_borderSize, 10 + 2.0 * m_borderSize);
+ }
+
+ if(parent->Intersects(nodeRect)) {
+ if(m_activeNodeID == 1) {
+ // Check if the user is trying to connect the same bus.
+ if(m_parentList[1] == parent) {
+ m_activeNodeID = 0;
+ return false;
+ }
+
+ m_parentList[0] = parent;
+
+ // Centralize the node on bus.
+ wxPoint2DDouble parentPt = parent->RotateAtPosition(
+ m_pointList[0], -parent->GetAngle()); // Rotate click to horizontal position.
+ parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
+ parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
+ m_pointList[0] = parentPt;
+
+ UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
+ return true;
+ }
+ if(m_activeNodeID == 2) {
+ if(m_parentList[0] == parent) {
+ m_activeNodeID = 0;
+ return false;
+ }
+
+ m_parentList[1] = parent;
+
+ wxPoint2DDouble parentPt =
+ parent->RotateAtPosition(m_pointList[m_pointList.size() - 1], -parent->GetAngle());
+ parentPt.m_y = parent->GetPosition().m_y;
+ parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle());
+ m_pointList[m_pointList.size() - 1] = parentPt;
+
+ UpdateSwitchesPosition();
+ UpdatePowerFlowArrowsPosition();
+ return true;
+ }
+ }
+ else
+ {
+ if(m_activeNodeID == 1) m_parentList[0] = NULL;
+ if(m_activeNodeID == 2) m_parentList[1] = NULL;
+ }
+ }
+ return false;
+}
diff --git a/Project/Transformer.h b/Project/Transformer.h
index 86d4cf7..cf9393f 100644
--- a/Project/Transformer.h
+++ b/Project/Transformer.h
@@ -5,8 +5,7 @@
class TransformerForm;
-enum TransformerConnection
-{
+enum TransformerConnection {
GWYE_GWYE = 0,
WYE_GWYE,
GWYE_WYE,
@@ -18,8 +17,7 @@ enum TransformerConnection
DELTA_DELTA
};
-struct TransformerElectricalData
-{
+struct TransformerElectricalData {
// General
wxString name = "";
double primaryNominalVoltage = 138.0;
@@ -49,26 +47,29 @@ struct TransformerElectricalData
class Transformer : public Branch
{
-public:
- Transformer();
- Transformer(wxString name);
+ public:
+ Transformer();
+ Transformer(wxString name);
virtual ~Transformer();
-
+
virtual bool AddParent(Element* parent, wxPoint2DDouble position);
virtual bool Contains(wxPoint2DDouble position) const;
virtual void Draw(wxPoint2DDouble translation, double scale) const;
virtual bool Intersects(wxRect2DDouble rect) const;
virtual void Rotate(bool clockwise = true);
- virtual void Move(wxPoint2DDouble position);
- virtual void MoveNode(Element* parent, wxPoint2DDouble position);
- virtual void StartMove(wxPoint2DDouble position);
- virtual bool GetContextMenu(wxMenu& menu);
+ virtual void Move(wxPoint2DDouble position);
+ virtual void MoveNode(Element* parent, wxPoint2DDouble position);
+ virtual void StartMove(wxPoint2DDouble position);
+ virtual bool GetContextMenu(wxMenu& menu);
+ virtual void RotateNode(Element* parent, bool clockwise);
+ virtual bool SetNodeParent(Element* parent);
virtual bool ShowForm(wxWindow* parent, Element* element);
virtual TransformerElectricalData GetElectricalData() { return m_electricalData; }
virtual void SetElectricaData(TransformerElectricalData electricalData) { m_electricalData = electricalData; }
virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit);
-
-protected:
+
+ protected:
+ void UpdatePowerFlowArrowsPosition();
TransformerElectricalData m_electricalData;
};