0024157: Parallelization of assembly part of BO
[occt.git] / src / Select3D / Select3D_Box2d.hxx
1 // Copyright (c) 1999-2012 OPEN CASCADE SAS
2 //
3 // The content of this file is subject to the Open CASCADE Technology Public
4 // License Version 6.5 (the "License"). You may not use the content of this file
5 // except in compliance with the License. Please obtain a copy of the License
6 // at http://www.opencascade.org and read it completely before using this file.
7 //
8 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
9 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
10 //
11 // The Original Code and all software distributed under the License is
12 // distributed on an "AS IS" basis, without warranty of any kind, and the
13 // Initial Developer hereby disclaims all such warranties, including without
14 // limitation, any warranties of merchantability, fitness for a particular
15 // purpose or non-infringement. Please see the License for the specific terms
16 // and conditions governing the rights and limitations under the License.
17
18 #ifndef _Select3D_Box2d_HeaderFile
19 #define _Select3D_Box2d_HeaderFile
20
21 #include<Bnd_Box2d.hxx>
22 #include<Standard_ShortReal.hxx>
23 #include<Select3D_Macro.hxx>
24
25 struct Select3D_Box2d
26 {
27  Standard_ShortReal xmin, ymin, xmax, ymax;
28
29  Select3D_Box2d()
30  { 
31    SetVoid();
32  }
33
34  Select3D_Box2d(const Bnd_Box2d& theBox)
35  { 
36    SetField(theBox);
37  }
38
39  inline operator Bnd_Box2d() const
40  {
41    Bnd_Box2d aBox;
42    aBox.SetVoid();
43    if( !IsVoid() )
44      aBox.Update(xmin, ymin, xmax, ymax);
45    return aBox;
46  }
47
48  inline Select3D_Box2d operator = ( const Bnd_Box2d& theBox)
49  { 
50    SetField(theBox); 
51    return *this;
52  }
53
54  inline void Update(const gp_Pnt2d& thePnt)
55  {
56   Bnd_Box2d aBox;
57   aBox.Set(thePnt);
58   if( !IsVoid() )
59     aBox.Update(xmin, ymin, xmax, ymax);
60   SetField(aBox);
61  }
62
63  inline void SetVoid()
64  {
65    xmin = ymin = ShortRealLast();
66    xmax = ymax = ShortRealFirst();
67  }
68
69  inline Standard_Boolean IsVoid() const
70  {
71    return ( xmin == ShortRealLast() && ymin == ShortRealLast() && xmax == ShortRealFirst() && ymax == ShortRealFirst() );
72  }
73
74 private: 
75  inline void SetField(const Bnd_Box2d& theBox)
76  {
77   if( theBox.IsVoid() )
78     SetVoid();
79   else {
80     Standard_Real x, y, x1, y1;
81     theBox.Get(x, y, x1, y1);   
82
83     xmin = DToF(x);
84     ymin = DToF(y);
85     xmax = DToF(x1);
86     ymax = DToF(y1);
87   }
88  }
89
90 };
91
92 #endif
93
94
95
96