// File gp_Pnt.lxx , JCV 03/06/90 // JCV 30/08/90 Modif passage version C++ 2.0 sur Sun // JCV 06/12/90 Modif introduction des classes XYZ Mat dans le package gp // Modif DPF 23/06/93 Ajout fonction Coord pour genericite 2d 3d #include #include inline gp_Pnt::gp_Pnt() { } inline gp_Pnt::gp_Pnt (const gp_XYZ& Coordinates) : coord (Coordinates) { } inline gp_Pnt::gp_Pnt (const Standard_Real Xp, const Standard_Real Yp, const Standard_Real Zp) : coord(Xp, Yp,Zp) { } inline void gp_Pnt::SetCoord (const Standard_Integer Index, const Standard_Real Xi) { coord.SetCoord (Index, Xi); } inline void gp_Pnt::SetCoord (const Standard_Real Xp, const Standard_Real Yp, const Standard_Real Zp) { coord.SetCoord (Xp, Yp, Zp); } inline void gp_Pnt::SetX (const Standard_Real X) { coord.SetX (X); } inline void gp_Pnt::SetY (const Standard_Real Y) { coord.SetY (Y); } inline void gp_Pnt::SetZ (const Standard_Real Z) { coord.SetZ (Z); } inline void gp_Pnt::SetXYZ (const gp_XYZ& Coordinates) { coord = Coordinates; } inline Standard_Real gp_Pnt::Coord (const Standard_Integer Index) const { return coord.Coord(Index); } inline void gp_Pnt::Coord (Standard_Real& Xp, Standard_Real& Yp, Standard_Real& Zp) const { coord.Coord (Xp, Yp, Zp); } inline Standard_Real gp_Pnt::X() const { return coord.X(); } inline Standard_Real gp_Pnt::Y() const { return coord.Y(); } inline Standard_Real gp_Pnt::Z() const { return coord.Z(); } inline const gp_XYZ& gp_Pnt::XYZ () const { return coord; } inline const gp_XYZ& gp_Pnt::Coord () const { return coord; } inline gp_XYZ& gp_Pnt::ChangeCoord () { return coord; } 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; } inline Standard_Real gp_Pnt::Distance (const gp_Pnt& Other) const { Standard_Real d=0,dd; const gp_XYZ& XYZ = Other.coord; dd = coord.X(); dd -= XYZ.X(); dd *= dd; d += dd; dd = coord.Y(); dd -= XYZ.Y(); dd *= dd; d += dd; dd = coord.Z(); dd -= XYZ.Z(); dd *= dd; d += dd; return(sqrt(d)); } inline Standard_Real gp_Pnt::SquareDistance (const gp_Pnt& Other) const { Standard_Real d=0,dd; const gp_XYZ& XYZ = Other.coord; dd = coord.X(); dd -= XYZ.X(); dd *= dd; d += dd; dd = coord.Y(); dd -= XYZ.Y(); dd *= dd; d += dd; dd = coord.Z(); dd -= XYZ.Z(); dd *= dd; d += dd; return(d); } inline void gp_Pnt::Rotate (const gp_Ax1& A1, const Standard_Real Ang) { gp_Trsf T; T.SetRotation (A1, Ang); T.Transforms (coord); } inline gp_Pnt gp_Pnt::Rotated (const gp_Ax1& A1, const Standard_Real Ang) const { gp_Pnt P = *this; P.Rotate (A1, Ang); return P; } 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); } inline gp_Pnt gp_Pnt::Scaled (const gp_Pnt& P, const Standard_Real S) const { gp_Pnt Pres = *this; Pres.Scale (P, S); return Pres; } inline gp_Pnt gp_Pnt::Transformed (const gp_Trsf& T) const { gp_Pnt P = *this; P.Transform (T); return P; } inline void gp_Pnt::Translate (const gp_Vec& V) { coord.Add (V.XYZ()); } inline gp_Pnt gp_Pnt::Translated (const gp_Vec& V) const { gp_Pnt P = *this; P.coord.Add (V.XYZ()); return P; } inline void gp_Pnt::Translate (const gp_Pnt& P1, const gp_Pnt& P2) { coord.Add (P2.coord); coord.Subtract (P1.coord); } inline gp_Pnt gp_Pnt::Translated (const gp_Pnt& P1, const gp_Pnt& P2) const { gp_Pnt P = *this; P.Translate (P1 , P2); return P; }