|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
//<2F>ļ<EFBFBD> CPdfDraw.h
|
|
|
|
|
|
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
|
|
|
|
|
|
//
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д:
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include "formatdc.h"
|
|
|
|
|
|
#include "../IDcDraw.h"
|
|
|
|
|
|
#ifndef M_PI
|
|
|
|
|
|
# define M_PI 3.14159265358979323846 /* pi */
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#ifndef M_PI_2
|
|
|
|
|
|
#define M_PI_2 (M_PI / 2.0)
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
#include "cairo/cairo.h"
|
|
|
|
|
|
#include "cairo/cairo-pdf.h"
|
|
|
|
|
|
#include <unordered_map>
|
|
|
|
|
|
|
|
|
|
|
|
class CPdfDraw :
|
|
|
|
|
|
public IDcDraw
|
|
|
|
|
|
{
|
|
|
|
|
|
public:
|
|
|
|
|
|
typedef struct
|
|
|
|
|
|
{
|
|
|
|
|
|
double x; //<2F>߶ε<DFB6><CEB5><EFBFBD>x
|
|
|
|
|
|
double y; //<2F>߶ε<DFB6><CEB5><EFBFBD>y
|
|
|
|
|
|
COLORREF Color; //<2F><>¼<EFBFBD>߶<EFBFBD>ɫ<EFBFBD><C9AB>
|
|
|
|
|
|
}CAIROPOINT;
|
|
|
|
|
|
|
|
|
|
|
|
enum class CairoFitMode
|
|
|
|
|
|
{
|
|
|
|
|
|
Center = 0, // <20><><EFBFBD><EFBFBD>
|
|
|
|
|
|
FitToPage = 1 // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD>
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
enum class CairoSize
|
|
|
|
|
|
{
|
|
|
|
|
|
Cairo_A3 = 0,
|
|
|
|
|
|
Cairo_A4 = 1,
|
|
|
|
|
|
Cairo_A5 = 2,
|
|
|
|
|
|
Cairo_B4 = 3
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
|
CPdfDraw();
|
|
|
|
|
|
CPdfDraw(CXyDC* pXyDC);
|
|
|
|
|
|
~CPdfDraw();
|
|
|
|
|
|
void Create(CXyDC* pXyDC);
|
|
|
|
|
|
|
|
|
|
|
|
void InitDC();
|
|
|
|
|
|
void ReleaseDC();
|
|
|
|
|
|
void Close();
|
|
|
|
|
|
|
|
|
|
|
|
void SetPdfData(CXy* pXy);
|
|
|
|
|
|
void SetPdfFilePath(const CString &path);
|
|
|
|
|
|
void SetPdfNumber(int num);
|
|
|
|
|
|
|
|
|
|
|
|
void Draw(CText& text, CCurveEx* pCurveRect = NULL); //<2F><>pCurveRect<63><74>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ϊ<EFBFBD>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>Χ
|
|
|
|
|
|
void Draw(CText& text, COLORREF color); //-<2D><><EFBFBD><EFBFBD>
|
|
|
|
|
|
void Draw(CMText& mtext);
|
|
|
|
|
|
|
|
|
|
|
|
void Draw(CEllipse& elp, COLORREF Color);
|
|
|
|
|
|
void Draw(CCircle& circle, COLORREF Color);
|
|
|
|
|
|
void Draw(CInsertDraw& m_insert); //-<2D><><EFBFBD>ž<EFBFBD><C5BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ϣ<EFBFBD>
|
|
|
|
|
|
void Draw(CXyDC* pNewXyDC, CInsertDraw& m_insert);
|
|
|
|
|
|
void Draw(CInsertOld& m_insert);
|
|
|
|
|
|
void Draw(CXyDC* pInsertXyDC, CInsertOld& m_insert);
|
|
|
|
|
|
void Draw(CSection& section, CRect8* rect = NULL);
|
|
|
|
|
|
void Draw(CImageInsert& image); //-<2D><><EFBFBD><EFBFBD>
|
|
|
|
|
|
void Draw(CMesh& mesh);
|
|
|
|
|
|
void Draw(CMetaFile& mf);
|
|
|
|
|
|
void Draw(CColorRuler& ruler, CColorBase& color); //-ɫ<><C9AB>
|
|
|
|
|
|
void Draw(CPathFill& path, COLORREF fillColor, void* HowToViewCurve);
|
|
|
|
|
|
void Draw(C3DFaultageSurface& fs, COLORREF fillColor, void* HowToViewCurve);
|
|
|
|
|
|
|
|
|
|
|
|
void Draw(CProportion& proportion, COLORREF color); //-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
void Draw(CCurveEx& curve, double l1, double l2);
|
|
|
|
|
|
void Draw(CCurveEx& m_curve);
|
|
|
|
|
|
void Draw(CCurveEx& curve, void* HowToViewCurve); //-<2D><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void Draw(CCurveEx& curve, COLORREF color, BOOL bSmoothHead = TRUE);//-<2D><>
|
|
|
|
|
|
void DrawVirtualCairo(CCurveEx &curve, CCurveProperties *type); //<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
void Draw(CCurveRect& rt, void* HowToViewCurve);
|
|
|
|
|
|
void Draw(CCurveRect& curve, COLORREF color);
|
|
|
|
|
|
|
|
|
|
|
|
void Draw(CPointNameEx& point, void* HowToViewPoint); //-<2D><><EFBFBD>ž<EFBFBD>
|
|
|
|
|
|
void Draw(CPointCrossName& point, void* HowToViewPoint);
|
|
|
|
|
|
void Draw(CPointTwoName& point, void* HowToViewPoint);
|
|
|
|
|
|
|
|
|
|
|
|
void Draw(CInsertDrawRect& idr);//-
|
|
|
|
|
|
void Draw(CArc& arc, void* HowToViewCurve);//-
|
|
|
|
|
|
void Draw(CArc& arc, COLORREF color);//-
|
|
|
|
|
|
void Draw(CFrame& frame, COLORREF color); //- <20>߿<DFBF><F2A3A8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void Draw(CNet& net, COLORREF colText, COLORREF colLine);
|
|
|
|
|
|
void Draw(CGridding& grid, COLORREF colText, COLORREF colLine); //- <20>߿<EFBFBD><DFBF><EFBFBD>γ<EFBFBD><CEB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void Draw(COtherDraw& od, void* HowToViewCurve);
|
|
|
|
|
|
void Draw(COtherDraw& od, COLORREF color);
|
|
|
|
|
|
void Draw(COleObject& ole);
|
|
|
|
|
|
void Draw(CTree& tree);
|
|
|
|
|
|
void Draw(CStation& cs);
|
|
|
|
|
|
void Draw(CCurveTV5& tv, void* HowToViewCurve);
|
|
|
|
|
|
void Draw(CScaleRuler& sr, COLORREF color);
|
|
|
|
|
|
void Draw(CRectLabel& rl, COLORREF color, void* HowToViewCurve);
|
|
|
|
|
|
|
|
|
|
|
|
void DrawArray(CMxn& mxn, COLORREF colFront, COLORREF colBack); //ǰ<><C7B0>ɫ<EFBFBD>뱳<EFBFBD><EBB1B3>ɫ
|
|
|
|
|
|
void Draw(CMxn& mxn, COLORREF colFront, COLORREF colBack);
|
|
|
|
|
|
void DrawGrid(CMxn& mxn);
|
|
|
|
|
|
|
|
|
|
|
|
void Draw(CHorizontalWell& horizontalwell, void* HowToViewCurve);
|
|
|
|
|
|
void Draw(CWellGroup& wellGroup);
|
|
|
|
|
|
|
|
|
|
|
|
void PolyLine(CPointList& dp);
|
|
|
|
|
|
void PaintRgn(LPPOINT sp, int count);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD>Ƶ<EFBFBD>ֵ<EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void DrawPolylineName(const vector<CAIROPOINT>& points, const CString &name, double text_h, double position_distance = -1.0);
|
|
|
|
|
|
|
|
|
|
|
|
void SetMargins(double left, double right, double top, double bottom);
|
|
|
|
|
|
void SetLandscape(int isLandscape);
|
|
|
|
|
|
void SetFitMode(CairoFitMode mode);
|
|
|
|
|
|
void SetPDFSize(CairoSize type);
|
|
|
|
|
|
void SetPDFCairo(void *pCairo, bool state);
|
|
|
|
|
|
private:
|
|
|
|
|
|
void Clear();
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
|
|
|
|
|
|
void SetCairoColorFromCOLORREF(cairo_t* cr, COLORREF color, double alpha = 1);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ӳ<EFBFBD>䵽A4
|
|
|
|
|
|
void Map_Coordinates(cairo_t* cr, double externalWidth, double externalHeight, double A4Width, double A4Height);
|
|
|
|
|
|
//<2F><><EFBFBD>Ƕ<EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
|
|
|
|
|
double DegreesToRadians(double degrees);
|
|
|
|
|
|
|
|
|
|
|
|
uint8_t* LoadBMPToARGBData(const char* filePath, uint32_t& width, uint32_t& height);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><>ѯԪ<D1AF>ض<EFBFBD>Ӧ<EFBFBD><D3A6>COne
|
|
|
|
|
|
COne* FindElementMap(void* pValue);
|
|
|
|
|
|
//<2F><><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD>
|
|
|
|
|
|
void DrawCairoText(CText& text, COLORREF color);
|
|
|
|
|
|
//<2F><><EFBFBD>ִ<EFBFBD><D6B4>нǶȴ<C7B6><C8B4><EFBFBD>
|
|
|
|
|
|
void DrawCairoTextAngle(CText &text, COLORREF color);
|
|
|
|
|
|
//<2F><><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD>ʾ(Cairo<72><6F>֧<EFBFBD><D6A7>"\r\n" "\n")
|
|
|
|
|
|
void DrawCairoMultilineText(CText& text, COLORREF color);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƫת90<39><30>
|
|
|
|
|
|
void DrawCairoVerticalText(CText& text, COLORREF color);
|
|
|
|
|
|
//<2F><><EFBFBD>γ<EFBFBD><CEB3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void DrawCairoFillRect(CRect8& rect, COLORREF color);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
|
|
|
|
|
|
void DrawCairoLine(std::vector<CAIROPOINT>& pointVec, COLORREF color = 0);
|
|
|
|
|
|
//ɫ<><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
void DrawCairoRulerImage(CColorRuler& ruler, CColorBase &color);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>ȱʡ<C8B1><CAA1><EFBFBD><EFBFBD>
|
|
|
|
|
|
void DrawOther(double x0, double y0, CSize8 sz, COLORREF col, UINT nMode, double a);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>pdfҳ<66><D2B3>
|
|
|
|
|
|
void DrawCairoAddPdfNumber();
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
|
|
void DrawCairoCurveMark(CCurveEx &curve);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><DFB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
|
|
|
|
|
void ComputeCurveName(CCurveEx &curve, CCurveName *pName, int state);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double DistancePolyLine(const CAIROPOINT& p1, const CAIROPOINT& p2);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
double TotalLengthPolyLine(const std::vector<CAIROPOINT>& points);
|
|
|
|
|
|
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
CPoint2D GetPolygonCentroid(const CCurveEx& curve, CXyDC* pXyDc);
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַָ<D6B7><D6B8>ɵ<EFBFBD><C9B5><EFBFBD>
|
|
|
|
|
|
std::vector<std::string> StringSplit(const std::string& str);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>±<EFBFBD><EFBFBD>ַ<EFBFBD>ת<EFBFBD><EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
* \param cmd
|
|
|
|
|
|
* \return ת<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
CString ReverseSuperAndSubConversion(CString cmd);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƽ<EFBFBD><C6BD> <20><>ֵ
|
|
|
|
|
|
void DrawSmoothPathUsingInterpolation(
|
|
|
|
|
|
cairo_t* cr,
|
|
|
|
|
|
double* x,
|
|
|
|
|
|
double* y,
|
|
|
|
|
|
int count,
|
|
|
|
|
|
int samplesPerSegment = 20);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>պ϶<EFBFBD><EFBFBD><EFBFBD><EFBFBD>εĽ<EFBFBD><EFBFBD>㼯<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*
|
|
|
|
|
|
* \param polysA <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>μ<EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
* \param curPoly <EFBFBD><EFBFBD>ǰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
*/
|
|
|
|
|
|
void FillIntersection(
|
|
|
|
|
|
const std::vector<std::vector<CAIROPOINT>>& polysA,
|
|
|
|
|
|
std::vector<CAIROPOINT>& curPoly);
|
|
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD>
|
|
|
|
|
|
void DrawCairoImageInsert(CImageInsert& image);
|
|
|
|
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
|
cairo_t* p_cairo;
|
|
|
|
|
|
cairo_surface_t* p_surface;
|
|
|
|
|
|
|
|
|
|
|
|
bool m_symbolstate; //<2F><><EFBFBD><EFBFBD>pdf<64><66><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD><DFB6>߿<EFBFBD>ʹ<EFBFBD><CAB9>
|
|
|
|
|
|
double m_scale;
|
|
|
|
|
|
CSize8 m_paperSize; //ͼֽ<CDBC><D6BD><EFBFBD><EFBFBD>mm(A4)
|
|
|
|
|
|
CRect8 m_rect;
|
|
|
|
|
|
CSize8 m_unit;
|
|
|
|
|
|
CRect8 m_paperMargin; //<2F>߾ࣨ<DFBE><E0A3A8>λ<EFBFBD><CEBB> point<6E><74>72 point = 1Ӣ<31>磩
|
|
|
|
|
|
|
|
|
|
|
|
int m_landscape; //0<><30><EFBFBD><EFBFBD>Ӧ, 1Ϊ<31><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2<><32><EFBFBD><EFBFBD>
|
|
|
|
|
|
int m_number; //ҳ<><D2B3>
|
|
|
|
|
|
CairoFitMode m_fitMode;
|
|
|
|
|
|
|
|
|
|
|
|
CString m_filePath;
|
|
|
|
|
|
std::unordered_map<void*, COne*> m_elementMap;
|
|
|
|
|
|
|
|
|
|
|
|
std::shared_ptr<CXyDC> m_cacheXyDC; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::shared_ptr<CXyDC> m_cacheOldXyDC; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>
|
|
|
|
|
|
std::shared_ptr<CXyDC> m_symbolXyDC; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD><C5B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
|
|
|
|
|
|
|
std::vector<std::vector<CAIROPOINT>> m_polygons; //<2F><>¼<EFBFBD><C2BC><EFBFBD>߸<EFBFBD><DFB8><EFBFBD>
|
|
|
|
|
|
};
|