summaryrefslogtreecommitdiffstats
path: root/Project/Workspace.cpp
diff options
context:
space:
mode:
authorThales1330 <thaleslima.ufu@gmail.com>2016-12-09 16:35:34 -0200
committerGitHub <noreply@github.com>2016-12-09 16:35:34 -0200
commitcff8d90d61be4d34f5e84e8dd0933f678e6214be (patch)
tree077fdde43d69c248f518fc22978796d8f16e03f3 /Project/Workspace.cpp
parente282ec268db0d17a1d53f813c5fff9473d25e797 (diff)
parentac671068f32849807728b4c2844a4cda995a73c8 (diff)
downloadPSP.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.cpp108
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);
+ }
+}