summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.codelite/.tern-port2
-rw-r--r--.codelite/PSP.session34
-rw-r--r--.codelite/PSP.tagsbin82866176 -> 82866176 bytes
-rw-r--r--.codelite/compilation.dbbin51200 -> 51200 bytes
-rw-r--r--.codelite/compile_commands.json16
-rw-r--r--.codelite/refactoring.dbbin1541120 -> 1560576 bytes
-rw-r--r--Project/Element.cpp245
-rw-r--r--Project/Element.h5
-rw-r--r--Project/LineForm.cpp18
-rw-r--r--Project/MainFrame.cpp250
-rw-r--r--Project/Project.mk2
-rw-r--r--Project/Release/Element.cpp.obin145230 -> 146598 bytes
-rw-r--r--Project/Release/Element.cpp.o.d8
-rw-r--r--Project/Release/LineForm.cpp.obin99960 -> 100045 bytes
-rw-r--r--Project/Release/LineForm.cpp.o.d8
-rw-r--r--Project/Release/MainFrame.cpp.obin138191 -> 140370 bytes
-rw-r--r--Project/Release/MainFrame.cpp.o.d89
-rw-r--r--Project/Release/PSP-UFU.exebin3859611 -> 3874012 bytes
-rw-r--r--Project/Release/Transformer.cpp.obin43805 -> 44949 bytes
-rw-r--r--Project/Release/Transformer.cpp.o.d8
-rw-r--r--Project/Release/TransformerForm.cpp.obin89653 -> 108025 bytes
-rw-r--r--Project/Release/TransformerForm.cpp.o.d8
-rw-r--r--Project/Release/Workspace.cpp.obin153710 -> 153430 bytes
-rw-r--r--Project/Transformer.cpp319
-rw-r--r--Project/Transformer.h1
-rw-r--r--Project/TransformerForm.cpp179
-rw-r--r--Project/Workspace.cpp1368
27 files changed, 1341 insertions, 1219 deletions
diff --git a/.codelite/.tern-port b/.codelite/.tern-port
index 8bce046..f742d98 100644
--- a/.codelite/.tern-port
+++ b/.codelite/.tern-port
@@ -1 +1 @@
-54474 \ No newline at end of file
+57978 \ No newline at end of file
diff --git a/.codelite/PSP.session b/.codelite/PSP.session
index a8caf5e..bc383b3 100644
--- a/.codelite/PSP.session
+++ b/.codelite/PSP.session
@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<Session Name="C:\Users\Thales\Documents\GitHub\PSP\PSP.workspace">
- <int Value="0" Name="m_selectedTab"/>
+ <int Value="6" 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="958" Name="FirstVisibleLine"/>
- <int Value="985" Name="CurrentLine"/>
+ <int Value="514" Name="FirstVisibleLine"/>
+ <int Value="534" Name="CurrentLine"/>
<wxArrayString Name="Bookmarks"/>
<IntVector Name="CollapsedFolds"/>
</TabInfo>
@@ -19,22 +19,22 @@
</TabInfo>
<TabInfo>
<wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Element.cpp" Name="FileName"/>
- <int Value="320" Name="FirstVisibleLine"/>
- <int Value="344" Name="CurrentLine"/>
+ <int Value="351" Name="FirstVisibleLine"/>
+ <int Value="379" 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="157" Name="FirstVisibleLine"/>
- <int Value="184" Name="CurrentLine"/>
+ <int Value="0" Name="FirstVisibleLine"/>
+ <int Value="9" 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="81" Name="FirstVisibleLine"/>
- <int Value="82" Name="CurrentLine"/>
+ <int Value="183" Name="FirstVisibleLine"/>
+ <int Value="158" Name="CurrentLine"/>
<wxArrayString Name="Bookmarks"/>
<IntVector Name="CollapsedFolds"/>
</TabInfo>
@@ -47,15 +47,15 @@
</TabInfo>
<TabInfo>
<wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\MainFrame.cpp" Name="FileName"/>
- <int Value="206" Name="FirstVisibleLine"/>
- <int Value="234" Name="CurrentLine"/>
+ <int Value="213" Name="FirstVisibleLine"/>
+ <int Value="236" Name="CurrentLine"/>
<wxArrayString Name="Bookmarks"/>
<IntVector Name="CollapsedFolds"/>
</TabInfo>
<TabInfo>
<wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\TransformerForm.cpp" Name="FileName"/>
- <int Value="70" Name="FirstVisibleLine"/>
- <int Value="86" Name="CurrentLine"/>
+ <int Value="106" Name="FirstVisibleLine"/>
+ <int Value="0" Name="CurrentLine"/>
<wxArrayString Name="Bookmarks"/>
<IntVector Name="CollapsedFolds"/>
</TabInfo>
@@ -68,15 +68,15 @@
</TabInfo>
<TabInfo>
<wxString Value="C:\Users\Thales\Documents\GitHub\PSP\Project\Transformer.h" Name="FileName"/>
- <int Value="48" Name="FirstVisibleLine"/>
- <int Value="67" Name="CurrentLine"/>
+ <int Value="45" Name="FirstVisibleLine"/>
+ <int Value="53" 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="219" Name="FirstVisibleLine"/>
- <int Value="240" Name="CurrentLine"/>
+ <int Value="0" Name="FirstVisibleLine"/>
+ <int Value="5" Name="CurrentLine"/>
<wxArrayString Name="Bookmarks"/>
<IntVector Name="CollapsedFolds"/>
</TabInfo>
diff --git a/.codelite/PSP.tags b/.codelite/PSP.tags
index d1aaa4b..67ea337 100644
--- a/.codelite/PSP.tags
+++ b/.codelite/PSP.tags
Binary files differ
diff --git a/.codelite/compilation.db b/.codelite/compilation.db
index 6ec24d1..e97ed34 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 d5d94bb..ba59d01 100644
--- a/.codelite/compile_commands.json
+++ b/.codelite/compile_commands.json
@@ -1,21 +1,9 @@
[{
"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/Transformer.cpp.o -MF./Release/Transformer.cpp.o.d -MM Transformer.cpp",
- "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\Transformer.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/MainFrame.cpp.o -MF./Release/MainFrame.cpp.o.d -MM MainFrame.cpp",
+ "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/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/TransformerForm.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/TransformerForm.cpp.o -I. -I.",
- "file": "C:\\Users\\Thales\\Documents\\GitHub\\PSP\\Project\\TransformerForm.cpp"
}] \ No newline at end of file
diff --git a/.codelite/refactoring.db b/.codelite/refactoring.db
index 7a37da8..db76a0b 100644
--- a/.codelite/refactoring.db
+++ b/.codelite/refactoring.db
Binary files differ
diff --git a/Project/Element.cpp b/Project/Element.cpp
index 2efc482..7c69e18 100644
--- a/Project/Element.cpp
+++ b/Project/Element.cpp
@@ -14,9 +14,9 @@ void Element::DrawCircle(wxPoint2DDouble position, double radius, int numSegment
{
glBegin(mode);
for(int i = 0; i < numSegments; i++) {
- double theta = 2.0 * 3.1415926 * double(i) / double(numSegments);
- glVertex2f(radius * std::cos(theta) + position.m_x, radius * std::sin(theta) + position.m_y);
- }
+ double theta = 2.0 * 3.1415926 * double(i) / double(numSegments);
+ glVertex2f(radius * std::cos(theta) + position.m_x, radius * std::sin(theta) + position.m_y);
+ }
glEnd();
}
@@ -31,9 +31,9 @@ void Element::DrawArc(wxPoint2DDouble position,
double finalAngRad = wxDegToRad(finalAngle);
glBegin(mode);
for(int i = 0; i <= numSegments; i++) {
- double theta = initAngRad + (finalAngRad - initAngRad) * double(i) / double(numSegments);
- glVertex2f(radius * std::cos(theta) + position.m_x, radius * std::sin(theta) + position.m_y);
- }
+ double theta = initAngRad + (finalAngRad - initAngRad) * double(i) / double(numSegments);
+ glVertex2f(radius * std::cos(theta) + position.m_x, radius * std::sin(theta) + position.m_y);
+ }
glEnd();
}
@@ -41,8 +41,8 @@ void Element::DrawTriangle(std::vector<wxPoint2DDouble> points, GLenum mode) con
{
glBegin(mode);
for(int i = 0; i < 3; i++) {
- glVertex2d(points[i].m_x, points[i].m_y);
- }
+ glVertex2d(points[i].m_x, points[i].m_y);
+ }
glEnd();
}
@@ -70,8 +70,8 @@ void Element::DrawLine(std::vector<wxPoint2DDouble> points, GLenum mode) const
{
glBegin(mode);
for(auto it = points.begin(); it != points.end(); ++it) {
- glVertex2d((*it).m_x, (*it).m_y);
- }
+ glVertex2d((*it).m_x, (*it).m_y);
+ }
glEnd();
}
@@ -163,18 +163,18 @@ bool Element::RotatedRectanglesIntersects(wxRect2DDouble rect1,
double radAngle2 = wxDegToRad(angle2);
for(int i = 0; i < 4; i++) {
- rect1Corners[i] =
- wxPoint2DDouble(std::cos(radAngle1) * (rect1Corners[i].m_x - rect1Center.m_x) -
- std::sin(radAngle1) * (rect1Corners[i].m_y - rect1Center.m_y) + rect1Center.m_x,
- std::sin(radAngle1) * (rect1Corners[i].m_x - rect1Center.m_x) +
- std::cos(radAngle1) * (rect1Corners[i].m_y - rect1Center.m_y) + rect1Center.m_y);
-
- rect2Corners[i] =
- wxPoint2DDouble(std::cos(radAngle2) * (rect2Corners[i].m_x - rect2Center.m_x) -
- std::sin(radAngle2) * (rect2Corners[i].m_y - rect2Center.m_y) + rect2Center.m_x,
- std::sin(radAngle2) * (rect2Corners[i].m_x - rect2Center.m_x) +
- std::cos(radAngle2) * (rect2Corners[i].m_y - rect2Center.m_y) + rect2Center.m_y);
- }
+ rect1Corners[i] =
+ wxPoint2DDouble(std::cos(radAngle1) * (rect1Corners[i].m_x - rect1Center.m_x) -
+ std::sin(radAngle1) * (rect1Corners[i].m_y - rect1Center.m_y) + rect1Center.m_x,
+ std::sin(radAngle1) * (rect1Corners[i].m_x - rect1Center.m_x) +
+ std::cos(radAngle1) * (rect1Corners[i].m_y - rect1Center.m_y) + rect1Center.m_y);
+
+ rect2Corners[i] =
+ wxPoint2DDouble(std::cos(radAngle2) * (rect2Corners[i].m_x - rect2Center.m_x) -
+ std::sin(radAngle2) * (rect2Corners[i].m_y - rect2Center.m_y) + rect2Center.m_x,
+ std::sin(radAngle2) * (rect2Corners[i].m_x - rect2Center.m_x) +
+ std::cos(radAngle2) * (rect2Corners[i].m_y - rect2Center.m_y) + rect2Center.m_y);
+ }
//[Ref] http://www.gamedev.net/page/resources/_/technical/game-programming/2d-rotated-rectangle-collision-r2604
@@ -186,25 +186,25 @@ bool Element::RotatedRectanglesIntersects(wxRect2DDouble rect1,
wxPoint2DDouble rect1ProjPts[4][4]; // [axis][corner]
wxPoint2DDouble rect2ProjPts[4][4]; // [axis][corner]
for(int i = 0; i < 4; i++) {
- double den = axis[i].m_x * axis[i].m_x + axis[i].m_y * axis[i].m_y;
- for(int j = 0; j < 4; j++) {
- double m_rectProj = (rect1Corners[j].m_x * axis[i].m_x + rect1Corners[j].m_y * axis[i].m_y) / den;
- double rectProj = (rect2Corners[j].m_x * axis[i].m_x + rect2Corners[j].m_y * axis[i].m_y) / den;
+ double den = axis[i].m_x * axis[i].m_x + axis[i].m_y * axis[i].m_y;
+ for(int j = 0; j < 4; j++) {
+ double m_rectProj = (rect1Corners[j].m_x * axis[i].m_x + rect1Corners[j].m_y * axis[i].m_y) / den;
+ double rectProj = (rect2Corners[j].m_x * axis[i].m_x + rect2Corners[j].m_y * axis[i].m_y) / den;
- rect1ProjPts[i][j] = wxPoint2DDouble(m_rectProj * axis[i].m_x, m_rectProj * axis[i].m_y);
- rect2ProjPts[i][j] = wxPoint2DDouble(rectProj * axis[i].m_x, rectProj * axis[i].m_y);
- }
- }
+ rect1ProjPts[i][j] = wxPoint2DDouble(m_rectProj * axis[i].m_x, m_rectProj * axis[i].m_y);
+ rect2ProjPts[i][j] = wxPoint2DDouble(rectProj * axis[i].m_x, rectProj * axis[i].m_y);
+ }
+ }
// Calculate the scalar value to identify the max and min values on projections
double rect1Scalar[4][4]; //[axis][corner]
double rect2Scalar[4][4]; //[axis][corner]
for(int i = 0; i < 4; i++) {
- for(int j = 0; j < 4; j++) {
- rect1Scalar[i][j] = rect1ProjPts[i][j].m_x * axis[i].m_x + rect1ProjPts[i][j].m_y * axis[i].m_y;
- rect2Scalar[i][j] = rect2ProjPts[i][j].m_x * axis[i].m_x + rect2ProjPts[i][j].m_y * axis[i].m_y;
- }
- }
+ for(int j = 0; j < 4; j++) {
+ rect1Scalar[i][j] = rect1ProjPts[i][j].m_x * axis[i].m_x + rect1ProjPts[i][j].m_y * axis[i].m_y;
+ rect2Scalar[i][j] = rect2ProjPts[i][j].m_x * axis[i].m_x + rect2ProjPts[i][j].m_y * axis[i].m_y;
+ }
+ }
// Identify the max and min scalar values
double rect1Min[4];
double rect1Max[4];
@@ -212,24 +212,24 @@ bool Element::RotatedRectanglesIntersects(wxRect2DDouble rect1,
double rect2Max[4];
for(int i = 0; i < 4; i++) {
- rect1Max[i] = rect1Scalar[i][0];
- rect2Max[i] = rect2Scalar[i][0];
- rect1Min[i] = rect1Scalar[i][0];
- rect2Min[i] = rect2Scalar[i][0];
+ rect1Max[i] = rect1Scalar[i][0];
+ rect2Max[i] = rect2Scalar[i][0];
+ rect1Min[i] = rect1Scalar[i][0];
+ rect2Min[i] = rect2Scalar[i][0];
- for(int j = 1; j < 4; j++) {
- if(rect1Max[i] < rect1Scalar[i][j]) rect1Max[i] = rect1Scalar[i][j];
- if(rect2Max[i] < rect2Scalar[i][j]) rect2Max[i] = rect2Scalar[i][j];
+ for(int j = 1; j < 4; j++) {
+ if(rect1Max[i] < rect1Scalar[i][j]) rect1Max[i] = rect1Scalar[i][j];
+ if(rect2Max[i] < rect2Scalar[i][j]) rect2Max[i] = rect2Scalar[i][j];
- if(rect1Min[i] > rect1Scalar[i][j]) rect1Min[i] = rect1Scalar[i][j];
- if(rect2Min[i] > rect2Scalar[i][j]) rect2Min[i] = rect2Scalar[i][j];
- }
- }
+ if(rect1Min[i] > rect1Scalar[i][j]) rect1Min[i] = rect1Scalar[i][j];
+ if(rect2Min[i] > rect2Scalar[i][j]) rect2Min[i] = rect2Scalar[i][j];
+ }
+ }
// Check if any segment don't overlap
for(int i = 0; i < 4; i++) {
- if(!(rect2Min[i] <= rect1Max[i] && rect2Max[i] >= rect1Min[i])) return false;
- }
+ if(!(rect2Min[i] <= rect1Max[i] && rect2Max[i] >= rect1Min[i])) return false;
+ }
return true;
}
@@ -247,40 +247,37 @@ void Element::DrawSwitches() const
{
int i = 0;
for(auto it = m_parentList.begin(); it != m_parentList.end(); it++) {
- Element* parent = *it;
- if(parent) {
- if(m_online) {
- glColor4d(0.0, 0.4, 0.0, 1.0); // green
- }
- else
- {
- glColor4d(1.0, 0.1, 0.1, 1.0); // red
- }
-
- glPushMatrix();
- glTranslated(m_switchRect[i].GetPosition().m_x + m_switchSize / 2.0,
- m_switchRect[i].GetPosition().m_y + m_switchSize / 2.0, 0.0);
- glRotated(parent->GetAngle(), 0.0, 0.0, 1.0);
- glTranslated(-m_switchRect[i].GetPosition().m_x - m_switchSize / 2.0,
- -m_switchRect[i].GetPosition().m_y - m_switchSize / 2.0, 0.0);
-
- DrawRectangle(
- m_switchRect[i].GetPosition() + wxPoint2DDouble(m_switchSize / 2.0, m_switchSize / 2.0),
- m_switchSize, m_switchSize);
-
- glPopMatrix();
- }
- i++;
- }
+ Element* parent = *it;
+ if(parent) {
+ if(m_online) {
+ glColor4d(0.0, 0.4, 0.0, 1.0); // green
+ } else {
+ glColor4d(1.0, 0.1, 0.1, 1.0); // red
+ }
+
+ glPushMatrix();
+ glTranslated(m_switchRect[i].GetPosition().m_x + m_switchSize / 2.0,
+ m_switchRect[i].GetPosition().m_y + m_switchSize / 2.0, 0.0);
+ glRotated(parent->GetAngle(), 0.0, 0.0, 1.0);
+ glTranslated(-m_switchRect[i].GetPosition().m_x - m_switchSize / 2.0,
+ -m_switchRect[i].GetPosition().m_y - m_switchSize / 2.0, 0.0);
+
+ DrawRectangle(m_switchRect[i].GetPosition() + wxPoint2DDouble(m_switchSize / 2.0, m_switchSize / 2.0),
+ m_switchSize, m_switchSize);
+
+ glPopMatrix();
+ }
+ i++;
+ }
}
bool Element::SwitchesContains(wxPoint2DDouble position) const
{
for(int i = 0; i < (int)m_switchRect.size(); i++) {
- if(m_parentList[i]) {
- if(m_switchRect[i].Contains(position)) return true;
- }
- }
+ if(m_parentList[i]) {
+ if(m_switchRect[i].Contains(position)) return true;
+ }
+ }
return false;
}
@@ -288,8 +285,8 @@ void Element::SetOnline(bool online)
{
// Check if any parent is null.
for(auto it = m_parentList.begin(); it != m_parentList.end(); it++) {
- if(!(*it)) return;
- }
+ if(!(*it)) return;
+ }
m_online = online;
}
@@ -317,50 +314,76 @@ void Element::CalculateBoundaries(wxPoint2DDouble& leftUp, wxPoint2DDouble& righ
m_rect.GetRightTop()};
// Rotate corners.
for(int i = 0; i < 4; ++i) {
- rectCorner[i] = RotateAtPosition(rectCorner[i], m_angle);
- }
+ rectCorner[i] = RotateAtPosition(rectCorner[i], m_angle);
+ }
leftUp = rectCorner[0];
rightBottom = rectCorner[0];
for(int i = 1; i < 4; ++i) {
- if(rectCorner[i].m_x < leftUp.m_x) leftUp.m_x = rectCorner[i].m_x;
- if(rectCorner[i].m_y < leftUp.m_y) leftUp.m_y = rectCorner[i].m_y;
- if(rectCorner[i].m_x > rightBottom.m_x) rightBottom.m_x = rectCorner[i].m_x;
- if(rectCorner[i].m_y > rightBottom.m_y) rightBottom.m_y = rectCorner[i].m_y;
- }
+ if(rectCorner[i].m_x < leftUp.m_x) leftUp.m_x = rectCorner[i].m_x;
+ if(rectCorner[i].m_y < leftUp.m_y) leftUp.m_y = rectCorner[i].m_y;
+ if(rectCorner[i].m_x > rightBottom.m_x) rightBottom.m_x = rectCorner[i].m_x;
+ if(rectCorner[i].m_y > rightBottom.m_y) rightBottom.m_y = rectCorner[i].m_y;
+ }
// Check points list boundaries.
for(int i = 0; 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[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 Element::DoubleFromString(wxWindow* parent, wxString strValue, double& value, wxString errorMsg)
{
- double dValue = 0.0;
-
- if(!strValue.ToDouble(&dValue)) {
- wxMessageDialog msgDialog(parent, errorMsg, _("Error"), wxOK|wxCENTRE|wxICON_ERROR);
- msgDialog.ShowModal();
- return false;
- }
-
- value = dValue;
- return true;
+ double dValue = 0.0;
+
+ if(!strValue.ToDouble(&dValue)) {
+ wxMessageDialog msgDialog(parent, errorMsg, _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
+ msgDialog.ShowModal();
+ return false;
+ }
+
+ value = dValue;
+ return true;
}
bool Element::IntFromString(wxWindow* parent, wxString strValue, int& value, wxString errorMsg)
{
- long int iValue = 0;
-
- if(!strValue.ToLong(&iValue)) {
- wxMessageDialog msgDialog(parent, errorMsg, _("Error"), wxOK|wxCENTRE|wxICON_ERROR);
- msgDialog.ShowModal();
- return false;
- }
-
- value = iValue;
- return true;
+ long int iValue = 0;
+
+ if(!strValue.ToLong(&iValue)) {
+ wxMessageDialog msgDialog(parent, errorMsg, _("Error"), wxOK | wxCENTRE | wxICON_ERROR);
+ msgDialog.ShowModal();
+ return false;
+ }
+
+ value = iValue;
+ return true;
+}
+
+wxString Element::StringFromDouble(double value, int minDecimal)
+{
+ wxString str = wxString::FromCDouble(value, 13);
+ int cutNumber = 0;
+ int numDecimal = 0;
+ bool foundCut = false;
+ for(int i = (int)str.length() - 1; i >= 0; i--) {
+ if(str[i] != '0' && !foundCut) {
+ cutNumber = i;
+ foundCut = true;
+ }
+ if(str[i] == '.') {
+ numDecimal = i;
+ break;
+ }
+ }
+
+ wxString formatedStr = "";
+ if(cutNumber - numDecimal > minDecimal)
+ formatedStr = wxString::FromDouble(value, cutNumber - numDecimal);
+ else
+ formatedStr = wxString::FromDouble(value, minDecimal);
+
+ return formatedStr;
}
diff --git a/Project/Element.h b/Project/Element.h
index 17a8902..51cb588 100644
--- a/Project/Element.h
+++ b/Project/Element.h
@@ -7,6 +7,8 @@
#include <wx/menu.h>
#include <GL/gl.h>
+#include <wx/log.h>
+
enum PickboxID
{
ID_PB_NONE = 0,
@@ -185,6 +187,9 @@ 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; }
+
+ //Static methods
+ static wxString StringFromDouble(double value, int minDecimal = 1);
protected:
std::vector<Element*> m_parentList;
diff --git a/Project/LineForm.cpp b/Project/LineForm.cpp
index 79fe9c7..3c288b1 100644
--- a/Project/LineForm.cpp
+++ b/Project/LineForm.cpp
@@ -27,7 +27,7 @@ LineForm::LineForm(wxWindow* parent, Line* line) : LineFormBase(parent)
m_textCtrlName->SetValue(data.name);
- wxString nominalVoltageStr = wxString::FromDouble(data.nominalVoltage);
+ wxString nominalVoltageStr = Line::StringFromDouble(data.nominalVoltage);
switch(data.nominalVoltageUnit) {
case UNIT_V: {
nominalVoltageStr += " V";
@@ -40,7 +40,7 @@ LineForm::LineForm(wxWindow* parent, Line* line) : LineFormBase(parent)
}
m_staticTextNominalVoltageValue->SetLabel(nominalVoltageStr);
- m_textCtrlNominalPower->SetValue(wxString::FromDouble(data.nominalPower));
+ m_textCtrlNominalPower->SetValue(Line::StringFromDouble(data.nominalPower));
switch(data.nominalPowerUnit) {
case UNIT_VA: {
m_choiceNominalPower->SetSelection(0);
@@ -55,7 +55,7 @@ LineForm::LineForm(wxWindow* parent, Line* line) : LineFormBase(parent)
break;
}
- m_textCtrlResistance->SetValue(wxString::FromDouble(data.resistance));
+ m_textCtrlResistance->SetValue(Line::StringFromDouble(data.resistance));
switch(data.resistanceUnit) {
case UNIT_PU: {
m_choiceResistance->SetSelection(0);
@@ -70,7 +70,7 @@ LineForm::LineForm(wxWindow* parent, Line* line) : LineFormBase(parent)
break;
}
- m_textCtrlReactance->SetValue(wxString::FromDouble(data.indReactance));
+ m_textCtrlReactance->SetValue(Line::StringFromDouble(data.indReactance));
switch(data.indReactanceUnit) {
case UNIT_PU: {
m_choiceReactance->SetSelection(0);
@@ -85,7 +85,7 @@ LineForm::LineForm(wxWindow* parent, Line* line) : LineFormBase(parent)
break;
}
- m_textCtrlSusceptance->SetValue(wxString::FromDouble(data.capSusceptance));
+ m_textCtrlSusceptance->SetValue(Line::StringFromDouble(data.capSusceptance));
switch(data.capSusceptanceUnit) {
case UNIT_PU: {
m_choiceSusceptance->SetSelection(0);
@@ -100,12 +100,12 @@ LineForm::LineForm(wxWindow* parent, Line* line) : LineFormBase(parent)
break;
}
- m_textCtrlLineSize->SetValue(wxString::FromDouble(data.lineSize));
+ m_textCtrlLineSize->SetValue(Line::StringFromDouble(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_textCtrlZeroResistance->SetValue(Line::StringFromDouble(data.zeroResistance));
+ m_textCtrlZeroReactance->SetValue(Line::StringFromDouble(data.zeroIndReactance));
+ m_textCtrlZeroSusceptance->SetValue(Line::StringFromDouble(data.zeroCapSusceptance));
}
LineForm::~LineForm() {}
diff --git a/Project/MainFrame.cpp b/Project/MainFrame.cpp
index aedf7a8..e06dc64 100644
--- a/Project/MainFrame.cpp
+++ b/Project/MainFrame.cpp
@@ -22,10 +22,10 @@ MainFrame::~MainFrame()
{
// if(m_artMetro) delete m_artMetro;
if(m_addElementsMenu) {
- m_addElementsMenu->Disconnect(wxEVT_COMMAND_MENU_SELECTED,
- wxCommandEventHandler(MainFrame::OnAddElementsClick), NULL, this);
- delete m_addElementsMenu;
- }
+ m_addElementsMenu->Disconnect(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(MainFrame::OnAddElementsClick),
+ NULL, this);
+ delete m_addElementsMenu;
+ }
}
void MainFrame::Init()
{
@@ -138,8 +138,8 @@ void MainFrame::OnDeleteClick(wxRibbonButtonBarEvent& event)
{
Workspace* workspace = (Workspace*)m_auiNotebook->GetCurrentPage();
if(workspace) {
- workspace->DeleteSelectedElements();
- }
+ workspace->DeleteSelectedElements();
+ }
}
void MainFrame::OnDisableSolutionClick(wxRibbonButtonBarEvent& event)
{
@@ -160,35 +160,34 @@ void MainFrame::OnFitClick(wxRibbonButtonBarEvent& event)
{
Workspace* workspace = (Workspace*)m_auiNotebook->GetCurrentPage();
if(workspace) {
- workspace->Fit();
- }
+ workspace->Fit();
+ }
}
void MainFrame::OnMoveClick(wxRibbonButtonBarEvent& event)
{
Workspace* workspace = (Workspace*)m_auiNotebook->GetCurrentPage();
if(workspace) {
- auto elementList = workspace->GetElementList();
- // Calculate the average position of selected elements.
- wxPoint2DDouble averagePos(0, 0);
- int numSelElements = 0;
- for(auto it = elementList.begin(); it != elementList.end(); it++) {
- Element* element = *it;
- if(element->IsSelected()) {
- averagePos += element->GetPosition();
- numSelElements++;
- }
- }
- averagePos =
- wxPoint2DDouble(averagePos.m_x / double(numSelElements), averagePos.m_y / double(numSelElements));
- // Set the move position to the average of selected elements.
- for(auto it = elementList.begin(); it != elementList.end(); it++) {
- Element* element = *it;
- if(element->IsSelected()) {
- element->StartMove(averagePos);
- }
- }
- workspace->SetWorkspaceMode(MODE_MOVE_ELEMENT);
- }
+ auto elementList = workspace->GetElementList();
+ // Calculate the average position of selected elements.
+ wxPoint2DDouble averagePos(0, 0);
+ int numSelElements = 0;
+ for(auto it = elementList.begin(); it != elementList.end(); it++) {
+ Element* element = *it;
+ if(element->IsSelected()) {
+ averagePos += element->GetPosition();
+ numSelElements++;
+ }
+ }
+ averagePos = wxPoint2DDouble(averagePos.m_x / double(numSelElements), averagePos.m_y / double(numSelElements));
+ // Set the move position to the average of selected elements.
+ for(auto it = elementList.begin(); it != elementList.end(); it++) {
+ Element* element = *it;
+ if(element->IsSelected()) {
+ element->StartMove(averagePos);
+ }
+ }
+ workspace->SetWorkspaceMode(MODE_MOVE_ELEMENT);
+ }
}
void MainFrame::OnOpenClick(wxRibbonButtonBarEvent& event) {}
void MainFrame::OnPSPGuideClick(wxRibbonButtonBarEvent& event) {}
@@ -209,101 +208,82 @@ void MainFrame::OnAddElementsClick(wxCommandEvent& event)
Workspace* workspace = (Workspace*)m_auiNotebook->GetCurrentPage();
if(workspace) {
- if(workspace->GetWorkspaceMode() != MODE_INSERT) {
- auto elementList = workspace->GetElementList();
- wxString statusBarText = "";
- bool newElement = false;
+ if(workspace->GetWorkspaceMode() != MODE_INSERT) {
+ auto elementList = workspace->GetElementList();
+ wxString statusBarText = "";
+ bool newElement = false;
- switch(event.GetId())
- {
- case ID_ADDMENU_BUS:
- {
- Bus* newBus =
- new Bus(wxPoint2DDouble(0, 0),
- wxString::Format(_("Bus %d"), workspace->GetElementNumber(ID_BUS)));
- workspace->IncrementElementNumber(ID_BUS);
- elementList.push_back(newBus);
- statusBarText = _("Insert Bus: Click to insert, ESC to cancel.");
- newElement = true;
- }
- break;
- case ID_ADDMENU_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;
- }
- break;
- case ID_ADDMENU_TRANSFORMER:
- {
- Transformer* newTransformer = new Transformer();
- elementList.push_back(newTransformer);
- statusBarText = _("Insert Transformer: Click on two buses, ESC to cancel.");
- newElement = true;
- }
- break;
- case ID_ADDMENU_GENERATOR:
- {
- SyncGenerator* newGenerator = new SyncGenerator(
- wxString::Format(_("Bus %d"), workspace->GetElementNumber(ID_SYNCGENERATOR)));
- workspace->IncrementElementNumber(ID_SYNCGENERATOR);
- elementList.push_back(newGenerator);
- statusBarText = _("Insert Generator: Click on a buses, ESC to cancel.");
- newElement = true;
- }
- break;
- case ID_ADDMENU_LOAD:
- {
- Load* newLoad = new Load();
- elementList.push_back(newLoad);
- statusBarText = _("Insert Load: Click on a buses, ESC to cancel.");
- newElement = true;
- }
- break;
- case ID_ADDMENU_CAPACITOR:
- {
- Capacitor* newCapacitor = new Capacitor();
- elementList.push_back(newCapacitor);
- statusBarText = _("Insert Capacitor: Click on a buses, ESC to cancel.");
- newElement = true;
- }
- break;
- case ID_ADDMENU_INDUCTOR:
- {
- Inductor* newInductor = new Inductor();
- elementList.push_back(newInductor);
- statusBarText = _("Insert Inductor: Click on a buses, ESC to cancel.");
- newElement = true;
- }
- break;
- case ID_ADDMENU_INDMOTOR:
- {
- IndMotor* newIndMotor = new IndMotor();
- elementList.push_back(newIndMotor);
- statusBarText = _("Insert Induction Motor: Click on a buses, ESC to cancel.");
- newElement = true;
- }
- break;
- case ID_ADDMENU_SYNCCOMP:
- {
- SyncMotor* newSyncCondenser = new SyncMotor();
- elementList.push_back(newSyncCondenser);
- statusBarText = _("Insert Synchronous Condenser: Click on a buses, ESC to cancel.");
- newElement = true;
- }
- break;
- }
- if(newElement) {
- workspace->SetElementList(elementList);
- workspace->SetWorkspaceMode(MODE_INSERT);
- workspace->SetStatusBarText(statusBarText);
- workspace->Redraw();
- }
- }
- }
+ switch(event.GetId()) {
+ case ID_ADDMENU_BUS: {
+ Bus* newBus = new Bus(wxPoint2DDouble(0, 0),
+ wxString::Format(_("Bus %d"), workspace->GetElementNumber(ID_BUS)));
+ workspace->IncrementElementNumber(ID_BUS);
+ elementList.push_back(newBus);
+ statusBarText = _("Insert Bus: Click to insert, ESC to cancel.");
+ newElement = true;
+ } break;
+ case ID_ADDMENU_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;
+ } break;
+ case ID_ADDMENU_TRANSFORMER: {
+ Transformer* newTransformer =
+ new Transformer(wxString::Format(_("Transformer %d"), workspace->GetElementNumber(ID_TRANSFORMER)));
+ workspace->IncrementElementNumber(ID_TRANSFORMER);
+ elementList.push_back(newTransformer);
+ statusBarText = _("Insert Transformer: Click on two buses, ESC to cancel.");
+ newElement = true;
+ } break;
+ case ID_ADDMENU_GENERATOR: {
+ SyncGenerator* newGenerator =
+ new SyncGenerator(wxString::Format(_("Bus %d"), workspace->GetElementNumber(ID_SYNCGENERATOR)));
+ workspace->IncrementElementNumber(ID_SYNCGENERATOR);
+ elementList.push_back(newGenerator);
+ statusBarText = _("Insert Generator: Click on a buses, ESC to cancel.");
+ newElement = true;
+ } break;
+ case ID_ADDMENU_LOAD: {
+ Load* newLoad = new Load();
+ elementList.push_back(newLoad);
+ statusBarText = _("Insert Load: Click on a buses, ESC to cancel.");
+ newElement = true;
+ } break;
+ case ID_ADDMENU_CAPACITOR: {
+ Capacitor* newCapacitor = new Capacitor();
+ elementList.push_back(newCapacitor);
+ statusBarText = _("Insert Capacitor: Click on a buses, ESC to cancel.");
+ newElement = true;
+ } break;
+ case ID_ADDMENU_INDUCTOR: {
+ Inductor* newInductor = new Inductor();
+ elementList.push_back(newInductor);
+ statusBarText = _("Insert Inductor: Click on a buses, ESC to cancel.");
+ newElement = true;
+ } break;
+ case ID_ADDMENU_INDMOTOR: {
+ IndMotor* newIndMotor = new IndMotor();
+ elementList.push_back(newIndMotor);
+ statusBarText = _("Insert Induction Motor: Click on a buses, ESC to cancel.");
+ newElement = true;
+ } break;
+ case ID_ADDMENU_SYNCCOMP: {
+ SyncMotor* newSyncCondenser = new SyncMotor();
+ elementList.push_back(newSyncCondenser);
+ statusBarText = _("Insert Synchronous Condenser: Click on a buses, ESC to cancel.");
+ newElement = true;
+ } break;
+ }
+ if(newElement) {
+ workspace->SetElementList(elementList);
+ workspace->SetWorkspaceMode(MODE_INSERT);
+ workspace->SetStatusBarText(statusBarText);
+ workspace->Redraw();
+ }
+ }
+ }
}
void MainFrame::NotebookPageClosed(wxAuiNotebookEvent& event)
{
@@ -314,26 +294,26 @@ void MainFrame::NotebookPageClosing(wxAuiNotebookEvent& event)
{
auto it = m_workspaceList.begin();
while(it != m_workspaceList.end()) {
- if(*it == m_auiNotebook->GetCurrentPage()) {
- // delete *it; //Memory leak?
- m_workspaceList.erase(it);
- break;
- }
- it++;
- }
+ if(*it == m_auiNotebook->GetCurrentPage()) {
+ // delete *it; //Memory leak?
+ m_workspaceList.erase(it);
+ break;
+ }
+ it++;
+ }
event.Skip();
}
void MainFrame::OnRotClockClick(wxRibbonButtonBarEvent& event)
{
Workspace* workspace = (Workspace*)m_auiNotebook->GetCurrentPage();
if(workspace) {
- workspace->RotateSelectedElements();
- }
+ workspace->RotateSelectedElements();
+ }
}
void MainFrame::OnRotCounterClockClick(wxRibbonButtonBarEvent& event)
{
Workspace* workspace = (Workspace*)m_auiNotebook->GetCurrentPage();
if(workspace) {
- workspace->RotateSelectedElements(false);
- }
+ workspace->RotateSelectedElements(false);
+ }
}
diff --git a/Project/Project.mk b/Project/Project.mk
index 6d2a336..7d2eaa2 100644
--- a/Project/Project.mk
+++ b/Project/Project.mk
@@ -13,7 +13,7 @@ CurrentFileName :=
CurrentFilePath :=
CurrentFileFullPath :=
User :=Thales
-Date :=17/10/2016
+Date :=18/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/Element.cpp.o b/Project/Release/Element.cpp.o
index 9af96aa..4b4f63d 100644
--- a/Project/Release/Element.cpp.o
+++ b/Project/Release/Element.cpp.o
Binary files differ
diff --git a/Project/Release/Element.cpp.o.d b/Project/Release/Element.cpp.o.d
index 1799c00..53eb1b7 100644
--- a/Project/Release/Element.cpp.o.d
+++ b/Project/Release/Element.cpp.o.d
@@ -130,7 +130,9 @@ Release/Element.cpp.o: Element.cpp 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 \
+ C:/wxWidgets-3.1.0/include/wx/log.h \
+ C:/wxWidgets-3.1.0/include/wx/generic/logg.h
Element.h:
@@ -399,3 +401,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:
+
+C:/wxWidgets-3.1.0/include/wx/log.h:
+
+C:/wxWidgets-3.1.0/include/wx/generic/logg.h:
diff --git a/Project/Release/LineForm.cpp.o b/Project/Release/LineForm.cpp.o
index 4795e74..ebf71f9 100644
--- a/Project/Release/LineForm.cpp.o
+++ b/Project/Release/LineForm.cpp.o
Binary files differ
diff --git a/Project/Release/LineForm.cpp.o.d b/Project/Release/LineForm.cpp.o.d
index 051263c..10b8ad0 100644
--- a/Project/Release/LineForm.cpp.o.d
+++ b/Project/Release/LineForm.cpp.o.d
@@ -223,7 +223,9 @@ Release/LineForm.cpp.o: LineForm.cpp 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 Bus.h BusForm.h
+ C:/wxWidgets-3.1.0/include/wx/msw/menu.h \
+ C:/wxWidgets-3.1.0/include/wx/log.h \
+ C:/wxWidgets-3.1.0/include/wx/generic/logg.h Bus.h BusForm.h
LineForm.h:
@@ -691,6 +693,10 @@ 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/log.h:
+
+C:/wxWidgets-3.1.0/include/wx/generic/logg.h:
+
Bus.h:
BusForm.h:
diff --git a/Project/Release/MainFrame.cpp.o b/Project/Release/MainFrame.cpp.o
index a0e5599..5865350 100644
--- a/Project/Release/MainFrame.cpp.o
+++ b/Project/Release/MainFrame.cpp.o
Binary files differ
diff --git a/Project/Release/MainFrame.cpp.o.d b/Project/Release/MainFrame.cpp.o.d
index f9579f0..d82df04 100644
--- a/Project/Release/MainFrame.cpp.o.d
+++ b/Project/Release/MainFrame.cpp.o.d
@@ -222,7 +222,36 @@ 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 LineForm.h \
+ C:/wxWidgets-3.1.0/include/wx/msw/statline.h \
+ C:/wxWidgets-3.1.0/include/wx/propgrid/manager.h \
+ C:/wxWidgets-3.1.0/include/wx/propgrid/propgrid.h \
+ C:/wxWidgets-3.1.0/include/wx/scrolwin.h \
+ C:/wxWidgets-3.1.0/include/wx/generic/scrolwin.h \
+ C:/wxWidgets-3.1.0/include/wx/recguard.h \
+ C:/wxWidgets-3.1.0/include/wx/propgrid/property.h \
+ C:/wxWidgets-3.1.0/include/wx/propgrid/propgriddefs.h \
+ C:/wxWidgets-3.1.0/include/wx/hashset.h \
+ C:/wxWidgets-3.1.0/include/wx/tokenzr.h \
+ C:/wxWidgets-3.1.0/include/wx/propgrid/propgridiface.h \
+ C:/wxWidgets-3.1.0/include/wx/propgrid/propgridpagestate.h \
+ C:/wxWidgets-3.1.0/include/wx/propgrid/props.h \
+ C:/wxWidgets-3.1.0/include/wx/propgrid/editors.h \
+ C:/wxWidgets-3.1.0/include/wx/listbox.h \
+ C:/wxWidgets-3.1.0/include/wx/msw/listbox.h \
+ C:/wxWidgets-3.1.0/include/wx/valtext.h \
+ C:/wxWidgets-3.1.0/include/wx/toolbar.h \
+ C:/wxWidgets-3.1.0/include/wx/tbarbase.h \
+ C:/wxWidgets-3.1.0/include/wx/msw/toolbar.h \
+ C:/wxWidgets-3.1.0/include/wx/headerctrl.h \
+ C:/wxWidgets-3.1.0/include/wx/headercol.h \
+ C:/wxWidgets-3.1.0/include/wx/msw/headerctrl.h \
+ C:/wxWidgets-3.1.0/include/wx/propgrid/advprops.h \
+ C:/wxWidgets-3.1.0/include/wx/spinbutt.h \
+ C:/wxWidgets-3.1.0/include/wx/range.h \
+ C:/wxWidgets-3.1.0/include/wx/msw/spinbutt.h \
+ C:/wxWidgets-3.1.0/include/wx/listctrl.h \
+ C:/wxWidgets-3.1.0/include/wx/listbase.h \
+ C:/wxWidgets-3.1.0/include/wx/msw/listctrl.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
@@ -692,6 +721,64 @@ 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/propgrid/manager.h:
+
+C:/wxWidgets-3.1.0/include/wx/propgrid/propgrid.h:
+
+C:/wxWidgets-3.1.0/include/wx/scrolwin.h:
+
+C:/wxWidgets-3.1.0/include/wx/generic/scrolwin.h:
+
+C:/wxWidgets-3.1.0/include/wx/recguard.h:
+
+C:/wxWidgets-3.1.0/include/wx/propgrid/property.h:
+
+C:/wxWidgets-3.1.0/include/wx/propgrid/propgriddefs.h:
+
+C:/wxWidgets-3.1.0/include/wx/hashset.h:
+
+C:/wxWidgets-3.1.0/include/wx/tokenzr.h:
+
+C:/wxWidgets-3.1.0/include/wx/propgrid/propgridiface.h:
+
+C:/wxWidgets-3.1.0/include/wx/propgrid/propgridpagestate.h:
+
+C:/wxWidgets-3.1.0/include/wx/propgrid/props.h:
+
+C:/wxWidgets-3.1.0/include/wx/propgrid/editors.h:
+
+C:/wxWidgets-3.1.0/include/wx/listbox.h:
+
+C:/wxWidgets-3.1.0/include/wx/msw/listbox.h:
+
+C:/wxWidgets-3.1.0/include/wx/valtext.h:
+
+C:/wxWidgets-3.1.0/include/wx/toolbar.h:
+
+C:/wxWidgets-3.1.0/include/wx/tbarbase.h:
+
+C:/wxWidgets-3.1.0/include/wx/msw/toolbar.h:
+
+C:/wxWidgets-3.1.0/include/wx/headerctrl.h:
+
+C:/wxWidgets-3.1.0/include/wx/headercol.h:
+
+C:/wxWidgets-3.1.0/include/wx/msw/headerctrl.h:
+
+C:/wxWidgets-3.1.0/include/wx/propgrid/advprops.h:
+
+C:/wxWidgets-3.1.0/include/wx/spinbutt.h:
+
+C:/wxWidgets-3.1.0/include/wx/range.h:
+
+C:/wxWidgets-3.1.0/include/wx/msw/spinbutt.h:
+
+C:/wxWidgets-3.1.0/include/wx/listctrl.h:
+
+C:/wxWidgets-3.1.0/include/wx/listbase.h:
+
+C:/wxWidgets-3.1.0/include/wx/msw/listctrl.h:
+
Element.h:
Line.h:
diff --git a/Project/Release/PSP-UFU.exe b/Project/Release/PSP-UFU.exe
index fd2cacc..417014e 100644
--- a/Project/Release/PSP-UFU.exe
+++ b/Project/Release/PSP-UFU.exe
Binary files differ
diff --git a/Project/Release/Transformer.cpp.o b/Project/Release/Transformer.cpp.o
index 9c1cc7f..4f2b47b 100644
--- a/Project/Release/Transformer.cpp.o
+++ b/Project/Release/Transformer.cpp.o
Binary files differ
diff --git a/Project/Release/Transformer.cpp.o.d b/Project/Release/Transformer.cpp.o.d
index 5f86156..498668e 100644
--- a/Project/Release/Transformer.cpp.o.d
+++ b/Project/Release/Transformer.cpp.o.d
@@ -223,7 +223,9 @@ Release/Transformer.cpp.o: Transformer.cpp TransformerForm.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 Bus.h BusForm.h
+ C:/wxWidgets-3.1.0/include/wx/msw/menu.h \
+ C:/wxWidgets-3.1.0/include/wx/log.h \
+ C:/wxWidgets-3.1.0/include/wx/generic/logg.h Bus.h BusForm.h
TransformerForm.h:
@@ -689,6 +691,10 @@ 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/log.h:
+
+C:/wxWidgets-3.1.0/include/wx/generic/logg.h:
+
Bus.h:
BusForm.h:
diff --git a/Project/Release/TransformerForm.cpp.o b/Project/Release/TransformerForm.cpp.o
index 8860e67..15c729d 100644
--- a/Project/Release/TransformerForm.cpp.o
+++ b/Project/Release/TransformerForm.cpp.o
Binary files differ
diff --git a/Project/Release/TransformerForm.cpp.o.d b/Project/Release/TransformerForm.cpp.o.d
index 8832fbb..bd7542a 100644
--- a/Project/Release/TransformerForm.cpp.o.d
+++ b/Project/Release/TransformerForm.cpp.o.d
@@ -223,7 +223,9 @@ Release/TransformerForm.cpp.o: TransformerForm.cpp TransformerForm.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 Bus.h BusForm.h
+ C:/wxWidgets-3.1.0/include/wx/msw/menu.h \
+ C:/wxWidgets-3.1.0/include/wx/log.h \
+ C:/wxWidgets-3.1.0/include/wx/generic/logg.h Bus.h BusForm.h
TransformerForm.h:
@@ -691,6 +693,10 @@ 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/log.h:
+
+C:/wxWidgets-3.1.0/include/wx/generic/logg.h:
+
Bus.h:
BusForm.h:
diff --git a/Project/Release/Workspace.cpp.o b/Project/Release/Workspace.cpp.o
index 1d9efa4..645488c 100644
--- a/Project/Release/Workspace.cpp.o
+++ b/Project/Release/Workspace.cpp.o
Binary files differ
diff --git a/Project/Transformer.cpp b/Project/Transformer.cpp
index 31a987b..57614bb 100644
--- a/Project/Transformer.cpp
+++ b/Project/Transformer.cpp
@@ -2,68 +2,67 @@
#include "Transformer.h"
Transformer::Transformer() : Branch() {}
+Transformer::Transformer(wxString name) : Branch() { m_electricalData.name = name; }
Transformer::~Transformer() {}
bool Transformer::AddParent(Element* parent, wxPoint2DDouble position)
{
if(parent) {
- // First bus.
- if(m_parentList.size() == 0) {
- m_position = position;
- m_parentList.push_back(parent);
- wxPoint2DDouble parentPt = parent->RotateAtPosition(
- position, -parent->GetAngle()); // Rotate click to horizontal position.
- parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
- 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);
-
- return false;
- }
- // Second bus.
- else if(parent != m_parentList[0])
- {
- m_parentList.push_back(parent);
- wxPoint2DDouble parentPt = parent->RotateAtPosition(
- position, -parent->GetAngle()); // Rotate click to horizontal position.
- parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
- parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back.
-
- // Get the average between the two bus points.
- m_position = wxPoint2DDouble((m_pointList[0].m_x + parentPt.m_x) / 2.0,
- (m_pointList[0].m_y + parentPt.m_y) / 2.0);
- // Set the transformer rectangle.
- m_width = 70.0;
- m_height = 40.0;
- m_rect = wxRect2DDouble(m_position.m_x - m_width / 2.0, m_position.m_y - m_height / 2.0, m_width,
- m_height);
- // Set the "side" points.
- m_pointList.push_back(wxPoint2DDouble(m_rect.GetPosition() + wxPoint2DDouble(-10, m_height / 2.0)));
- m_pointList.push_back(
- wxPoint2DDouble(m_rect.GetPosition() + wxPoint2DDouble(m_width + 10, m_height / 2.0)));
-
- // Set first switch point.
- wxPoint2DDouble secondPoint = parentPt;
- if(m_pointList.size() > 2) {
- secondPoint = m_pointList[2];
- }
- m_pointList[1] = GetSwitchPoint(m_parentList[0], m_pointList[0], secondPoint);
-
- // Set the second switch point.
- m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_pointList[m_pointList.size() - 1]));
-
- m_pointList.push_back(parentPt); // Last point.
- m_inserted = true;
-
- wxRect2DDouble genRect(0,0,0,0);
- m_switchRect.push_back(genRect);
- UpdateSwitches();
-
- return true;
- }
- }
+ // First bus.
+ if(m_parentList.size() == 0) {
+ m_position = position;
+ m_parentList.push_back(parent);
+ wxPoint2DDouble parentPt =
+ parent->RotateAtPosition(position, -parent->GetAngle()); // Rotate click to horizontal position.
+ parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
+ 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);
+
+ return false;
+ }
+ // Second bus.
+ else if(parent != m_parentList[0]) {
+ m_parentList.push_back(parent);
+ wxPoint2DDouble parentPt =
+ parent->RotateAtPosition(position, -parent->GetAngle()); // Rotate click to horizontal position.
+ parentPt.m_y = parent->GetPosition().m_y; // Centralize on bus.
+ parentPt = parent->RotateAtPosition(parentPt, parent->GetAngle()); // Rotate back.
+
+ // Get the average between the two bus points.
+ m_position =
+ wxPoint2DDouble((m_pointList[0].m_x + parentPt.m_x) / 2.0, (m_pointList[0].m_y + parentPt.m_y) / 2.0);
+ // Set the transformer rectangle.
+ m_width = 70.0;
+ m_height = 40.0;
+ m_rect = wxRect2DDouble(m_position.m_x - m_width / 2.0, m_position.m_y - m_height / 2.0, m_width, m_height);
+ // Set the "side" points.
+ m_pointList.push_back(wxPoint2DDouble(m_rect.GetPosition() + wxPoint2DDouble(-10, m_height / 2.0)));
+ m_pointList.push_back(
+ wxPoint2DDouble(m_rect.GetPosition() + wxPoint2DDouble(m_width + 10, m_height / 2.0)));
+
+ // Set first switch point.
+ wxPoint2DDouble secondPoint = parentPt;
+ if(m_pointList.size() > 2) {
+ secondPoint = m_pointList[2];
+ }
+ m_pointList[1] = GetSwitchPoint(m_parentList[0], m_pointList[0], secondPoint);
+
+ // Set the second switch point.
+ m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_pointList[m_pointList.size() - 1]));
+
+ m_pointList.push_back(parentPt); // Last point.
+ m_inserted = true;
+
+ wxRect2DDouble genRect(0, 0, 0, 0);
+ m_switchRect.push_back(genRect);
+ UpdateSwitches();
+
+ return true;
+ }
+ }
return false;
}
@@ -76,70 +75,70 @@ bool Transformer::Contains(wxPoint2DDouble position) const
void Transformer::Draw(wxPoint2DDouble translation, double scale) const
{
if(m_inserted) {
- // Draw selection (layer 1).
- if(m_selected) {
- // Push the current matrix on stack.
- glLineWidth(1.5 + m_borderSize * 2.0);
- glColor4d(0.0, 0.5, 1.0, 0.5);
- DrawLine(m_pointList);
- glPushMatrix();
- // Rotate the matrix around the object position.
- glTranslated(m_position.m_x, m_position.m_y, 0.0);
- glRotated(m_angle, 0.0, 0.0, 1.0);
- glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
-
- DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(20.0, 20.0), 20 + (m_borderSize + 1.5) / scale,
- 20, GL_POLYGON);
- DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(50.0, 20.0), 20 + (m_borderSize + 1.5) / scale,
- 20, GL_POLYGON);
-
- glPopMatrix();
-
- // Draw nodes selection.
- if(m_pointList.size() > 0) {
- DrawCircle(m_pointList[0], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
- if(m_inserted) {
- DrawCircle(m_pointList[m_pointList.size() - 1], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
- }
- }
- }
-
- // Draw transformer (layer 2).
- // Transformer line
- glLineWidth(1.5);
- glColor4d(0.2, 0.2, 0.2, 1.0);
- DrawLine(m_pointList);
-
- // Draw nodes.
- if(m_pointList.size() > 0) {
- glColor4d(0.2, 0.2, 0.2, 1.0);
- DrawCircle(m_pointList[0], 5.0, 10, GL_POLYGON);
- if(m_inserted) {
- DrawCircle(m_pointList[m_pointList.size() - 1], 5.0, 10, GL_POLYGON);
- }
- }
-
- DrawSwitches();
-
- // Push the current matrix on stack.
- glPushMatrix();
- // Rotate the matrix around the object position.
- glTranslated(m_position.m_x, m_position.m_y, 0.0);
- glRotated(m_angle, 0.0, 0.0, 1.0);
- glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
-
- glColor4d(1.0, 1.0, 1.0, 1.0);
- DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(20.0, 20.0), 20, 20, GL_POLYGON);
- DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(50.0, 20.0), 20, 20, GL_POLYGON);
-
- glColor4d(0.2, 0.2, 0.2, 1.0);
- DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(20.0, 20.0), 20, 20);
- DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(50.0, 20.0), 20, 20);
-
- DrawPoint(m_rect.GetPosition(), 8.0 * scale);
-
- glPopMatrix();
- }
+ // Draw selection (layer 1).
+ if(m_selected) {
+ // Push the current matrix on stack.
+ glLineWidth(1.5 + m_borderSize * 2.0);
+ glColor4d(0.0, 0.5, 1.0, 0.5);
+ DrawLine(m_pointList);
+ glPushMatrix();
+ // Rotate the matrix around the object position.
+ glTranslated(m_position.m_x, m_position.m_y, 0.0);
+ glRotated(m_angle, 0.0, 0.0, 1.0);
+ glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
+
+ DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(20.0, 20.0), 20 + (m_borderSize + 1.5) / scale, 20,
+ GL_POLYGON);
+ DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(50.0, 20.0), 20 + (m_borderSize + 1.5) / scale, 20,
+ GL_POLYGON);
+
+ glPopMatrix();
+
+ // Draw nodes selection.
+ if(m_pointList.size() > 0) {
+ DrawCircle(m_pointList[0], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
+ if(m_inserted) {
+ DrawCircle(m_pointList[m_pointList.size() - 1], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
+ }
+ }
+ }
+
+ // Draw transformer (layer 2).
+ // Transformer line
+ glLineWidth(1.5);
+ glColor4d(0.2, 0.2, 0.2, 1.0);
+ DrawLine(m_pointList);
+
+ // Draw nodes.
+ if(m_pointList.size() > 0) {
+ glColor4d(0.2, 0.2, 0.2, 1.0);
+ DrawCircle(m_pointList[0], 5.0, 10, GL_POLYGON);
+ if(m_inserted) {
+ DrawCircle(m_pointList[m_pointList.size() - 1], 5.0, 10, GL_POLYGON);
+ }
+ }
+
+ DrawSwitches();
+
+ // Push the current matrix on stack.
+ glPushMatrix();
+ // Rotate the matrix around the object position.
+ glTranslated(m_position.m_x, m_position.m_y, 0.0);
+ glRotated(m_angle, 0.0, 0.0, 1.0);
+ glTranslated(-m_position.m_x, -m_position.m_y, 0.0);
+
+ glColor4d(1.0, 1.0, 1.0, 1.0);
+ DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(20.0, 20.0), 20, 20, GL_POLYGON);
+ DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(50.0, 20.0), 20, 20, GL_POLYGON);
+
+ glColor4d(0.2, 0.2, 0.2, 1.0);
+ DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(20.0, 20.0), 20, 20);
+ DrawCircle(m_rect.GetPosition() + wxPoint2DDouble(50.0, 20.0), 20, 20);
+
+ DrawPoint(m_rect.GetPosition(), 8.0 * scale);
+
+ glPopMatrix();
+ }
}
bool Transformer::Intersects(wxRect2DDouble rect) const
@@ -150,16 +149,16 @@ bool Transformer::Intersects(wxRect2DDouble rect) const
void Transformer::Rotate(bool clockwise)
{
- double rotAngle = m_rotationAngle;
- if(!clockwise) rotAngle = -m_rotationAngle;
-
+ double rotAngle = m_rotationAngle;
+ if(!clockwise) rotAngle = -m_rotationAngle;
+
m_angle += rotAngle;
if(m_angle >= 360.0) m_angle = 0.0;
// Rotate all the points, except the switches and buses points.
for(int i = 2; i < (int)m_pointList.size() - 2; i++) {
- m_pointList[i] = RotateAtPosition(m_pointList[i], rotAngle);
- }
+ m_pointList[i] = RotateAtPosition(m_pointList[i], rotAngle);
+ }
}
void Transformer::Move(wxPoint2DDouble position)
@@ -168,15 +167,15 @@ void Transformer::Move(wxPoint2DDouble position)
// Move all the points, except the switches and buses points.
for(int i = 2; i < (int)m_pointList.size() - 2; i++) {
- m_pointList[i] = m_movePts[i] + 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;
- }
+ m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
+ }
if(!m_parentList[1]) {
- m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt;
- }
+ m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt;
+ }
UpdateSwitchesPosition();
}
@@ -184,30 +183,25 @@ void Transformer::Move(wxPoint2DDouble position)
void Transformer::MoveNode(Element* parent, wxPoint2DDouble position)
{
if(parent) {
- // First bus.
- if(parent == m_parentList[0]) {
- m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
- }
- // Second bus.
- else if(parent == m_parentList[1])
- {
- m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt;
- }
- }
- else
- {
- if(m_activeNodeID == 1) {
- m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
- m_parentList[0] = NULL;
- 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;
- }
- }
+ // First bus.
+ if(parent == m_parentList[0]) {
+ m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
+ }
+ // Second bus.
+ else if(parent == m_parentList[1]) {
+ m_pointList[m_pointList.size() - 1] = m_movePts[m_pointList.size() - 1] + position - m_moveStartPt;
+ }
+ } else {
+ if(m_activeNodeID == 1) {
+ m_pointList[0] = m_movePts[0] + position - m_moveStartPt;
+ m_parentList[0] = NULL;
+ 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;
+ }
+ }
// Recalculate switches positions
UpdateSwitchesPosition();
@@ -223,7 +217,7 @@ void Transformer::StartMove(wxPoint2DDouble position)
bool Transformer::GetContextMenu(wxMenu& menu)
{
menu.Append(ID_EDIT_TRANSFORMER, _("Edit tranformer"));
- GeneralMenuItens(menu);
+ GeneralMenuItens(menu);
return true;
}
@@ -231,9 +225,9 @@ bool Transformer::ShowForm(wxWindow* parent, Element* element)
{
TransformerForm* transfForm = new TransformerForm(parent, this);
if(transfForm->ShowModal() == wxID_OK) {
- transfForm->Destroy();
- return true;
- }
+ transfForm->Destroy();
+ return true;
+ }
transfForm->Destroy();
return false;
}
@@ -243,8 +237,7 @@ void Transformer::SetNominalVoltage(std::vector<double> nominalVoltage, std::vec
if(nominalVoltage.size() == 1) {
m_electricalData.primaryNominalVoltage = nominalVoltage[0];
m_electricalData.primaryNominalVoltageUnit = nominalVoltageUnit[0];
- }
- else if(nominalVoltage.size() == 2) {
+ } else if(nominalVoltage.size() == 2) {
m_electricalData.primaryNominalVoltage = nominalVoltage[0];
m_electricalData.primaryNominalVoltageUnit = nominalVoltageUnit[0];
m_electricalData.secondaryNominalVoltage = nominalVoltage[1];
diff --git a/Project/Transformer.h b/Project/Transformer.h
index fb23618..86d4cf7 100644
--- a/Project/Transformer.h
+++ b/Project/Transformer.h
@@ -51,6 +51,7 @@ class Transformer : public Branch
{
public:
Transformer();
+ Transformer(wxString name);
virtual ~Transformer();
virtual bool AddParent(Element* parent, wxPoint2DDouble position);
diff --git a/Project/TransformerForm.cpp b/Project/TransformerForm.cpp
index 96c4faa..3d87a13 100644
--- a/Project/TransformerForm.cpp
+++ b/Project/TransformerForm.cpp
@@ -2,49 +2,50 @@
#include "SwitchingForm.h"
#include "Transformer.h"
-TransformerForm::TransformerForm(wxWindow* parent, Transformer* transformer)
- : TransformerFormBase(parent)
+TransformerForm::TransformerForm(wxWindow* parent, Transformer* transformer) : TransformerFormBase(parent)
{
m_choiceResistance->SetString(1, L'\u03A9');
m_choiceReactance->SetString(1, L'\u03A9');
-
+
SetSize(GetBestSize());
Layout();
-
+
m_parent = parent;
m_transformer = transformer;
-
+
TransformerElectricalData data = transformer->GetElectricalData();
-
+
m_textCtrlName->SetValue(data.name);
-
- wxString nominalVoltageStr = wxString::FromDouble(data.primaryNominalVoltage);
+
+ wxString primVoltStr = Transformer::StringFromDouble(data.primaryNominalVoltage);
switch(data.primaryNominalVoltageUnit) {
case UNIT_V: {
- nominalVoltageStr += " V";
+ primVoltStr += " V";
} break;
case UNIT_kV: {
- nominalVoltageStr += " kV";
+ primVoltStr += " kV";
} break;
default:
break;
}
- nominalVoltageStr += " / " + wxString::FromDouble(data.secondaryNominalVoltage);
+ wxString secVoltStr = Transformer::StringFromDouble(data.secondaryNominalVoltage);
switch(data.secondaryNominalVoltageUnit) {
case UNIT_V: {
- nominalVoltageStr += " V";
+ secVoltStr += " V";
} break;
case UNIT_kV: {
- nominalVoltageStr += " kV";
+ secVoltStr += " kV";
} break;
default:
break;
}
- m_staticTextNominalVoltageValue->SetLabel(nominalVoltageStr);
+ m_staticTextNominalVoltageValue->SetLabel(wxString::Format("%s / %s", primVoltStr, secVoltStr));
+ m_choiceBaseVoltage->SetString(0, primVoltStr);
+ m_choiceBaseVoltage->SetString(1, secVoltStr);
m_choiceBaseVoltage->SetSelection(data.baseVoltage);
-
- m_textCtrlNominalPower->SetValue(wxString::FromDouble(data.nominalPower));
+
+ m_textCtrlNominalPower->SetValue(Transformer::StringFromDouble(data.nominalPower));
switch(data.nominalPowerUnit) {
case UNIT_VA: {
m_choiceNominalPower->SetSelection(0);
@@ -58,8 +59,8 @@ TransformerForm::TransformerForm(wxWindow* parent, Transformer* transformer)
default:
break;
}
-
- m_textCtrlResistance->SetValue(wxString::FromDouble(data.resistance));
+
+ m_textCtrlResistance->SetValue(Transformer::StringFromDouble(data.resistance));
switch(data.resistanceUnit) {
case UNIT_PU: {
m_choiceResistance->SetSelection(0);
@@ -71,7 +72,7 @@ TransformerForm::TransformerForm(wxWindow* parent, Transformer* transformer)
break;
}
- m_textCtrlReactance->SetValue(wxString::FromDouble(data.indReactance));
+ m_textCtrlReactance->SetValue(Transformer::StringFromDouble(data.indReactance));
switch(data.indReactanceUnit) {
case UNIT_PU: {
m_choiceReactance->SetSelection(0);
@@ -82,28 +83,24 @@ TransformerForm::TransformerForm(wxWindow* parent, Transformer* transformer)
default:
break;
}
-
+
m_choiceConnection->SetSelection(data.connection);
+
+ m_textCtrlTurnRatio->SetValue(Transformer::StringFromDouble(data.turnsRatio));
+ m_textCtrlPhaseShift->SetValue(Transformer::StringFromDouble(data.phaseShift));
- m_textCtrlTurnRatio->SetValue(wxString::FromDouble(data.turnsRatio));
- m_textCtrlPhaseShift->SetValue(wxString::FromDouble(data.phaseShift));
-
- m_textCtrlZeroResistance->SetValue(wxString::FromDouble(data.zeroResistance));
- m_textCtrlZeroReactance->SetValue(wxString::FromDouble(data.zeroIndReactance));
- m_textCtrlPrimResistance->SetValue(wxString::FromDouble(data.primaryGrndResistance));
- m_textCtrlPrimReactance->SetValue(wxString::FromDouble(data.primaryGrndReactance));
- m_textCtrlSecResistance->SetValue(wxString::FromDouble(data.secondaryGrndResistance));
- m_textCtrlSecReactance->SetValue(wxString::FromDouble(data.secondaryGrndReactance));
-}
+ m_checkUseTransformerPower->SetValue(data.useTransformerPower);
-TransformerForm::~TransformerForm()
-{
+ m_textCtrlZeroResistance->SetValue(Transformer::StringFromDouble(data.zeroResistance));
+ m_textCtrlZeroReactance->SetValue(Transformer::StringFromDouble(data.zeroIndReactance));
+ m_textCtrlPrimResistance->SetValue(Transformer::StringFromDouble(data.primaryGrndResistance));
+ m_textCtrlPrimReactance->SetValue(Transformer::StringFromDouble(data.primaryGrndReactance));
+ m_textCtrlSecResistance->SetValue(Transformer::StringFromDouble(data.secondaryGrndResistance));
+ m_textCtrlSecReactance->SetValue(Transformer::StringFromDouble(data.secondaryGrndReactance));
}
-void TransformerForm::OnCancelButtonClick(wxCommandEvent& event)
-{
- EndModal(wxID_CANCEL);
-}
+TransformerForm::~TransformerForm() {}
+void TransformerForm::OnCancelButtonClick(wxCommandEvent& event) { EndModal(wxID_CANCEL); }
void TransformerForm::OnOKButtonClick(wxCommandEvent& event)
{
if(ValidateData()) EndModal(wxID_OK);
@@ -120,5 +117,115 @@ void TransformerForm::OnStabilityButtonClick(wxCommandEvent& event)
bool TransformerForm::ValidateData()
{
+ TransformerElectricalData data;
+
+ data.name = m_textCtrlName->GetValue();
+ data.baseVoltage = m_choiceBaseVoltage->GetSelection();
+
+ if(!m_transformer->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_transformer->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;
+ }
+
+ if(!m_transformer->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;
+ }
+
+ switch(m_choiceConnection->GetSelection()) {
+ case 0: {
+ data.connection = GWYE_GWYE;
+ } break;
+ case 1: {
+ data.connection = WYE_GWYE;
+ } break;
+ case 2: {
+ data.connection = GWYE_WYE;
+ } break;
+ case 3: {
+ data.connection = WYE_WYE;
+ } break;
+ case 4: {
+ data.connection = DELTA_GWYE;
+ } break;
+ case 5: {
+ data.connection = DELTA_WYE;
+ } break;
+ case 6: {
+ data.connection = GWYE_DELTA;
+ } break;
+ case 7: {
+ data.connection = WYE_DELTA;
+ } break;
+ case 8: {
+ data.connection = DELTA_DELTA;
+ } break;
+ }
+
+ if(!m_transformer->DoubleFromString(m_parent, m_textCtrlTurnRatio->GetValue(), data.turnsRatio,
+ _("Value entered incorrectly in the field \"Turns ratio\".")))
+ return false;
+
+ if(!m_transformer->DoubleFromString(m_parent, m_textCtrlPhaseShift->GetValue(), data.phaseShift,
+ _("Value entered incorrectly in the field \"Phase shift\".")))
+ return false;
+
+ data.useTransformerPower = m_checkUseTransformerPower->GetValue();
+
+ if(!m_transformer->DoubleFromString(m_parent, m_textCtrlZeroResistance->GetValue(), data.zeroResistance,
+ _("Value entered incorrectly in the field \"Zero sequence resistance\".")))
+ return false;
+
+ if(!m_transformer->DoubleFromString(
+ m_parent, m_textCtrlZeroReactance->GetValue(), data.zeroIndReactance,
+ _("Value entered incorrectly in the field \"Zero sequence indutive reactance\".")))
+ return false;
+
+ if(!m_transformer->DoubleFromString(m_parent, m_textCtrlPrimResistance->GetValue(), data.primaryGrndResistance,
+ _("Value entered incorrectly in the field \"Primary ground resistance\".")))
+ return false;
+
+ if(!m_transformer->DoubleFromString(m_parent, m_textCtrlPrimReactance->GetValue(), data.primaryGrndReactance,
+ _("Value entered incorrectly in the field \"Primary ground reactance\".")))
+ return false;
+
+ if(!m_transformer->DoubleFromString(m_parent, m_textCtrlSecResistance->GetValue(), data.secondaryGrndResistance,
+ _("Value entered incorrectly in the field \"Secondary ground resistance\".")))
+ return false;
+
+ if(!m_transformer->DoubleFromString(m_parent, m_textCtrlSecReactance->GetValue(), data.secondaryGrndReactance,
+ _("Value entered incorrectly in the field \"Secondary ground reactance\".")))
+ return false;
+
+ m_transformer->SetElectricaData(data);
return true;
}
diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp
index 229e39e..836071b 100644
--- a/Project/Workspace.cpp
+++ b/Project/Workspace.cpp
@@ -60,8 +60,8 @@ Workspace::Workspace(wxWindow* parent, wxString name, wxStatusBar* statusBar) :
m_selectionRect = wxRect2DDouble(0, 0, 0, 0);
for(int i = 0; i < NUM_ELEMENTS; ++i) {
- m_elementNumber[i] = 1;
- }
+ m_elementNumber[i] = 1;
+ }
const int widths[4] = {-3, -1, 100, 100};
m_statusBar->SetStatusWidths(4, widths);
@@ -70,8 +70,8 @@ Workspace::Workspace(wxWindow* parent, wxString name, wxStatusBar* statusBar) :
Workspace::~Workspace()
{
for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- if(*it) delete *it;
- }
+ if(*it) delete *it;
+ }
m_elementList.clear();
if(m_camera) delete m_camera;
}
@@ -90,9 +90,9 @@ void Workspace::OnPaint(wxPaintEvent& event)
// Elements
for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
- element->Draw(m_camera->GetTranslation(), m_camera->GetScale());
- }
+ Element* element = *it;
+ element->Draw(m_camera->GetTranslation(), m_camera->GetScale());
+ }
// Selection rectangle
glLineWidth(1.0);
@@ -145,83 +145,78 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event)
{
bool foundElement = false;
if(m_mode == MODE_INSERT || m_mode == MODE_DRAG_INSERT) {
- // Get the last element inserted on the list.
- Element* newElement = *(m_elementList.end() - 1);
- for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
- // Clicked in any element.
- if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
- // Click at a bus.
- if(typeid(*element) == typeid(Bus)) {
- // Select the bus.
- element->SetSelected();
- foundElement = true; // Element found.
- // Add the new element's parent. If the element being inserted returns true, back to
- // edit mode.
- if(newElement->AddParent(element, m_camera->ScreenToWorld(event.GetPosition()))) {
- m_mode = MODE_EDIT;
- }
- }
- }
- }
- // The line element can have an indefined number of points.
- if(!foundElement) {
- if(typeid(*newElement) == typeid(Line)) {
- newElement->AddPoint(m_camera->ScreenToWorld(event.GetPosition()));
- }
- }
- foundElement = true;
- }
- else
- {
- bool clickPickbox = false;
- for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
- element->ResetPickboxes(); // Reset pickbox state.
-
- // Set movement initial position (not necessarily will be moved).
- element->StartMove(m_camera->ScreenToWorld(event.GetPosition()));
-
- // Click in selected element node.
- if(element->NodeContains(m_camera->ScreenToWorld(event.GetPosition())) != 0 &&
- element->IsSelected())
- {
- m_mode = MODE_MOVE_NODE;
- foundElement = true;
- }
-
- // Click in an element.
- else if(element->Contains(m_camera->ScreenToWorld(event.GetPosition())))
- {
- if(!foundElement) {
- // Select and show pickbox.
- element->SetSelected();
- element->ShowPickbox();
- foundElement = true;
- }
- // If pickbox contains the click, move the pickbox
- if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) {
- m_mode = MODE_MOVE_PICKBOX;
- clickPickbox = true;
- }
- // If didn't found a pickbox, move the element
- if(!clickPickbox) {
- m_mode = MODE_MOVE_ELEMENT;
- }
- }
-
- // Click in a switch.
- else if(element->SwitchesContains(m_camera->ScreenToWorld(event.GetPosition())))
- {
- element->SetOnline(element->IsOnline() ? false : true);
- }
- }
- }
+ // Get the last element inserted on the list.
+ Element* newElement = *(m_elementList.end() - 1);
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ Element* element = *it;
+ // Clicked in any element.
+ if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ // Click at a bus.
+ if(typeid(*element) == typeid(Bus)) {
+ // Select the bus.
+ element->SetSelected();
+ foundElement = true; // Element found.
+ // Add the new element's parent. If the element being inserted returns true, back to
+ // edit mode.
+ if(newElement->AddParent(element, m_camera->ScreenToWorld(event.GetPosition()))) {
+ ValidateElementsVoltages();
+ m_mode = MODE_EDIT;
+ }
+ }
+ }
+ }
+ // The line element can have an indefined number of points.
+ if(!foundElement) {
+ if(typeid(*newElement) == typeid(Line)) {
+ newElement->AddPoint(m_camera->ScreenToWorld(event.GetPosition()));
+ }
+ }
+ foundElement = true;
+ } else {
+ bool clickPickbox = false;
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ Element* element = *it;
+ element->ResetPickboxes(); // Reset pickbox state.
+
+ // Set movement initial position (not necessarily will be moved).
+ element->StartMove(m_camera->ScreenToWorld(event.GetPosition()));
+
+ // Click in selected element node.
+ if(element->NodeContains(m_camera->ScreenToWorld(event.GetPosition())) != 0 && element->IsSelected()) {
+ m_mode = MODE_MOVE_NODE;
+ foundElement = true;
+ }
+
+ // Click in an element.
+ else if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ if(!foundElement) {
+ // Select and show pickbox.
+ element->SetSelected();
+ element->ShowPickbox();
+ foundElement = true;
+ }
+ // If pickbox contains the click, move the pickbox
+ if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ m_mode = MODE_MOVE_PICKBOX;
+ clickPickbox = true;
+ }
+ // If didn't found a pickbox, move the element
+ if(!clickPickbox) {
+ m_mode = MODE_MOVE_ELEMENT;
+ }
+ }
+
+ // Click in a switch.
+ else if(element->SwitchesContains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ element->SetOnline(element->IsOnline() ? false : true);
+ }
+ }
+ }
if(!foundElement) {
- m_mode = MODE_SELECTION_RECT;
- m_startSelRect = m_camera->ScreenToWorld(event.GetPosition());
- }
+ m_mode = MODE_SELECTION_RECT;
+ m_startSelRect = m_camera->ScreenToWorld(event.GetPosition());
+ }
Redraw();
UpdateStatusBar();
@@ -231,88 +226,86 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event)
void Workspace::OnLeftDoubleClick(wxMouseEvent& event)
{
for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
-
- // 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.
- else if(element->SwitchesContains(m_camera->ScreenToWorld(event.GetPosition())))
- {
- element->SetOnline(element->IsOnline() ? false : true);
- }
- }
+ Element* element = *it;
+
+ // 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;
+ }
+ }
+ ValidateElementsVoltages();
+ }
+ }
+
+ // Click in a switch.
+ else if(element->SwitchesContains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ element->SetOnline(element->IsOnline() ? false : true);
+ }
+ }
}
void Workspace::OnRightClickDown(wxMouseEvent& event)
{
bool redraw = false;
if(m_mode == MODE_EDIT) {
- for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
- if(element->IsSelected()) {
- // Show context menu.
- if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
- element->ShowPickbox(false);
- wxMenu menu;
- if(element->GetContextMenu(menu)) {
- menu.SetClientData(element);
- menu.Connect(wxEVT_COMMAND_MENU_SELECTED,
- wxCommandEventHandler(Workspace::OnPopupClick), NULL, this);
- PopupMenu(&menu);
- redraw = true;
- }
- element->ResetPickboxes();
-
- if(redraw) {
- Redraw();
- redraw = false;
- }
- // If the last element was removed using the menu, we must leave the "search for" to
- // prevent error.
- break;
- }
- }
- }
- }
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ Element* element = *it;
+ if(element->IsSelected()) {
+ // Show context menu.
+ if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ element->ShowPickbox(false);
+ wxMenu menu;
+ if(element->GetContextMenu(menu)) {
+ menu.SetClientData(element);
+ menu.Connect(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(Workspace::OnPopupClick), NULL,
+ this);
+ PopupMenu(&menu);
+ redraw = true;
+ }
+ element->ResetPickboxes();
+
+ if(redraw) {
+ Redraw();
+ redraw = false;
+ }
+ // If the last element was removed using the menu, we must leave the "search for" to
+ // prevent error.
+ break;
+ }
+ }
+ }
+ }
}
void Workspace::OnLeftClickUp(wxMouseEvent& event)
@@ -321,87 +314,85 @@ void Workspace::OnLeftClickUp(wxMouseEvent& event)
// the selection rectangle.
bool foundPickbox = false;
bool findNewParent = false;
+ bool updateVoltages = false;
auto itnp = m_elementList.begin();
for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
-
- // The user was moving a pickbox.
- if(m_mode == MODE_MOVE_PICKBOX) {
- // Catch only the element that have the pickbox shown.
- if(element->IsPickboxShown()) {
- // If the element is a bus, check if a node is outside.
- if(typeid(*element) == typeid(Bus)) {
- // Get all the bus children.
- for(int i = 0; i < (int)m_elementList.size(); i++) {
- Element* child = m_elementList[i];
- for(int j = 0; j < (int)child->GetParentList().size(); j++) {
- Element* parent = child->GetParentList()[j];
- // The child have a parent that is the element.
- if(parent == element) {
- child->UpdateNodes();
- }
- }
- }
- }
- }
- }
-
- if(m_mode == MODE_SELECTION_RECT) {
- if(element->Intersects(m_selectionRect)) {
- element->SetSelected();
- }
- else
- {
- element->SetSelected(false);
- }
- }
- else if(m_mode == MODE_MOVE_NODE)
- {
- if(element->IsSelected()) {
- for(int i = 0; i < (int)m_elementList.size(); i++) {
- Element* parent = m_elementList[i];
- if(typeid(*parent) == typeid(Bus)) {
- if(element->SetNodeParent(parent)) {
- findNewParent = true;
- itnp = it;
- element->ResetNodes();
- break;
- }
- }
- }
- // element->ResetNodes();
- }
- }
- else
- {
- // Deselect
- if(!event.ControlDown()) {
- if(!element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
- element->SetSelected(false);
- }
- }
-
- if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) {
- foundPickbox = true;
- }
- else
- {
- element->ShowPickbox(false);
- element->ResetPickboxes();
- }
- }
- }
+ Element* element = *it;
+
+ // The user was moving a pickbox.
+ if(m_mode == MODE_MOVE_PICKBOX) {
+ // Catch only the element that have the pickbox shown.
+ if(element->IsPickboxShown()) {
+ // If the element is a bus, check if a node is outside.
+ if(typeid(*element) == typeid(Bus)) {
+ // Get all the bus children.
+ for(int i = 0; i < (int)m_elementList.size(); i++) {
+ Element* child = m_elementList[i];
+ for(int j = 0; j < (int)child->GetParentList().size(); j++) {
+ Element* parent = child->GetParentList()[j];
+ // The child have a parent that is the element.
+ if(parent == element) {
+ child->UpdateNodes();
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if(m_mode == MODE_SELECTION_RECT) {
+ if(element->Intersects(m_selectionRect)) {
+ element->SetSelected();
+ } else {
+ element->SetSelected(false);
+ }
+ } else if(m_mode == MODE_MOVE_NODE) {
+ if(element->IsSelected()) {
+ for(int i = 0; i < (int)m_elementList.size(); i++) {
+ Element* parent = m_elementList[i];
+ if(typeid(*parent) == typeid(Bus)) {
+ if(element->SetNodeParent(parent)) {
+ findNewParent = true;
+ itnp = it;
+ element->ResetNodes();
+ break;
+ }
+ }
+ }
+ // element->ResetNodes();
+ }
+ } else {
+ // Deselect
+ if(!event.ControlDown()) {
+ if(!element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ element->SetSelected(false);
+ }
+ }
+
+ if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ foundPickbox = true;
+ } else {
+ element->ShowPickbox(false);
+ element->ResetPickboxes();
+ }
+ }
+ }
if(findNewParent) {
- std::rotate(itnp, itnp + 1, m_elementList.end());
- }
+ std::rotate(itnp, itnp + 1, m_elementList.end());
+ updateVoltages = true;
+ }
if(!foundPickbox) {
- SetCursor(wxCURSOR_ARROW);
- }
+ SetCursor(wxCURSOR_ARROW);
+ }
if(m_mode != MODE_INSERT) {
- m_mode = MODE_EDIT;
- }
+ m_mode = MODE_EDIT;
+ }
+
+ if(updateVoltages) {
+ ValidateElementsVoltages();
+ }
m_selectionRect = wxRect2DDouble(0, 0, 0, 0);
Redraw();
UpdateStatusBar();
@@ -410,133 +401,109 @@ void Workspace::OnLeftClickUp(wxMouseEvent& event)
void Workspace::OnMouseMotion(wxMouseEvent& event)
{
bool redraw = false;
- switch(m_mode)
- {
- case MODE_INSERT:
- {
- Element* newElement = *(m_elementList.end() - 1); // Get the last element in the list.
- newElement->SetPosition(m_camera->ScreenToWorld(event.GetPosition()));
- redraw = true;
- }
- break;
-
- case MODE_DRAG:
- case MODE_DRAG_INSERT:
- {
- m_camera->SetTranslation(event.GetPosition());
- redraw = true;
- }
- break;
-
- case MODE_EDIT:
- {
- bool foundPickbox = false;
- for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
- if(element->IsSelected()) {
- // Show element pickbox (when it has) if the mouse is over the selected object.
- if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
- element->ShowPickbox();
- redraw = true;
-
- // If the mouse is over a pickbox set correct mouse cursor.
- if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) {
- foundPickbox = true;
- SetCursor(element->GetBestPickboxCursor());
- }
- else if(!foundPickbox)
- {
- SetCursor(wxCURSOR_ARROW);
- element->ResetPickboxes();
- }
- }
- else if(!foundPickbox)
- {
- if(element->IsPickboxShown()) redraw = true;
-
- element->ShowPickbox(false);
- element->ResetPickboxes();
- SetCursor(wxCURSOR_ARROW);
- }
- }
- }
- }
- break;
-
- case MODE_MOVE_NODE:
- {
- for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
- if(element->IsSelected()) {
- element->MoveNode(NULL, m_camera->ScreenToWorld(event.GetPosition()));
- redraw = true;
- }
- }
- }
- break;
-
- case MODE_MOVE_PICKBOX:
- {
- for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
- if(element->IsSelected()) {
- element->MovePickbox(m_camera->ScreenToWorld(event.GetPosition()));
- redraw = true;
- }
- }
- }
- break;
-
- case MODE_MOVE_ELEMENT:
- {
- for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
- // Parent's element moving...
- for(int i = 0; i < (int)element->GetParentList().size(); i++) {
- Element* parent = element->GetParentList()[i];
- if(parent) {
- if(parent->IsSelected()) {
- element->MoveNode(parent,
- m_camera->ScreenToWorld(event.GetPosition()));
- }
- }
- }
- if(element->IsSelected()) {
- element->Move(m_camera->ScreenToWorld(event.GetPosition()));
- redraw = true;
- }
- }
- }
- break;
-
- case MODE_SELECTION_RECT:
- {
- wxPoint2DDouble currentPos = m_camera->ScreenToWorld(event.GetPosition());
- double x, y, w, h;
- if(currentPos.m_x < m_startSelRect.m_x) {
- x = currentPos.m_x;
- w = m_startSelRect.m_x - currentPos.m_x;
- }
- else
- {
- x = m_startSelRect.m_x;
- w = currentPos.m_x - m_startSelRect.m_x;
- }
- if(currentPos.m_y < m_startSelRect.m_y) {
- y = currentPos.m_y;
- h = m_startSelRect.m_y - currentPos.m_y;
- }
- else
- {
- y = m_startSelRect.m_y;
- h = currentPos.m_y - m_startSelRect.m_y;
- }
-
- m_selectionRect = wxRect2DDouble(x, y, w, h);
- redraw = true;
- }
- break;
- }
+ switch(m_mode) {
+ case MODE_INSERT: {
+ Element* newElement = *(m_elementList.end() - 1); // Get the last element in the list.
+ newElement->SetPosition(m_camera->ScreenToWorld(event.GetPosition()));
+ redraw = true;
+ } break;
+
+ case MODE_DRAG:
+ case MODE_DRAG_INSERT: {
+ m_camera->SetTranslation(event.GetPosition());
+ redraw = true;
+ } break;
+
+ case MODE_EDIT: {
+ bool foundPickbox = false;
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ Element* element = *it;
+ if(element->IsSelected()) {
+ // Show element pickbox (when it has) if the mouse is over the selected object.
+ if(element->Contains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ element->ShowPickbox();
+ redraw = true;
+
+ // If the mouse is over a pickbox set correct mouse cursor.
+ if(element->PickboxContains(m_camera->ScreenToWorld(event.GetPosition()))) {
+ foundPickbox = true;
+ SetCursor(element->GetBestPickboxCursor());
+ } else if(!foundPickbox) {
+ SetCursor(wxCURSOR_ARROW);
+ element->ResetPickboxes();
+ }
+ } else if(!foundPickbox) {
+ if(element->IsPickboxShown()) redraw = true;
+
+ element->ShowPickbox(false);
+ element->ResetPickboxes();
+ SetCursor(wxCURSOR_ARROW);
+ }
+ }
+ }
+ } break;
+
+ case MODE_MOVE_NODE: {
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ Element* element = *it;
+ if(element->IsSelected()) {
+ element->MoveNode(NULL, m_camera->ScreenToWorld(event.GetPosition()));
+ redraw = true;
+ }
+ }
+ } break;
+
+ case MODE_MOVE_PICKBOX: {
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ Element* element = *it;
+ if(element->IsSelected()) {
+ element->MovePickbox(m_camera->ScreenToWorld(event.GetPosition()));
+ redraw = true;
+ }
+ }
+ } break;
+
+ case MODE_MOVE_ELEMENT: {
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ Element* element = *it;
+ // Parent's element moving...
+ for(int i = 0; i < (int)element->GetParentList().size(); i++) {
+ Element* parent = element->GetParentList()[i];
+ if(parent) {
+ if(parent->IsSelected()) {
+ element->MoveNode(parent, m_camera->ScreenToWorld(event.GetPosition()));
+ }
+ }
+ }
+ if(element->IsSelected()) {
+ element->Move(m_camera->ScreenToWorld(event.GetPosition()));
+ redraw = true;
+ }
+ }
+ } break;
+
+ case MODE_SELECTION_RECT: {
+ wxPoint2DDouble currentPos = m_camera->ScreenToWorld(event.GetPosition());
+ double x, y, w, h;
+ if(currentPos.m_x < m_startSelRect.m_x) {
+ x = currentPos.m_x;
+ w = m_startSelRect.m_x - currentPos.m_x;
+ } else {
+ x = m_startSelRect.m_x;
+ w = currentPos.m_x - m_startSelRect.m_x;
+ }
+ if(currentPos.m_y < m_startSelRect.m_y) {
+ y = currentPos.m_y;
+ h = m_startSelRect.m_y - currentPos.m_y;
+ } else {
+ y = m_startSelRect.m_y;
+ h = currentPos.m_y - m_startSelRect.m_y;
+ }
+
+ m_selectionRect = wxRect2DDouble(x, y, w, h);
+ redraw = true;
+ } break;
+ }
if(redraw) Redraw();
m_camera->UpdateMousePosition(event.GetPosition());
@@ -548,33 +515,29 @@ void Workspace::OnMiddleDown(wxMouseEvent& event)
{
// Set to drag mode.
if(m_mode != MODE_INSERT && m_mode != MODE_DRAG_INSERT) {
- m_mode = MODE_DRAG;
- }
- else
- {
- m_mode = MODE_DRAG_INSERT;
- }
+ m_mode = MODE_DRAG;
+ } else {
+ m_mode = MODE_DRAG_INSERT;
+ }
m_camera->StartTranslation(m_camera->ScreenToWorld(event.GetPosition()));
UpdateStatusBar();
}
void Workspace::OnMiddleUp(wxMouseEvent& event)
{
if(m_mode != MODE_INSERT && m_mode != MODE_DRAG_INSERT) {
- // Set to edit mode back.
- m_mode = MODE_EDIT;
- }
- else if(m_mode == MODE_DRAG_INSERT)
- {
- m_mode = MODE_INSERT;
- }
+ // Set to edit mode back.
+ m_mode = MODE_EDIT;
+ } else if(m_mode == MODE_DRAG_INSERT) {
+ m_mode = MODE_INSERT;
+ }
UpdateStatusBar();
}
void Workspace::OnScroll(wxMouseEvent& event)
{
if(event.GetWheelRotation() > 0)
- m_camera->SetScale(event.GetPosition(), +0.05);
+ m_camera->SetScale(event.GetPosition(), +0.05);
else
- m_camera->SetScale(event.GetPosition(), -0.05);
+ m_camera->SetScale(event.GetPosition(), -0.05);
UpdateStatusBar();
Redraw();
@@ -584,148 +547,124 @@ void Workspace::OnKeyDown(wxKeyEvent& event)
{
char key = event.GetUnicodeKey();
if(key != WXK_NONE) {
- switch(key)
- {
- case WXK_ESCAPE: // Cancel operations.
- {
- if(m_mode == MODE_INSERT) {
- m_elementList.pop_back(); // Removes the last element being inserted.
- m_mode = MODE_EDIT;
- Redraw();
- }
- }
- break;
- case WXK_DELETE: // Delete selected elements
- {
- DeleteSelectedElements();
- }
- break;
- case 'F':
- {
- if(event.GetModifiers() == wxMOD_SHIFT) {
- Fit();
- }
- }
- break;
- case 'R': // Rotate the selected elements.
- {
- RotateSelectedElements(event.GetModifiers() != wxMOD_SHIFT);
- }
- break;
- case 'B': // Insert a bus.
- {
- if(m_mode != MODE_INSERT) {
- Bus* newBus = new Bus(m_camera->ScreenToWorld(event.GetPosition()),
- wxString::Format(_("Bus %d"), GetElementNumber(ID_BUS)));
- IncrementElementNumber(ID_BUS);
- m_elementList.push_back(newBus);
- m_mode = MODE_INSERT;
- m_statusBar->SetStatusText(_("Insert Bus: Click to insert, ESC to cancel."));
- Redraw();
- }
- }
- break;
- case 'L':
- {
- if(m_mode != MODE_INSERT) {
- if(event.GetModifiers() == wxMOD_SHIFT) { // Insert a load.
- Load* newLoad = new Load();
- m_elementList.push_back(newLoad);
- m_mode = MODE_INSERT;
- m_statusBar->SetStatusText(
- _("Insert Load: Click on a buses, ESC to cancel."));
- }
- else // Insert a power 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(
- _("Insert Line: Click on two buses, ESC to cancel."));
- }
- Redraw();
- }
- }
- break;
- case 'T': // Insert a transformer.
- {
- if(m_mode != MODE_INSERT) {
- Transformer* newTransformer = new Transformer();
- m_elementList.push_back(newTransformer);
- m_mode = MODE_INSERT;
- m_statusBar->SetStatusText(
- _("Insert Transformer: Click on two buses, ESC to cancel."));
- Redraw();
- }
- }
- break;
- case 'G': // Insert a generator.
- {
- if(m_mode != MODE_INSERT) {
- SyncGenerator* newGenerator = new SyncGenerator(
- wxString::Format(_("Generator %d"), GetElementNumber(ID_SYNCGENERATOR)));
- IncrementElementNumber(ID_SYNCGENERATOR);
- m_elementList.push_back(newGenerator);
- m_mode = MODE_INSERT;
- m_statusBar->SetStatusText(_("Insert Generator: Click on a buses, ESC to cancel."));
- Redraw();
- }
- }
- break;
- case 'I':
- {
- if(m_mode != MODE_INSERT) {
- if(event.GetModifiers() == wxMOD_SHIFT) { // Insert an inductor.
- Inductor* newInductor = new Inductor();
- m_elementList.push_back(newInductor);
- m_mode = MODE_INSERT;
- m_statusBar->SetStatusText(
- _("Insert Inductor: Click on a buses, ESC to cancel."));
- }
- else // Insert an induction motor.
- {
- IndMotor* newIndMotor = new IndMotor();
- m_elementList.push_back(newIndMotor);
- m_mode = MODE_INSERT;
- m_statusBar->SetStatusText(
- _("Insert Induction Motor: Click on a buses, ESC to cancel."));
- }
- Redraw();
- }
- }
- break;
- case 'K': // Insert a synchronous condenser.
- {
- if(m_mode != MODE_INSERT) {
- SyncMotor* newSyncCondenser = new SyncMotor();
- m_elementList.push_back(newSyncCondenser);
- m_mode = MODE_INSERT;
- m_statusBar->SetStatusText(
- _("Insert Synchronous Condenser: Click on a buses, ESC to cancel."));
- Redraw();
- }
- }
- break;
- case 'C':
- {
- if(m_mode != MODE_INSERT) {
- if(event.GetModifiers() == wxMOD_SHIFT) { // Insert a capacitor.
- Capacitor* newCapacitor = new Capacitor();
- m_elementList.push_back(newCapacitor);
- m_mode = MODE_INSERT;
- m_statusBar->SetStatusText(
- _("Insert Capacitor: Click on a buses, ESC to cancel."));
- Redraw();
- }
- }
- }
- break;
- default:
- break;
- }
- }
+ switch(key) {
+ case WXK_ESCAPE: // Cancel operations.
+ {
+ if(m_mode == MODE_INSERT) {
+ m_elementList.pop_back(); // Removes the last element being inserted.
+ m_mode = MODE_EDIT;
+ Redraw();
+ }
+ } break;
+ case WXK_DELETE: // Delete selected elements
+ {
+ DeleteSelectedElements();
+ } break;
+ case 'F': {
+ if(event.GetModifiers() == wxMOD_SHIFT) {
+ Fit();
+ }
+ } break;
+ case 'R': // Rotate the selected elements.
+ {
+ RotateSelectedElements(event.GetModifiers() != wxMOD_SHIFT);
+ } break;
+ case 'B': // Insert a bus.
+ {
+ if(m_mode != MODE_INSERT) {
+ Bus* newBus = new Bus(m_camera->ScreenToWorld(event.GetPosition()),
+ wxString::Format(_("Bus %d"), GetElementNumber(ID_BUS)));
+ IncrementElementNumber(ID_BUS);
+ m_elementList.push_back(newBus);
+ m_mode = MODE_INSERT;
+ m_statusBar->SetStatusText(_("Insert Bus: Click to insert, ESC to cancel."));
+ Redraw();
+ }
+ } break;
+ case 'L': {
+ if(m_mode != MODE_INSERT) {
+ if(event.GetModifiers() == wxMOD_SHIFT) { // Insert a load.
+ Load* newLoad = new Load();
+ m_elementList.push_back(newLoad);
+ m_mode = MODE_INSERT;
+ m_statusBar->SetStatusText(_("Insert Load: Click on a buses, ESC to cancel."));
+ } else // Insert a power 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(_("Insert Line: Click on two buses, ESC to cancel."));
+ }
+ Redraw();
+ }
+ } break;
+ case 'T': // Insert a transformer.
+ {
+ if(m_mode != MODE_INSERT) {
+ Transformer* newTransformer =
+ new Transformer(wxString::Format(_("Transformer %d"), GetElementNumber(ID_TRANSFORMER)));
+ IncrementElementNumber(ID_TRANSFORMER);
+ m_elementList.push_back(newTransformer);
+ m_mode = MODE_INSERT;
+ m_statusBar->SetStatusText(_("Insert Transformer: Click on two buses, ESC to cancel."));
+ Redraw();
+ }
+ } break;
+ case 'G': // Insert a generator.
+ {
+ if(m_mode != MODE_INSERT) {
+ SyncGenerator* newGenerator =
+ new SyncGenerator(wxString::Format(_("Generator %d"), GetElementNumber(ID_SYNCGENERATOR)));
+ IncrementElementNumber(ID_SYNCGENERATOR);
+ m_elementList.push_back(newGenerator);
+ m_mode = MODE_INSERT;
+ m_statusBar->SetStatusText(_("Insert Generator: Click on a buses, ESC to cancel."));
+ Redraw();
+ }
+ } break;
+ case 'I': {
+ if(m_mode != MODE_INSERT) {
+ if(event.GetModifiers() == wxMOD_SHIFT) { // Insert an inductor.
+ Inductor* newInductor = new Inductor();
+ m_elementList.push_back(newInductor);
+ m_mode = MODE_INSERT;
+ m_statusBar->SetStatusText(_("Insert Inductor: Click on a buses, ESC to cancel."));
+ } else // Insert an induction motor.
+ {
+ IndMotor* newIndMotor = new IndMotor();
+ m_elementList.push_back(newIndMotor);
+ m_mode = MODE_INSERT;
+ m_statusBar->SetStatusText(_("Insert Induction Motor: Click on a buses, ESC to cancel."));
+ }
+ Redraw();
+ }
+ } break;
+ case 'K': // Insert a synchronous condenser.
+ {
+ if(m_mode != MODE_INSERT) {
+ SyncMotor* newSyncCondenser = new SyncMotor();
+ m_elementList.push_back(newSyncCondenser);
+ m_mode = MODE_INSERT;
+ m_statusBar->SetStatusText(_("Insert Synchronous Condenser: Click on a buses, ESC to cancel."));
+ Redraw();
+ }
+ } break;
+ case 'C': {
+ if(m_mode != MODE_INSERT) {
+ if(event.GetModifiers() == wxMOD_SHIFT) { // Insert a capacitor.
+ Capacitor* newCapacitor = new Capacitor();
+ m_elementList.push_back(newCapacitor);
+ m_mode = MODE_INSERT;
+ m_statusBar->SetStatusText(_("Insert Capacitor: Click on a buses, ESC to cancel."));
+ Redraw();
+ }
+ }
+ } break;
+ default:
+ break;
+ }
+ }
UpdateStatusBar();
event.Skip();
@@ -733,32 +672,25 @@ void Workspace::OnKeyDown(wxKeyEvent& event)
void Workspace::UpdateStatusBar()
{
- switch(m_mode)
- {
- case MODE_DRAG:
- {
- m_statusBar->SetStatusText(_("MODE: DRAG"), 1);
- }
- break;
-
- case MODE_INSERT:
- case MODE_DRAG_INSERT:
- {
- m_statusBar->SetStatusText(_("MODE: INSERT"), 1);
- }
- break;
-
- case MODE_MOVE_ELEMENT:
- case MODE_MOVE_PICKBOX:
- case MODE_MOVE_NODE:
- case MODE_SELECTION_RECT:
- case MODE_EDIT:
- {
- m_statusBar->SetStatusText(wxT(""));
- m_statusBar->SetStatusText(_("MODE: EDIT"), 1);
- }
- break;
- }
+ switch(m_mode) {
+ case MODE_DRAG: {
+ m_statusBar->SetStatusText(_("MODE: DRAG"), 1);
+ } break;
+
+ case MODE_INSERT:
+ case MODE_DRAG_INSERT: {
+ m_statusBar->SetStatusText(_("MODE: INSERT"), 1);
+ } break;
+
+ case MODE_MOVE_ELEMENT:
+ case MODE_MOVE_PICKBOX:
+ case MODE_MOVE_NODE:
+ case MODE_SELECTION_RECT:
+ case MODE_EDIT: {
+ m_statusBar->SetStatusText(wxT(""));
+ m_statusBar->SetStatusText(_("MODE: EDIT"), 1);
+ } break;
+ }
m_statusBar->SetStatusText(wxString::Format(_("ZOOM: %d%%"), (int)(m_camera->GetScale() * 100.0)), 2);
m_statusBar->SetStatusText(
@@ -770,174 +702,157 @@ void Workspace::OnPopupClick(wxCommandEvent& event)
{
wxMenu* menu = (wxMenu*)event.GetEventObject();
Element* element = (Element*)menu->GetClientData();
- switch(event.GetId())
- {
- case ID_EDIT_BUS:
- {
- wxMessageBox("Edit bus!");
- }
- break;
- case ID_EDIT_LINE:
- {
- wxMessageBox("Edit line!");
- }
- break;
- case ID_EDIT_TRANSFORMER:
- {
- wxMessageBox("Edit transformer!");
- }
- break;
- case ID_LINE_ADD_NODE:
- {
- Line* line = (Line*)element;
- line->AddNode(m_camera->GetMousePosition());
- Redraw();
- }
- break;
- case ID_LINE_REMOVE_NODE:
- {
- Line* line = (Line*)element;
- line->RemoveNode(m_camera->GetMousePosition());
- Redraw();
- }
- break;
- case ID_ROTATE_CLOCK:
- {
- element->Rotate();
- for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* iElement = *it;
- // Parent's element rotating...
- for(int i = 0; i < (int)iElement->GetParentList().size(); i++) {
- Element* parent = iElement->GetParentList()[i];
- if(parent == element) {
- iElement->RotateNode(parent);
- }
- }
- }
- Redraw();
- }
- break;
- case ID_ROTATE_COUNTERCLOCK:
- {
- element->Rotate(false);
- for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* iElement = *it;
- // Parent's element rotating...
- for(int i = 0; i < (int)iElement->GetParentList().size(); i++) {
- Element* parent = iElement->GetParentList()[i];
- if(parent == element) {
- iElement->RotateNode(parent, false);
- }
- }
- }
- Redraw();
- }
- break;
- case ID_DELETE:
- {
- for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* iElement = *it;
-
- if(element == iElement) {
- for(auto itp = m_elementList.begin(); itp != m_elementList.end(); ++itp) {
- Element* child = *itp;
- // Parent's element being deleted...
- for(int i = 0; i < (int)child->GetParentList().size(); i++) {
- Element* parent = child->GetParentList()[i];
- if(parent == element) {
- child->RemoveParent(parent);
- }
- }
- }
- m_elementList.erase(it--);
- }
- }
- }
- break;
- }
+ switch(event.GetId()) {
+ case ID_EDIT_BUS: {
+ wxMessageBox("Edit bus!");
+ } break;
+ case ID_EDIT_LINE: {
+ wxMessageBox("Edit line!");
+ } break;
+ case ID_EDIT_TRANSFORMER: {
+ wxMessageBox("Edit transformer!");
+ } break;
+ case ID_LINE_ADD_NODE: {
+ Line* line = (Line*)element;
+ line->AddNode(m_camera->GetMousePosition());
+ Redraw();
+ } break;
+ case ID_LINE_REMOVE_NODE: {
+ Line* line = (Line*)element;
+ line->RemoveNode(m_camera->GetMousePosition());
+ Redraw();
+ } break;
+ case ID_ROTATE_CLOCK: {
+ element->Rotate();
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ Element* iElement = *it;
+ // Parent's element rotating...
+ for(int i = 0; i < (int)iElement->GetParentList().size(); i++) {
+ Element* parent = iElement->GetParentList()[i];
+ if(parent == element) {
+ iElement->RotateNode(parent);
+ }
+ }
+ }
+ Redraw();
+ } break;
+ case ID_ROTATE_COUNTERCLOCK: {
+ element->Rotate(false);
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ Element* iElement = *it;
+ // Parent's element rotating...
+ for(int i = 0; i < (int)iElement->GetParentList().size(); i++) {
+ Element* parent = iElement->GetParentList()[i];
+ if(parent == element) {
+ iElement->RotateNode(parent, false);
+ }
+ }
+ }
+ Redraw();
+ } break;
+ case ID_DELETE: {
+ for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
+ Element* iElement = *it;
+
+ if(element == iElement) {
+ for(auto itp = m_elementList.begin(); itp != m_elementList.end(); ++itp) {
+ Element* child = *itp;
+ // Parent's element being deleted...
+ for(int i = 0; i < (int)child->GetParentList().size(); i++) {
+ Element* parent = child->GetParentList()[i];
+ if(parent == element) {
+ child->RemoveParent(parent);
+ }
+ }
+ }
+ m_elementList.erase(it--);
+ }
+ }
+ } break;
+ }
}
void Workspace::RotateSelectedElements(bool clockwise)
{
for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
- // Parent's element rotating...
- for(int i = 0; i < (int)element->GetParentList().size(); i++) {
- Element* parent = element->GetParentList()[i];
- if(parent) { // Check if parent is not null
- if(parent->IsSelected()) {
- element->RotateNode(parent, clockwise);
- // Update the positions used on motion action, the element will not be necessarily
- // moved.
- element->StartMove(m_camera->GetMousePosition());
- }
- }
- }
- if(element->IsSelected()) {
- element->Rotate(clockwise);
- element->StartMove(m_camera->GetMousePosition());
- }
- }
+ Element* element = *it;
+ // Parent's element rotating...
+ for(int i = 0; i < (int)element->GetParentList().size(); i++) {
+ Element* parent = element->GetParentList()[i];
+ if(parent) { // Check if parent is not null
+ if(parent->IsSelected()) {
+ element->RotateNode(parent, clockwise);
+ // Update the positions used on motion action, the element will not be necessarily
+ // moved.
+ element->StartMove(m_camera->GetMousePosition());
+ }
+ }
+ }
+ if(element->IsSelected()) {
+ element->Rotate(clockwise);
+ element->StartMove(m_camera->GetMousePosition());
+ }
+ }
Redraw();
}
void Workspace::DeleteSelectedElements()
{
for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) {
- Element* element = *it;
-
- if(element->IsSelected()) {
- for(auto itp = m_elementList.begin(); itp != m_elementList.end(); ++itp) {
- Element* child = *itp;
- // Parent's element being deleted...
- for(int i = 0; i < (int)child->GetParentList().size(); i++) {
- Element* parent = child->GetParentList()[i];
- if(parent == element) {
- child->RemoveParent(parent);
- }
- }
- }
- m_elementList.erase(it--);
- }
- }
+ Element* element = *it;
+
+ if(element->IsSelected()) {
+ for(auto itp = m_elementList.begin(); itp != m_elementList.end(); ++itp) {
+ Element* child = *itp;
+ // Parent's element being deleted...
+ for(int i = 0; i < (int)child->GetParentList().size(); i++) {
+ Element* parent = child->GetParentList()[i];
+ if(parent == element) {
+ child->RemoveParent(parent);
+ }
+ }
+ }
+ m_elementList.erase(it--);
+ }
+ }
Redraw();
}
void Workspace::Fit()
{
if(m_elementList.size() > 0) {
- wxPoint2DDouble leftUpCorner(0, 0);
- wxPoint2DDouble rightDownCorner(0, 0);
- m_elementList[0]->CalculateBoundaries(leftUpCorner, rightDownCorner);
-
- for(auto it = m_elementList.begin() + 1; it != m_elementList.end(); it++) {
- Element* element = *it;
- wxPoint2DDouble leftUp;
- wxPoint2DDouble rightDown;
- element->CalculateBoundaries(leftUp, rightDown);
- if(leftUp.m_x < leftUpCorner.m_x) leftUpCorner.m_x = leftUp.m_x;
- if(leftUp.m_y < leftUpCorner.m_y) leftUpCorner.m_y = leftUp.m_y;
- if(rightDown.m_x > rightDownCorner.m_x) rightDownCorner.m_x = rightDown.m_x;
- if(rightDown.m_y > rightDownCorner.m_y) rightDownCorner.m_y = rightDown.m_y;
- }
-
- int width = 0.0;
- int height = 0.0;
- GetSize(&width, &height);
-
- double scaleX = double(width) / (rightDownCorner.m_x - leftUpCorner.m_x);
- double scaleY = double(height) / (rightDownCorner.m_y - leftUpCorner.m_y);
-
- double scale = scaleX < scaleY ? scaleX : scaleY;
- if(scale > m_camera->GetZoomMax()) scale = m_camera->GetZoomMax();
- if(scale < m_camera->GetZoomMin()) scale = m_camera->GetZoomMin();
-
- m_camera->SetScale(scale);
-
- m_camera->StartTranslation(leftUpCorner);
- m_camera->SetTranslation(wxPoint2DDouble(0, 0));
- Redraw();
- }
+ wxPoint2DDouble leftUpCorner(0, 0);
+ wxPoint2DDouble rightDownCorner(0, 0);
+ m_elementList[0]->CalculateBoundaries(leftUpCorner, rightDownCorner);
+
+ for(auto it = m_elementList.begin() + 1; it != m_elementList.end(); it++) {
+ Element* element = *it;
+ wxPoint2DDouble leftUp;
+ wxPoint2DDouble rightDown;
+ element->CalculateBoundaries(leftUp, rightDown);
+ if(leftUp.m_x < leftUpCorner.m_x) leftUpCorner.m_x = leftUp.m_x;
+ if(leftUp.m_y < leftUpCorner.m_y) leftUpCorner.m_y = leftUp.m_y;
+ if(rightDown.m_x > rightDownCorner.m_x) rightDownCorner.m_x = rightDown.m_x;
+ if(rightDown.m_y > rightDownCorner.m_y) rightDownCorner.m_y = rightDown.m_y;
+ }
+
+ int width = 0.0;
+ int height = 0.0;
+ GetSize(&width, &height);
+
+ double scaleX = double(width) / (rightDownCorner.m_x - leftUpCorner.m_x);
+ double scaleY = double(height) / (rightDownCorner.m_y - leftUpCorner.m_y);
+
+ double scale = scaleX < scaleY ? scaleX : scaleY;
+ if(scale > m_camera->GetZoomMax()) scale = m_camera->GetZoomMax();
+ if(scale < m_camera->GetZoomMin()) scale = m_camera->GetZoomMin();
+
+ m_camera->SetScale(scale);
+
+ m_camera->StartTranslation(leftUpCorner);
+ m_camera->SetTranslation(wxPoint2DDouble(0, 0));
+ Redraw();
+ }
}
void Workspace::ValidateBusesVoltages(Element* initialBus)
@@ -946,47 +861,46 @@ void Workspace::ValidateBusesVoltages(Element* initialBus)
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)) {
- if(child->GetParentList()[0] && child->GetParentList()[1]) {
- 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.
- }
- }
- }
- }
-
- ValidateElementsVoltages();
+ Element* child = *it;
+
+ if(typeid(*child) == typeid(Line)) {
+ if(child->GetParentList()[0] && child->GetParentList()[1]) {
+ 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.
+ }
+ }
+ }
+ }
+
+ // ValidateElementsVoltages();
}
void Workspace::ValidateElementsVoltages()
{
for(auto it = m_elementList.begin(); it != m_elementList.end(); it++) {
- Element* child = *it;
-
+ Element* child = *it;
+
std::vector<double> nominalVoltage;
std::vector<ElectricalUnit> nominalVoltageUnit;
- for(int i = 0; i < (int)child->GetParentList().size(); i++) {
- Bus* parent = (Bus*)child->GetParentList()[i];
- if(parent) {
- nominalVoltage.push_back(parent->GetEletricalData().nominalVoltage);
+ for(int i = 0; i < (int)child->GetParentList().size(); i++) {
+ Bus* parent = (Bus*)child->GetParentList()[i];
+ if(parent) {
+ nominalVoltage.push_back(parent->GetEletricalData().nominalVoltage);
nominalVoltageUnit.push_back(parent->GetEletricalData().nominalVoltageUnit);
- }
- }
+ }
+ }
child->SetNominalVoltage(nominalVoltage, nominalVoltageUnit);
- }
+ }
}