#pragma once #include "FormatDC.h" #include "..\GdbxDefine.h" #include "GeoMapGdbxWriter.h" namespace NFormatWriter { class CGdbxDC : public CFormatDC { public: CGdbxDC(void); ~CGdbxDC(void); virtual void Initial(void); virtual int OutFront(void); virtual int OutEnd(void); virtual void PolyLine(CPointList& dp); void Draw(CText& text, CCurveEx& curve) override; void SetPixel(double x, double y, COLORREF col); void Ellipse(double x1, double y1, double x2, double y2); void PaintRgn(CCurveEx& curve); void PaintRgn(LPPOINT sp, int count); void Draw(CSection& section, CRect8* rect = NULL); void Draw(CImageInsert& image); void FillSolidRect(CRect8& rect, COLORREF color); void Draw(CInsertDraw& m_insert); void Draw(CInsertOld& m_insert); BOOL OpenWrite(CString lpszPathName, bool bBinary = true); //打开写文件 BOOL OpenWrite(CFile *pFile, CXy *xy); //打开写文件 void SetPictureRect(CRect8 rect); CRect8 GetPictureRect(void); void SetScaleFactor(double scaleFactor); double GetScaleFactor(void); void SetUnit(CSize unit); CSize GetUnit(void); virtual void SetMapSize(CSize sz) {} int BuildFileHead(void); int BuildSymLib(void); int BuildLayerHead(void); int BuildPline(int size, xPoint *ip); int BuildImage(long w,long h,CRect8 rect); int BuildPolygon(int size, xPoint *ip); int BuildSeismacSection(CSection& section); int BuildElement(); int Amplify10(double num); void DeleteObj(void); private: /** * libarchive 压缩文件 * * \param gdbxPath gdbx全路径 * \param outPath 输出压缩文件全路径 * \return */ int CompressGdbxDirectory(const CString& gdbxPath, const CString& outPath); /** * gb2312转utf-8 * * \param gdbxPath gdbx全路径 * \param outPath 输出压缩文件全路径 * \return */ CString GB2312ToUTF8(const CString& gb2312Str); CString getLayersName(); //获取当前所有层级名称 public: CGeoMapGdbxWriter* p_gdbx; public: CRect8 m_rect; CSize m_unit; double m_scaleFactor; int m_headSize; int m_symbolSize; int m_polylineSize; int m_textSize; int m_polygonSize; int m_multTextySize; xPoint m_xyData; list m_xyList; int m_DataLength; BYTE *m_imageData; int m_imageSize; int m_seismacSize; int m_xScale;//地震剖面x方向刻度 int m_yScale;//地震剖面y方向刻度 int m_scale;//刻度比例 要求整数 int m_x1,m_y1,m_x2,m_y2;//图形计算边界 不通图件设置不同值 double m_w,m_h;//x2-x1 y2-y1实际宽高便于计算 int m_left,m_top,m_rignt,m_bottom;//图件边距mm int m_paperW,m_paperH;//图纸宽高mm pugi::xml_document m_doc; pugi::xml_node m_mapNode; pugi::xml_node m_layersNode; pugi::xml_node m_layerNode; pugi::xml_node m_shapesNode; CXy* p_xy; }; }//namespace