From 468ba7581675a23567746628d6777ca411b150d3 Mon Sep 17 00:00:00 2001 From: Thales1330 Date: Fri, 28 Oct 2016 17:46:43 -0200 Subject: Power flow arrow under implementation --- Project/Element.cpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) (limited to 'Project/Element.cpp') diff --git a/Project/Element.cpp b/Project/Element.cpp index 7c69e18..3f6e111 100644 --- a/Project/Element.cpp +++ b/Project/Element.cpp @@ -387,3 +387,47 @@ wxString Element::StringFromDouble(double value, int minDecimal) return formatedStr; } + +void Element::CalculatePowerFlowPts(std::vector edges) +{ + if(edges.size() < 2) return; + + // Clear all power flow points + for(int i = 0; i < (int)m_powerFlowArrow.size(); i++) m_powerFlowArrow[i].clear(); + m_powerFlowArrow.clear(); + + for(int i = 1; i < (int)edges.size(); i++) { + wxPoint2DDouble pt1 = edges[i - 1]; + wxPoint2DDouble pt2 = edges[i]; + + double angle = std::atan2(pt2.m_y - pt1.m_y, pt2.m_x - pt1.m_x); + + //wxLogMessage(wxString::Format("(%f, %f) (%f, %f)"), pt1.m_x, pt1.m_y, pt2.m_x, pt2.m_y); + + wxPoint2DDouble rotPt2( + std::cos(-angle) * (pt2.m_x - pt1.m_x) - std::sin(-angle) * (pt2.m_y - pt1.m_y) + pt1.m_x, + std::sin(-angle) * (pt2.m_x - pt1.m_x) + std::cos(-angle) * (pt2.m_y - pt1.m_y) + pt1.m_y); + + wxPoint2DDouble mid((rotPt2.m_x + pt1.m_x) / 2.0, (rotPt2.m_y + pt1.m_y) / 2.0); // test + std::vector triPts; + triPts.push_back(mid + wxPoint2DDouble(5.0, 0.0)); + triPts.push_back(mid + wxPoint2DDouble(-5.0, 5.0)); + triPts.push_back(mid + wxPoint2DDouble(-5.0, -5.0)); + + // Rotate back. + for(int i = 0; i < 3; i++) { + triPts[i] = wxPoint2DDouble( + std::cos(angle) * (triPts[i].m_x - pt1.m_x) - std::sin(angle) * (triPts[i].m_y - pt1.m_y) + pt1.m_x, + std::sin(angle) * (triPts[i].m_x - pt1.m_x) + std::cos(angle) * (triPts[i].m_y - pt1.m_y) + pt1.m_y); + } + m_powerFlowArrow.push_back(triPts); + } +} + +void Element::DrawPowerFlowPts() const +{ + glColor4d(1.0, 0.55, 0.0, 1.0); + for(int i = 0; i < (int)m_powerFlowArrow.size(); i++) { + DrawTriangle(m_powerFlowArrow[i]); + } +} -- cgit