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.
nmWATI/Include/iPlot/iPlotCurveT/Objects/ZxObjCurveBase.h

168 lines
4.9 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#pragma once
#include "ZxObjBase.h"
class ZxObjRect;
class I_PLOTCURVE_T_EXPORT ZxObjCurveBase : public ZxObjBase
{
Q_OBJECT
ZX_DECLARE_DYNAMIC
public:
ZxObjCurveBase();
ZxObjCurveBase(const QString& sName,
ZxSubAxisX* pAxisX,
ZxSubAxisY* pAxisY);
~ZxObjCurveBase(void);
virtual void init(const QString& sName,
ZxSubAxisX* pAxisX,
ZxSubAxisY* pAxisY);
// 击中
virtual bool hitTest(const QPointF& pt);
// 具体击中实现的函数,单纯击中,不做选项的改变
// nOption用int是因为Rect类的击中选项不一致
// nOption为负值表示未击中此时返回false
virtual bool _runHitTest(const QPointF& pt, int& nOption, int& nSubIndex);
// 击中后ButtonUp后的处理
// pt1:鼠标Down点pt2鼠标Up点
virtual bool runMove(const QPointF& pt1, const QPointF& pt2);
// 通过设置ZxObjRect配置点的状态
bool changeOrAppendRect(ZxObjRect* p);
void removeRect(ZxObjRect* p);
QVector<ZxObjBase*> getAllRectBounds();
void dealwithRects(ZxObjRect* p, bool bDelOrAppendRect); //ZxObjRect被删除的恢复撤销处理
// 删除
bool removePtsInRects(QVector<ZxObjBase*> vec);
// 删除点
bool delPtsWithinRect(QRectF rtPos);
public slots:
// 刷新点的状态
void slotFreshPtStates();
public:
// 设置数据
virtual void setAllPos(QVector<QPointF> vecPoss, QVector<int>* pVecIndexes = NULL);
virtual void setAllValues(QVector<QPointF> vecValues);
virtual void resetBounds();
// 取得鼠标移动时的tip信息
virtual QString getTipOf(const QPointF& point);
virtual QVector<QPointF> fuzzyAllPos(QVector<QPointF> vec,
double fZoom = 1.f,
int nMax = 20000,
QVector<QPointF>* pVecSelecteds = NULL,
QVector<int>* pVecIndexes = NULL) const;
protected:
// 设置图元对象的属性标志
virtual void initFlags();
public:
virtual bool canMovePoint();
virtual bool canMoveBound();
virtual bool canMoveWhole();
public:
virtual void paintBack(QPainter* painter, const ZxPaintParam& param);
virtual void drawCurveLine(QPainter* painter, QVector<QPointF>& vec);
virtual void drawPoint(QPainter* painter, QPointF arrPoints[], int nCount, ZxDot& dot);
virtual void onSerialize(ZxSerializer* ser);
virtual void onDeserialize(ZxSerializer* ser);
virtual void onLoadTempl(ZxSerializer* ser);
virtual void onSaveTempl(ZxSerializer* ser);
virtual void fillPtyPano(IxPtyPano* sheet);
virtual void paintWhenMoving(QPainter* painter, \
const ZxPaintParam& param, \
QPointF& ptOld, \
QPointF& ptNew, \
ObjHitOption op);
public:
// 画笔
virtual void setColor(QColor clr);
// 曲线
bool getLineVisible(void) const;
void setLineVisible(bool bVisible = true);
bool getPointVisible(void) const;
void setPointVisible(bool bVisible = true);
// 统一设置,为了速度
//void setCurvePty(QPen o1, ZxDot o2);
void setCurvePty(QPen o1, ZxDot o2, bool bLineVisible, bool bPointVisible);
// 点数
int getPtCount();
public:
// 点状态
void changPointState(int nIndex,
PointState psNew);
void startNewRectSelection();
PointState getPointState(int nIndex);
bool hasPointOfState(PointState ps);
bool reversePointOfState(PointState psOld, PointState psNew);
void setPtStates(const PointState pPtStates[],
int cnt);
PointState* getPtStates();
// 获取本曲线ps状态下的所有的点
QVector<QPointF> getPointValuesOfState(PointState ps);
/// @brief 这是拟合后,对曲线的状态进行复原
/// @param bSelectConsidered:选择状态的点是否参与复原
/// @param bExcludeConsidered:剔除状态的点是否参与复原
/// @param bEraseConsidered:删除状态的点是否参与复原
void restorePtStates(bool bSelectConsidered, \
bool bExcludeConsidered = false, \
bool bEraseConsidered = false);
signals:
void sigNameChanged(QString sName);
void sigColorChanged(QColor clr);
// 点模式状态发生改变
void sigPointStateChanged(int nIndex, PointState psOld, PointState psNew);
void sigPointStatesRestored();
// 在开始一个新的框选之前触发
void sigNewRectSelection();
// 可以画一些辅助的信息
void sigGetBrotherObj(ZxObjBase*&);
protected:
bool m_bLineVisible;
bool m_bPointVisible;//added 20210823
// 点状态
QVector<PointState> m_vecPointStates;
// 临时变量,只为点的状态
QVector<ZxObjRect*> m_vecBands;
};