There are CDC classes in VC ++, and opengldc classes based on OpenGL can also be developed. In this way, opengldc classes can be called just like CDC classes.
First, we provide two tool classes: vertex class and Vector class.
Typedef struct tagvector3d
{
Double DX;
Double dy;
Double DZ;
} Vector3d;
Class cvector3d: Public vector3d
{
Public:
Cvector3d ();
Virtual ~ Cvector3d ();
Cvector3d (vector3d V );
Cvector3d (cvector3d & V );
Cvector3d (const double * P );
Cvector3d (double IX, double Iy, double IZ );
Public:
Double getlength () const;
Void normal ();
Cvector3d operator * (vector3d v) const;
Cvector3d operator * (cvector3d v) const;
Void operator = (cvector3d V );
Void operator-= (vector3d V );
Void operator-= (cvector3d V );
Cvector3d operator + (vector3d v) const;
Cvector3d operator + (cvector3d v) const;
Cvector3d operator-(vector3d v) const;
Cvector3d operator-(cvector3d v) const;
Cvector3d operator * (double D) const;
};
Typedef struct tagpoint3d
{
Double X;
Double Y;
Double Z;
} Point3d;
Class cpoint3d: Public point3d
{
Public:
Cpoint3d ();
Cpoint3d (double IX, double Iy, double iz = 0.0 );
Cpoint3d (const double * P );
Cpoint3d (point3d P );
Virtual ~ Cpoint3d ();
Public:
Cpoint3d operator-(vector3d v) const;
Cpoint3d operator + (vector3d v) const;
Void operator ++ = (vector3d V );
Void operator-= (vector3d V );
Cpoint3d operator-(cvector3d v) const;
Cpoint3d operator + (cvector3d v) const;
Void operator + = (cvector3d V );
Void operator-= (cvector3d V );
};
The specific implementation is as follows:
Cvector3d: cvector3d ()
{
}
Cvector3d ::~ Cvector3d ()
{
}
Cvector3d: cvector3d (vector3d V)
{
DX = V. dx;
DY = v. DY;
DZ = V. dz;
}
Cvector3d: cvector3d (cvector3d & V)
{
DX = V. dx;
DY = v. DY;
DZ = V. dz;
}
Cvector3d: cvector3d (const double * P)
{
DX = P [0];
DY = P [1];
DZ = P [2];
}
Cvector3d: cvector3d (double IX, double Iy, double IZ)
{
DX = IX;
DY = Iy;
DZ = iz;
}
Double cvector3d: getlength () const // vector Length
{
Double Len = 0;
Len = SQRT (dx * dx + dy * dy + DZ * Dz );
Return Len;
}
Void cvector3d: normal () // unitization
{
Double Len = getlength ();
Dx/= Len;
Dy/= Len;
DZ/= Len;
}
// Vector cross multiplication. The parameter is a structure or class.
Cvector3d cvector3d: Operator * (vector3d v) const
{
Return cvector3d (dy * v. Dz-DZ * v. DY, DZ * v. DX-DX * v. dz, DX * v. Dy-dy * v. dx );
}
Cvector3d cvector3d: Operator * (cvector3d v) const
{
Return cvector3d (dy * v. Dz-DZ * v. DY, DZ * v. DX-DX * v. dz, DX * v. Dy-dy * v. dx );
}
Void cvector3d: Operator-= (vector3d V)
{
DX-= V. dx;
Dy-= v. DY;
Dz-= V. dz;
}
Void cvector3d: Operator-= (cvector3d V)
{
DX-= V. dx;
Dy-= v. DY;
Dz-= V. dz;
}
Cvector3d cvector3d: Operator + (vector3d v) const
{
Return cvector3d (dx + v. dx, dy + v. DY, DZ + v. Dz );
}
Cvector3d cvector3d: Operator + (cvector3d v) const
{
Return cvector3d (dx + v. dx, dy + v. DY, DZ + v. Dz );
}
Cvector3d cvector3d: Operator-(vector3d v) const
{
Return cvector3d (DX-V. dx, Dy-v. DY, Dz-V. Dz );
}
Cvector3d cvector3d: Operator-(cvector3d v) const
{
Return cvector3d (DX-V. dx, Dy-v. DY, Dz-V. Dz );
}
Cvector3d cvector3d: Operator * (double D) const
{
Return cvector3d (dx * D, Dy * D, DZ * D );
}
Void cvector3d: Operator = (cvector3d V)
{
DX = V. dx;
DY = v. DY;
DZ = V. dz;
}
Cpoint3d: cpoint3d ()
{
}
Cpoint3d ::~ Cpoint3d ()
{
}
Cpoint3d: cpoint3d (double IX, double Iy, double IZ)
{
X = IX;
Y = Iy;
Z = iz;
}
Cpoint3d: cpoint3d (const double * P)
{
X = P [0];
Y = P [1];
Z = P [2];
}
Cpoint3d: cpoint3d (point3d P)
{
X = p. x;
Y = P. Y;
Z = P. Z;
}
Cpoint3d cpoint3d: Operator-(vector3d v) const
{
Return cpoint3d (X-V. dx, Y-v. DY, Z-V. Dz );
}
Cpoint3d cpoint3d: Operator + (vector3d v) const
{
Return cpoint3d (x + v. dx, Y + v. DY, Z + v. Dz );
}
Void cpoint3d: Operator + = (vector3d V)
{
X + = V. dx;
Y + = v. DY;
Z + = V. dz;
}
Void cpoint3d: Operator-= (vector3d V)
{
X-= V. dx;
Y-= v. DY;
Z-= V. dz;
}
Cpoint3d cpoint3d: Operator-(cvector3d v) const
{
Return cpoint3d (X-V. dx, Y-v. DY, Z-V. Dz );
}
Cpoint3d cpoint3d: Operator + (cvector3d v) const
{
Return cpoint3d (x + v. dx, Y + v. DY, Z + v. Dz );
}
Void cpoint3d: Operator + = (cvector3d V)
{
X + = V. dx;
Y + = v. DY;
Z + = V. dz;
}
Void cpoint3d: Operator-= (cvector3d V)
{
X-= V. dx;
Y-= v. DY;
Z-= V. dz;
}