#pragma once #include "GeoMapBase.h" #include "GeoMapGdbWriter.h" namespace NFormatReader { namespace NGeoMapReader { class CCoordinateConvertor; /* @brief GeoMap图件Reader */ class CGeoMapReader : public CGeoMapBase { public: CGeoMapReader(void); ~CGeoMapReader(void); public: // 分析读取图件数据(图件名称) int Read(LPCTSTR fname); // 分析读取图层数据(数据开始位置,数据字节长度) int ReadLayer (int start, int len); int ReadElement (int start, int &elementLen, GMElementID eid); //读取元素 // 分析读取图元数据 int ELE_Symbol (int start, int &DataLen); // 符号 int ELE_Text (int start, int &DataLen); // 文本 int ELE_Legend (int start, int &DataLen); // 图例框 int ELE_Scale (int start, int &DataLen); // 比例尺 GMAxis ELE_Axis (int start, int &DataLen); // 刻度轴 int ELE_Compass (int start, int &DataLen); // 方向标淂v int ELE_Well (int start, int &DataLen); // 井位 int ELE_Reside (int start, int &DataLen); // 地名 int ELE_Frame (int start, int &DataLen); // 图框 GMGrid ELE_Grid (int start, int &DataLen); // 直角网格 int ELE_Rectangle(int start,int &DataLen); // 矩形/圆角矩形/线段 int ELE_Pie (int start, int &DataLen); // 饼/椭圆 int ELE_Polyline(int start, int &DataLen); // 折线 int ELE_Fault (int start, int &DataLen); //断层线 int ELE_Isoline (int start, int &DataLen); // 等值线 int ELE_Polygon (int start, int &DataLen); // 面(多边形) int ELE_SeisLine (int start, int &DataLen); // 地震测线 int ELE_SeisSection (int start, int &DataLen); // 地震剖面 int ELE_SeisArea (int start, int &DataLen); // 地震工区 int ELE_Lithology (int start, int &DataLen); // 岩性剖面 GMLog ELE_Log (int start, int &DataLen); // 测井曲线 int ELE_WellText (int start, int &DataLen); // 井旁文字 int ELE_WellLog (int start, int &DataLen); // 井旁曲线 int ELE_WellMarker (int start, int &DataLen); // 井旁标记de int ELE_Compound (int start, int &DataLen); // 组合图元 int ELE_Custom (int start, int &DataLen); // 自定义图元 int ELE_Graphy (int start, int &DataLen); // 统计图 int ELE_Triagonal (int start, int &DataLen); // 三角图 int ELE_Bmp (int start, int &DataLen); // BMP位图 int ELE_Metafile (int start, int &DataLen); // WMF/EMF元文件 int ELE_OilWaterCol (int start, int &DataLen); // 油水柱子 int ELE_DataCross (int start, int &DataLen); // 数据十字 int ELE_String (int start, int &DataLen); // 文字 int ELE_String(GMText& text, int start, int &DataLen); // 文字 CString GetElementTypeString(GMElementID nID); protected: CFile m_fr; // 当前文件对象 CString m_FileName; // 当前文件名称 FILE * m_FILE = nullptr; int m_CurPos = 0; // 当前文件位置 char m_Buffer[256]{}; // 读取缓冲区 int m_iCurLayer = 0; // 分析的当前图层序号 char m_Magic[12]{}; // 文件标志 BYTE m_Major{ 0 }; // 文件主版本号 BYTE m_Minor{ 0 }; // 文件次版本号 int m_WidthMM = 0; int m_HeightMM = 0; // 图纸宽度、高度(单位为毫米) COLORREF m_BkColor; // 背景颜色 int m_nLayer = 0; // 图层数 int m_nElement = 0; // 当前图层的图元个数 GMElementID m_GdbElement{}; // 当前图元类型 CRect m_Mbr; // 当前图元的MBR GMFileHead m_fileHead; // 图件属性 GMLayerHead m_layerHead; // 当前图层属性 GMLayerIndex m_GdbLayerIndex[100]{};// 图层位置索引(图层数小于100) }; }; };