⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 figure.h

📁 基于NEHE第48课的程序,改为MFC下运行.运用轨迹球技术,初学者值得参考
💻 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 + -