You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

335 lines
11 KiB
C

1 month ago
//////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD> XyDC.h
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
//
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2005-12-07
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "afxcoll.h"
#include "rect8ex.h"
#include "insertdraw.h"
#include "text.h"
#include "curveex.h"
#include "circle.h"
#include "frame.h"
#include "imageinsert.h"
#include "mxn.h"
#include "mesh.h"
#include "colorruler.h"
#include "proportion.h"
#include "insertdrawrect.h"
#include "arc.h"
#include "net.h"
#include "grid.h"
#include "WellGroup.h"
//#include "memdc.h"
#include "section.h"
#include "hyperlinkmulti.h"
#include "..\SectionLib\OtherDraw.h" // Added by ClassView
#include "oleobject.h"
#include ".\tree.h"
#include ".\metafile.h"
#include ".\publicfunction.h"
#include ".\station.h"
#include ".\curvetv5.h"
#include ".\mtextparse.h"
#include ".\scaleruler.h"
#include ".\curverect.h"
#include ".\pointcrossname.h"
#include ".\pathxy.h"
#include "RectLabel.h"
#include "HorizontalWell.h"
#include "GDFLOGBRUSH.h"
#include "GDFLOGPEN.h"
#include "GDFLOGFONT.h"
#include "GDFLOGPOINT.h"
#include "XyDCBase.h"
#include ".\3DFaultageSurface.h"
#include "IDcDraw.h"
#define XYDC_TYPE_DEFAULT 1
#define XYDC_TYPE_DXF 2
#define XYDC_TYPE_CGM 3
#define XYDC_TYPE_EPS 4
#define XYDC_TYPE_INSERT 5
#define XYDC_TYPE_UMAP_ASC 6
#define XYDC_TYPE_PDF 7
#define XYDC_TYPE_MAPGIS_ASC 8
#define XYDC_TYPE_GEOMAP_GDB_ASC 9
#define XYDC_TYPE_EMF 10
typedef struct _CustomColor
{
bool bUseCustom = false;
COLORREF color;
}CUSTOMCOLOR;
class AFX_EXT_CLASS CXyDC : public CXyDCBase
{
public:
CXyDC(void);
virtual ~CXyDC(void);
void ReleaseDC();
CUSTOMCOLOR __TempColorForMark; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ķ<EFBFBD><C4B7><EFBFBD>û<EFBFBD><C3BB>ʱ<EFBFBD><CAB1><EFBFBD>Ͱ<EFBFBD><CDB0>ո<EFBFBD><D5B8><EFBFBD>ɫ<EFBFBD><C9AB>ʮ<EFBFBD>ֲ<EFBFBD>
virtual void Serialize(CArchive& ar, const short &ver);
virtual int Create(CDC* pDC, BOOL bSetViewRect = TRUE);
virtual void SetPixel(double x, double y, COLORREF col);
virtual void MoveTo(double x, double y);
virtual void LineTo(double x, double y);
virtual void MoveTo(const CPoint2D &point);
virtual void LineTo(const CPoint2D &point);
virtual void LineToEnd(){} //<2F><><EFBFBD><EFBFBD>Ϊ<EFBFBD>˵<EFBFBD><CBB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD>ʽʱ<CABD><CAB1><EFBFBD><EFBFBD>ʹMoveTo<54><6F>LineTo<54>γ<EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void Ellipse(double x1, double y1, double x2, double y2);
virtual void Ellipse(CRect8& rect);
virtual void Arc(CRect8 rect, CPoint2D ptStart, CPoint2D ptEnd);
virtual void Pie(CRect8 rcClient,CPoint2D ptStart,CPoint2D ptEnd);
virtual void PaintRgn(LPPOINT sp, int count);
void Pie(CRect8 rcClient,CPoint2D ptStart,CPoint2D ptEnd,COLORREF clrBkGnd,COLORREF clrPen);
virtual void Rectangle(CRect8& rect);
virtual void Rectangle(CRect& rect, COLORREF color);
virtual void FillSolidRect(CRect8& rect, COLORREF color);
virtual void PolyLine(CCurveEx& curve, bool bDirectOut=false);
virtual void PolyLine(CPointList& dp);
virtual void PaintRgn(CCurveEx& curve);
virtual void PaintTransparentRgn(CCurveEx& curve);
virtual void GradientFill(CRect8& rect, COLORREF crFrom, COLORREF crTo, BOOL bHorz); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void GradientFill(CPoint2D& pt1, CPoint2D& pt2, CPoint2D& pt3, COLORREF cr1, COLORREF cr2, COLORREF cr3); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
virtual void GradientFill(CPoint2D& pt1, CPoint2D& pt2, COLORREF cr1, COLORREF cr2, double width); //<2F><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
BOOL CreatePolygonRgn(CRgn*& pRgn, LPPOINT &lpPoints, int &nCount, int nMode);
virtual BOOL CreatePolygonRgn(CRgn*& pRgn, CCurveEx &curve, int nMode=WINDING);
virtual void SelectClipRgn(CPointList* pPointList, int nMode=RGN_AND); //<2F><><EFBFBD><EFBFBD>CGM<47><4D>EPS<50><53><EFBFBD>ļ<EFBFBD>ʱ,<2C><><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ı߽<C4B1><DFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ת<EFBFBD><D7AA>Ϊ<EFBFBD><CEAA>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EAA3AC>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊʵ<CEAA><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڶ<EFBFBD><DAB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD>
virtual int PolyLine(CCurveEx& curve, LPPOINT p);
int PolyLine(CPointList& dp, LPPOINT lpPoint);
virtual int PolyLine8(CCurveEx &curve, CPoint2D* pt);
void operator=(CRect8& t);
void operator=(CXyDC& dc);
void SetCustomDPI(int nMode, double nExportDPI); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD>ֱ<EFBFBD><D6B1><EFBFBD>
//<2F><><EFBFBD>Ƹ<EFBFBD><C6B8><EFBFBD>Ԫ<EFBFBD><D4AA>
virtual void Draw(CText& text, CCurveEx* pCurveRect = NULL); // -<2D><>pCurveRect<63><74>Ϊ<EFBFBD><CEAA>ʱ<EFBFBD><CAB1>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD>Ϊ<EFBFBD>˻<EFBFBD><CBBB><EFBFBD><EFBFBD><EFBFBD>ʾ<EFBFBD><CABE>Χ
virtual void Draw(CEllipse &elp, COLORREF Color); //-
void Draw(CCircle &circle, COLORREF Color); //-
virtual void Draw(CInsertDraw& m_insert);//-
virtual void Draw(CXyDC* pNewXyDC, CInsertDraw& m_insert);//-
virtual void Draw(CInsertOld& m_insert);//-
virtual void Draw(CXyDC* pInsertXyDC, CInsertOld& m_insert); // -
virtual void Draw(CSection& section,CRect8* rect=NULL); // -
virtual void Draw(CImageInsert& image);//-
virtual void Draw(CMesh &mesh);//-
virtual void Draw(CMetaFile& mf);//-
virtual void Draw(CColorRuler& ruler, CColorBase& color);//-
virtual void Draw(CPathFill& path, COLORREF fillColor, void* HowToViewCurve);//-
virtual void Draw(C3DFaultageSurface& fs, COLORREF fillColor, void* HowToViewCurve);//-
void Draw(CText& text, COLORREF color);// -
void Draw(CMText& mtext);//-
void Draw(CProportion& proportion, COLORREF color);//-
virtual void Draw(CCurveEx &curve, double l1, double l2);//-
virtual void Draw(CCurveEx& m_curve);//-
virtual void Draw(CCurveEx& curve, void* HowToViewCurve);//-
virtual void Draw(CCurveEx& curve, COLORREF color, BOOL bSmoothHead = TRUE);//-
inline void DrawPackage(CCurveEx& curve, CRect8& range, COLORREF color);
void DrawPackage(CMeshPackage* pMeshPackage);
//void PaintRgnPack(CCurveEx& curve, COLORREF color);
int PolyLinePack(CCurveEx& curve, CRect8& range, LPPOINT p);
void Draw(CCurveRect& rt, void* HowToViewCurve);//-
void Draw(CCurveRect& curve, COLORREF color);//-
void Draw(CPointNameEx& point, void* HowToViewPoint);//-
void Draw(CPointCrossName& point, void* HowToViewPoint);//-
void Draw(CPointTwoName& point, void* HowToViewPoint);//-
//void Draw(CDonut& dt,COLORREF Color);
void Draw(CInsertDrawRect& idr);//-
void Draw(CArc& arc, void* HowToViewCurve);//-
void Draw(CArc& arc, COLORREF color);//-
void Draw(CFrame& frame, COLORREF color);//-
void Draw(CNet& net, COLORREF colText, COLORREF colLine);//-
void Draw(CGridding& grid, COLORREF colText, COLORREF colLine);//-
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);
virtual void Draw(CRectLabel& rl, COLORREF color, void* HowToViewCurve);
/* @brief <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
void DrawFillPolygon(CPoint2D *pPoints, int nCount, GDFLOGBRUSH & brush);
/* @brief <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
void DrawFillRect(CRect8 &rect, GDFLOGBRUSH &brush);
/* @brief <20>߻<EFBFBD><DFBB>ƺ<EFBFBD><C6BA><EFBFBD> */
void DrawLine(CPoint2D pt1,CPoint2D pt2,const GDFLOGPEN& logPen);
void DrawPolyLine(CPoint2D* pPoint,int iCount,const GDFLOGPEN& logPen);
void DrawRect(CRect8 rect,const GDFLOGPEN& logPen);
void DrawCurveLine(CPoint2D pt1, CPoint2D pt2, COLORREF color, double width);
/* @brief <20>ı<EFBFBD><C4B1><EFBFBD><EFBFBD>ƺ<EFBFBD><C6BA><EFBFBD>
* iHorAlign = 0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* iVerAlign = 0 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void DrawText(CPoint2D pt1, LPCTSTR str, GDFLOGFONT &font, double dAngle, int iHorAlign, int iVerAlign);
void DrawText(CRect8 &rect, LPCTSTR str, GDFLOGFONT &font, int iHorAlign, int iVerAlign, BOOL bClip = FALSE);
/* @brief <20><><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD> */
void DrawPointSymbol(CPoint2D pt, GDFLOGPOINT &logPoint);
/* @brief <20><><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD> */
void DrawFillRect(CRect8 &rect, GDFLOGPOINT &logPoint);
void DrawOld(CSection& section,CRect8* rect=NULL);
void DrawDib(CSection& section,CRect8* rect=NULL);
//draw mxn
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);
int GetDcType(void);
virtual void Rotate(double &ww, double &wh, double &wa);
// <20><><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>
void SetAntiAlias(BOOL enable);
BOOL GetAntiAlias();
void SetPrinting(BOOL isPrinting);
BOOL GetIsPrinting();
//pdf<64><66>ӡ
void SetPdfPrintState(BOOL state);
BOOL GetPdfPrintState();
void SetPdfData(CXy* pXy, const CRect8& rect, int sType, int cType, int dType, int num);
void SetPdfPCairo(void *pCairo, bool state = false);
//<2F><><EFBFBD><EFBFBD> gdbx
void SetGDBXState(BOOL state);
BOOL GetGDBXState();
void SetGDBXData(CXy *xy);
void SetFilePath(const CString &path);
CString GetFilePath();
void CloseFile();
//<2F><><EFBFBD><EFBFBD>Block<63><6B><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>gdbx<62><78><EFBFBD>Ҳ<EFBFBD><D2B2><EFBFBD>ͼ<EFBFBD><CDBC><EFBFBD><EFBFBD><E3BCB6><EFBFBD><EFBFBD>
void SetBlockLayer(CLayer * layer);
CLayer * GetBlockLayer();
public:
void DrawSeismic(CSection& section, CRect scrRect, CRect rtDraw, int nStep, int nMode); //<2F><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
void DrawColorRulerMarkV(CColorRuler& ruler, CColorBase &color);
void DrawColorRulerMarkH(CColorRuler& ruler, CColorBase &color);
void DrawColorRulerSmoothV(CColorRuler& ruler, CColorBase &color);
void DrawColorRulerSmoothH(CColorRuler& ruler, CColorBase &color);
//<2F><>ת<EFBFBD><D7AA>ʾ
void DrawColorRulerMarkV_Reversal(CColorRuler& ruler, CColorBase &color);
void DrawColorRulerMarkH_Reversal(CColorRuler& ruler, CColorBase &color);
void DrawColorRulerSmoothV_Reversal(CColorRuler& ruler, CColorBase &color);
void DrawColorRulerSmoothH_Reversal(CColorRuler& ruler, CColorBase &color);
void DrawOther(double x0, double y0, CSize8 sz, COLORREF col, UINT nMode, double a);
protected:
AFX_INLINE void LineTo(LPPOINT lpTwoPoints); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B3A4>
AFX_INLINE void GetLineInScreen(long &x1, long &y1, long &x2, long &y2);
int m_nDcType;
POINT m_twoPoint[2]; //<2F><>һ<EFBFBD><D2BB>ΪMoveTo<54><EFBFBD>ģ<EFBFBD><C4A3>ڶ<EFBFBD><DAB6><EFBFBD>ΪLineTo<54><6F>ʱʹ<CAB1>õ<EFBFBD>
IDcDraw* m_pDrawer;
//CDcDrawPlus m_drawerPlus;
//CDcDraw m_drawer;
BOOL m_bAntiAlias = TRUE;
BOOL m_bPrinting = FALSE;
BOOL m_bPdfPrint = FALSE;
BOOL m_bGDBXFile = FALSE;
CString m_sFilePath = "";
CLayer *m_blockLayer = NULL;
public://<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>κ<EFBFBD><CEBA><EFBFBD>
void DrawCurveMark(CCurveEx &curve);
void DrawPolyLineMidleFilter(CCurveEx &curve);
void DrawVirtual(CCurveEx &curve);
void DrawVirtualNode(CCurveEx &curve);
void DrawTypeB(CCurveEx &curve,int isClose);
void DrawCurveBezier(CCurveEx &curve,int isClose);
void DrawCurveBezierSolid(CCurveEx& curve);
void DrawCurveSplineSolid(CCurveEx& curve);
void DrawSpline(CCurveEx &curve, int isClose);
void DrawCurveWave(CCurveEx& curve);
void DrawCurveWaveSolid(CCurveEx& curve);
void DrawOffsetSolid(CCurveEx& curve,double offset);
void DrawTypeOffset(CCurveEx& curve);
void DrawTypeOffsetSolid(CCurveEx& curve,double offset);
void DrawTypeOffsetB(CCurveEx& curve);
/**
* <EFBFBD><EFBFBD>ȡ͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \return
*/
int GetAlpha() const;
/**
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \param alpha
*/
void SetAlpha(int alpha);
public:
double GetMiniSmoothStep(void); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Сƽ<D0A1><C6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL IsPrinting(BOOL bOnlyPreviewDC); //<2F>Ƿ<EFBFBD>CDC<44><43><EFBFBD>Ǵ<EFBFBD>ӡ<EFBFBD><D3A1><EFBFBD><EFBFBD>ӡԤ<D3A1><D4A4>ģʽ
protected:
void CreateDrawer();
private:
/**
* ͸<EFBFBD><EFBFBD><EFBFBD>ȣ<EFBFBD>Ŀǰֻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>õ<EFBFBD><EFBFBD><EFBFBD>
*/
int m_alpha = 255;
/**
* <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><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>Ʋ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˣ<EFBFBD><EFBFBD>װ<EFBFBD><EFBFBD>˷<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*
* \param pMeshPackage
* \return
*/
bool ShouldRenderMeshPackage(const CMesh& mesh) const;
bool m_shouldRenderMeshPackage = true;
public:
virtual void DrawCurveExOld(CCurveEx& m_curve); //ggff2025,<2C><><EFBFBD>ƾ<EFBFBD><C6BE><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD><EFBFBD><EFBFBD>
};
extern "C" AFX_EXT_API void WINAPI AfxGetText(CPointNameBase& point, CHowToViewPoint* HowToViewPoint, CText &text);
extern "C" AFX_EXT_API void WINAPI AfxGetInsert(CPointNameBase& point, CHowToViewPoint* HowToViewPoint,CInsertDraw &insert);