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