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.
17 #include <Bnd_Box.hxx>
19 #include <IntTools_ListIteratorOfListOfBox.hxx>
20 #include <IntTools_ListIteratorOfListOfSurfaceRangeSample.hxx>
21 #include <IntTools_MapIteratorOfMapOfSurfaceSample.hxx>
22 #include <IntTools_SurfaceRangeLocalizeData.hxx>
23 #include <IntTools_SurfaceRangeSample.hxx>
24 #include <Precision.hxx>
26 IntTools_SurfaceRangeLocalizeData::IntTools_SurfaceRangeLocalizeData()
32 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization Begin
38 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization End
42 IntTools_SurfaceRangeLocalizeData::IntTools_SurfaceRangeLocalizeData(const Standard_Integer theNbSampleU,
43 const Standard_Integer theNbSampleV,
44 const Standard_Real theMinRangeU,
45 const Standard_Real theMinRangeV)
47 myNbSampleU = theNbSampleU;
48 myNbSampleV = theNbSampleV;
49 myMinRangeU = theMinRangeU;
50 myMinRangeV = theMinRangeV;
51 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization Begin
57 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization End
60 IntTools_SurfaceRangeLocalizeData::IntTools_SurfaceRangeLocalizeData(const IntTools_SurfaceRangeLocalizeData& Other)
65 IntTools_SurfaceRangeLocalizeData& IntTools_SurfaceRangeLocalizeData::Assign(const IntTools_SurfaceRangeLocalizeData& Other)
67 myNbSampleU = Other.myNbSampleU;
68 myNbSampleV = Other.myNbSampleV;
69 myMinRangeU = Other.myMinRangeU;
70 myMinRangeV = Other.myMinRangeV;
71 myMapRangeOut.Clear();
72 myMapRangeOut = Other.myMapRangeOut;
74 myMapBox = Other.myMapBox;
75 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization Begin
76 myDeflection = Other.myDeflection;
77 myUIndMin = Other.myUIndMin;
78 myUIndMax = Other.myUIndMax;
79 myVIndMin = Other.myVIndMin;
80 myVIndMax = Other.myVIndMax;
82 if (!Other.myUParams.IsNull())
83 myUParams = Other.myUParams;
85 if (!Other.myVParams.IsNull())
86 myVParams = Other.myVParams;
88 if (!Other.myGridPoints.IsNull())
89 myGridPoints = Other.myGridPoints;
90 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization End
95 void IntTools_SurfaceRangeLocalizeData::AddOutRange(const IntTools_SurfaceRangeSample& theRange)
97 myMapRangeOut.Add(theRange);
98 // myMapBox.UnBind(theRange);
101 void IntTools_SurfaceRangeLocalizeData::AddBox(const IntTools_SurfaceRangeSample& theRange,
102 const Bnd_Box& theBox)
104 myMapBox.Bind(theRange, theBox);
107 Standard_Boolean IntTools_SurfaceRangeLocalizeData::FindBox(const IntTools_SurfaceRangeSample& theRange,
108 Bnd_Box& theBox) const
110 if(myMapBox.IsBound(theRange)) {
111 theBox = myMapBox(theRange);
112 return Standard_True;
114 return Standard_False;
117 Standard_Boolean IntTools_SurfaceRangeLocalizeData::IsRangeOut(const IntTools_SurfaceRangeSample& theRange) const
119 return myMapRangeOut.Contains(theRange);
122 void IntTools_SurfaceRangeLocalizeData::ListRangeOut(IntTools_ListOfSurfaceRangeSample& theList) const
124 IntTools_MapIteratorOfMapOfSurfaceSample anIt( myMapRangeOut);
126 for(; anIt.More(); anIt.Next())
127 theList.Append(anIt.Key());
130 void IntTools_SurfaceRangeLocalizeData::RemoveRangeOutAll()
132 myMapRangeOut.Clear();
135 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization Begin
136 void IntTools_SurfaceRangeLocalizeData::SetRangeUGrid
137 (const Standard_Integer theNbUGrid)
144 if (myUParams.IsNull() || theNbUGrid != myUParams->Length()) {
145 myUParams = new TColStd_HArray1OfReal(1, theNbUGrid);
147 if (!myVParams.IsNull()) {
148 myGridPoints = new TColgp_HArray2OfPnt(1, theNbUGrid,
149 1, myVParams->Length());
154 void IntTools_SurfaceRangeLocalizeData::SetRangeVGrid
155 (const Standard_Integer theNbVGrid)
162 if (myVParams.IsNull() || theNbVGrid != myVParams->Length()) {
163 myVParams = new TColStd_HArray1OfReal(1, theNbVGrid);
165 if (!myUParams.IsNull()) {
166 myGridPoints = new TColgp_HArray2OfPnt(1, myUParams->Length(),
172 void IntTools_SurfaceRangeLocalizeData::SetFrame(const Standard_Real theUMin,
173 const Standard_Real theUMax,
174 const Standard_Real theVMin,
175 const Standard_Real theVMax)
182 if (myUParams.IsNull() || myVParams.IsNull()) {
187 Standard_Integer aLmI;
188 Standard_Integer aLen = myUParams->Length();
190 // Compute frame along U.
191 for (i = 1; i <= aLen; i++) {
192 if (myUIndMin == 0 && theUMin < myUParams->Value(i))
197 if (myUIndMax == 0 && theUMax > myUParams->Value(aLmI))
202 myUIndMin = aLen + 1;
204 // Compute frame along V.
205 aLen = myVParams->Length();
207 for (i = 1; i <= aLen; i++) {
208 if (myVIndMin == 0 && theVMin < myVParams->Value(i))
213 if (myVIndMax == 0 && theVMax > myVParams->Value(aLmI))
218 myVIndMin = aLen + 1;
222 const gp_Pnt &IntTools_SurfaceRangeLocalizeData::GetPointInFrame
223 (const Standard_Integer theUIndex,
224 const Standard_Integer theVIndex) const
226 Standard_Integer aFrmUInd = theUIndex + myUIndMin - 1;
227 Standard_Integer aFrmVInd = theVIndex + myVIndMin - 1;
229 if (aFrmUInd > myUIndMax || aFrmVInd > myVIndMax)
232 return myGridPoints->Value(aFrmUInd, aFrmVInd);
235 Standard_Real IntTools_SurfaceRangeLocalizeData::GetUParamInFrame
236 (const Standard_Integer theIndex) const
238 Standard_Integer aFrmInd = theIndex + myUIndMin - 1;
240 if (aFrmInd > myUIndMax)
241 return Precision::Infinite();
243 return myUParams->Value(aFrmInd);
246 Standard_Real IntTools_SurfaceRangeLocalizeData::GetVParamInFrame
247 (const Standard_Integer theIndex) const
249 Standard_Integer aFrmInd = theIndex + myVIndMin - 1;
251 if (aFrmInd > myVIndMax)
252 return Precision::Infinite();
254 return myVParams->Value(aFrmInd);
257 void IntTools_SurfaceRangeLocalizeData::ClearGrid()
265 if (!myUParams.IsNull())
268 if (!myVParams.IsNull())
271 if (!myGridPoints.IsNull())
272 myGridPoints.Nullify();
274 // Modified by skv - Thu Nov 3 11:58:24 2005 Optimization End