summaryrefslogtreecommitdiffstats
path: root/Project/ControlElement.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Project/ControlElement.cpp')
-rw-r--r--Project/ControlElement.cpp62
1 files changed, 60 insertions, 2 deletions
diff --git a/Project/ControlElement.cpp b/Project/ControlElement.cpp
index d12f9cf..09c7b79 100644
--- a/Project/ControlElement.cpp
+++ b/Project/ControlElement.cpp
@@ -1,10 +1,68 @@
#include "ControlElement.h"
-ControlElement::ControlElement() : Element()
+Node::Node(wxPoint2DDouble position, NodeType nodeType, double borderSize)
{
+ m_rect = wxRect2DDouble(position.m_x, position.m_y, 2 * m_radius + 2 * borderSize, 2 * m_radius + 2 * borderSize);
+ m_nodeType = nodeType;
+
+ m_triPts.push_back(GetPosition() + wxPoint2DDouble(-m_radius - m_rect.GetSize().GetWidth() / 2, m_radius));
+ m_triPts.push_back(GetPosition() + wxPoint2DDouble(-m_radius - m_rect.GetSize().GetWidth() / 2, -m_radius));
+ m_triPts.push_back(GetPosition() + wxPoint2DDouble(-m_radius + 1, 0));
+}
+
+Node::~Node() {}
+
+void Node::SetPosition(wxPoint2DDouble position)
+{
+ m_rect = wxRect2DDouble(position.m_x, position.m_y, m_rect.m_width, m_rect.m_height);
+}
+
+void Node::StartMove(wxPoint2DDouble position)
+{
+ m_moveStartPt = position;
+ m_movePos = m_rect.GetPosition();
+ m_triPtsMovePos = m_triPts;
+}
+
+void Node::Move(wxPoint2DDouble position)
+{
+ SetPosition(m_movePos + position - m_moveStartPt);
+ m_triPts[0] = m_triPtsMovePos[0] + position - m_moveStartPt;
+ m_triPts[1] = m_triPtsMovePos[1] + position - m_moveStartPt;
+ m_triPts[2] = m_triPtsMovePos[2] + position - m_moveStartPt;
+}
+
+ControlElement::ControlElement()
+ : Element()
+{
+}
+
+ControlElement::~ControlElement() {}
+
+void ControlElement::DrawNodes() const
+{
+ for(auto it = m_nodeList.begin(), itEnd = m_nodeList.end(); it != itEnd; ++it) {
+ Node node = *it;
+ DrawCircle(node.GetPosition(), node.GetRadius(), 10, GL_POLYGON);
+ if(node.GetNodeType() == Node::NODE_IN) {
+ DrawTriangle(node.GetInTrianglePts());
+ }
+ }
}
-ControlElement::~ControlElement()
+void ControlElement::StartMove(wxPoint2DDouble position)
{
+ m_moveStartPt = position;
+ m_movePos = m_position;
+ for(int i = 0; i < (int)m_nodeList.size(); ++i) {
+ m_nodeList[i].StartMove(position);
+ }
}
+void ControlElement::Move(wxPoint2DDouble position)
+{
+ SetPosition(m_movePos + position - m_moveStartPt);
+ for(int i = 0; i < (int)m_nodeList.size(); ++i) {
+ m_nodeList[i].Move(position);
+ }
+}