#pragma once #ifndef RULERTOOL_H #define RULERTOOL_H #include "tools/tool.h" #include "tproperty.h" #include "tools/tooloptions.h" #include //---------------------------------------------------------------------------------------------- class RulerTool final : public TTool { Q_DECLARE_TR_FUNCTIONS(RulerTool) enum DragMode { MakeNewRuler = 0, MoveFirstPos, MoveSecondPos, MoveRuler }; TPointD m_firstPos, m_secondPos; TPointD m_mousePos; DragMode m_dragMode; bool m_justClicked; std::vector m_toolOptionsBox; public: RulerTool(); void setToolOptionsBox(RulerToolOptionsBox *toolOptionsBox); ToolType getToolType() const override { return TTool::GenericTool; } void onImageChanged() override; void draw() override; void leftButtonDown(const TPointD &pos, const TMouseEvent &e) override; void leftButtonDrag(const TPointD &pos, const TMouseEvent &e) override; void leftButtonUp(const TPointD &pos, const TMouseEvent &) override; void mouseMove(const TPointD &pos, const TMouseEvent &e) override; void onActivate() override; int getCursorId() const override; void updateToolOption(); /*--- 現在のマウス位置がRulerに十分近ければTrue ---*/ bool isNearRuler(); private: /*--- 基準点に対し、マウス位置を0,45,90度にフィットさせた位置を返す ---*/ TPointD getHVCoordinatedPos(TPointD p, TPointD centerPos); }; #endif