|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include "Item.h"
|
|
|
|
|
|
#include "SpatialIndex.h"
|
|
|
|
|
|
|
|
|
|
|
|
namespace NItem
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
class CItemMeasure
|
|
|
|
|
|
: public CItem
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CItemMeasure(CSigmaDoc* ppDoc);
|
|
|
|
|
|
~CItemMeasure();
|
|
|
|
|
|
|
|
|
|
|
|
void OnLButtonDblClk(UINT nFlags, CPoint point) override;
|
|
|
|
|
|
|
|
|
|
|
|
void OnLButtonDown(CDC* pDC, UINT nFlags, CPoint point, int vk) override;
|
|
|
|
|
|
|
|
|
|
|
|
void OnLButtonUp(CDC* pDC, UINT nFlags, CPoint point, int vk) override;
|
|
|
|
|
|
|
|
|
|
|
|
int OnMouseMove(CDC* pDC, UINT nFlags, CPoint point) override;
|
|
|
|
|
|
|
|
|
|
|
|
void OnMouseMoveStatus(CDC* pDC, UINT nFlags, CPoint point, BYTE*& destBuffer, int& destLen) override;
|
|
|
|
|
|
|
|
|
|
|
|
BOOL OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) override;
|
|
|
|
|
|
|
|
|
|
|
|
BOOL OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) override;
|
|
|
|
|
|
|
|
|
|
|
|
BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) override;
|
|
|
|
|
|
|
|
|
|
|
|
void OnDraw(CXyDC* pDC) override;
|
|
|
|
|
|
|
|
|
|
|
|
void OnDraw(CXyDC* pXyDC, CDC* pDC) override;
|
|
|
|
|
|
|
|
|
|
|
|
void DrawAssistant(CDC* pDC, int mouseX, int mouseY) override;
|
|
|
|
|
|
|
|
|
|
|
|
void OnOK(void) override;
|
|
|
|
|
|
|
|
|
|
|
|
void OnCancel(void) override;
|
|
|
|
|
|
|
|
|
|
|
|
CString GetCurrentInfo() const;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
void EnableSnap();
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* <EFBFBD>ر<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
*/
|
|
|
|
|
|
void DisableSnap();
|
|
|
|
|
|
|
|
|
|
|
|
bool IsSnapEnabled() const;
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
void DrawCross(Gdiplus::Graphics& graphics, Gdiplus::PointF center, int length, const Gdiplus::Pen& pen) const;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><EFBFBD>Ϊ<EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
* \param realPoint <EFBFBD><EFBFBD>ʵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* \return <EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
CPoint GetScreenPoint(const CPoint2D& realPoint) const;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* <EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
* \param point <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* \return <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><EFBFBD><EFBFBD>꣬<EFBFBD><EFBFBD><EFBFBD><EFBFBD> std::nullopt;
|
|
|
|
|
|
*/
|
|
|
|
|
|
std::optional<CPoint2D> GetSnapPoint(const CPoint& point) const;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* <EFBFBD><EFBFBD>ǰ״̬
|
|
|
|
|
|
*/
|
|
|
|
|
|
enum class MeasureState { Idle, SelectingStart, SelectingEnd };
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bool m_isSnapEnabled = true;
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>η<EFBFBD>Χ<EFBFBD><CEA7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ
|
|
|
|
|
|
double m_snapRange = 30.0;
|
|
|
|
|
|
|
|
|
|
|
|
MeasureState m_state = MeasureState::Idle;
|
|
|
|
|
|
CPoint2D m_startPoint;
|
|
|
|
|
|
CPoint2D m_endPoint;
|
|
|
|
|
|
CPoint2D m_prevPoint;
|
|
|
|
|
|
COLORREF m_penColor = RGB(0, 0, 0);
|
|
|
|
|
|
int m_penWidth = 1; // <20>߿<EFBFBD>
|
|
|
|
|
|
std::unique_ptr<CSpatialIndex> m_pSpatialIndex;
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}
|