www.pudn.com > MapDB.rar > MapObject.h
#if !defined __MAPOBJECT__2003__05__25__
#define __MAPOBJECT__2003__05__25__
#include "afxtempl.h"
#define OBJFINISHED -600000 // 目标结束 -666666.0
#define USRFINISHED -900000 // 文件结束 -999999
#define OBJTITLE_LINEOBJECT 10000 // 线状目标
#define OBJTITLE_PLANEOBJECT 20000 // 面状目标
#define OBJTITLE_POINTOBJECT 30000 // 点状目标
#define OBJTITLE_CONTROLPT 30000 // 控制点
#define OBJTITLE_SCHEMAPT 10000 // 图廓点
// 10001 铁路
// 10003 汽渡虚线
// 10004 主要道路
// 20001 码头
// 20002 铁路中转站
// 20003 河流、湖泊
// 20004 居民地
class CMPoint : public CObject
{
public:
long r; // Screen Coords.
long c; //
long x; // Normal Coords.
long y; //
double xt; // Trans. Coords.
double yt; //
double xi; // Import Coords.
double yi; //
CMPoint();
void Serialize( CArchive& archive);
DECLARE_SERIAL(CMPoint)
};
typedef CTypedPtrArray CMPointArray;
class CMapObject : public CObject
{
public:
BOOL IsLine();
BOOL IsPlane();
BOOL GetPolyRgn(CRgn * rgn);
BOOL GetRect(CRect & rect);
BOOL GetCenter(CPoint & pt);
void DrawVector(CDC * pDC,double sx = 1,double sy = 1,double bx = 0,double by = 0);
long ID;
CDWordArray m_titles;
CMPointArray m_mpts;
CMPoint m_center;
CRect m_bound;
CMapObject();
virtual ~CMapObject();
void Serialize( CArchive& archive);
DECLARE_SERIAL(CMapObject)
};
typedef CTypedPtrArray CMapObjectArray;
#pragma pack(1)
typedef struct _BITS
{
unsigned char b0 : 1;
unsigned char b1 : 1;
unsigned char b2 : 1;
unsigned char b3 : 1;
unsigned char b4 : 1;
unsigned char b5 : 1;
unsigned char b6 : 1;
unsigned char b7 : 1;
_BITS() { b0 = b1 = b2 = b3 = b4 = b5 = b6 = b7 = 0; }
unsigned char operator [](int bit) const
{
if ( bit < 1 )
return b0;
else if ( bit < 2 )
return b1;
else if ( bit < 3 )
return b2;
else if ( bit < 4 )
return b3;
else if ( bit < 5 )
return b4;
else if ( bit < 6 )
return b5;
else if ( bit < 7 )
return b6;
else if ( bit < 8 )
return b7;
else
return 0;
}
friend CArchive& operator<< (CArchive& ar,struct _BITS & b)
{
ar << (unsigned char)( b.b0 | ( b.b1 << 1 ) | ( b.b2 << 2 ) | ( b.b3 << 3 ) |
( b.b4 << 4 ) | ( b.b5 << 5 ) | ( b.b6 << 6 ) | ( b.b7 << 7 ) );
return ar;
}
friend CArchive& operator>> (CArchive& ar,struct _BITS & b)
{
unsigned char t;
ar >> t;
b.b0 = t & 1;
b.b1 = ( t & 2 ) >> 1;
b.b2 = ( t & 4 ) >> 2;
b.b3 = ( t & 8 ) >> 3;
b.b4 = ( t & 16 ) >> 4;
b.b5 = ( t & 32 ) >> 5;
b.b6 = ( t & 64 ) >> 6;
b.b7 = ( t & 128 ) >> 7;
return ar;
}
BOOL SetAt(int bit,unsigned char value = 1)
{
if ( bit < 1 )
b0 = value;
else if ( bit < 2 )
b1 = value;
else if ( bit < 3 )
b2 = value;
else if ( bit < 4 )
b3 = value;
else if ( bit < 5 )
b4 = value;
else if ( bit < 6 )
b5 = value;
else if ( bit < 7 )
b6 = value;
else if ( bit < 8 )
b7 = value;
else
return FALSE;
return TRUE;
}
}BITS;
#pragma pack()
typedef CArray BitsArray;
typedef CMap CMapDWordToDWord;
long RD2L(double d);
#define GETDISTANCE(gpt1,gpt2) sqrt( ( gpt1->y - gpt2->y ) * ( gpt1->y - gpt2->y ) + ( gpt1->x - gpt2->x ) * ( gpt1->x - gpt2->x ) )
#endif