0028259: Method MakeBlocksCnx is duplicated in two different places in BOPAlgo
[occt.git] / src / BVH / BVH_Box.lxx
CommitLineData
3c4e78f2 1// Created on: 2013-12-20
2// Created by: Denis BOGOLEPOV
d5f74e42 3// Copyright (c) 2013-2014 OPEN CASCADE SAS
3c4e78f2 4//
5// This file is part of Open CASCADE Technology software library.
6//
d5f74e42 7// This library is free software; you can redistribute it and/or modify it under
8// the terms of the GNU Lesser General Public License version 2.1 as published
3c4e78f2 9// by the Free Software Foundation, with special exception defined in the file
10// OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11// distribution for complete text of the license and disclaimer of any warranty.
12//
13// Alternatively, this file may be used under the terms of Open CASCADE
14// commercial license or contractual agreement.
15
16#include <Standard_ShortReal.hxx>
17
3c4e78f2 18// =======================================================================
19// function : Clear
20// purpose :
21// =======================================================================
22template<class T, int N>
23void BVH_Box<T, N>::Clear()
24{
679d3878 25 myIsInited = Standard_False;
3c4e78f2 26}
27
28// =======================================================================
29// function : Clear
30// purpose :
31// =======================================================================
32template<class T, int N>
33Standard_Boolean BVH_Box<T, N>::IsValid() const
34{
679d3878 35 return myIsInited;
3c4e78f2 36}
37
38// =======================================================================
39// function : Add
40// purpose :
41// =======================================================================
42template<class T, int N>
43void BVH_Box<T, N>::Add (const BVH_VecNt& thePoint)
44{
679d3878 45 if (!myIsInited)
3c4e78f2 46 {
47 myMinPoint = thePoint;
48 myMaxPoint = thePoint;
49
679d3878 50 myIsInited = Standard_True;
3c4e78f2 51 }
52 else
53 {
54 myMinPoint = myMinPoint.cwiseMin (thePoint);
55 myMaxPoint = myMaxPoint.cwiseMax (thePoint);
56 }
57}
58
59// =======================================================================
60// function : Combine
61// purpose :
62// =======================================================================
63template<class T, int N>
64void BVH_Box<T, N>::Combine (const BVH_Box& theBox)
65{
679d3878 66 if (theBox.myIsInited)
3c4e78f2 67 {
679d3878 68 if (!myIsInited)
3a7a7013 69 {
70 myMinPoint = theBox.myMinPoint;
71 myMaxPoint = theBox.myMaxPoint;
3c4e78f2 72
679d3878 73 myIsInited = Standard_True;
3a7a7013 74 }
75 else
76 {
77 BVH::BoxMinMax<T, N>::CwiseMin (myMinPoint, theBox.myMinPoint);
78 BVH::BoxMinMax<T, N>::CwiseMax (myMaxPoint, theBox.myMaxPoint);
79 }
3c4e78f2 80 }
81}
82
3c4e78f2 83// =======================================================================
84// function : Area
85// purpose :
86// =======================================================================
87template<class T, int N>
88T BVH_Box<T, N>::Area() const
89{
679d3878 90 return !myIsInited ? static_cast<T> (0.0) :
91 BVH::SurfaceCalculator<T, N>::Area (myMaxPoint - myMinPoint);
3c4e78f2 92}
93
94// =======================================================================
95// function : CornerMin
96// purpose :
97// =======================================================================
98template<class T, int N>
99const typename BVH_Box<T, N>::BVH_VecNt& BVH_Box<T, N>::CornerMin() const
100{
101 return myMinPoint;
102}
103
104// =======================================================================
105// function : CornerMax
106// purpose :
107// =======================================================================
108template<class T, int N>
109const typename BVH_Box<T, N>::BVH_VecNt& BVH_Box<T, N>::CornerMax() const
110{
111 return myMaxPoint;
112}
113
114// =======================================================================
115// function : CornerMin
116// purpose :
117// =======================================================================
118template<class T, int N>
119typename BVH_Box<T, N>::BVH_VecNt& BVH_Box<T, N>::CornerMin()
120{
121 return myMinPoint;
122}
123
124// =======================================================================
125// function : CornerMax
126// purpose :
127// =======================================================================
128template<class T, int N>
129typename BVH_Box<T, N>::BVH_VecNt& BVH_Box<T, N>::CornerMax()
130{
131 return myMaxPoint;
132}
133
134// =======================================================================
135// function : Size
136// purpose :
137// =======================================================================
138template<class T, int N>
139typename BVH_Box<T, N>::BVH_VecNt BVH_Box<T, N>::Size() const
140{
141 return myMaxPoint - myMinPoint;
142}
143
144// =======================================================================
145// function : Center
146// purpose :
147// =======================================================================
148template<class T, int N>
149typename BVH_Box<T, N>::BVH_VecNt BVH_Box<T, N>::Center() const
150{
151 return (myMinPoint + myMaxPoint) * static_cast<T> (0.5);
152}
679d3878 153
154// =======================================================================
155// function : Center
156// purpose :
157// =======================================================================
158template<class T, int N>
159T BVH_Box<T, N>::Center (const Standard_Integer theAxis) const
160{
161 return BVH::CenterAxis<T, N>::Center (*this, theAxis);
162}