第二章 信 息 管 理 的 类
信息管理的类主要用于问题空间中的各种对象,在分析问题的空间中,主要有点类,直线类、圆弧类,以及描述建筑物的门窗类、房间类,公寓类等,各种类主要由属性和成员函数进行描述。下面分别进行介绍。
1、点类CmyPoint
点类用来描述AutoCAD中的点,主要用于记录线条的起点和终点,也用于在图形拓扑结构中的节点。下面是点类的定义
class CmyPoint
{
public:
CMyPoint();//构造函数
BOOL operator==(CMyPoint &aPoint); //运算符重载,用于判断两个点的坐标是否相等
CMyPoint *midPoint(CMyPoint *p); //计算当点和另一个点之间的中点
CMyPoint *nextPoint;//点链表指针
virtual ~CMyPoint();//析构函数
public:
double x,y,z;//点的坐标
CMyPoint(double thex,double they,double thez):x(thex),y(they),z(thez) //构造函数
{
nextPoint=NULL;
}
double DisToPoint(CMyPoint &aPoint)计算当前点与另一点的距离
double directAngleTo(CMyPoint &p)计算当前点到另一点的方向角
BOOL aboutEqual(CMyPoint &p); //判断一个电是否在另一个点的附近,用于对图形归整
bool samePoint(CMyPoint &p); //判断两个点是否是同一点
}
2、直线类
直线类用于描述AutoCAD中的直线,并且在我们的分析还用中心线描述墙体,墙上的门洞也用直线进行描述。下面是直线类的定义:
class CLine
{
public:
//属性
//the start and the direction angle and it's length definate a line
CMyPoint *theS,*theE;//直线的起始点和终结点
double dAngle,dLength;//直线的方向角和长度,角度单位为弧度,长度单位为毫米
AcDbObjectId lineID;//直线的CAD的ID号
int wins;//该直线段上的直线段—也就是该直线上的门窗线条数目
CLine *winLine[MAXWIN];//门窗线条数组MAXWIN为门窗线条的最大数目设置为15
double thickness;
//成员函数
CLine();//构造函数
CLine(CMyPoint *s,CMyPoint *e); //构造函数
CLine(AcGePoint3d &start,AcGePoint3d &end,AcDbObjectId aId); //构造函数,以AutoCAD中的点类进行定义该直线
void exchangeEnds();//交互直线的两个端点,改变直线的方向。
CMyPoint *getEnd();//返回直线的终点
BOOL onIt(CLine &aLine);判断另一条直线是否在该直线上,用于初次扫描图形的时候判断是否另一条直线是重复绘制的多余对象,也用于再次对图形扫描的时候判断另一直线是否是该直线表达的墙体上的门洞线条,从而进行门洞记录。
int OnItExtend(CLine &aLine);判断另一直线是否在该直线的延长线上,只要用于应用极小完整性进行墙体信息恢复的时候判断两直线是否组成一个完整的墙体。
BOOL parallelTo(CLine &aLine); 判断两条直线是否平行