diff options
author | Thales1330 <thaleslima.ufu@gmail.com> | 2016-12-09 16:35:34 -0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-09 16:35:34 -0200 |
commit | cff8d90d61be4d34f5e84e8dd0933f678e6214be (patch) | |
tree | 077fdde43d69c248f518fc22978796d8f16e03f3 /Project/Workspace.cpp | |
parent | e282ec268db0d17a1d53f813c5fff9473d25e797 (diff) | |
parent | ac671068f32849807728b4c2844a4cda995a73c8 (diff) | |
download | PSP.git-cff8d90d61be4d34f5e84e8dd0933f678e6214be.tar.gz PSP.git-cff8d90d61be4d34f5e84e8dd0933f678e6214be.tar.xz PSP.git-cff8d90d61be4d34f5e84e8dd0933f678e6214be.zip |
Merge pull request #2 from Thales1330/wip/currentState
Wip currentstate
Diffstat (limited to 'Project/Workspace.cpp')
-rw-r--r-- | Project/Workspace.cpp | 108 |
1 files changed, 71 insertions, 37 deletions
diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp index 7ada5e5..bdb8211 100644 --- a/Project/Workspace.cpp +++ b/Project/Workspace.cpp @@ -25,8 +25,8 @@ Camera::Camera() Camera::~Camera() {} wxPoint2DDouble Camera::ScreenToWorld(wxPoint2DDouble screenCoords) const { - return wxPoint2DDouble(screenCoords.m_x / m_scale - m_translation.m_x, - screenCoords.m_y / m_scale - m_translation.m_y); + return wxPoint2DDouble( + screenCoords.m_x / m_scale - m_translation.m_x, screenCoords.m_y / m_scale - m_translation.m_y); } void Camera::SetTranslation(wxPoint2DDouble screenPoint) @@ -54,8 +54,12 @@ wxPoint2DDouble Camera::GetMousePosition(bool worldCoords) const } // Workspace -Workspace::Workspace() : WorkspaceBase(NULL) {} -Workspace::Workspace(wxWindow* parent, wxString name, wxStatusBar* statusBar) : WorkspaceBase(parent) +Workspace::Workspace() + : WorkspaceBase(NULL) +{ +} +Workspace::Workspace(wxWindow* parent, wxString name, wxStatusBar* statusBar) + : WorkspaceBase(parent) { m_name = name; m_statusBar = statusBar; @@ -67,7 +71,7 @@ Workspace::Workspace(wxWindow* parent, wxString name, wxStatusBar* statusBar) : m_elementNumber[i] = 1; } - const int widths[4] = {-3, -1, 100, 100}; + const int widths[4] = { -3, -1, 100, 100 }; m_statusBar->SetStatusWidths(4, widths); } @@ -87,8 +91,8 @@ void Workspace::OnPaint(wxPaintEvent& event) SetViewport(); // Set GLCanvas scale and translation. - glScaled(m_camera->GetScale(), m_camera->GetScale(), 0.0); // Scale - glTranslated(m_camera->GetTranslation().m_x, m_camera->GetTranslation().m_y, 0.0); // Translation + glScaled(m_camera->GetScale(), m_camera->GetScale(), 0.0); // Scale + glTranslated(m_camera->GetTranslation().m_x, m_camera->GetTranslation().m_y, 0.0); // Translation // Draw @@ -121,14 +125,14 @@ void Workspace::OnPaint(wxPaintEvent& event) glVertex2d(m_selectionRect.m_x + m_selectionRect.m_width, m_selectionRect.m_y); glEnd(); - glFlush(); // Sends all pending information directly to the GPU. + glFlush(); // Sends all pending information directly to the GPU. m_glCanvas->SwapBuffers(); event.Skip(); } void Workspace::SetViewport() { - glClearColor(1.0, 1.0, 1.0, 1.0); // White background. + glClearColor(1.0, 1.0, 1.0, 1.0); // White background. glClear(GL_COLOR_BUFFER_BIT); glDisable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); @@ -167,7 +171,7 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event) if(typeid(*element) == typeid(Bus)) { // Select the bus. element->SetSelected(); - foundElement = true; // Element found. + 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()))) { @@ -188,7 +192,7 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event) bool clickPickbox = false; for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) { Element* element = *it; - element->ResetPickboxes(); // Reset pickbox state. + element->ResetPickboxes(); // Reset pickbox state. // Set movement initial position (not necessarily will be moved). element->StartMove(m_camera->ScreenToWorld(event.GetPosition())); @@ -252,6 +256,9 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event) void Workspace::OnLeftDoubleClick(wxMouseEvent& event) { + bool elementEdited = false; + bool redraw = false; + for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) { Element* element = *it; @@ -264,14 +271,16 @@ void Workspace::OnLeftDoubleClick(wxMouseEvent& event) oldBus = *(Bus*)element; } element->ShowForm(this, element); + elementEdited = true; + redraw = true; // 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) { + 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; @@ -300,14 +309,17 @@ void Workspace::OnLeftDoubleClick(wxMouseEvent& event) element->SetOnline(element->IsOnline() ? false : true); } } - - //Text element + + // Text element for(auto it = m_textList.begin(); it != m_textList.end(); ++it) { Text* text = *it; if(text->Contains(m_camera->ScreenToWorld(event.GetPosition()))) { text->ShowForm(this, m_elementList); + redraw = true; } } + if(elementEdited) UpdateTextElements(); + if(redraw) Redraw(); } void Workspace::OnRightClickDown(wxMouseEvent& event) @@ -323,8 +335,8 @@ void Workspace::OnRightClickDown(wxMouseEvent& event) wxMenu menu; if(element->GetContextMenu(menu)) { menu.SetClientData(element); - menu.Connect(wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(Workspace::OnPopupClick), NULL, - this); + menu.Connect( + wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(Workspace::OnPopupClick), NULL, this); PopupMenu(&menu); redraw = true; } @@ -455,7 +467,7 @@ 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. + Element* newElement = *(m_elementList.end() - 1); // Get the last element in the list. newElement->SetPosition(m_camera->ScreenToWorld(event.GetPosition())); redraw = true; } break; @@ -582,7 +594,7 @@ void Workspace::OnMiddleDown(wxMouseEvent& event) { // Set to drag mode. if(m_mode != MODE_INSERT && m_mode != MODE_INSERT_TEXT && m_mode != MODE_DRAG_INSERT && - m_mode != MODE_DRAG_INSERT_TEXT) { + m_mode != MODE_DRAG_INSERT_TEXT) { m_mode = MODE_DRAG; } else if(m_mode == MODE_INSERT_TEXT) { m_mode = MODE_DRAG_INSERT_TEXT; @@ -596,7 +608,7 @@ void Workspace::OnMiddleDown(wxMouseEvent& event) void Workspace::OnMiddleUp(wxMouseEvent& event) { if(m_mode != MODE_INSERT && m_mode != MODE_INSERT_TEXT && m_mode != MODE_DRAG_INSERT && - m_mode != MODE_DRAG_INSERT_TEXT) { + m_mode != MODE_DRAG_INSERT_TEXT) { // Set to edit mode back. m_mode = MODE_EDIT; } else if(m_mode == MODE_DRAG_INSERT_TEXT) { @@ -626,10 +638,10 @@ void Workspace::OnKeyDown(wxKeyEvent& event) char key = event.GetUnicodeKey(); if(key != WXK_NONE) { switch(key) { - case WXK_ESCAPE: // Cancel operations. + case WXK_ESCAPE: // Cancel operations. { if(m_mode == MODE_INSERT) { - m_elementList.pop_back(); // Removes the last element being inserted. + m_elementList.pop_back(); // Removes the last element being inserted. m_mode = MODE_EDIT; Redraw(); } else if(m_mode == MODE_INSERT_TEXT) { @@ -638,7 +650,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) Redraw(); } } break; - case WXK_DELETE: // Delete selected elements + case WXK_DELETE: // Delete selected elements { DeleteSelectedElements(); } break; @@ -656,15 +668,15 @@ void Workspace::OnKeyDown(wxKeyEvent& event) Fit(); } } break; - case 'R': // Rotate the selected elements. + case 'R': // Rotate the selected elements. { RotateSelectedElements(event.GetModifiers() != wxMOD_SHIFT); } break; - case 'B': // Insert a bus. + case 'B': // Insert a bus. { if(!insertingElement) { Bus* newBus = new Bus(m_camera->ScreenToWorld(event.GetPosition()), - wxString::Format(_("Bus %d"), GetElementNumber(ID_BUS))); + wxString::Format(_("Bus %d"), GetElementNumber(ID_BUS))); IncrementElementNumber(ID_BUS); m_elementList.push_back(newBus); m_mode = MODE_INSERT; @@ -674,13 +686,13 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } break; case 'L': { if(!insertingElement) { - if(event.GetModifiers() == wxMOD_SHIFT) { // Insert a load. + if(event.GetModifiers() == wxMOD_SHIFT) { // Insert a load. Load* newLoad = new Load(wxString::Format(_("Load %d"), GetElementNumber(ID_LOAD))); IncrementElementNumber(ID_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. + } else { // Insert a power line. Line* newLine = new Line(wxString::Format(_("Line %d"), GetElementNumber(ID_LINE))); IncrementElementNumber(ID_LINE); m_elementList.push_back(newLine); @@ -690,7 +702,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) Redraw(); } } break; - case 'T': // Insert a transformer. + case 'T': // Insert a transformer. { if(!insertingElement) { Transformer* newTransformer = @@ -702,7 +714,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) Redraw(); } } break; - case 'G': // Insert a generator. + case 'G': // Insert a generator. { if(!insertingElement) { SyncGenerator* newGenerator = @@ -716,14 +728,14 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } break; case 'I': { if(!insertingElement) { - if(event.GetModifiers() == wxMOD_SHIFT) { // Insert an inductor. + if(event.GetModifiers() == wxMOD_SHIFT) { // Insert an inductor. Inductor* newInductor = new Inductor(wxString::Format(_("Inductor %d"), GetElementNumber(ID_INDUCTOR))); IncrementElementNumber(ID_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. + } else // Insert an induction motor. { IndMotor* newIndMotor = new IndMotor(wxString::Format(_("Induction motor %d"), GetElementNumber(ID_INDMOTOR))); @@ -735,7 +747,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) Redraw(); } } break; - case 'K': // Insert a synchronous condenser. + case 'K': // Insert a synchronous condenser. { if(!insertingElement) { SyncMotor* newSyncCondenser = @@ -749,7 +761,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } break; case 'C': { if(!insertingElement) { - if(event.GetModifiers() == wxMOD_SHIFT) { // Insert a capacitor. + if(event.GetModifiers() == wxMOD_SHIFT) { // Insert a capacitor. Capacitor* newCapacitor = new Capacitor(wxString::Format(_("Capacitor %d"), GetElementNumber(ID_CAPACITOR))); IncrementElementNumber(ID_CAPACITOR); @@ -880,7 +892,7 @@ void Workspace::RotateSelectedElements(bool clockwise) // 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) { // 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 @@ -908,6 +920,7 @@ void Workspace::RotateSelectedElements(bool clockwise) void Workspace::DeleteSelectedElements() { + // Don't set the end of the list at the loop's begin. for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) { Element* element = *it; @@ -922,9 +935,21 @@ void Workspace::DeleteSelectedElements() } } } + + for(auto itt = m_textList.begin(); itt != m_textList.end(); ++itt) { + Text* text = *itt; + if(text->GetElement() == element) m_textList.erase(itt--); + } + m_elementList.erase(it--); } } + + for(auto it = m_textList.begin(); it != m_textList.end(); ++it) { + Text* text = *it; + if(text->IsSelected()) m_textList.erase(it--); + } + Redraw(); } @@ -979,7 +1004,7 @@ void Workspace::ValidateBusesVoltages(Element* initialBus) BusElectricalData data2 = ((Bus*)child->GetParentList()[1])->GetEletricalData(); if(data1.nominalVoltage != data2.nominalVoltage || - data1.nominalVoltageUnit != data2.nominalVoltageUnit) { + data1.nominalVoltageUnit != data2.nominalVoltageUnit) { data1.nominalVoltage = nominalVoltage; data2.nominalVoltage = nominalVoltage; data1.nominalVoltageUnit = nominalVoltageUnit; @@ -988,7 +1013,7 @@ void Workspace::ValidateBusesVoltages(Element* initialBus) ((Bus*)child->GetParentList()[0])->SetElectricalData(data1); ((Bus*)child->GetParentList()[1])->SetElectricalData(data2); - it = m_elementList.begin(); // Restart search. + it = m_elementList.begin(); // Restart search. } } } @@ -1024,7 +1049,16 @@ bool Workspace::RunPowerFlow() msgDialog.ShowModal(); } + UpdateTextElements(); Redraw(); return result; } + +void Workspace::UpdateTextElements() +{ + for(auto it = m_textList.begin(); it != m_textList.end(); ++it) { + Text* text = *it; + text->UpdateText(100e6); + } +} |