diff --git a/src/LineTool.cpp b/src/LineTool.cpp new file mode 100644 index 0000000..52dbb0b --- /dev/null +++ b/src/LineTool.cpp @@ -0,0 +1,51 @@ +#include "LineTool.h" +#include "ViewportWidget.h" +#include +#include +#include + +LineTool::LineTool(ViewportWidget* viewport) + : SketchTool(viewport) +{ +} + +void LineTool::activate() +{ + m_isDefiningLine = false; + m_viewport->setProperty("dimensionInput", ""); + m_viewport->setProperty("angleInput", ""); + m_viewport->setProperty("dimensionEditMode", "length"); + m_viewport->setProperty("isChainedLine", false); +} + +void LineTool::deactivate() +{ + m_isDefiningLine = false; + m_viewport->setProperty("dimensionInput", ""); + m_viewport->setProperty("angleInput", ""); +} + +void LineTool::mousePressEvent(QMouseEvent *event) +{ + // To be implemented +} + +void LineTool::mouseMoveEvent(QMouseEvent *event) +{ + // To be implemented +} + +void LineTool::keyPressEvent(QKeyEvent *event) +{ + // To be implemented +} + +void LineTool::paintGL() +{ + // To be implemented +} + +void LineTool::paint2D(QPainter& painter, const QMatrix4x4& modelView, const QMatrix4x4& projection) +{ + // To be implemented +} diff --git a/src/LineTool.h b/src/LineTool.h new file mode 100644 index 0000000..2919fa6 --- /dev/null +++ b/src/LineTool.h @@ -0,0 +1,28 @@ +#ifndef LINETOOL_H +#define LINETOOL_H + +#include "SketchTool.h" +#include + +class LineTool : public SketchTool +{ + Q_OBJECT +public: + explicit LineTool(ViewportWidget* viewport); + + void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; + + void paintGL() override; + void paint2D(QPainter& painter, const QMatrix4x4& modelView, const QMatrix4x4& projection) override; + + void activate() override; + void deactivate() override; + +private: + bool m_isDefiningLine = false; + gp_Pnt m_firstLinePoint; +}; + +#endif // LINETOOL_H diff --git a/src/RectangleTool.cpp b/src/RectangleTool.cpp new file mode 100644 index 0000000..e1a53e2 --- /dev/null +++ b/src/RectangleTool.cpp @@ -0,0 +1,50 @@ +#include "RectangleTool.h" +#include "ViewportWidget.h" +#include +#include +#include + +RectangleTool::RectangleTool(ViewportWidget* viewport) + : SketchTool(viewport) +{ +} + +void RectangleTool::activate() +{ + m_isDefiningRectangle = false; + m_viewport->setProperty("widthInput", ""); + m_viewport->setProperty("heightInput", ""); + m_viewport->setProperty("dimensionEditMode", "height"); +} + +void RectangleTool::deactivate() +{ + m_isDefiningRectangle = false; + m_viewport->setProperty("widthInput", ""); + m_viewport->setProperty("heightInput", ""); +} + +void RectangleTool::mousePressEvent(QMouseEvent *event) +{ + // To be implemented +} + +void RectangleTool::mouseMoveEvent(QMouseEvent *event) +{ + // To be implemented +} + +void RectangleTool::keyPressEvent(QKeyEvent *event) +{ + // To be implemented +} + +void RectangleTool::paintGL() +{ + // To be implemented +} + +void RectangleTool::paint2D(QPainter& painter, const QMatrix4x4& modelView, const QMatrix4x4& projection) +{ + // To be implemented +} diff --git a/src/RectangleTool.h b/src/RectangleTool.h new file mode 100644 index 0000000..b3f229c --- /dev/null +++ b/src/RectangleTool.h @@ -0,0 +1,28 @@ +#ifndef RECTANGLETOOL_H +#define RECTANGLETOOL_H + +#include "SketchTool.h" +#include + +class RectangleTool : public SketchTool +{ + Q_OBJECT +public: + explicit RectangleTool(ViewportWidget* viewport); + + void mousePressEvent(QMouseEvent *event) override; + void mouseMoveEvent(QMouseEvent *event) override; + void keyPressEvent(QKeyEvent *event) override; + + void paintGL() override; + void paint2D(QPainter& painter, const QMatrix4x4& modelView, const QMatrix4x4& projection) override; + + void activate() override; + void deactivate() override; + +private: + bool m_isDefiningRectangle = false; + gp_Pnt m_firstRectanglePoint; +}; + +#endif // RECTANGLETOOL_H diff --git a/src/SketchTool.cpp b/src/SketchTool.cpp new file mode 100644 index 0000000..a12a2df --- /dev/null +++ b/src/SketchTool.cpp @@ -0,0 +1,15 @@ +#include "SketchTool.h" +#include "ViewportWidget.h" + +SketchTool::SketchTool(ViewportWidget* viewport) + : QObject(viewport), m_viewport(viewport) +{ +} + +void SketchTool::activate() +{ +} + +void SketchTool::deactivate() +{ +} diff --git a/src/SketchTool.h b/src/SketchTool.h new file mode 100644 index 0000000..9c8e906 --- /dev/null +++ b/src/SketchTool.h @@ -0,0 +1,34 @@ +#ifndef SKETCHTOOL_H +#define SKETCHTOOL_H + +#include + +class QMouseEvent; +class QKeyEvent; +class ViewportWidget; +class QOpenGLShaderProgram; +class QPainter; +class QMatrix4x4; + +class SketchTool : public QObject +{ + Q_OBJECT +public: + explicit SketchTool(ViewportWidget* viewport); + virtual ~SketchTool() = default; + + virtual void mousePressEvent(QMouseEvent *event) = 0; + virtual void mouseMoveEvent(QMouseEvent *event) = 0; + virtual void keyPressEvent(QKeyEvent *event) = 0; + + virtual void paintGL() = 0; + virtual void paint2D(QPainter& painter, const QMatrix4x4& modelView, const QMatrix4x4& projection) = 0; + + virtual void activate(); + virtual void deactivate(); + +protected: + ViewportWidget* m_viewport; +}; + +#endif // SKETCHTOOL_H diff --git a/src/ViewportWidget.h b/src/ViewportWidget.h index f934f3f..a631f92 100644 --- a/src/ViewportWidget.h +++ b/src/ViewportWidget.h @@ -20,6 +20,7 @@ class Document; class FeatureBrowser; class SketchFeature; class Camera; +class SketchTool; class ViewportWidget : public QOpenGLWidget, protected QOpenGLFunctions { @@ -90,10 +91,8 @@ private: SketchPlane m_highlightedPlane = SketchPlane::NONE; int m_activeTool = 0; - bool m_isDefiningLine = false; - gp_Pnt m_firstLinePoint; - bool m_isDefiningRectangle = false; - gp_Pnt m_firstRectanglePoint; + SketchTool* m_activeSketchTool = nullptr; + QMap m_sketchTools; QPoint m_currentMousePos; bool m_isSnappingOrigin = false; bool m_isSnappingVertex = false;