#ifndef TRACKINCURVE_H #define TRACKINCURVE_H #pragma once #include "TrackCurveBase.h" #include "Data/DataObj_Curve.h" class CWellPole; class CTrackCurve; //class CTrackInCurveCross; //class CTrackInCurveSegment; //多条移动曲线对象(用来保存移动曲线对象) //typedef TObjectListCCurveSegmentList; //typedef CArray DOUBLEARR; class AFX_EXT_CLASS CTrackCurve : public CTrackCurveBase { public: CTrackCurve(); virtual ~CTrackCurve(); CTrackCurve(const CRect8& position); CLONE_WELLOBJECT(CTrackCurve) virtual void operator=(CTrackCurve& object); public: virtual CWellDataObj* GetDataObj() { return &m_dataObj; } virtual void SetDataObj(CWellDataObj* pData, BOOL bCopy=TRUE); virtual void GetDataValue(double& dmin, double& dmax); virtual void Serialize(CArchive& ar, const short &ver); //设置曲线对象 virtual void CalculateSize(CPoint2D point); virtual void CurveToNewPos(); //画左右刻度 virtual void DrawTitleLeftAndRightContent(CXyDC* pDC, CString left, CString right, GDFLOGFONTEXT logfont,CRect8 rect); //画曲线 virtual void DrawCurveLine(CXyDC* pDC,CCurveEx& curve,GDFLOGPENEXT logpen); virtual BOOL ReadCurveData(BOOL bInit=TRUE); virtual void ComputePoints(); virtual void ComputePoints(CRect8 positon); //计算斜井曲线上的所有点数组 virtual void ComputePointsInclined(); //根据深度值获得曲线值 virtual BOOL GetCurveValue(double dDepth, double& dValue, int& nBegin); virtual double GetCurveValue(int index); virtual double GetCurveDepth(int index); //////从工区导入数据时创建道内子对象 void BuidChildObject(vector &fields, StringVectorSet &datas, BOOL bInit=FALSE); /////获取道内对象的具体内容 virtual void GetChildDatas(StringVectorSet &dataContent, BOOL bHaveWellName); void BuidChildObject(double *pDepth,double *pData,int datanum,BOOL bInit); virtual void ClearCurveData(); public: //读pcg格式的数据 virtual int ReadPCG_Data(CFile &fr,const short& ver); //读取pcg 多井剖面对比中曲线CurveStyle virtual int ReadPCG_SelfSection(CFile &fr,CXmlParse& xp,const short& ver); //写pcg格式的道内数据 virtual void WritePCG_Data(CFile &fw,int nBaseTabNum); void CaculateStartAndEnd(CWellPole *pWellObj); public: CWellDataObj_Curve m_dataObj; // 曲线原始数据 int m_nStatid; //反卷状态标志,statid=0,表示初始状态,statid=1,表示正常状态,statid=2表示反卷状态或截断 ////从工区读取数据或者将数据导入道工区时使用 CString m_strOperationNum; //施工号 CString m_strVersionNum; //版本号 //TObjectList m_CurveCrossList;//与本曲线关联的交会图交互对象 virtual int ReadPCG_Data(CKXmlParse& xp, const short& ver); //读取pcg 多井剖面对比中曲线CurveStyle virtual int ReadPCG_SelfSection( CKXmlParse& xp, const short& ver); virtual void GetChildDatas(CString& jsonStr); virtual BOOL SetChildDatas(CString& jsonStr); }; // //class AFX_EXT_CLASS CTrackInCurveSegment : public CDrawTopEndObj //{ //protected: // //DECLARE_SERIAL(CTrackInCurveSegment); // //public: // CTrackInCurveSegment(); // ~CTrackInCurveSegment(); // CTrackInCurveSegment(const CRect8& position); // //public: // CTrackCurve* m_pCurve; // 曲线指针 // //public: // //对比所选曲线和标准特征曲线 // double Curve_ContrastCurve(); // //public: // virtual void DrawCurveSegment(CXyDC* pDC); // virtual void Draw(CXyDC* pDC); // virtual void Serialize(CArchive& ar, const short &ver); //}; // //class AFX_EXT_CLASS CTrackInCurveSegmentContainer : public CDrawTopEndObj //{ //protected: // //DECLARE_SERIAL(CTrackInCurveSegmentContainer); // //public: // CTrackInCurveSegmentContainer(); // ~CTrackInCurveSegmentContainer(); // CTrackInCurveSegmentContainer(const CRect8& position); // // CCurveSegmentList m_CurveSegmentList; // 曲线段链表 // //public: // //设置曲线对象 // virtual void CalculateSize(CPoint2D point); // //// Implementation //public: // virtual void MoveTo(CRect8& position); // virtual void Serialize(CArchive& ar, const short &ver); // virtual CPoint2D GetHandle(int nHandle); // virtual int GetHandleCount(); // virtual void MoveHandleTo(int nHandle, CPoint2D point); // virtual BOOL Intersects(const CRect8& rect, double dHandleSize); // virtual void Draw(CXyDC* pDC); //}; // ///*交会图的通知函数接口,如果想接收交会图的信息,就可以继承这个接口,并实现其函数。 //*/ //class CCurveCrossInterface //{ //public: // enum NotifyCode // { // CurveAllName, //通知对方确定了曲线名称的参数 // ChangeSelDataArea ,//交会图的圈点区域发生变化 // SelectCrossPic, //通知对方选择了新的交会图 // DeleteCrossPic, //本交会图已经退出了 // ChangeSelDataColor //交会图的圈点区域颜色变化 // }; // // virtual void CrossNotify(BYTE *pDataBuf, int BufSize) = 0; //}; // ////CTrackInCurveCross是曲线道内的对象,关联一个相关的交会图对象,并与交会图实现互动 //class AFX_EXT_CLASS CTrackInCurveCross: public CDrawObj , public CCurveCrossInterface //{ // //DECLARE_SERIAL(CTrackInCurveCross); // //public: // CTrackInCurveCross(void); // ~CTrackInCurveCross(void); // CTrackInCurveCross(const CRect8& position); // //public: // BOOL m_MoveDepId; //移动的深度段Id // int m_iShowMode ; //按照曲线道显示1=曲线道,2=井段 // // DOUBLEARR m_fsdepArr; //井段起始深度 // DOUBLEARR m_fedepArr; //井段结束深度 // CArraym_RectArr; // int m_PosInTrackNum; //当前交会图关联的曲线分布在几个道中,最大是3 // int m_PosTrackIdArr[3]; // // CString m_curve_name[3]; // CTrackCurve* m_pCurve[3]; // // //CrossplotSpace::CCPCrossPic *m_pCrossPic; // CDialog* m_pDialog; // BOOL m_bActive; //是否是当前活动的交会图对象 // // int m_SelId ; //当前选中的深度段信息 // // static LPVOID c_pSCurPtr; //在关联的交会图中,当前选中的图所对应的交互对象, // // CArray m_SeldepthArr; // //public: // void Initialize(); // void ResetAlldepth(DOUBLEARR & fsdepArr, DOUBLEARR &fedepArr); // void InitObjFromParam(CStringArray & curveName, CWellObj *pWellObj, DOUBLEARR & fsdepArr, DOUBLEARR &fedepArr); // // void ChangeCrossdepth(); //井段的个数发生变化,修改交会图的深度 // // virtual void CrossNotify(BYTE *pDataBuf, int BufSize); //接收到交会图来的通知信息. // // virtual CPoint2D GetHandle(int nHandle); // virtual int GetHandleCount(); // virtual void MoveTo(CRect8& position); // virtual void MoveHandleTo(int nHandle, CPoint2D point); // virtual BOOL Intersects(const CRect8& rect, double dHandleSize); // virtual void Draw(CXyDC* pDC); // //virtual BOOL RemoveSelection(); // virtual void Serialize(CArchive& ar, const short &ver); // // // //给一个交会图添加深度,返回深度的Id,pTrack是所在道,当初始时,使用它 // int AddWellSecPos(const CRect8 & position, CTrackCurve* pTrack = NULL); // // void MoveWithCurve(CTrackCurve *pCurve);//曲线位置发生变化,本对象随之更改 // void ReSetOneCurvePos(int id); //计算某个曲线相关对象的位置,id 是曲线ID // // void ReSetAllCurvePos(); //整理所有的曲线的位置 //}; #endif