#ifndef ELEMENT_H #define ELEMENT_H #include #include #include enum PickboxID { ID_PB_NONE = 0, ID_PB_RIGHT, ID_PB_LEFT, ID_PB_RIGHT_BOTTOM, ID_PB_RIGHT_TOP, ID_PB_LEFT_BOTTOM, ID_PB_LEFT_TOP }; class Element { public: Element(); virtual ~Element(); // Setters void SetDragging(bool dragging = true) { this->m_dragging = dragging; } void SetHeight(double height) { this->m_height = height; } void SetPosition(const wxPoint2DDouble position); void SetSelected(bool selected = true) { this->m_selected = selected; } void SetWidth(double width) { this->m_width = width; } 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; } // Getters wxRect2DDouble GetRect() const { return m_rect; } wxPoint2DDouble GetPosition() const { return m_position; } bool IsDragging() const { return m_dragging; } double GetHeight() const { return m_height; } bool IsSelected() const { return m_selected; } double GetWidth() const { return m_width; } double GetAngle() const { return m_angle; } bool IsPickboxShown() const { return m_showPickbox; } // Pure-virtuals methods virtual void Draw(wxPoint2DDouble translation, double scale) const = 0; virtual void Rotate() = 0; virtual bool Contains(wxPoint2DDouble position) const = 0; virtual bool PickboxContains(wxPoint2DDouble position) = 0; virtual void MovePickbox(wxPoint2DDouble position) = 0; virtual wxCursor GetBestPickboxCursor() const = 0; // General methods virtual void StartMove(wxPoint2DDouble position); virtual void Move(wxPoint2DDouble position); void ResetPickboxes() { m_activePickboxID = ID_PB_NONE; } wxPoint2DDouble WorldToScreen(wxPoint2DDouble translation, double scale, double offsetX = 0.0, double offsetY = 0.0) const; void DrawCircle(wxPoint2DDouble position, double radius, int numSegments, GLenum mode = GL_LINE_LOOP) const; void DrawRectangle(wxPoint2DDouble position, double width, double height, GLenum mode = GL_QUADS) const; void DrawRectangle(wxPoint2DDouble* points, GLenum mode = GL_QUADS) const; void DrawPickbox(wxPoint2DDouble position) const; wxPoint2DDouble RotateAtPosition(wxPoint2DDouble pointToRotate, double angle, bool degrees = true) const; protected: wxRect2DDouble m_rect; wxPoint2DDouble m_position; double m_width = 0.0; double m_height = 0.0; double m_angle = 0.0; double m_borderSize = 2.0; bool m_selected = false; bool m_dragging = false; bool m_showPickbox = false; int m_activePickboxID = ID_PB_NONE; wxPoint2DDouble m_moveStartPt; wxPoint2DDouble m_movePos; }; #endif // ELEMENT_H