#pragma once #include "nmObjBase.h" #include "nmDefines.h" #include "nmPlot_global.h" // 数值试井绘图对象(点) class NM_PLOT_EXPORT nmObjPoint : public nmObjBase { Q_OBJECT ZX_DECLARE_DYNAMIC public: nmObjPoint(); nmObjPoint(const QString& sName, \ ZxSubAxisX* pAxisX, \ ZxSubAxisY* pAxisY); ~nmObjPoint(); // 设置初始参数 virtual void init(const QString& sName, \ ZxSubAxisX* pAxisX, \ ZxSubAxisY* pAxisY); // 设置Tools virtual void initTools(); protected: // 设置图元对象的属性标志 virtual void initFlags(); // 辅助信息 virtual void initSubObjs(); virtual void resetOthers(); // 设置显示的标识 void setPointTag(QString s); public: // 击中 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); // 获取中心点 virtual QPointF getCenterPos(); public: // 属性填充内容 virtual void fillPtyPano(IxPtyPano* sheet); // 成果序列化 virtual void onSerialize(ZxSerializer* ser); virtual void onDeserialize(ZxSerializer* ser); // 模版处理(从道理上讲,模版处理与成果序列化机制完全一致) // 但此处放开是为了调用方更灵活的控制 virtual void onLoadTempl(ZxSerializer* ser); virtual void onSaveTempl(ZxSerializer* ser); virtual void paintBack(QPainter* painter, \ const ZxPaintParam& param); // 绘制井点 virtual bool drawWellPos(QPainter* painter, QPointF pt); public: // XY的位置信息 void setValueX(double x); float getValueX(); void setValueY(double y); float getValueY(); // 描述 void setDesc(QString s); QString getDesc(); // 点数据 void setDataByPos(const QPointF& pt, QString sDesc); void resetBounds(); virtual QRectF getBounds4Update(); public: QString m_sDesc; ///描述字符串 QColor m_clrFillUnvalid; //无效时填充颜色 QColor m_clrOuter; //外边界颜色 };