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.

182 lines
5.8 KiB
C++

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//////////////////////////////////////////////////////////////////////////////
//文件 Net.h
//主要功能:
//
//程序编写: 2005-12-07
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "rect8ex.h"
#include "curveex.h"
#include "..\ProjectionLib\Projection.h"
#include ".\text.h"
#include ".\exchangexyz.h"
#include ".\frame.h"
class AFX_EXT_CLASS CNet : public CRect8
{
public:
CNet(void);
virtual ~CNet(void);
int64_t GetId() const;
void SetId(int64_t id);
protected:
double L1,L2,B1,B2;
CCurveEx *CurveL,*CurveB;
double delt;
CPositionList* m_pPosList; //当生成实际的曲线时的元素列表,根据此列表可以进行UNDO\设置颜色等操作
COLORREF m_colCurve;
COLORREF m_colText;
COLORREF m_colFrame;
protected:
void DrawCurve(void* pDC, CCurveEx &tc, BOOL bDraw, void* pXY);
void DrawText (void* pDC, CText& text, BOOL bDraw, void* pXY);
void DrawDFM(double x,double y,double wh,double angle,double l,
void *pDC, int side, BOOL bDraw, void* pXY=NULL, BOOL bIsL=TRUE);
void DrawNetCrossPoint (void *pDC, BOOL bDraw, void* pXY=NULL);
void DrawNetPline (void *pDC, BOOL bDraw, void* pXY=NULL);
void DrawScale (void* pDC, BOOL bDraw, void* pXY=NULL); //划刻度
void GetLCurve_M(double bb, double l0); //输入的经纬度为“分”单位
void GetBCurve_M(double lb, double b0);
//外边框操作函数
void OutFrame_Serialize(CArchive& ar, const short &ver);
int OutFrame_Read(CFile& fr, const short& ver);
void OutFrame_Write(CFile& fw, const short& ver);
void OutFrame_WriteDML(CFile& fw, const short& ver, int nBaseTabNum);
int OutFrame_ReadDML(CXmlParse& xp, const short &ver);
void OutFrame_WritePCG(CFile& fw, const short& ver, int nBaseTabNum);
int OutFrame_ReadPCG(CXmlParse& xp, const short &ver);
CRect8 GetEnlargeRangeBL(void);
public:
CProjection *m_pExchangeXYZ;
CExchangeXYZ m_exchangeXYZ;
double _FrameWidth;
CSize8 m_step; //m_step.cx=steplx,m_step.cy=stepby;//经度,纬度网格的步长,以分为单位
double scale; //刻度,以分为单位
double CrossParameter; //交点因子
DWORD m_nFlags; //文字标注方式、中间的曲线显示方式、是否有边框
CSize8 m_szText; //文字尺寸
CFrame m_outFrame; //外边框
CFrame* GetOutFrame(void);
CRect8 GetOutFrameRect(void);
CRect8 GetInFrameRect(void);
void SetFrameColor(COLORREF col);
COLORREF GetFrameColor(void);
void ChangeToBL_D(double &x, double &y); //转换为经纬度,输出单位为度
void ChangeToBL_DFM(double &x, double &y); //转换为经纬度,输出单位为度分秒
void ChangeToXY_M(double &l,double &b); //转换为坐标,输入单位为"分"
void ChangeToXY_DFM(double &l_dfm,double &b_dfm); //转换为坐标,输入为"度分秒"格式
void ClearCurve(void); //删除CurveL,CurveB曲线
CRect8 GetRangeBL(void);
virtual void Serialize(CArchive& ar, const short &ver);
virtual int Read(CFile& fr, const short& ver);
virtual void Write(CFile& fw, const short& ver);
virtual void WriteDML(CFile& fw, const short& ver, int nBaseTabNum);
virtual int ReadDML(CFile &fr, const short &ver);
virtual void WritePCG(CFile& fw, const short& ver, int nBaseTabNum);
virtual int ReadPCG(CFile &fr, const short &ver);
virtual int ReadPCG2(CFile &fr, const short &ver);
int Read_Old(CFile& fr, const short& ver);
void Write_Old(CFile& fw, const short& ver);
void WriteDML_Old(CFile& fw, const short& ver, int nBaseTabNum);
int ReadDML_Old(CFile &fr, const short &ver);
void WritePCG_Old(CFile& fw, const short& ver, int nBaseTabNum);
int ReadPCG_Old(CFile &fr, const short &ver);
virtual void GetRange(CRect8& range);
virtual void GetRange(CPoint3D& minPoint, CPoint3D& maxPoint);
virtual int IsInRange(CRect8& range);
virtual void ScaleCoordinate(double sx, double sy, int mode); //mode=0:加1:减2:乘3:除
virtual void ScaleCoor(double xs, double ys, double dx, double dy);
virtual void ScaleProperty(double sx, double sy);
virtual int Dissolution(void* pXY, CPositionList& list); //将经纬网解散生成实际的元素
virtual void Draw(void* pDC);
virtual void Calibrate(int type, void* pValue);
void operator=(CNet& net);
void SetProjection(CProjection* pExchangeXYZ);
void Offset(double dx, double dy);
//风格设置函数
bool IsHasInFrame(void);
bool IsHasOutFrame(void);
bool IsHasText(void);
void EnableInFrame(bool bView);
void EnableOutFrame(bool bView);
void EnableText(bool bView);
DWORD GetSideMode(void);
DWORD GetTextMode(void);
DWORD GetDisplayMode(void);
void SetDisplayMode(DWORD nMode);
void SetTextMode(DWORD nMode);
void SetSideMode(DWORD nMode);
bool SetStep(const CSize8& step);
void SetCurveColor(COLORREF color);
void SetTextColor(COLORREF color);
double GetFrameWidth(void);
BOOL ChangeRangeToBL(void);
enum enumGridingStyle
{
markLeft = 0x00000001, //左边
markTop = 0x00000002, //上边
markRight = 0x00000004, //右边
markBottom = 0x00000008, //下边
markAllSide = (markLeft | markTop | markRight | markBottom), //所有边
markLeftTop = (markLeft | markTop), //左边+上边
markTopRight = (markTop | markRight), //上边+右边
markRightBottom = (markRight| markBottom), //右边+下边
markBottomLeft = (markLeft | markBottom), //下边+左边
showLine = 0x00000010, //显示曲线
showCrossPoint = 0x00000020, //显示交点
showNull = 0x00000040, //显示为空
//showHorLine = 0x00000080, //显示横线
//showVerLine = 0x00010000, //显示纵线
textGeography = 0x00000100, //地理
textMath = 0x00000200, //数学
textGeography1 = 0x00000400, //地理1
textGeography2 = 0x00000800, //地理2(all)
textMathHor = 0x00020000, //数学水平
textAll = (textGeography|textMath|textGeography1|textGeography2|textMathHor),
showInFrame = 0x00001000, //是否显示内边框
showText = 0x00002000, //是否标识文字
showOutFrame = 0x00004000 //是否显示外边框
};
private:
int m_id = -1;
public:
int OutFrame_ReadPCG(void *pxp, const short &ver);
virtual int ReadPCG(void *pxp, const short &ver);
virtual int ReadPCG2(void *pxp, const short &ver);
int ReadPCG_Old(void *pxp, const short &ver);
};