0028639: Improve performance of the IntPolyh_MaillageAffinage algorithm
[occt.git] / src / IntPolyh / IntPolyh_Point.hxx
1 // Created on: 1999-03-05
2 // Created by: Fabrice SERVANT
3 // Copyright (c) 1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
5 //
6 // This file is part of Open CASCADE Technology software library.
7 //
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
13 //
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
16
17 #ifndef _IntPolyh_Point_HeaderFile
18 #define _IntPolyh_Point_HeaderFile
19
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
23
24 #include <Standard_Real.hxx>
25 #include <Standard_Integer.hxx>
26 #include <Standard_Boolean.hxx>
27 class Adaptor3d_HSurface;
28
29 //! The class represents the point on the surface with
30 //! both 3D and 2D points.
31 class IntPolyh_Point
32 {
33 public:
34
35   DEFINE_STANDARD_ALLOC
36
37   //! Constructor
38   IntPolyh_Point() :
39     myX(0.), myY(0.), myZ(0.), myU(0.), myV(0.), myPOC(1), myDegenerated(Standard_False)
40   {}
41   //! Constructor
42   IntPolyh_Point(const Standard_Real x,
43                  const Standard_Real y,
44                  const Standard_Real z,
45                  const Standard_Real u,
46                  const Standard_Real v)
47   :
48     myX(x), myY(y), myZ(z), myU(u), myV(v), myPOC(1), myDegenerated(Standard_False)
49   {}
50
51   //! Returns X coordinate of the 3D point
52   Standard_Real X() const
53   {
54     return myX;
55   }
56   //! Returns Y coordinate of the 3D point
57   Standard_Real Y() const
58   {
59     return myY;
60   }
61   //! Returns the Z coordinate of the 3D point
62   Standard_Real Z() const
63   {
64     return myZ;
65   }
66   //! Returns the U coordinate of the 2D point
67   Standard_Real U() const
68   {
69     return myU;
70   }
71   //! Returns the V coordinate of the 2D point
72   Standard_Real V() const
73   {
74     return myV;
75   }
76   //! Returns 0 if the point is not common with the other surface
77   Standard_Integer PartOfCommon() const
78   {
79     return myPOC;
80   }
81   //! Assignment operator
82   void Equal (const IntPolyh_Point& Pt)
83   {
84     myX = Pt.myX;
85     myY = Pt.myY;
86     myZ = Pt.myZ;
87     myU = Pt.myU;
88     myV = Pt.myV;
89   }
90   void operator = (const IntPolyh_Point& Pt)
91   {
92     Equal(Pt);
93   }
94   //! Sets the point
95   void Set (const Standard_Real x,
96             const Standard_Real y,
97             const Standard_Real z,
98             const Standard_Real u,
99             const Standard_Real v,
100             const Standard_Integer II = 1)
101   {
102     myX = x;
103     myY = y;
104     myZ = z;
105     myU = u;
106     myV = v;
107     myPOC = II;
108   }
109   //! Sets the X coordinate for the 3D point
110   void SetX (const Standard_Real x)
111   {
112     myX = x;
113   }
114   //! Sets the Y coordinate for the 3D point
115   void SetY (const Standard_Real y)
116   {
117     myY = y;
118   }
119   //! Sets the Z coordinate for the 3D point
120   void SetZ (const Standard_Real z)
121   {
122     myZ = z;
123   }
124   //! Sets the U coordinate for the 2D point
125   void SetU (const Standard_Real u)
126   {
127     myU = u;
128   }
129   //! Sets the V coordinate for the 2D point
130   void SetV (const Standard_Real v)
131   {
132     myV = v;
133   }
134   //! Sets the part of common
135   void SetPartOfCommon (const Standard_Integer ii)
136   {
137     myPOC = ii;
138   }
139   //! Creates middle point from P1 and P2 and stores it to this
140   Standard_EXPORT void Middle (const Handle(Adaptor3d_HSurface)& MySurface, const IntPolyh_Point& P1, const IntPolyh_Point& P2);
141   //! Addition
142   Standard_EXPORT IntPolyh_Point Add (const IntPolyh_Point& P1) const;
143   IntPolyh_Point operator + (const IntPolyh_Point& P1) const
144   {
145     return Add(P1);
146   }
147   //! Subtraction
148   Standard_EXPORT IntPolyh_Point Sub (const IntPolyh_Point& P1) const;
149   IntPolyh_Point operator - (const IntPolyh_Point& P1) const
150   {
151     return Sub(P1);
152   }
153   //! Division
154   Standard_EXPORT IntPolyh_Point Divide (const Standard_Real rr) const;
155   IntPolyh_Point operator / (const Standard_Real rr) const
156   {
157     return Divide(rr);
158   }
159   //! Multiplication
160   Standard_EXPORT IntPolyh_Point Multiplication (const Standard_Real rr) const;
161   IntPolyh_Point operator * (const Standard_Real rr) const
162   {
163     return Multiplication(rr);
164   }
165   //! Square modulus
166   Standard_EXPORT Standard_Real SquareModulus() const;
167   //! Square distance to the other point
168   Standard_EXPORT Standard_Real SquareDistance (const IntPolyh_Point& P2) const;
169   //! Dot
170   Standard_EXPORT Standard_Real Dot (const IntPolyh_Point& P2) const;
171   //! Cross
172   Standard_EXPORT void Cross (const IntPolyh_Point& P1, const IntPolyh_Point& P2);
173   //! Dump
174   Standard_EXPORT void Dump() const;
175   //! Dump
176   Standard_EXPORT void Dump (const Standard_Integer i) const;
177   //! Sets the degenerated flag
178   void SetDegenerated (const Standard_Boolean theFlag)
179   {
180     myDegenerated = theFlag;
181   }
182   //! Returns the degenerated flag
183   Standard_Boolean Degenerated() const
184   {
185     return myDegenerated;
186   }
187
188 protected:
189
190 private:
191
192   Standard_Real myX;
193   Standard_Real myY;
194   Standard_Real myZ;
195   Standard_Real myU;
196   Standard_Real myV;
197   Standard_Integer myPOC;
198   Standard_Boolean myDegenerated;
199
200 };
201
202 #endif // _IntPolyh_Point_HeaderFile