summaryrefslogtreecommitdiffstats
path: root/Project/Element.h
diff options
context:
space:
mode:
authorThales1330 <thaleslima.ufu@gmail.com>2016-12-06 13:26:46 -0200
committerThales1330 <thaleslima.ufu@gmail.com>2016-12-06 13:26:46 -0200
commite282ec268db0d17a1d53f813c5fff9473d25e797 (patch)
tree517e01b8685248f04548513091e7040a1b36ec0b /Project/Element.h
parentd4efffcdedbb41596eecd0882a1cef76f6afc435 (diff)
parente266f5811403beea13c9cc5399c55db4a34fdd3c (diff)
downloadPSP.git-e282ec268db0d17a1d53f813c5fff9473d25e797.tar.gz
PSP.git-e282ec268db0d17a1d53f813c5fff9473d25e797.tar.xz
PSP.git-e282ec268db0d17a1d53f813c5fff9473d25e797.zip
Merge remote-tracking branch 'refs/remotes/origin/wip/currentState'
Diffstat (limited to 'Project/Element.h')
-rw-r--r--Project/Element.h149
1 files changed, 140 insertions, 9 deletions
diff --git a/Project/Element.h b/Project/Element.h
index eb89640..0502e62 100644
--- a/Project/Element.h
+++ b/Project/Element.h
@@ -1,11 +1,16 @@
#ifndef ELEMENT_H
#define ELEMENT_H
+#include <wx/msgdlg.h>
#include <wx/geometry.h>
#include <wx/cursor.h>
#include <wx/menu.h>
#include <GL/gl.h>
+#include <complex>
+
+#include <wx/log.h>
+
enum PickboxID
{
ID_PB_NONE = 0,
@@ -21,13 +26,78 @@ enum ContextMenuID
{
ID_EDIT_BUS = 0,
ID_EDIT_LINE,
+ ID_EDIT_TRANSFORMER,
+ ID_EDIT_SYNCGENERATOR,
+ ID_EDIT_INDMOTOR,
+ ID_EDIT_SYNCMOTOR,
+ ID_EDIT_LOAD,
+ ID_EDIT_INDUCTOR,
+ ID_EDIT_CAPACITOR,
ID_LINE_ADD_NODE,
ID_LINE_REMOVE_NODE,
-
- ID_ROTATE
+
+ ID_ROTATE_CLOCK,
+ ID_ROTATE_COUNTERCLOCK,
+ ID_DELETE
};
+enum ElectricalUnit
+{
+ UNIT_PU = 0,
+ UNIT_V,
+ UNIT_kV,
+ UNIT_A,
+ UNIT_kA,
+ UNIT_W,
+ UNIT_kW,
+ UNIT_MW,
+ UNIT_VA,
+ UNIT_kVA,
+ UNIT_MVA,
+ UNIT_VAr,
+ UNIT_kVAr,
+ UNIT_MVAr,
+ UNIT_OHM,
+ UNIT_OHM_km,
+ UNIT_S,
+ UNIT_S_km,
+ UNIT_DEGREE,
+ UNIT_RADIAN
+};
+
+enum FaultData
+{
+ FAULT_THREEPHASE = 0,
+ FAULT_2LINE,
+ FAULT_2LINE_GROUND,
+ FAULT_LINE_GROUND,
+ FAULT_LINE_A,
+ FAULT_LINE_B,
+ FAULT_LINE_C
+};
+
+enum SwitchingType
+{
+ SW_INSERT = 0,
+ SW_REMOVE
+};
+
+enum PowerFlowDirection
+{
+ PF_NONE = 0,
+ PF_TO_BUS,
+ PF_TO_ELEMENT,
+ PF_BUS1_TO_BUS2,
+ PF_BUS2_TO_BUS1
+};
+
+struct SwitchingData
+{
+ std::vector<SwitchingType> swType;
+ std::vector<double> swTime;
+};
+
class Element
{
public:
@@ -43,6 +113,7 @@ class Element
void SetAngle(double angle) { this->m_angle = angle; }
void ShowPickbox(bool showPickbox = true) { this->m_showPickbox = showPickbox; }
void SetBorderSize(double borderSize) { this->m_borderSize = borderSize; }
+ void SetOnline(bool online = true);
// Getters
wxRect2DDouble GetRect() const { return m_rect; }
wxPoint2DDouble GetPosition() const { return m_position; }
@@ -52,27 +123,40 @@ class Element
double GetWidth() const { return m_width; }
double GetAngle() const { return m_angle; }
bool IsPickboxShown() const { return m_showPickbox; }
+ bool IsOnline() const { return m_online; }
// Pure-virtuals methods
virtual bool AddParent(Element* parent, wxPoint2DDouble position) = 0;
- virtual void Draw(wxPoint2DDouble translation, double scale) const = 0;
- virtual void Rotate() = 0;
virtual bool Contains(wxPoint2DDouble position) const = 0;
virtual bool Intersects(wxRect2DDouble rect) const = 0;
- virtual bool PickboxContains(wxPoint2DDouble position) = 0;
- virtual void MovePickbox(wxPoint2DDouble position) = 0;
- virtual wxCursor GetBestPickboxCursor() const = 0;
// General methods
+ virtual void Draw(wxPoint2DDouble translation, double scale) const {};
+ virtual void Rotate(bool clockwise = true) {}
virtual bool GetContextMenu(wxMenu& menu) { return false; }
virtual void AddPoint(wxPoint2DDouble point) {}
virtual void StartMove(wxPoint2DDouble position);
virtual void Move(wxPoint2DDouble position);
- virtual void MoveNode(Element* parent, wxPoint2DDouble position){};
- virtual void RotateNode(Element* parent) {}
+ virtual void MoveNode(Element* parent, wxPoint2DDouble position) {}
+ virtual bool NodeContains(wxPoint2DDouble position) { return false; }
+ virtual void UpdateNodes() {}
+ virtual bool SetNodeParent(Element* parent) { return false; }
+ virtual void RemoveParent(Element* parent) {}
+ virtual void RotateNode(Element* parent, bool clockwise = true) {}
virtual wxPoint2DDouble GetSwitchPoint(Element* parent,
wxPoint2DDouble parentPoint,
wxPoint2DDouble secondPoint) const;
+ virtual bool SwitchesContains(wxPoint2DDouble position) const;
+ virtual void UpdateSwitches();
+ virtual void DrawSwitches() const;
+
+ virtual void CalculatePowerFlowPts(std::vector<wxPoint2DDouble> edges);
+ virtual void DrawPowerFlowPts() const;
+
+ virtual bool PickboxContains(wxPoint2DDouble position) { return false; }
+ virtual void MovePickbox(wxPoint2DDouble position) {}
+ virtual wxCursor GetBestPickboxCursor() const { return wxCURSOR_ARROW; }
virtual void ResetPickboxes() { m_activePickboxID = ID_PB_NONE; }
+ virtual void ResetNodes() { m_activeNodeID = 0; }
virtual wxPoint2DDouble WorldToScreen(wxPoint2DDouble translation,
double scale,
double offsetX = 0.0,
@@ -82,9 +166,22 @@ class Element
double scale,
double offsetX = 0.0,
double offsetY = 0.0) const;
+ virtual bool RotatedRectanglesIntersects(wxRect2DDouble rect1,
+ wxRect2DDouble rect2,
+ double angle1,
+ double angle2) const;
+
virtual void DrawCircle(wxPoint2DDouble position, double radius, int numSegments, GLenum mode = GL_LINE_LOOP) const;
+ virtual void DrawArc(wxPoint2DDouble position,
+ double radius,
+ double initAngle,
+ double finalAngle,
+ int numSegments,
+ GLenum mode = GL_LINE_LOOP) const;
virtual void DrawRectangle(wxPoint2DDouble position, double width, double height, GLenum mode = GL_QUADS) const;
virtual void DrawRectangle(wxPoint2DDouble* points, GLenum mode = GL_QUADS) const;
+ virtual void DrawTriangle(std::vector<wxPoint2DDouble> points, GLenum mode = GL_TRIANGLES) const;
+ virtual void DrawPoint(wxPoint2DDouble position, double size) const;
virtual void DrawLine(std::vector<wxPoint2DDouble> points, GLenum mode = GL_LINE_STRIP) const;
virtual void DrawPickbox(wxPoint2DDouble position) const;
virtual wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees = true) const;
@@ -92,6 +189,26 @@ class Element
virtual std::vector<Element*> GetParentList() const { return m_parentList; }
virtual wxPoint2DDouble GetMoveStartPosition() const { return m_moveStartPt; }
virtual wxPoint2DDouble GetMovePosition() const { return m_movePos; }
+
+ virtual void CalculateBoundaries(wxPoint2DDouble& leftUp, wxPoint2DDouble& rightBottom) const;
+
+ virtual void GeneralMenuItens(wxMenu& menu);
+
+ virtual bool ShowForm(wxWindow* parent, Element* element) { return false; }
+
+ bool DoubleFromString(wxWindow* parent, wxString strValue, double& value, wxString errorMsg);
+ bool IntFromString(wxWindow* parent, wxString strValue, int& value, wxString errorMsg);
+
+ //Electrical only methods
+ virtual void SetNominalVoltage(std::vector<double> nominalVoltage, std::vector<ElectricalUnit> nominalVoltageUnit) {}
+ virtual void SetSwitchingData(SwitchingData data) { m_swData = data; }
+ virtual SwitchingData GetSwitchingData() { return m_swData; }
+ virtual void SetPowerFlowDirection(PowerFlowDirection pfDirection) { m_pfDirection = pfDirection; }
+ virtual PowerFlowDirection GetPowerFlowDirection() const { return m_pfDirection; }
+
+ //Static methods
+ static wxString StringFromDouble(double value, int minDecimal = 1);
+
protected:
std::vector<Element*> m_parentList;
@@ -102,15 +219,29 @@ class Element
double m_angle = 0.0;
double m_borderSize = 2.0;
double m_rotationAngle = 45.0;
+ double m_switchSize = 10.0;
+
+ std::vector<wxRect2DDouble> m_switchRect;
+
+ std::vector< std::vector<wxPoint2DDouble> > m_powerFlowArrow;
+ PowerFlowDirection m_pfDirection = PF_NONE;
bool m_selected = false;
bool m_dragging = false;
bool m_showPickbox = false;
int m_activePickboxID = ID_PB_NONE;
+ int m_activeNodeID = 0;
+
+ std::vector<wxPoint2DDouble> m_pointList;
+ std::vector<wxPoint2DDouble> m_movePts;
wxPoint2DDouble m_moveStartPt;
wxPoint2DDouble m_movePos;
+
+ bool m_online = true;
+
+ SwitchingData m_swData;
};
#endif // ELEMENT_H