|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include <memory>
|
|
|
|
|
|
|
|
|
|
|
|
#include "HandleDrawer.h"
|
|
|
|
|
|
#include "itemcurve.h"
|
|
|
|
|
|
|
|
|
|
|
|
namespace NItem {
|
|
|
|
|
|
#define DRAG_NODE_DEFAULT 0 // ֱ<><D6B1><EFBFBD>ƶ<EFBFBD><C6B6><EFBFBD>ǰ<EFBFBD>ڵ<EFBFBD>
|
|
|
|
|
|
#define DRAG_NODE_LINE 1 // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
|
|
|
|
|
|
#define DRAG_NODE_COS 2 // <20><><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
|
|
|
|
|
|
#define DRAG_NODE_SPLINE 3 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƶ<EFBFBD><C6B6>ڵ<EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
#define DRAG_LINE_COLOR RGB(0, 153, 255)
|
|
|
|
|
|
// #define TRACKER_SOLID 1
|
|
|
|
|
|
// #define TRACKER_RECT 2
|
|
|
|
|
|
// #define TRACKER_CIRCLE 4
|
|
|
|
|
|
// #define TRACKER_NO_EDIT TRACKER_SOLID | TRACKER_CIRCLE
|
|
|
|
|
|
|
|
|
|
|
|
class CurveEditorBase : public CItemCurve {
|
|
|
|
|
|
public:
|
|
|
|
|
|
CurveEditorBase(CSigmaDoc *pDoc);
|
|
|
|
|
|
virtual ~CurveEditorBase(void);
|
|
|
|
|
|
|
|
|
|
|
|
void OnDraw(CXyDC *pDC) override final;
|
|
|
|
|
|
void OnLButtonDblClk(UINT nFlags, CPoint point) override final;
|
|
|
|
|
|
void OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point,
|
|
|
|
|
|
int vk) override final;
|
|
|
|
|
|
int OnMouseMove(CDC *pDC, UINT nFlags, CPoint point) override final;
|
|
|
|
|
|
void OnLButtonUp(CDC *pDC, UINT nFlags, CPoint point, int vk) override final;
|
|
|
|
|
|
BOOL OnSetCursor(CWnd *pWnd, UINT nHitTest, UINT message) override final;
|
|
|
|
|
|
BOOL OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) override final;
|
|
|
|
|
|
BOOL OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) override final;
|
|
|
|
|
|
int GetSubMenu() override final;
|
|
|
|
|
|
void SetPos(POSITION pos) override final;
|
|
|
|
|
|
void Clear(void);
|
|
|
|
|
|
|
|
|
|
|
|
void Draw(CDC *pDC);
|
|
|
|
|
|
void DrawAssistant(CDC *pDC, int mouseX, int mouseY) override;
|
|
|
|
|
|
int GetNumberOfNode();
|
|
|
|
|
|
void EreaseHandles(CDC *pDC);
|
|
|
|
|
|
|
|
|
|
|
|
void EndEdit(void);
|
|
|
|
|
|
void CancelAll(void);
|
|
|
|
|
|
BOOL IsCanCancelAll(void);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
int HitTestHandle(CPoint point);
|
|
|
|
|
|
void DeleteHandle(int nIndex);
|
|
|
|
|
|
int AddHandle(CPoint point);
|
|
|
|
|
|
BOOL IsCanAddHandle(CPoint point, double *pl0 = nullptr);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>麯<EFBFBD><E9BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>дΪ<D0B4><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
virtual CCurveEx *GetControlCurve(void);
|
|
|
|
|
|
void GetXY(CCurveEx *pValue, int nIndex, dfPoint &point);
|
|
|
|
|
|
|
|
|
|
|
|
void AttachProcess(CPointList &oldPoints, CPointList &newPoints);
|
|
|
|
|
|
void DrawMoveLine(void);
|
|
|
|
|
|
void GetMarkCurve(void);
|
|
|
|
|
|
CPoint2D GetCDown() const;
|
|
|
|
|
|
CPoint2D GetCLast() const;
|
|
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
|
// Ĭ<>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD>/<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӱ<EFBFBD><D3B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
virtual void OnDrawDragPreview() = 0;
|
|
|
|
|
|
|
|
|
|
|
|
virtual void OnCalculateDragEffect(CPointList *pList) = 0;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>SetPos<6F><73><EFBFBD><EFBFBD><EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>m_pMarkCurve
|
|
|
|
|
|
virtual void OnModeInitialize() {}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>OnMouseMove<76>е<EFBFBD><D0B5><EFBFBD>
|
|
|
|
|
|
virtual void OnDragMove(int nIndex, CPoint2D pt) {}
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ȡ<EFBFBD><C8A1>ǰƫ<C7B0><C6AB>ģʽ<C4A3><CABD>Linear/Cosineģʽʹ<CABD>ã<EFBFBD>
|
|
|
|
|
|
int GetOffsetMode(void);
|
|
|
|
|
|
|
|
|
|
|
|
// <20>麯<EFBFBD><E9BAAF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>д
|
|
|
|
|
|
virtual int AddHandle(double l0);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD>
|
|
|
|
|
|
int AddHandle(CCurveEx *pValue, dfPoint add);
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>λ<EFBFBD>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>꣩
|
|
|
|
|
|
CPoint2D c_down, c_last;
|
|
|
|
|
|
|
|
|
|
|
|
// <20>϶<EFBFBD><CFB6><EFBFBD>־
|
|
|
|
|
|
bool m_bLButtonDownWhenMouseMove;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD>ߣ<EFBFBD><DFA3><EFBFBD><EFBFBD>ڳ<EFBFBD><DAB3><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::unique_ptr<COne> m_pBakOne;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::unique_ptr<HandleDrawer> m_handleDrawer;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>갴<EFBFBD>µ㣨<C2B5><E3A3A8>Ļ<EFBFBD><C4BB><EFBFBD>꣩
|
|
|
|
|
|
CPoint m_nLButtonDownPoint;
|
|
|
|
|
|
|
|
|
|
|
|
// <20>µ<EFBFBD><C2B5>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԥ<EFBFBD><D4A4><EFBFBD><EFBFBD>
|
|
|
|
|
|
CPointList NewPointList;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><>ʱ<EFBFBD><CAB1><EFBFBD>б<EFBFBD>
|
|
|
|
|
|
CPointList PointList;
|
|
|
|
|
|
|
|
|
|
|
|
// <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
|
DWORD m_nHandleDrawMode;
|
|
|
|
|
|
|
|
|
|
|
|
int m_nModeX;
|
|
|
|
|
|
int m_nModeY; // <20><><EFBFBD><EFBFBD>ģʽ
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
void DrawHandle(CXyDC *pDC, CCurveEx *pCurve);
|
|
|
|
|
|
void DrawHandlesByCDC(CDC *pDC, CCurveEx *pCurve);
|
|
|
|
|
|
void DrawSelectHandle(int nHandle);
|
|
|
|
|
|
CRect GetRangeWidthIndex(int nIndex);
|
|
|
|
|
|
CRect GetFirstNodeHandleRectFocus(CPoint point);
|
|
|
|
|
|
void SetDrawMode(int nModeX, int nModeY);
|
|
|
|
|
|
int HitTestHandle(CCurveEx *pValue, CPoint point);
|
|
|
|
|
|
|
|
|
|
|
|
bool IsDragging(int nFlags) const;
|
|
|
|
|
|
int HandleMouseDrag(CXyDC *pDC, CPoint point);
|
|
|
|
|
|
int HandleMouseHover(CDC *dc, CPoint point);
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
}; // namespace NItem
|