1 // Created on: 2005-10-14
2 // Created by: Mikhail KLOKOV
3 // Copyright (c) 2005-2014 OPEN CASCADE SAS
5 // This file is part of Open CASCADE Technology software library.
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
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.
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
16 #include <IntTools_SurfaceRangeLocalizeData.ixx>
17 #include <IntTools_ListIteratorOfListOfSurfaceRangeSample.hxx>
18 #include <IntTools_ListIteratorOfListOfBox.hxx>
19 #include <IntTools_MapIteratorOfMapOfSurfaceSample.hxx>
20 #include <Precision.hxx>
22 IntTools_SurfaceRangeLocalizeData::IntTools_SurfaceRangeLocalizeData()
28 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization Begin
34 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization End
38 IntTools_SurfaceRangeLocalizeData::IntTools_SurfaceRangeLocalizeData(const Standard_Integer theNbSampleU,
39 const Standard_Integer theNbSampleV,
40 const Standard_Real theMinRangeU,
41 const Standard_Real theMinRangeV)
43 myNbSampleU = theNbSampleU;
44 myNbSampleV = theNbSampleV;
45 myMinRangeU = theMinRangeU;
46 myMinRangeV = theMinRangeV;
47 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization Begin
53 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization End
56 IntTools_SurfaceRangeLocalizeData::IntTools_SurfaceRangeLocalizeData(const IntTools_SurfaceRangeLocalizeData& Other)
61 IntTools_SurfaceRangeLocalizeData& IntTools_SurfaceRangeLocalizeData::Assign(const IntTools_SurfaceRangeLocalizeData& Other)
63 myNbSampleU = Other.myNbSampleU;
64 myNbSampleV = Other.myNbSampleV;
65 myMinRangeU = Other.myMinRangeU;
66 myMinRangeV = Other.myMinRangeV;
67 myMapRangeOut.Clear();
68 myMapRangeOut = Other.myMapRangeOut;
70 myMapBox = Other.myMapBox;
71 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization Begin
72 myDeflection = Other.myDeflection;
73 myUIndMin = Other.myUIndMin;
74 myUIndMax = Other.myUIndMax;
75 myVIndMin = Other.myVIndMin;
76 myVIndMax = Other.myVIndMax;
78 if (!Other.myUParams.IsNull())
79 myUParams = Other.myUParams;
81 if (!Other.myVParams.IsNull())
82 myVParams = Other.myVParams;
84 if (!Other.myGridPoints.IsNull())
85 myGridPoints = Other.myGridPoints;
86 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization End
91 void IntTools_SurfaceRangeLocalizeData::AddOutRange(const IntTools_SurfaceRangeSample& theRange)
93 myMapRangeOut.Add(theRange);
94 // myMapBox.UnBind(theRange);
97 void IntTools_SurfaceRangeLocalizeData::AddBox(const IntTools_SurfaceRangeSample& theRange,
98 const Bnd_Box& theBox)
100 myMapBox.Bind(theRange, theBox);
103 Standard_Boolean IntTools_SurfaceRangeLocalizeData::FindBox(const IntTools_SurfaceRangeSample& theRange,
104 Bnd_Box& theBox) const
106 if(myMapBox.IsBound(theRange)) {
107 theBox = myMapBox(theRange);
108 return Standard_True;
110 return Standard_False;
113 Standard_Boolean IntTools_SurfaceRangeLocalizeData::IsRangeOut(const IntTools_SurfaceRangeSample& theRange) const
115 return myMapRangeOut.Contains(theRange);
118 void IntTools_SurfaceRangeLocalizeData::ListRangeOut(IntTools_ListOfSurfaceRangeSample& theList) const
120 IntTools_MapIteratorOfMapOfSurfaceSample anIt( myMapRangeOut);
122 for(; anIt.More(); anIt.Next())
123 theList.Append(anIt.Key());
126 void IntTools_SurfaceRangeLocalizeData::RemoveRangeOutAll()
128 myMapRangeOut.Clear();
131 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization Begin
132 void IntTools_SurfaceRangeLocalizeData::SetRangeUGrid
133 (const Standard_Integer theNbUGrid)
140 if (myUParams.IsNull() || theNbUGrid != myUParams->Length()) {
141 myUParams = new TColStd_HArray1OfReal(1, theNbUGrid);
143 if (!myVParams.IsNull()) {
144 myGridPoints = new TColgp_HArray2OfPnt(1, theNbUGrid,
145 1, myVParams->Length());
150 void IntTools_SurfaceRangeLocalizeData::SetRangeVGrid
151 (const Standard_Integer theNbVGrid)
158 if (myVParams.IsNull() || theNbVGrid != myVParams->Length()) {
159 myVParams = new TColStd_HArray1OfReal(1, theNbVGrid);
161 if (!myUParams.IsNull()) {
162 myGridPoints = new TColgp_HArray2OfPnt(1, myUParams->Length(),
168 void IntTools_SurfaceRangeLocalizeData::SetFrame(const Standard_Real theUMin,
169 const Standard_Real theUMax,
170 const Standard_Real theVMin,
171 const Standard_Real theVMax)
178 if (myUParams.IsNull() || myVParams.IsNull()) {
183 Standard_Integer aLmI;
184 Standard_Integer aLen = myUParams->Length();
186 // Compute frame along U.
187 for (i = 1; i <= aLen; i++) {
188 if (myUIndMin == 0 && theUMin < myUParams->Value(i))
193 if (myUIndMax == 0 && theUMax > myUParams->Value(aLmI))
198 myUIndMin = aLen + 1;
200 // Compute frame along V.
201 aLen = myVParams->Length();
203 for (i = 1; i <= aLen; i++) {
204 if (myVIndMin == 0 && theVMin < myVParams->Value(i))
209 if (myVIndMax == 0 && theVMax > myVParams->Value(aLmI))
214 myVIndMin = aLen + 1;
218 const gp_Pnt &IntTools_SurfaceRangeLocalizeData::GetPointInFrame
219 (const Standard_Integer theUIndex,
220 const Standard_Integer theVIndex) const
222 Standard_Integer aFrmUInd = theUIndex + myUIndMin - 1;
223 Standard_Integer aFrmVInd = theVIndex + myVIndMin - 1;
225 if (aFrmUInd > myUIndMax || aFrmVInd > myVIndMax)
228 return myGridPoints->Value(aFrmUInd, aFrmVInd);
231 Standard_Real IntTools_SurfaceRangeLocalizeData::GetUParamInFrame
232 (const Standard_Integer theIndex) const
234 Standard_Integer aFrmInd = theIndex + myUIndMin - 1;
236 if (aFrmInd > myUIndMax)
237 return Precision::Infinite();
239 return myUParams->Value(aFrmInd);
242 Standard_Real IntTools_SurfaceRangeLocalizeData::GetVParamInFrame
243 (const Standard_Integer theIndex) const
245 Standard_Integer aFrmInd = theIndex + myVIndMin - 1;
247 if (aFrmInd > myVIndMax)
248 return Precision::Infinite();
250 return myVParams->Value(aFrmInd);
253 void IntTools_SurfaceRangeLocalizeData::ClearGrid()
261 if (!myUParams.IsNull())
264 if (!myVParams.IsNull())
267 if (!myGridPoints.IsNull())
268 myGridPoints.Nullify();
270 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization End