|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//<2F>ļ<EFBFBD>: CItem<65><6D><EFBFBD><EFBFBD>չ
|
|
|
|
|
|
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
|
|
|
|
|
|
// <09><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>Ĺ<EFBFBD><C4B9><EFBFBD>
|
|
|
|
|
|
//
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2006-12-07
|
|
|
|
|
|
//
|
|
|
|
|
|
//
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "item.h"
|
|
|
|
|
|
#include "SpatialIndex.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace NItem
|
|
|
|
|
|
{
|
|
|
|
|
|
#define PEN_COLOR RGB(255,0,0)
|
|
|
|
|
|
|
|
|
|
|
|
#define CURVE_STATE_LINE 0
|
|
|
|
|
|
#define CURVE_STATE_ARC 1
|
|
|
|
|
|
#define CURVE_STATE_ANGLE 2
|
|
|
|
|
|
#define CURVE_STATE_SPLINE 3
|
|
|
|
|
|
#define CURVE_STATE_MERGE 4 //<2F>ϲ<EFBFBD><CFB2><EFBFBD><EFBFBD>깦<EFBFBD><EAB9A6>
|
|
|
|
|
|
#define CURVE_STATE_DRAWING 5
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CItemCurve :
|
|
|
|
|
|
public CItem
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
CItemCurve(CSigmaDoc * ppDoc);
|
|
|
|
|
|
virtual ~CItemCurve(void);
|
|
|
|
|
|
|
|
|
|
|
|
BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) override;
|
|
|
|
|
|
void OnLButtonDblClk(UINT nFlags, CPoint point) override;
|
|
|
|
|
|
void OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk) override;
|
|
|
|
|
|
void RemoveAssistantLineTailPoint();
|
|
|
|
|
|
int OnMouseMove(CDC* pDC, UINT nFlags, CPoint point) override;
|
|
|
|
|
|
void DrawAssistant(CDC * pScreenDC, int mouseX, int mouseY) override;//ͼ<><CDBC><EFBFBD><EFBFBD>Ļ<EFBFBD>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><D8BB><EFBFBD>ʱ<EFBFBD><CAB1>
|
|
|
|
|
|
void OnLButtonUp(CDC* pDC, UINT nFlags, CPoint point, int vk) override;
|
|
|
|
|
|
BOOL OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) override;
|
|
|
|
|
|
BOOL OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) override;
|
|
|
|
|
|
virtual void OnDraw(CXyDC* pXyDC, CDC* pDC) override;
|
|
|
|
|
|
int GetSubMenu() override;
|
|
|
|
|
|
virtual void SetCurveState(int state, CDC * pDC);
|
|
|
|
|
|
void RestoreCurveState(void);
|
|
|
|
|
|
|
|
|
|
|
|
dfPoint GetRealPoint(CPointList& pl, UINT nFlags, CPoint point);
|
|
|
|
|
|
static int PopupNameDialog(CXy* pxy, POSITION pos);
|
|
|
|
|
|
void Reset(void);
|
|
|
|
|
|
virtual void OnCancel(void) override;
|
|
|
|
|
|
|
|
|
|
|
|
bool GetAngleAndDistance(double &angle, double &distance) const;
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
class REDO_ITEM
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
REDO_ITEM(void)
|
|
|
|
|
|
{
|
|
|
|
|
|
num=1;
|
|
|
|
|
|
bHead=FALSE;
|
|
|
|
|
|
pos=NULL;
|
|
|
|
|
|
};
|
|
|
|
|
|
dfPoint point;
|
|
|
|
|
|
BOOL bHead; //FALSEΪ<45><CEAA>βRedo,TRUEΪ<45><CEAA>ʼRedo
|
|
|
|
|
|
int num; //Redo<64>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
POSITION pos; //PointList<73>е<EFBFBD>λ<EFBFBD>ã<EFBFBD>NULL<4C><4C>ʾɾ<CABE><C9BE><EFBFBD>㣬<EFBFBD><E3A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD>ӵ<EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
CList<REDO_ITEM,REDO_ITEM> RedoList,UndoList;
|
|
|
|
|
|
CPen m_pen;
|
|
|
|
|
|
BOOL m_bStretchStart;
|
|
|
|
|
|
dfPoint CurPoint;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void GetAnglePoint(dfPoint &ddp, double angle);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
void storeAngleAndDistance(dfPoint& point1, dfPoint& point2);
|
|
|
|
|
|
void clearAngleAndDistance();
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0><EFBFBD>ߵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ǰһ<C7B0><D2BB><EFBFBD><EFBFBD><EFBFBD>ĽǶ<C4BD>
|
|
|
|
|
|
double m_angle = std::numeric_limits<double>::quiet_NaN();
|
|
|
|
|
|
// <20><>¼<EFBFBD><C2BC>ǰ<EFBFBD><C7B0><EFBFBD>ߵ<EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>ǰһ<C7B0><D2BB><EFBFBD><EFBFBD><EFBFBD>ľ<EFBFBD><C4BE><EFBFBD>
|
|
|
|
|
|
double m_distance = std::numeric_limits<double>::quiet_NaN();
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
int m_oldLineState;
|
|
|
|
|
|
int m_AddLineState;
|
|
|
|
|
|
CPointList PointList;
|
|
|
|
|
|
dfPoint m_dpLastMousePos;
|
|
|
|
|
|
BOOL m_bContinuePen;
|
|
|
|
|
|
BOOL m_bAuxiliaryCurveRedraw;//ȫͼ<C8AB>ػ棬<D8BB>ػ<EFBFBD><D8BB><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƥ<EFBFBD><C6A4><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
virtual void AutoClose(void);
|
|
|
|
|
|
virtual void AddPoint(dfPoint point);
|
|
|
|
|
|
virtual POSITION AddPoint(dfPoint point, BOOL bHead);
|
|
|
|
|
|
virtual int RemoveAt(POSITION pos);
|
|
|
|
|
|
POSITION InsertPointWithPointDistance(double x, double y);
|
|
|
|
|
|
void AddPointFromCoordinate(double x, double y);
|
|
|
|
|
|
void Draw(CXyDC* pDC, CPointList& pl, COLORREF color);
|
|
|
|
|
|
void DrawAssistantCurve();
|
|
|
|
|
|
void DrawAssistantLineLastSegment();
|
|
|
|
|
|
void RemoveAssistantLineFirstPoint();
|
|
|
|
|
|
void DrawRubberLine();
|
|
|
|
|
|
void EraseRubberLine();
|
|
|
|
|
|
void EraseAuxiliaryLines(CDC * pScreenDC);
|
|
|
|
|
|
void EraseScreenLines();
|
|
|
|
|
|
void RedrawScreenLines();
|
|
|
|
|
|
virtual POSITION NextCurve(void);
|
|
|
|
|
|
virtual void Undo(void);
|
|
|
|
|
|
virtual void Redo(void);
|
|
|
|
|
|
virtual BOOL IsCanUndo(void);
|
|
|
|
|
|
virtual BOOL IsCanRedo(void);
|
|
|
|
|
|
void ClearRedoList(void);
|
|
|
|
|
|
BOOL IsLineState(void);
|
|
|
|
|
|
COne* CItemCurve::CreateOne();
|
|
|
|
|
|
|
|
|
|
|
|
double m_isSnapEnabled = true;
|
|
|
|
|
|
double m_snapRange = 20.0;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD>ܹ<EFBFBD><DCB9>ӳٹ<D3B3><D9B9><EFBFBD> CSpatialIndex<65><78><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ŀǰ<C4BF><C7B0>Ȼ<EFBFBD>ǹ<EFBFBD><C7B9>캯<EFBFBD><ECBAAF><EFBFBD><EFBFBD><EFBFBD>湹<EFBFBD><E6B9B9><EFBFBD><EFBFBD>
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> CXy <20><>ͳһ<CDB3><D2BB><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>Ҫ<EFBFBD><D2AA>
|
|
|
|
|
|
std::unique_ptr<CSpatialIndex> m_pSpatialIndex;
|
|
|
|
|
|
//void OnMouseMove(UINT nFlags, CPoint point);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
};
|