|
|
/**************************************************************************************
|
|
|
文 件 名:ItemSingleWell.h
|
|
|
主要功能:
|
|
|
单井操作各类元素或完成一定的功能
|
|
|
主要函数列表:
|
|
|
1 virtual BOOL InitPropertyGrid(CXTPPropertyGrid& grid); 初始化属性窗口
|
|
|
2 virtual void OnLButtonDown(UINT nFlags, CPoint point); 鼠标操作
|
|
|
3 virtual void OnLButtonUp(UINT nFlags, CPoint point);
|
|
|
4 virtual void OnMouseMove(UINT nFlags, CPoint point);
|
|
|
5 virtual void OnDraw(CXyDC* pXyDC); 绘制辅助手柄
|
|
|
6 virtual BOOL OnGridItemChangeValue(CXTPPropertyGridItem* pItem); 响应属性框改变消息的函数
|
|
|
7 void TrackLeftGroup(); 道的左组合
|
|
|
8 void TrackRightGroup(); 右组合
|
|
|
|
|
|
**************************************************************************************/
|
|
|
#pragma once
|
|
|
#include "ItemWellBase.h"
|
|
|
|
|
|
#define HADNLESIZE 10
|
|
|
//typedef TObjectList<CWellDataObj> CDataObjList;
|
|
|
class CTrackGroup;
|
|
|
namespace NItem
|
|
|
{
|
|
|
struct DiscretreDataStuct
|
|
|
{
|
|
|
float depth;
|
|
|
float value;
|
|
|
};
|
|
|
|
|
|
class CItemSingleWell : public CItemWellBase
|
|
|
{
|
|
|
public:
|
|
|
CItemSingleWell(CSigmaDoc* pDoc);
|
|
|
~CItemSingleWell(void);
|
|
|
|
|
|
virtual void CancelSelection(void);
|
|
|
virtual void OnLButtonDblClk(UINT nFlags, CPoint point) override;
|
|
|
virtual void OnLButtonDown(CDC *pDC, UINT nFlags, CPoint point, int vk) override;
|
|
|
virtual void OnLButtonUp(CDC *pDC, UINT nFlags, CPoint point, int vk = 0) override;
|
|
|
virtual int OnMouseMove(CDC *pDC, UINT nFlags, CPoint point) override;
|
|
|
virtual void OnRButtonDown(UINT nFlags, CPoint point) override;
|
|
|
|
|
|
virtual int GetSubMenu();
|
|
|
|
|
|
virtual BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
|
|
|
virtual BOOL OnSetCursor(CPoint pt, int& handle);
|
|
|
/** @brief 绘制辅助手柄 */
|
|
|
virtual void OnDraw(CXyDC* pXyDC);
|
|
|
virtual void OnDraw(CXyDC* pXyDC, CDC* pDC) override;
|
|
|
|
|
|
/** @brief 初始化属性窗口 */
|
|
|
//virtual BOOL InitPropertyGrid(CXTPPropertyGrid& grid);
|
|
|
|
|
|
///** @brief 响应属性框改变消息的函数 */
|
|
|
//virtual BOOL OnGridItemChangeValue(CXTPPropertyGridItem* pItem);
|
|
|
|
|
|
/** 响应属性框内按钮弹出新的对话框*/
|
|
|
//virtual void OnInplaceButtonDown(CXTPPropertyGridItem* pItem);
|
|
|
|
|
|
//根据图元创建操作Item
|
|
|
virtual CItemWellBase* CreateItem(CWellBaseObj* pObj);
|
|
|
|
|
|
virtual void DeleteItem();
|
|
|
CWellPole *GetWellObject();
|
|
|
virtual void SetDrawObj(CWellBaseObj* pObj);
|
|
|
virtual CWellBaseObj* GetDrawObj();
|
|
|
|
|
|
void EnableEditTrackInData(BOOL b) { m_bEditTrackInData = b; }
|
|
|
BOOL IsEditTrackInData() { return m_bEditTrackInData; }
|
|
|
|
|
|
CTrackObj* GetSelectedTrack();
|
|
|
|
|
|
//添加道
|
|
|
virtual bool AddTrack();
|
|
|
virtual bool AddTrackDlg(CWellPole* pWellObj,CTrackObj* pSelectTrack);
|
|
|
|
|
|
BOOL AddTrack(CTrackObj* pSelectTrack,int trackType[], int trackNum);
|
|
|
//在选中的道后添加道
|
|
|
virtual bool AddTrackAfterSelected();
|
|
|
|
|
|
//道的左组合
|
|
|
void TrackLeftGroup();
|
|
|
//右组合
|
|
|
void TrackRightGroup();
|
|
|
|
|
|
//设置鼠标左键状态
|
|
|
void SetLDown(BOOL bL) { m_bLDown = bL; }
|
|
|
|
|
|
//清空选择对象
|
|
|
virtual void Clear();
|
|
|
|
|
|
virtual int DeleteSelection(void);
|
|
|
////应用井模板
|
|
|
virtual void ApplingWellTemplate();
|
|
|
virtual void ApplingWellDbTemplate();
|
|
|
//添加道内数据对象
|
|
|
void AddTrackInObjData();
|
|
|
//构建道内对象
|
|
|
void BuildTrackInObj(CTrackObj* pTrackObj, vector<CString> &fields, StringVectorSet &datas, vector<CString> &fields2,StringVectorSet &vecdatas2);
|
|
|
//构建道内对象
|
|
|
void BuildTrackInObj(CTrackObj* pTrackObj, double *pDepth,double *pData,int datanum);
|
|
|
//类型获取道内对象数据表、字段
|
|
|
void GetTrackTable(CTrackObj* pTrackObj, CString &strTrackType, CString& table, CString& curve);
|
|
|
////整体导入库数据
|
|
|
void ImportDataAll(CWellPole* pWell, BOOL bReplace=TRUE);
|
|
|
//void ImportDataFromLM(CTrackGroup* pGroup,CWellPole* pWell,CLMInterface* pLM);
|
|
|
//void ImportDataFromDB(CTrackGroup* pGroup,CWellObj* pWell,Db::CSqlStatementManager *pSqlManager, BOOL bReplace=TRUE);
|
|
|
//void ImportTrackDataFromDB(CTrackObj* pTrack,CWellObj* pWell,Db::CSqlStatementManager *pSqlManager, BOOL bReplace=TRUE);
|
|
|
|
|
|
/////曲线道从库导入数据时,从工区获取所有版本号和施工序号
|
|
|
void GetOperationAndVersion(const CString strWellName, const CString strCurveName, vector<CString> &OperatVec, vector<CString> &VersionVec);
|
|
|
/// 把选择道的数据导入到数据库中
|
|
|
void ExportDataAll(CWellPole* pWell);
|
|
|
void ExportDataToDB(CTrackObj* pTrackObj);
|
|
|
/// 判断鼠标dowm时是否选中边框线;
|
|
|
void BeSelectBorderLine(CTrackGroup* pGroup,CPoint2D pt,double dHandleSize);
|
|
|
///鼠标移动时不同位置的光标
|
|
|
BOOL SetMoveCursor(CTrackGroup* pGroup,CPoint2D pt,double dHandleSize,CWellPole* pWell);
|
|
|
BOOL SetMoveCursor(CTrackGroup* pGroup, CPoint2D pt, double dHandleSize, CWellPole* pWell, int& handle);
|
|
|
/// 拖动井时道重新排序 ,SortTrackWhenMoving本函数会递归调用因此记录一下层次
|
|
|
BOOL SortTrackWhenMoving(CTrackGroup* pGroup,CTrackObj* pTrackMoving, int& ideep);
|
|
|
|
|
|
///////////////岩芯归位相关函数
|
|
|
///岩芯归为时处理散点道选中的深度段数据
|
|
|
//void MoveDiscreteSegement(CObjectBase* pObj,const double fdistance);
|
|
|
//////HFX 岩芯归位后选中深度段内的散点数据,以及整个过程中深度的起始下表和结束下表
|
|
|
//void GetDepthAndValueDiscreteSegement(CObjectBase* pObj,CArray<double> &ArrDepth,CArray<double> &ArrValue,const double dTop, const double dBot,int &nStratIndex,int &nEndIndex);
|
|
|
////////岩芯归位深度段内的散点数据重新排序
|
|
|
//void SortDiscreteSegment(CArray<double> &ArrDepth,CArray<double> &ArrValue);
|
|
|
///////排好顺序的散点数据放回离散道的数据中
|
|
|
//void SetDiscreteSegment(CObjectBase* pObj,CArray<double> &ArrDepth,CArray<double> &ArrValue,const int nStartIndex,const int nEndIndex);
|
|
|
//////////////////////////////////////////////////
|
|
|
|
|
|
void DrawWellHandle();///< 画井选中状态
|
|
|
/// 连接工区情况下获得工区中当前交互井的所有曲线或者散点名字
|
|
|
void GetAllCurveNameInDb(CStringArray &strNameArr,const CString strTableName,CString nameField);
|
|
|
|
|
|
//void GetWavetraceDataNameFromDb(CStringArray &strNameArr);
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
/////生成图例时从井中获取可用于生成图例的对象
|
|
|
//virtual void GetLegendObject(const CStringArray &StyleList,CRect8 rt);
|
|
|
///////生成图例时过滤掉重复的内容
|
|
|
//virtual BOOL IsRepeat(CObjectBaseList &Objectlist,const CString strName);
|
|
|
///////创建图例对象并添加到CXy
|
|
|
//virtual void CreatLegendObject(CObjectBaseList &Objectlist,CRect8 rt,CXy* pXy);
|
|
|
//virtual void GetSymbolObj(CObjectBaseList &Objectlist,const CStringArray &StyleList, CWellPole* pWell);
|
|
|
//////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//测井分析
|
|
|
virtual BOOL AnalysisPor();
|
|
|
virtual BOOL AnalysisSand();
|
|
|
virtual BOOL CalculatePor();
|
|
|
virtual BOOL CalculateSH();
|
|
|
void CurveDataStatistic();
|
|
|
|
|
|
void DrawSelectPolyRange(CXyDC* pXyDC,std::vector<CPoint2D>& PtsVec);
|
|
|
|
|
|
/*使用SetReUnDoAction时,会使用存档井柱对象进行替换操作,所以此句代码前获得的井柱指针都重新获取一次*/
|
|
|
virtual void SetReUnDoAction(BOOL bNoSaveData = TRUE, UINT actionType = IDS_STRING_ACTION_MOVE);
|
|
|
protected:
|
|
|
|
|
|
CInsertDraw *GetLegendInsertDraw(CString strMark); //从名称得到一个可以插入图例的符号
|
|
|
|
|
|
double GetWellProjecttionAngle(CWellPole *pWellObj); //得到一口井的最好的投影角度
|
|
|
|
|
|
//void SetScrollBarRange();
|
|
|
void CreateDragImage();
|
|
|
CBitmap* GetBitmap(CDC* pdc,CRect wellHRect,CRect ilnWellHRect,BOOL bTrack = FALSE,CPoint *plgPts = NULL);
|
|
|
|
|
|
virtual void DrawHandle(CXyDC *pDC);///< 画当前图元选中状态 ggff
|
|
|
virtual void DrawHandle(CXyDC *pDC, const CPoint2D &point); //ggff
|
|
|
virtual void DrawSelected(CXyDC *pXyDC,CWnd *pWnd);
|
|
|
|
|
|
void DrawMoveSelected(CXyDC *pXyDC,CWnd *pWnd);
|
|
|
|
|
|
void ApplingFileTemplate(CFile &fr);
|
|
|
|
|
|
////获得组合道中最右边的道
|
|
|
CTrackObj* GetLastTrackFromTrackGroup(CTrackGroup* trackGroupObj);
|
|
|
////Por分析时生成新图道
|
|
|
//void CreatePorTrack(CWellObj* pWell,CDataObjList& CurveList,BOOL bAddResult,double PorTemp,double SwWaterTemp,double SwOilTemp,double AnalysisHd);
|
|
|
////Sand分析时生成新图道
|
|
|
//void CreateSandTrack(CWellObj* pWell,CDataObjList& CurveLista,BOOL bAddResult,double PorTemp,double SwWaterTemp,double SwOilTemp,double AnalysisHd);
|
|
|
////生成新的曲线道
|
|
|
CTrackCurve* CreateNewCurveTrack(CWellPole* pWell,CString strTrackName,CString strUnit,double TrackWidth,double LeftValue,double RightValue,BOOL bLog,COLORREF clr);
|
|
|
//添加道
|
|
|
void AddTrack(CTrackObj* pTrackSelected, TRACKLIST& trackAddList, BOOL bTrackGroup=FALSE);
|
|
|
|
|
|
void DestroyVHCursor();
|
|
|
//CreateAngleCursor(HCURSOR cursor= 原始光标,CBitmap *pCursorBmp =新光标的位图,CBitmap *pCursorMaskBmp=新光标的掩码为图,double angle=旋转角度)
|
|
|
HCURSOR CreateAngleCursor(HCURSOR cursor,CBitmap* pCursorBmp ,CBitmap* pCursorMaskBmp,double angle);//ggff
|
|
|
void CreateVHCursor();
|
|
|
//void AddWellIntervals(CXTPPropertyGridItem* pParentItem);//初始化井段数据信息
|
|
|
protected:
|
|
|
CWellPole* m_pWell; ///< 当前交互的井
|
|
|
CSigmaDoc* m_pWndOld;
|
|
|
CImageList* m_pDragImage; ///< 拖拽位图
|
|
|
CRect m_rectImage; ///< 对象被选中范围
|
|
|
|
|
|
BOOL m_bEditTrackInData; ///< 选中道内空白处编辑数据
|
|
|
BOOL m_bDragImage;
|
|
|
BOOL m_bWellFrame;
|
|
|
|
|
|
int m_nTrackPos; ///< 道位置类型0纵向,1横向
|
|
|
CPoint2D m_ptBegin; ///< 插入道位置的起始点
|
|
|
CPoint2D m_ptEnd; ///< 插入道位置的结束点
|
|
|
|
|
|
int m_PointNum;
|
|
|
CPoint *m_pPointBuf;
|
|
|
|
|
|
HCURSOR m_VCursor,m_HCursor; //斜井情况下的垂直于井头的光标,水平于井头的光标 ggff
|
|
|
CBitmap *m_pVCursorBmp,*m_pVCursorMaskBmp,*m_pHCursorBmp,*m_pHCursorMaskBmp;
|
|
|
|
|
|
std::vector<CXyDC*> m_DcVec; //当与多个窗体相关时,放置多个窗体的DC
|
|
|
std::vector<CWnd *> m_WndVec;
|
|
|
|
|
|
LOGFONT m_logFont;
|
|
|
};
|
|
|
|
|
|
}; |