#pragma once #include "ItemCurve.h" #include "ItemArc.h" #include "ItemSelectElement.h" namespace NItem { class CItemCurveArc : public CItemCurve { public: CItemCurveArc(CSigmaDoc * ppDoc); virtual ~CItemCurveArc(void); protected: CItemArc* m_pArc; public: void OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk) override; int OnMouseMove(CDC* pDC, UINT nFlags, CPoint point) override;//, BYTE*& destBuffer, int& destLen); void OnLButtonUp(CDC* pDC, UINT nFlags, CPoint point, int vk) override; virtual void SetCurveState(int state, CDC * pDC); int loop; BOOL IsArcState(void); }; class CItemCurveSpline : public CItemCurveArc { public: CItemCurveSpline(CSigmaDoc * ppDoc); virtual ~CItemCurveSpline(void); public: void OnDraw(CXyDC* pDC) override; void OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk) override; int OnMouseMove(CDC* pDC, UINT nFlags, CPoint point) override; void OnLButtonUp(CDC *pDc, UINT nFlags, CPoint point, int vk) override; virtual void SetCurveState(int state, CDC * pDC); virtual void AppendPoint(void); void clearSplineData(); BOOL OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) override; void EraseAuxiliarySpline(CDC * pScreenDC); void DrawAssistant(CDC * pDC, int mouseX, int mouseY) override; virtual void AutoClose(void); virtual POSITION NextCurve(void); virtual void Undo(void); virtual void Redo(void); virtual BOOL IsCanUndo(void); virtual BOOL IsCanRedo(void); void DrawSpline(CXyDC* pDC); void DrawSplineTail(CXyDC* pDC); void GetSplineRealPoints(CDC *pDC); void RedrawSplineHead(CXyDC* pDC); void DrawSplineBody(CXyDC* pDC); void GetHeadRealPoints(CXyDC* pDC); void DrawHeadRealPoints(CXyDC * pDC); BOOL IsSplineState(void); void RemoveTail(void); void DrawRealLine(CXyDC * pDC); BOOL IsOnlyPointListTail(void); virtual void OnCancel(void) override; protected: void CopyPreRealPoints(); void CopySplineHeads(int n); void CopySplineTails(int n); BOOL m_bAuxiliarySplineRedraw; CPointList m_spPointList;//全部样条曲线节点序列 private: int m_nSplineNodes; int m_mSmoothStepFactor; CPointList m_spRealPointList;//全部样条曲线的实际线段点序列 CPointList m_spPreRealPointList; CPointList m_spCalcPointList;//增量样条曲线的计算节点列表 CPointList m_spHeadRealPointList;//增量样条曲线的首段实际线段点序列 }; class CItemCurveMerge : public CItemCurveSpline { public: CItemCurveMerge(CSigmaDoc * ppDoc); virtual ~CItemCurveMerge(void); void OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk) override; int OnMouseMove(CDC *pDC, UINT nFlags, CPoint point) override;// , BYTE*& destBuffer, int& destLen); void OnLButtonUp(CDC *pDC, UINT nFlags, CPoint point, int vk) override; void DrawAssistant(CDC * pDC, int mouseX, int mouseY) override; virtual BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); void EndCurve(); void AddCurve(); void AutoClose(void); void ChangeMergeState(); virtual void OnCancel(void) override; virtual void SetCurveState(int state, CDC * pDC) override; protected: void EreaseOldLine(); void DrawLine(dfPoint pt1, dfPoint pt2); void MergeElement(POSITION pos, CPoint2D& dp); CItemSelectElement * m_pItemSelect; CPointList m_ptDisposableList; public: BOOL IsMergeState(void); }; };