diff options
Diffstat (limited to 'Project/Workspace.cpp')
-rw-r--r-- | Project/Workspace.cpp | 61 |
1 files changed, 53 insertions, 8 deletions
diff --git a/Project/Workspace.cpp b/Project/Workspace.cpp index 4ef610d..ddbf470 100644 --- a/Project/Workspace.cpp +++ b/Project/Workspace.cpp @@ -135,6 +135,7 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event) bool foundElement = false; Element* newElement = NULL; bool showNewElementForm = false; + bool clickOnSwitch = false; if(m_mode == MODE_INSERT_TEXT || m_mode == MODE_PASTE || m_mode == MODE_DRAG_PASTE) { m_mode = MODE_EDIT; } else if(m_mode == MODE_INSERT || m_mode == MODE_DRAG_INSERT || m_mode == MODE_DRAG_INSERT_TEXT) { @@ -179,6 +180,7 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event) // Click in selected element node. if(element->NodeContains(m_camera->ScreenToWorld(clickPoint)) != 0 && element->IsSelected()) { m_mode = MODE_MOVE_NODE; + m_disconnectedElement = true; foundElement = true; } @@ -204,6 +206,7 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event) // Click in a switch. else if(element->SwitchesContains(m_camera->ScreenToWorld(clickPoint))) { element->SetOnline(element->IsOnline() ? false : true); + clickOnSwitch = true; } } @@ -232,8 +235,12 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event) UpdateStatusBar(); if(showNewElementForm) { - if(newElement) newElement->ShowForm(this, newElement); + if(newElement) { + newElement->ShowForm(this, newElement); + if(m_continuousCalc) RunStaticStudies(); + } } + if(clickOnSwitch && m_continuousCalc) RunStaticStudies(); event.Skip(); } @@ -241,6 +248,7 @@ void Workspace::OnLeftClickDown(wxMouseEvent& event) void Workspace::OnLeftDoubleClick(wxMouseEvent& event) { bool elementEdited = false; + bool clickOnSwitch = false; bool redraw = false; for(auto it = m_elementList.begin(); it != m_elementList.end(); ++it) { @@ -293,6 +301,7 @@ void Workspace::OnLeftDoubleClick(wxMouseEvent& event) // Click in a switch. else if(element->SwitchesContains(m_camera->ScreenToWorld(event.GetPosition()))) { element->SetOnline(element->IsOnline() ? false : true); + clickOnSwitch = true; } } @@ -304,7 +313,12 @@ void Workspace::OnLeftDoubleClick(wxMouseEvent& event) redraw = true; } } - if(elementEdited) UpdateTextElements(); + if(elementEdited) { + UpdateTextElements(); + if(m_continuousCalc) RunStaticStudies(); + } + if(clickOnSwitch && m_continuousCalc) RunStaticStudies(); + if(redraw) Redraw(); m_timer->Start(); } @@ -364,6 +378,7 @@ void Workspace::OnLeftClickUp(wxMouseEvent& event) // The child have a parent that is the element. if(parent == element) { child->UpdateNodes(); + m_disconnectedElement = true; } } } @@ -441,6 +456,12 @@ void Workspace::OnLeftClickUp(wxMouseEvent& event) if(updateVoltages) { ValidateElementsVoltages(); } + + if(m_continuousCalc && m_disconnectedElement) { + m_disconnectedElement = false; + RunStaticStudies(); + } + m_selectionRect = wxRect2DDouble(0, 0, 0, 0); Redraw(); UpdateStatusBar(); @@ -704,9 +725,7 @@ void Workspace::OnKeyDown(wxKeyEvent& event) } // Tests - Ctrl + Shift + L if(event.ControlDown() && event.ShiftDown()) { - ControlEditor* ce = - new ControlEditor(this, IOControl::IN_TERMINAL_VOLTAGE | IOControl::OUT_FIELD_VOLTAGE); - ce->Show(); + UpdateTextElements(); } } break; case 'T': // Insert a transformer. @@ -1030,6 +1049,8 @@ void Workspace::Fit() } if(!GetElementsCorners(leftUpCorner, rightDownCorner, elementList)) return; + wxPoint2DDouble middleCoords = (leftUpCorner + rightDownCorner) / 2.0; + int width = 0.0; int height = 0.0; GetSize(&width, &height); @@ -1043,8 +1064,8 @@ void Workspace::Fit() m_camera->SetScale(scale); - m_camera->StartTranslation(leftUpCorner); - m_camera->SetTranslation(wxPoint2DDouble(0, 0)); + m_camera->StartTranslation(middleCoords); + m_camera->SetTranslation(wxPoint2DDouble(width / 2, height / 2)); Redraw(); } @@ -1117,7 +1138,7 @@ void Workspace::UpdateTextElements() { for(auto it = m_textList.begin(), itEnd = m_textList.end(); it != itEnd; ++it) { Text* text = *it; - text->UpdateText(100e6); + text->UpdateText(m_properties->GetSimulationPropertiesData().basePower); } } @@ -1444,3 +1465,27 @@ void Workspace::OnMiddleDoubleClick(wxMouseEvent& event) Fit(); event.Skip(); } + +bool Workspace::RunStaticStudies() +{ + bool pfStatus, faultStatus, scStatus; + pfStatus = faultStatus = scStatus = false; + + pfStatus = RunPowerFlow(); + + if(m_properties->GetSimulationPropertiesData().faultAfterPowerFlow) { + if(pfStatus) faultStatus = RunFault(); + } else { + faultStatus = true; + } + + if(m_properties->GetSimulationPropertiesData().scPowerAfterPowerFlow) { + if(pfStatus) scStatus = RunSCPower(); + } else { + scStatus = true; + } + + if(pfStatus && faultStatus && scStatus) return true; + + return false; +} |