📄 figure.h
字号:
//Version 1.1c
//Code by Phil.Z
//Date 2007-12-28
#ifndef FIGURE_H_
#define FIGURE_H_
//图形类库内部使用的点类
class PT
{
public:
PT(float x,float y,float z);
PT(float * CoordList);
~PT() {}
public:
float X;
float Y;
float Z;
};
typedef PT Vector;
//构造图型类库的继承结构
class Figure
{
public:
Figure();
virtual ~Figure() = 0;
bool GetCurStatue() const;
void SetCurStatue(bool statue);
void GetRot(float CurRot[]) const;
void SetRot(float RotData[]);
virtual void SetPos(float ptPos[]) = 0;
virtual void GetPos(float ptPos[]) = 0;
int GetName() const;
void SetName(int NewName);
virtual void Display() const;
protected:
float m_fXRot;
float m_fYRot;
float m_fZRot;
bool m_bCurFigure;
int m_nName;
};
class Figure2D : public Figure
{
public:
Figure2D();
virtual ~Figure2D() = 0;
virtual void Display() const;
void SetPos(float MoveVec[]);
void GetPos(float MoveVec[]);
protected:
Vector m_vecMove;
};
class Figure3D : public Figure
{
public:
Figure3D(float ptCenter[]);
virtual ~Figure3D(){};
void SetPos(float ptPos[]);
void GetPos(float ptPos[]);
virtual void Display() const;
protected:
PT m_ptCenter;
};
//==========2D图形点类===========
//构造函数传入参数数组共7个元素,依次表示坐标(X,Y,Z)、点宽、颜色(用0-1表示的RGB)
//构造函数不负责对传入数据进行正确性检验,如果传入数据不正确结果不确定
class Point : public Figure2D
{
public:
Point(float *initList);
virtual ~Point();
virtual void Display() const;
private:
PT m_Point;
float m_fSize;
float m_afColor[3];
};
//==========2D图形线类============
//构造函数传入参数数组共10个元素,依次表示起点坐标(X,Y,Z)、终点坐标、线宽、颜色(用0-1表示的RGB)
//构造函数不负责对传入数据进行正确性检验,如果传入数据不正确结果不确定
class Line : public Figure2D
{
public:
Line(float *initList);
virtual ~Line();
virtual void Display() const;
private:
PT m_ptFrom;
PT m_ptTo;
float m_fWidth;
float m_afColor[3];
};
//=========2D图形矩形类=========
//构造函数传入参数数组共9个元素,依次表示中心点坐标(X,Y,Z)、宽(X方向)、
//高(Y方向)、填充模式(GL_FILL/GL_LINE)、颜色(用0-1表示的RGB)
//构造函数不负责对传入数据进行正确性检验,如果传入数据不正确结果不确定
class Rect : public Figure2D
{
public:
Rect(float *initList);
virtual ~Rect();
virtual void Display() const;
private:
PT m_ptCenter;
float m_fWidth;
float m_fHeight;
float m_afColor[3];
unsigned int m_nFillMode;
static int m_nRectNum;
static unsigned int m_nDispList;
};
//=========2D图形圆类==========
//构造函数传入参数数组共8个元素,依次表示中心点坐标(X,Y,Z)、X方向半径、
//Y方向半径、颜色(用0-1表示的RGB)
//构造函数不负责对传入数据进行正确性检验,如果传入数据不正确结果不确定
class Circle : public Figure2D
{
public:
Circle(float *initList);
virtual ~Circle();
virtual void Display() const;
private:
PT m_ptCenter;
float m_fXRadius;
float m_fYRadius;
float m_afColor[3];
static int m_nCircleNum;
static unsigned int m_nDispList;
};
//========3D图形立方体========
//构造函数传入参数数组共9个元素,依次表示中心点坐标(X,Y,Z)、X方向长度、
//Y方向长度、Z方向长度、颜色(用0-1表示的RGB)
//构造函数不负责对传入数据进行正确性检验,如果传入数据不正确结果不确定
class Cube : public Figure3D
{
public:
Cube(float *initList);
virtual ~Cube();
virtual void Display() const;
private:
float m_fXLength;
float m_fYLength;
float m_fZLength;
float m_afColor[3];
static int m_nCubeNum;
static unsigned int m_nDispList;
};
//====3D二次对象图形基类=====
//构造函数参数precision表示二次对象绘制精度,CenterPos表示中心坐标
class Quadric : public Figure3D
{
public:
Quadric(float precision,float *CenterPos);
virtual ~Quadric();
virtual void Display() const = 0;
protected:
GLUquadric *m_qObj;
float m_fPrecision;
};
//=====3D球形类=======
//构造函数传入参数数组共8个元素,依次表示中心点坐标(X,Y,Z)、球体半径、渲染精度、颜色(用0-1表示的RGB)
//构造函数不负责对传入数据进行正确性检验,如果传入数据不正确结果不确定
class Sphere : public Quadric
{
public:
Sphere(float *initList);
virtual ~Sphere();
virtual void Display() const;
private:
float m_fRadius;
float m_afColor[3];
};
//====3D圆柱类=======
//构造函数传入参数数组共10个元素,依次表示中心点坐标(X,Y,Z)、
//圆柱上、下表面半径、高度、渲染精度、颜色(用0-1表示的RGB)
//构造函数不负责对传入数据进行正确性检验,如果传入数据不正确结果不确定
class Cylinder : public Quadric
{
public:
Cylinder(float *initList);
virtual ~Cylinder();
virtual void Display() const;
private:
float m_fTopRadius;
float m_fBaseRadius;
float m_fHeight;
float m_afColor[3];
};
//=====3D碟型类======
class Disk : public Quadric
{
public:
Disk(float *initList);
virtual ~Disk();
virtual void Display() const;
private:
float m_fInRadius;
float m_fOutRadius;
float m_fHeight;
float m_afColor[3];
};
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -