33 enum class NodeType { NODE_IN = 0, NODE_OUT };
35 Node(wxPoint2DDouble position = wxPoint2DDouble(0, 0), NodeType nodeType = NodeType::NODE_IN,
double borderSize = 0.0);
38 wxRect2DDouble GetRect()
const {
return m_rect; }
39 void SetRect(wxRect2DDouble rect) { m_rect = rect; }
40 wxPoint2DDouble GetPosition()
const;
41 void SetPosition(wxPoint2DDouble position);
43 NodeType GetNodeType()
const {
return m_nodeType; }
44 void SetNodeType(NodeType nodeType) { m_nodeType = nodeType; }
45 double GetRadius()
const {
return m_radius; }
46 std::vector<wxPoint2DDouble> GetInTrianglePts()
const {
return m_triPts; }
47 double GetAngle()
const {
return m_angle; }
48 void SetAngle(
double angle) { m_angle = angle; }
49 void Rotate(
bool clockwise =
true);
51 void RotateTriPt(
double angle);
53 void StartMove(wxPoint2DDouble position);
54 void Move(wxPoint2DDouble position);
55 bool Contains(wxPoint2DDouble position)
const;
57 bool IsConnected()
const {
return m_connected; }
58 void SetConnected(
bool connected =
true) { m_connected = connected; }
59 int GetID()
const {
return m_id; }
60 void SetID(
int id) { m_id = id; }
61 Node* GetCopy()
const;
66 wxRect2DDouble m_rect;
69 bool m_connected =
false;
71 wxPoint2DDouble m_moveStartPt;
72 wxPoint2DDouble m_movePos;
74 double m_radius = 3.0;
75 std::vector<wxPoint2DDouble> m_triPts;
92 virtual void StartMove(wxPoint2DDouble position);
93 virtual void Move(wxPoint2DDouble position);
95 void SetNodeList(std::vector<Node*> nodeList) { m_nodeList = nodeList; }
96 std::vector<Node*> GetNodeList()
const {
return m_nodeList; }
98 virtual void DrawDCNodes(wxGraphicsContext* gc)
const;
99 virtual void ReplaceNode(
Node* oldNode,
Node* newNode);
106 virtual bool IsSolved()
const {
return m_solved; }
107 virtual void SetSolved(
bool solved =
true) { m_solved = solved; }
108 virtual bool Solve(
double* input,
double timeStep);
109 virtual bool Initialize();
110 virtual double GetOutput()
const {
return m_output; }
111 virtual void SetOutput(
double output) { m_output = output; }
113 static ControlElement* GetControlElementFromID(std::vector< std::shared_ptr<ControlElement> > elementList,
int id);
116 std::vector<Node*> m_nodeList;
117 bool m_solved =
false;
118 double m_output = 0.0;
120 void SaveControlNodes(rapidxml::xml_document<>& doc, rapidxml::xml_node<>* elementNode);
121 bool OpenControlNodes(rapidxml::xml_node<>* elementNode);