Integration of OCCT 6.5.0 from SVN
[occt.git] / src / gp / gp_Pnt.lxx
diff --git a/src/gp/gp_Pnt.lxx b/src/gp/gp_Pnt.lxx
new file mode 100755 (executable)
index 0000000..12184c4
--- /dev/null
@@ -0,0 +1,165 @@
+// 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 <gp_Trsf.hxx>
+#include <gp_Vec.hxx>
+
+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;
+}               
+