summaryrefslogtreecommitdiffstats
path: root/Project/Inductor.cpp
diff options
context:
space:
mode:
authorThales Lima Oliveira <thaleslima.ufu@gmail.com>2016-09-04 00:59:41 -0300
committerThales Lima Oliveira <thaleslima.ufu@gmail.com>2016-09-04 00:59:41 -0300
commitc1aad656847602f7e4c7aead048f7465a76838d4 (patch)
tree2b69d1d0e98f50ed8113746c3c4a4d87d6be3b7e /Project/Inductor.cpp
parent726686c9b378f3a727ded52226b13a760cba1e6c (diff)
downloadPSP.git-c1aad656847602f7e4c7aead048f7465a76838d4.tar.gz
PSP.git-c1aad656847602f7e4c7aead048f7465a76838d4.tar.xz
PSP.git-c1aad656847602f7e4c7aead048f7465a76838d4.zip
Inductor implemented
Diffstat (limited to 'Project/Inductor.cpp')
-rw-r--r--Project/Inductor.cpp88
1 files changed, 82 insertions, 6 deletions
diff --git a/Project/Inductor.cpp b/Project/Inductor.cpp
index 2659295..0ed8ba5 100644
--- a/Project/Inductor.cpp
+++ b/Project/Inductor.cpp
@@ -1,25 +1,101 @@
#include "Inductor.h"
-Inductor::Inductor() : Shunt()
+Inductor::Inductor() : Shunt() {}
+Inductor::~Inductor() {}
+bool Inductor::AddParent(Element* parent, wxPoint2DDouble position)
{
+ if(parent) {
+ 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_position = parentPt + wxPoint2DDouble(0.0, 100.0); // Shifts the position to the down of the bus.
+ m_width = 20.0;
+ m_height = 70.0;
+ m_rect = wxRect2DDouble(m_position.m_x - m_width / 2.0, m_position.m_y - m_height / 2.0, m_width, m_height);
+
+ m_pointList.push_back(parentPt);
+ m_pointList.push_back(GetSwitchPoint(parent, parentPt, m_position));
+ m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -m_height / 2.0 - 10.0));
+ m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -m_height / 2.0));
+
+ m_inserted = true;
+ return true;
+ }
+ return false;
}
-Inductor::~Inductor()
+void Inductor::Draw(wxPoint2DDouble translation, double scale) const
{
+ if(m_inserted) {
+ if(m_selected) {
+ glLineWidth(1.5 + m_borderSize * 2.0);
+ glColor4d(0.0, 0.5, 1.0, 0.5);
+
+ DrawLine(m_pointList);
+
+ glPushMatrix();
+ 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);
+
+ DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 10.0), 10, 45, 270, 30, GL_LINE_STRIP);
+ DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 25.0), 10, 45, 315, 30, GL_LINE_STRIP);
+ DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 40.0), 10, 90, 315, 30, GL_LINE_STRIP);
+
+ DrawGround(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 50.0));
+
+ glPopMatrix();
+
+ // Draw node selection.
+ DrawCircle(m_pointList[0], 5.0 + m_borderSize / scale, 10, GL_POLYGON);
+ }
+ // Draw Load (layer 2).
+ glLineWidth(1.5);
+ glColor4d(0.2, 0.2, 0.2, 1.0);
+ DrawCircle(m_pointList[0], 5.0, 10, GL_POLYGON);
+ DrawLine(m_pointList);
+
+ glPushMatrix();
+ 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);
+
+ DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 10.0), 10, 45, 270, 10, GL_LINE_STRIP);
+ DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 25.0), 10, 45, 315, 10, GL_LINE_STRIP);
+ DrawArc(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 40.0), 10, 90, 315, 10, GL_LINE_STRIP);
+
+ DrawGround(m_position + wxPoint2DDouble(0, -m_height / 2.0 + 50.0));
+
+ glPopMatrix();
+ }
}
-bool Inductor::AddParent(Element* parent, wxPoint2DDouble position)
+void Inductor::Rotate()
{
+ m_angle += m_rotationAngle;
+ m_pointList[2] = RotateAtPosition(m_pointList[2], m_rotationAngle);
+ m_pointList[3] = RotateAtPosition(m_pointList[3], m_rotationAngle);
+ UpdateSwitchesPosition();
}
-void Inductor::Draw(wxPoint2DDouble translation, double scale) const
+bool Inductor::GetContextMenu(wxMenu& menu)
{
+ menu.Append(ID_EDIT_INDUCTOR, _("Edit Inductor"));
+ menu.Append(ID_ROTATE, _("Rotate"));
+ menu.Append(ID_DELETE, _("Delete"));
+ return true;
}
-void Inductor::Rotate()
+bool Inductor::Contains(wxPoint2DDouble position) const
{
+ wxPoint2DDouble ptR = RotateAtPosition(position, -m_angle);
+ return m_rect.Contains(ptR);
}
-bool Inductor::GetContextMenu(wxMenu& menu)
+bool Inductor::Intersects(wxRect2DDouble rect) const
{
+ return RotatedRectanglesIntersects(m_rect, rect, m_angle, 0.0);
}