diff options
Diffstat (limited to 'Project/Load.cpp')
-rw-r--r-- | Project/Load.cpp | 168 |
1 files changed, 90 insertions, 78 deletions
diff --git a/Project/Load.cpp b/Project/Load.cpp index 96b03d9..25793b1 100644 --- a/Project/Load.cpp +++ b/Project/Load.cpp @@ -1,97 +1,98 @@ #include "Load.h" Load::Load() : Shunt() {} +Load::Load(wxString name) : Shunt() { m_electricalData.name = name; } Load::~Load() {} bool Load::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 = m_height = 20.0; - m_rect = wxRect2DDouble(m_position.m_x - 10.0, m_position.m_y - 10.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, -20.0)); - m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -10.0)); - - m_triangPts.push_back(wxPoint2DDouble(-m_width / 2.0, -m_height / 2.0)); - m_triangPts.push_back(wxPoint2DDouble(m_width / 2.0, -m_height / 2.0)); - m_triangPts.push_back(wxPoint2DDouble(0.0, m_height / 2.0)); - - m_inserted = true; - - wxRect2DDouble genRect(0,0,0,0); - m_switchRect.push_back(genRect); // Push a general rectangle. - UpdateSwitches(); - - return true; - } + 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 = m_height = 20.0; + m_rect = wxRect2DDouble(m_position.m_x - 10.0, m_position.m_y - 10.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, -20.0)); + m_pointList.push_back(m_position + wxPoint2DDouble(0.0, -10.0)); + + m_triangPts.push_back(wxPoint2DDouble(-m_width / 2.0, -m_height / 2.0)); + m_triangPts.push_back(wxPoint2DDouble(m_width / 2.0, -m_height / 2.0)); + m_triangPts.push_back(wxPoint2DDouble(0.0, m_height / 2.0)); + + m_inserted = true; + + wxRect2DDouble genRect(0, 0, 0, 0); + m_switchRect.push_back(genRect); // Push a general rectangle. + UpdateSwitches(); + + return true; + } return false; } void Load::Draw(wxPoint2DDouble translation, double scale) const { if(m_inserted) { - // Draw Selection (layer 1). - if(m_selected) { - glLineWidth(1.5 + m_borderSize * 2.0); - glColor4d(0.0, 0.5, 1.0, 0.5); - std::vector<wxPoint2DDouble> selTriangPts; - selTriangPts.push_back(m_triangPts[0] + m_position + - wxPoint2DDouble(-m_borderSize / scale, -m_borderSize / scale)); - selTriangPts.push_back(m_triangPts[1] + m_position + - wxPoint2DDouble(m_borderSize / scale, -m_borderSize / scale)); - selTriangPts.push_back(m_triangPts[2] + m_position + wxPoint2DDouble(0.0, m_borderSize / scale)); - - 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); - DrawTriangle(selTriangPts); - glPopMatrix(); - - DrawLine(m_pointList); - - // Draw node selection. - DrawCircle(m_pointList[0], 5.0 + m_borderSize / scale, 10, GL_POLYGON); - } - - // Draw Load (layer 2). - glLineWidth(1.5); - - // Draw node. - glColor4d(0.2, 0.2, 0.2, 1.0); - DrawCircle(m_pointList[0], 5.0, 10, GL_POLYGON); - - DrawLine(m_pointList); - - DrawSwitches(); - - std::vector<wxPoint2DDouble> triangPts; - for(int i = 0; i < 3; i++) { - triangPts.push_back(m_triangPts[i] + m_position); - } - 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); - glColor4d(0.2, 0.2, 0.2, 1.0); - DrawTriangle(triangPts); - glPopMatrix(); - } + // Draw Selection (layer 1). + if(m_selected) { + glLineWidth(1.5 + m_borderSize * 2.0); + glColor4d(0.0, 0.5, 1.0, 0.5); + std::vector<wxPoint2DDouble> selTriangPts; + selTriangPts.push_back(m_triangPts[0] + m_position + + wxPoint2DDouble(-m_borderSize / scale, -m_borderSize / scale)); + selTriangPts.push_back(m_triangPts[1] + m_position + + wxPoint2DDouble(m_borderSize / scale, -m_borderSize / scale)); + selTriangPts.push_back(m_triangPts[2] + m_position + wxPoint2DDouble(0.0, m_borderSize / scale)); + + 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); + DrawTriangle(selTriangPts); + glPopMatrix(); + + DrawLine(m_pointList); + + // Draw node selection. + DrawCircle(m_pointList[0], 5.0 + m_borderSize / scale, 10, GL_POLYGON); + } + + // Draw Load (layer 2). + glLineWidth(1.5); + + // Draw node. + glColor4d(0.2, 0.2, 0.2, 1.0); + DrawCircle(m_pointList[0], 5.0, 10, GL_POLYGON); + + DrawLine(m_pointList); + + DrawSwitches(); + + std::vector<wxPoint2DDouble> triangPts; + for(int i = 0; i < 3; i++) { + triangPts.push_back(m_triangPts[i] + m_position); + } + 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); + glColor4d(0.2, 0.2, 0.2, 1.0); + DrawTriangle(triangPts); + glPopMatrix(); + } } void Load::Rotate(bool clockwise) { - double rotAngle = m_rotationAngle; - if(!clockwise) rotAngle = -m_rotationAngle; - + double rotAngle = m_rotationAngle; + if(!clockwise) rotAngle = -m_rotationAngle; + m_angle += rotAngle; m_pointList[2] = RotateAtPosition(m_pointList[2], rotAngle); m_pointList[3] = RotateAtPosition(m_pointList[3], rotAngle); @@ -100,7 +101,18 @@ void Load::Rotate(bool clockwise) bool Load::GetContextMenu(wxMenu& menu) { - menu.Append(ID_EDIT_LOAD, _("Edit Load")); + menu.Append(ID_EDIT_LOAD, _("Edit Load")); GeneralMenuItens(menu); return true; } + +bool Load::ShowForm(wxWindow* parent, Element* element) +{ + LoadForm* loadForm = new LoadForm(parent, this); + if(loadForm->ShowModal() == wxID_OK) { + loadForm->Destroy(); + return true; + } + loadForm->Destroy(); + return false; +} |