gp_Pnt描述了三维空间中的一个点。
gp_Pnt的定义:
class gp_Pnt
{
public:
...
private:
gp_XYZ coord;
};
默认情况下,位置为原点。
inline gp_Pnt::gp_Pnt() { }
两点的重心。计算公式为:(Alpha*this + Beta*P) / (Alpha + Beta)
inline void gp_Pnt::BaryCenter(const Standard_Real A,const gp_Pnt& P,const Standard_Real B)
{
coord.SetLinearForm(A,coord,B,P.coord);
coord.Divide(A + B);
}
两个点是否相等的判断:两点间距小于等于容差。
inline Standard_Boolean gp_Pnt::IsEqual(const gp_Pnt& Other,const Standard_Real LinearTolerance) const
{
return Distance (Other) <= LinearTolerance;
}
点关于点的对称变换。
void gp_Pnt::Mirror (const gp_Pnt& P)
{
coord.Reverse ();
gp_XYZ XYZ = P.coord;
XYZ.Multiply (2.0);
coord.Add (XYZ);
}
点关于轴的对称变换。
void gp_Pnt::Mirror (const gp_Ax1& A1)
{
gp_Trsf T;
T.SetMirror (A1);
T.Transforms (coord);
}
点关于面的对称变换。
void gp_Pnt::Mirror (const gp_Ax2& A2)
{
gp_Trsf T;
T.SetMirror (A2);
T.Transforms (coord);
}
旋转,A1是旋转轴,Ang是旋转角度。
inline void gp_Pnt::Rotate (const gp_Ax1& A1, const Standard_Real Ang)
{
gp_Trsf T;
T.SetRotation (A1, Ang);
T.Transforms (coord);
}
缩放
inline void gp_Pnt::Scale (const gp_Pnt& P, const Standard_Real S)
{
gp_XYZ XYZ = P.coord;
XYZ.Multiply (1.0 - S);
coord.Multiply (S);
coord.Add (XYZ);
}
变换
void gp_Pnt::Transform (const gp_Trsf& T)
{
if (T.Form() == gp_Identity)
{
}
else if (T.Form() == gp_Translation)
{
coord.Add (T.TranslationPart ());
}
else if (T.Form() == gp_Scale)
{
coord.Multiply (T.ScaleFactor ());
coord.Add (T.TranslationPart ());
}
else if(T.Form() == gp_PntMirror)
{
coord.Reverse ();
coord.Add (T.TranslationPart ());
}
else
{
T.Transforms(coord);
}
}
平移
inline void gp_Pnt::Translate (const gp_Vec& V)
{
coord.Add (V.XYZ());
}