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.

119 lines
3.4 KiB
C

1 month ago
//////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD>: <20><>ʽת<CABD><D7AA><EFBFBD><EFBFBD>
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
// ת<><D7AA>GeoMap3.2<EFBFBD>ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϳ<EFBFBD><EFBFBD>ļ<EFBFBD>
//
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2009-8-04
//
//
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "GeoMapDataType.h"
namespace NFormatReader
{
namespace NGeoMapReader
{
//*****************************************
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD><EFBFBD>(Geomap 3.2 lsl)
//*****************************************
// Geomap <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
struct GMShapeLineIndex
{
int pos; // <20><><EFBFBD>ݿ<EFBFBD>ʼλ<CABC><CEBB>
int len; // <20><><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
};
// Geomap <20><><EFBFBD><EFBFBD>ͼԪ
struct GMShapeLineElement
{
::byte eType; // ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD>(0:<3A><><EFBFBD><EFBFBD>,1:ֱ<><D6B1>,2:<3A><>Բ,3:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,4:<3A><>,5:<3A><>Բ<EFBFBD><D4B2>)
::byte isFill; // <20>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
GColor lineColor; // <20><>/<2F>߽<EFBFBD><DFBD><EFBFBD>ɫ
GColor fillColor; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ
char x1,y1,x2,y2; // ͼԪ<CDBC><D4AA><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD>
};
// Geomap <20><><EFBFBD>Ͳ<EFBFBD>
struct GMShapeLineLayer
{
::byte yTop; // <20>ϲ<EFBFBD><CFB2>߶<EFBFBD>
::byte yBottom; // <20>²<EFBFBD><C2B2>߶<EFBFBD>
::byte width; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
::byte nElement; // ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD>
::byte type; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(1:<3A><>ʼ<EFBFBD><CABC>,2:ѭ<><D1AD><EFBFBD><EFBFBD>,4:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
::byte res1; // δ֪(?=1)
GMShapeLineElement *elem; // ͼԪ<CDBC><D4AA><EFBFBD><EFBFBD>
};
// Geomap <20><><EFBFBD><EFBFBD>
struct GMShapeLine
{
::byte nameLen; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƴ<EFBFBD><C6B3><EFBFBD>
char name[256]; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int user; // <20>Ƿ<EFBFBD><C7B7>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>(0:ϵͳ<CFB5><CDB3><EFBFBD><EFBFBD>,1:<3A>û<EFBFBD><C3BB><EFBFBD><EFBFBD><EFBFBD>)
::byte nLayer; // <20><><EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD>
GMShapeLineLayer *layer; // ͼ<><CDBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
// Windows ϵͳȱʡ<C8B1><CAA1>ɫ<EFBFBD><C9AB>
static GColor GMsysColors[48] = {
{255,128,128,0},{255,255,128,0},{128,255,128,0},{ 0,255,128,0},{128,255,255,0},{ 0,128,255,0},{255,128,192,0},{255,128,255,0},
{255, 0, 0,0},{255,255, 0,0},{128,255, 0,0},{ 0,255, 64,0},{ 0,255,255,0},{ 0,128,192,0},{128,128,192,0},{255, 0,255,0},
{128, 64, 64,0},{255,128, 64,0},{ 0,255, 0,0},{ 0,128,128,0},{ 0, 64,128,0},{128,128,255,0},{128, 0, 64,0},{255, 0,128,0},
{128, 0, 0,0},{255,128, 0,0},{ 0,128, 0,0},{ 0,128, 64,0},{ 0, 0,255,0},{ 0, 0,160,0},{128, 0,128,0},{128, 0,255,0},
{ 64, 0, 0,0},{128, 64, 0,0},{ 0, 64, 0,0},{ 0, 64, 64,0},{ 0, 0,128,0},{ 0, 0, 64,0},{ 64, 0, 64,0},{ 64, 0,128,0},
{ 0, 0, 0,0},{128,128, 0,0},{128,128, 64,0},{128,128,128,0},{ 64,128,128,0},{192,192,192,0},{ 64, 0, 64,0},{255,255,255,0}
};
class CGeoMapLineShapeLib
{
public:
CGeoMapLineShapeLib(void);
virtual ~CGeoMapLineShapeLib(void);
public:
// <20><>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><><EFBFBD><EFBFBD>GDI<44><49><EFBFBD><EFBFBD>)(<28><>ǰδ<C7B0><CEB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E3B4A6>)
bool DrawLine( CDC *pDC, int lineID, bool useColor, GColor color, int size, int nVertex, CPoint *vertex);
public:
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
static bool LoadLine(CString *fname=NULL);
// <20>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
static void FreeLine();
private:
static GMShapeLine *lineShapes; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
static int nLine; // <20><><EFBFBD>Ϳ<EFBFBD><CDBF>е<EFBFBD><D0B5><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD>
private:
void DrawLayer( GMShapeLineLayer layer); // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD>
void DrawLineSeg( GMShapeLineLayer layer, int DrawType ); // <20><><EFBFBD><EFBFBD><EFBFBD>߶<EFBFBD>
void convert(CPoint &pt);
void convert(CPoint *pt, int n);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߶εĽ<CEB5><C4BD><EFBFBD>
bool CalcIntersectedPoint( CPoint pt11,CPoint pt12, CPoint pt21, CPoint pt22, CPoint &pt);
private:
int lineID = 0; // <20><><EFBFBD><EFBFBD>ID
IPoint ptStart{}; // ʵ<>ʻ<EFBFBD><CABB>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int BegPos = 0, EndPos = 0; // <20><><EFBFBD>ƵIJ<C6B5><C4B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD>ϵ<EFBFBD><CFB5><EFBFBD>ֹλ<D6B9><CEBB>
double sina = 0,cosa = 0; // <20><>ǰ<EFBFBD>߶<EFBFBD><DFB6><EFBFBD><EFBFBD>Dz<EFBFBD><C7B2><EFBFBD>
private:
CDC *pDC = nullptr; // <20><><EFBFBD><EFBFBD>
bool useColor = false; // <20><><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
GColor color{}; // <20>û<EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ
int size = 0; // <20>߿<EFBFBD>
int nVertex = 0; // <20><><EFBFBD>ߵĶ<DFB5><C4B6><EFBFBD><EFBFBD><EFBFBD>
CPoint *vertex = nullptr; // <20><><EFBFBD>ߵĶ<DFB5><C4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
};
};