www.pudn.com > my2cadtest07261930.rar > SuperPoint.h, change:2006-07-17,size:4022b


// 静态模型

#ifndef __CSUPERPOINT__
#define __CSUPERPOINT__ 
 
#include <windows.h> 
#include <math.h> 
enum MARK_FLAG { MARK_BLUE, MARK_RED, MARK_NULL };     //选中点标记状态枚举类型
double const  _PRECISION_  = 1E-10;					   // 计算精度 
double const PII = 3.14159265359;	        // 圆周率 
extern int round(double); 
// -------------超级点类-----------------          
//   对一个点具有有功能的封装, 
//   使点可围绕另一点移动或旋转,镜像 
// 作    者:李非 
// 单    位: 思远国际教育集团 千人项目组第二教研室 
// 修改日期:2005 - 07 - 20 
// 版    本:v1.0 
//----------------------------------------------- 
class CSuperPoint
{ 
private: 
	enum STATUS { NOTHING,LOCKED, OVER  };
protected:

	// 记录坐标点x,y
	POINT m_Point; 
 
	STATUS m_status;			 
 


public: 
	void SetStatus()  //更改拾取图形标记状态 
	{ 
		m_status=NOTHING; 
	} 
 
	//构造函数 
    CSuperPoint():m_status( NOTHING ){}; 
	CSuperPoint(POINT point):m_status( NOTHING ){ m_Point = point;} 
    CSuperPoint(const CSuperPoint& rhs):m_status( NOTHING ){ m_Point = rhs.m_Point; } 
	CSuperPoint(UINT x, UINT y):m_status( NOTHING ){ m_Point.x = x; m_Point.y = y;} 
     
    
    CSuperPoint& operator=( const CSuperPoint& superpt ) 
    { 
        m_Point = superpt.m_Point; 
        return *this; 
    } 
 
 
	operator POINT () 
	{ 
		return m_Point; 
	} 
	 
	//重载赋值函数 
	CSuperPoint& operator = ( POINT point ) 
	{ 
		m_Point = point; 
		return *this; 
	} 
	//重载比较运算符 
	//功能:比较两个点是否相同 
	bool operator == ( const CSuperPoint& despt ) 
	{ 
		bool result = false; 
		if( m_Point.x == despt.GetPoint().x && m_Point.y == despt.GetPoint().y ) 
		{ 
			result = true; 
		} 
		return result; 
 
	} 
 

	POINT GetPoint() const;
 
	void SetPoint(POINT point);

	void MoveTo(POINT direcPoint); 
 
    //功    能: 以该点为中心一小圆圈,用以表示该点 
	//输入参数:HDC 绘制标记小圆圈时的设备上下文 
	//			MARK_FLAG 标记颜色 
	void SetMark ( HDC&/*, MARK_FLAG */); 
	void ClearMark(HDC& hdc); 
 
	BOOL SetLockMark( HDC& hdc ); 
	BOOL ClearLockMark( HDC& hdc); 
 
	 
 
    //功    能: 判断该点是否在一条直线上 
    //输入参数:ptBeg, ptEnd 代表直线的两点 
    //返回值: bool 类型,true表示上线,false 表示未上线 
	bool IsOnLine(const POINT ptBeg,const POINT ptEnd) const ; 
    bool IsOnLine(const CSuperPoint& ptBeg, const CSuperPoint& ptEnd) const ; 
 
    //功能:判断该点是否在一圆上 
    //输入参数:centerPt 代表圆心  
    //          Radius   代表半径 
    //返回值 bool类型 
    bool IsOnLine(const CSuperPoint& centerPt, int Radius) const; 
 

	//  功    能: 计算点绕ptCenter反时针旋转dbAngle的位置
	//  输入参数: 旋转中心点 ptFix,转角 dbAngle
	//  返 回 值: 旋转到的位置 
	CSuperPoint& RotateOnFix(const CSuperPoint& ptFix, double dbAngle); 
 
	 
    // 功    能: 计算点ptOrg关于直线的对称点 
    // 输入参数: 对称轴直线一点 ptPos,对称轴的方向角(与X轴正方向的夹角) dbAngle 
    // 返 回 值: 对称点的位置 
    CSuperPoint& MirrorOnAxis(double Angle,const CSuperPoint& ptPos); 
 
   
    //功能:计算与另一点之间的距离 
    //输入参数:CSuperPoint desPt 代表other point 
    //返回参数:int 距离 
    int DistanceTo(const CSuperPoint& desPt) const; 
	 
 
 
    //功能:计算与另一点构成的直线与X正方向轴的夹角 
    //      X轴向右, Y轴向下 
    //输入参数:CSuperPoint desPt 代表other point 
    //返回参数:double 夹角 
    double AngleWithX(const CSuperPoint& desPt); 
 
	//功能:计算与另两点构成的直线之间的夹角 
	//      X轴向右, Y轴向下 
	//输入参数:CSuperPoint onedesPt, twodesPt 代表other point 
	//返回参数:double 夹角 
	double AngleWithTwoLine(const CSuperPoint& ,const CSuperPoint&); 
 
    // 功能: 对自己进行平移变换 
    // 入口参数:dx, dy轴方向的平移量 
    // 出口参数:无 
    // 返回值  :对自己的引用     
	CSuperPoint& Move(int dx, int dy); 
 
	 
	// 功能: 求根据相对比例缩放 
	// 入口参数:sk 缩放比例, centerPt 缩放的相对坐标 
	// 出口参数:无 
	// 返回值  :对自己的引用 
	CSuperPoint& ZoomIn(double sk,const CSuperPoint& centerPt); 
     
 

};// END CLASS DEFINITION CSuperPoint

#endif // __CSUPERPOINT__