summaryrefslogtreecommitdiffstats
path: root/Project/Sum.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Project/Sum.cpp')
-rw-r--r--Project/Sum.cpp74
1 files changed, 74 insertions, 0 deletions
diff --git a/Project/Sum.cpp b/Project/Sum.cpp
index a2235fd..a3bcc3c 100644
--- a/Project/Sum.cpp
+++ b/Project/Sum.cpp
@@ -18,6 +18,7 @@
#include "ConnectionLine.h"
#include "Sum.h"
#include "SumForm.h"
+#include <wx/pen.h>
Sum::Sum(int id) : ControlElement(id)
{
@@ -109,6 +110,79 @@ void Sum::Draw(wxPoint2DDouble translation, double scale) const
DrawNodes();
}
+void Sum::DrawDC(wxPoint2DDouble translation, double scale, wxGraphicsContext* gc) const
+{
+ if (m_selected) {
+ gc->SetPen(*wxTRANSPARENT_PEN);
+ gc->SetBrush(wxBrush(m_selectionColour.GetDcRGBA()));
+ double borderSize = (m_borderSize * 2.0 + 1.0) / scale;
+ gc->DrawRectangle(m_position.m_x - m_width / 2 - borderSize / 2, m_position.m_y - m_height / 2 - borderSize / 2, m_width + borderSize, m_height + borderSize);
+ }
+ gc->SetPen(*wxBLACK_PEN);
+ gc->SetBrush(*wxWHITE_BRUSH);
+ gc->DrawRectangle(m_position.m_x - m_width / 2, m_position.m_y - m_height / 2, m_width, m_height);
+
+ // Plot signals.
+ gc->SetPen(wxPen(wxColour(0, 0, 0, 255), 2));
+ gc->SetBrush(*wxTRANSPARENT_BRUSH);
+ wxPoint2DDouble signalOffset[4];
+ wxPoint2DDouble sigmaOffset;
+ if (m_angle == 0.0) {
+ signalOffset[0] = wxPoint2DDouble(6, 0);
+ signalOffset[1] = wxPoint2DDouble(12, 0);
+ signalOffset[2] = wxPoint2DDouble(9, -3);
+ signalOffset[3] = wxPoint2DDouble(9, 3);
+ sigmaOffset = wxPoint2DDouble(6, 0);
+ }
+ else if (m_angle == 90.0) {
+ signalOffset[0] = wxPoint2DDouble(-3, 9);
+ signalOffset[1] = wxPoint2DDouble(3, 9);
+ signalOffset[2] = wxPoint2DDouble(0, 6);
+ signalOffset[3] = wxPoint2DDouble(0, 12);
+ sigmaOffset = wxPoint2DDouble(0, 6);
+ }
+ else if (m_angle == 180.0) {
+ signalOffset[0] = wxPoint2DDouble(-6, 0);
+ signalOffset[1] = wxPoint2DDouble(-12, 0);
+ signalOffset[2] = wxPoint2DDouble(-9, -3);
+ signalOffset[3] = wxPoint2DDouble(-9, 3);
+ sigmaOffset = wxPoint2DDouble(-6, 0);
+ }
+ else if (m_angle == 270.0) {
+ signalOffset[0] = wxPoint2DDouble(-3, -9);
+ signalOffset[1] = wxPoint2DDouble(3, -9);
+ signalOffset[2] = wxPoint2DDouble(0, -6);
+ signalOffset[3] = wxPoint2DDouble(0, -12);
+ sigmaOffset = wxPoint2DDouble(0, -6);
+ }
+ for (unsigned int i = 0; i < m_nodeList.size() - 1; ++i) {
+ wxPoint2DDouble hLine[2];
+ hLine[0] = m_nodeList[i]->GetPosition() + signalOffset[0];
+ hLine[1] = m_nodeList[i]->GetPosition() + signalOffset[1];
+ gc->DrawLines(2, hLine);
+ if (m_signalList[i] == SIGNAL_POSITIVE) {
+ wxPoint2DDouble vLine[2];
+ vLine[0] = m_nodeList[i]->GetPosition() + signalOffset[2];
+ vLine[1] = m_nodeList[i]->GetPosition() + signalOffset[3];
+ gc->DrawLines(2, vLine);
+ }
+ }
+
+ // Plot sigma.
+ gc->SetPen(wxPen(wxColour(0, 77, 255, 255), 2));
+ wxPoint2DDouble sigma[5];
+ sigma[0] = m_position + wxPoint2DDouble(4, 9) + sigmaOffset;
+ sigma[1] = m_position + wxPoint2DDouble(-6, 9) + sigmaOffset;
+ sigma[2] = m_position + wxPoint2DDouble(0, 0) + sigmaOffset;
+ sigma[3] = m_position + wxPoint2DDouble(-6, -9) + sigmaOffset;
+ sigma[4] = m_position + wxPoint2DDouble(4, -9) + sigmaOffset;
+ gc->DrawLines(5, sigma);
+
+ gc->SetPen(*wxTRANSPARENT_PEN);
+ gc->SetBrush(*wxBLACK_BRUSH);
+ DrawDCNodes(gc);
+}
+
bool Sum::ShowForm(wxWindow* parent, Element* element)
{
SumForm* sumForm = new SumForm(parent, this);