|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#include "ZxPolicy.h"
|
|
|
|
|
class IxGridAlign;
|
|
|
|
|
|
|
|
|
|
/// 策略:图件控制点
|
|
|
|
|
/// 通常是在图件激活时, 显示一些控制点和辅助线, 拖动控制点可调节图件形状.
|
|
|
|
|
class I_PLOTBASE_EXPORT ZxHandlePolicy : public ZxPolicy
|
|
|
|
|
{
|
|
|
|
|
public:
|
|
|
|
|
ZxHandlePolicy();
|
|
|
|
|
|
|
|
|
|
/// 获取指定位置的控制点id.
|
|
|
|
|
/// 即鼠标为于pt处, 调用这个函数可判断鼠标下面是哪个控制点.
|
|
|
|
|
/// @param pt 指定位置.
|
|
|
|
|
/// @param fHandleSize 控制点的参考尺寸, 随着视图的缩放变化.
|
|
|
|
|
/// @return 控制点id, 0表示pt不在控制点上
|
|
|
|
|
virtual int getHandleId(const QPointF& pt, float fHandleSize);
|
|
|
|
|
|
|
|
|
|
/// 开始移动控制点
|
|
|
|
|
virtual void onBeginMove(int handle, const QPointF& pt);
|
|
|
|
|
|
|
|
|
|
/// 控制点移动
|
|
|
|
|
virtual void onMove(int handle, const QPointF& pt);
|
|
|
|
|
|
|
|
|
|
/// 停止移动控制点
|
|
|
|
|
virtual void onEndMove(int handle, const QPointF& pt);
|
|
|
|
|
|
|
|
|
|
/// 左键在控制点处按下
|
|
|
|
|
virtual void onLeftDown(int handle, const QPointF& pt);
|
|
|
|
|
|
|
|
|
|
// 左键在控制点处抬起
|
|
|
|
|
virtual void onLeftUp(int handle, const QPointF& pt);
|
|
|
|
|
|
|
|
|
|
/// 左键单击控制点
|
|
|
|
|
virtual void onLeftClick(int handle, const QPointF& pt);
|
|
|
|
|
|
|
|
|
|
/// 左键双击控制点
|
|
|
|
|
virtual void onLeftDoubleClick(int handle, const QPointF& pt);
|
|
|
|
|
|
|
|
|
|
/// 获取控制点的光标形状
|
|
|
|
|
virtual QCursor getCursor(int handle);
|
|
|
|
|
|
|
|
|
|
virtual void onPaint(QPainter* painter, const ZxPaintParam& param);
|
|
|
|
|
|
|
|
|
|
/// 刷新编辑区域, 包括整个图件的区域、控制点和辅助线
|
|
|
|
|
virtual void update();
|
|
|
|
|
|
|
|
|
|
/// 返回Policy的边框
|
|
|
|
|
virtual QRectF getBounds() const;
|
|
|
|
|
|
|
|
|
|
QPointF calcSnapPos(const QPointF& pt) const;
|
|
|
|
|
|
|
|
|
|
protected:
|
|
|
|
|
// virtual void onAddToEdit();
|
|
|
|
|
|
|
|
|
|
// virtual void onRemoveFromEdit();
|
|
|
|
|
|
|
|
|
|
friend class ZxEdit;
|
|
|
|
|
|
|
|
|
|
int m_nActiveHandle;
|
|
|
|
|
|
|
|
|
|
IxGridAlign* getSnapGrid() const;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|