You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.3 KiB
C

1 month ago
#pragma once
#include "itemcurve.h"
#include ".\ActionItem.h"
class HandleDrawer;
namespace NItem
{
#define DRAG_NODE_DEFAULT 0 //ֱ<><D6B1><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>ǰ<EFBFBD>ڵ<EFBFBD>
#define DRAG_NODE_LINE 1 //<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
#define DRAG_NODE_COS 2 //<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
#define DRAG_NODE_SPLINE 3 //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
#define DRAG_LINE_COLOR RGB(0,153,255)
class CItemCurveEdit : public CItemCurve
{
public:
CItemCurveEdit(CSigmaDoc* ppDoc);
virtual ~CItemCurveEdit(void);
void OnDraw(CXyDC* pDC) override;
void OnLButtonDblClk(UINT nFlags, CPoint point) 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;
BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message) override;
BOOL OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) override;
BOOL OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) override;
int GetSubMenu() override;
void SetPos(POSITION pos) override;
virtual void GetXY(CCurveEx* pValue, int nIndex, dfPoint& point);
virtual void Clear(void);
virtual void SetModifiedFlag(BOOL bModified);
virtual void OnDragPointEnding(CPointList* pList);
virtual void OnDragPointEnd(int nIndex);
virtual void OnDragPointMove(int nIndex, CPoint2D pt);
virtual void AttachProcess(CPointList& oldPoints, CPointList& newPoints); //<2F>󶨴<EFBFBD><F3B6A8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void DrawMoveLine(void);
void Draw(CDC* pDC);
void DrawAssistant(CDC* pDC, int mouseX, int mouseY) override;
int GetNumberOfNode();
void EreaseHandles(CDC* pDC);
protected:
CPoint2D c_down, c_last;
DWORD m_nHandleDrawMode;
COne* m_pBakOne; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><>˱༭ʱȡ<CAB1><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӡ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CPoint m_nMouseMovePoint; //<2F><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>
CPoint m_nLButtonDownPoint;
int m_nModeX, m_nModeY; //Ϊ<>˱༭<CBB1>ٶ<EFBFBD><D9B6><EFBFBD>
bool m_bLButtonDwonWhenMoueseMove;
int typeIndex; //<2F><><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>
COLORREF color = RGB(0, 0, 0); //<2F><>ɫ
double width;
CActionItem* m_pAttachAction;
CPointList NewPointList;
int m_nBeginIndex, m_nEndIndex;
//for spline mode
CCurveEx* m_pMarkCurve; //<2F>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
HandleDrawer* m_handleDrawer;
protected:
void DrawOrEraseSelectHandleForMouseMove(CPoint point);
double GetPointOffset(double offset, int nMode);
void GetDragPoint(CPoint2D& dp, CPointList& NewPointList, int& begin, int& end);
void DrawMoveLine(CPointList& NewPointList, BOOL bDrawNode);
void DrawSelectHandle(int nHandle);
CRect GetRangeWidthIndex(int nIndex);
void DrawHandle(CXyDC* pDC, CCurveEx* pCurve);
void DrawHandle(CXyDC* pDC, double x0, double y0);
void DrawHandlesByCDC(CDC* pDC, CCurveEx* pCurve);
void GetDragSplinePoint(CPoint2D& dp, CPointList& NewPointList, int& begin, int& end);
public:
void GetMarkCurve(void);
int HitTestHandle(CPoint point);
int HitTestHandle(CCurveEx* pValue, CPoint point);
void DeleteHandle(int nIndex);
BOOL InsertHandleWithPointDistance(double x, double y);
int AddHandle(double l0);
int AddHandle(CCurveEx* pValue, dfPoint add);
int AddHandle(CPoint point);
void EndEdit(void);
BOOL IsCanAddHandle(CPoint point, double* pl0 = nullptr);
void CancelAll(void);
BOOL IsCanCancelAll(void);
CRect GetFirstNodeHandleRectFocus(CPoint point);//<2F><>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void SetDrawMode(int nModeX, int nModeY);
int GetOffsetMode(void);
CCurveEx* GetCurCurve(void);
};
};