1 #include <HYDROData_Transform.h>
8 #include <TopoDS_Shape.hxx>
9 #include <TopoDS_Iterator.hxx>
11 #include <BRepBndLib.hxx>
13 #include <TopTools_ListIteratorOfListOfShape.hxx>
15 #include <BOPCol_ListOfShape.hxx>
16 #include <BOPCol_MapOfShape.hxx>
18 #include <BOPCol_ListOfShape.hxx>
20 #include <BOPAlgo_BuilderShape.hxx>
21 #include <BOPAlgo_PaveFiller.hxx>
23 //=======================================================================
24 //function : HYDROData_Transform
26 //=======================================================================
27 HYDROData_Transform::HYDROData_Transform()
29 BOPAlgo_BuilderShape()
31 myToTransform=Standard_False;
37 //=======================================================================
40 //=======================================================================
41 HYDROData_Transform::~HYDROData_Transform()
45 //=======================================================================
48 //=======================================================================
49 void HYDROData_Transform::Clear()
66 BOPAlgo_BuilderShape::PrepareHistory();
68 //=======================================================================
69 //function : SetArgument
71 //=======================================================================
72 void HYDROData_Transform::SetArgument(const TopoDS_Shape& theShape)
76 //=======================================================================
77 //function : AddArgument
79 //=======================================================================
80 const TopoDS_Shape& HYDROData_Transform::Argument()const
84 //=======================================================================
85 //function : SetTreshold
87 //=======================================================================
88 void HYDROData_Transform::SetTreshold(const Standard_Real theTreshold)
90 myTreshold=theTreshold;
92 //=======================================================================
95 //=======================================================================
96 Standard_Real HYDROData_Transform::Treshold()const
100 //=======================================================================
101 //function : SetToTransform
103 //=======================================================================
104 void HYDROData_Transform::SetToTransform(const Standard_Boolean theFlag)
106 myToTransform=theFlag;
108 //=======================================================================
109 //function : ToTransform
111 //=======================================================================
112 Standard_Boolean HYDROData_Transform::ToTransform()const
114 return myToTransform;
116 //=======================================================================
117 //function : CheckData
119 //=======================================================================
120 void HYDROData_Transform::CheckData()
122 if(myArgument.IsNull()) {
126 //=======================================================================
129 //=======================================================================
130 void HYDROData_Transform::Prepare()
138 //=======================================================================
141 //=======================================================================
142 void HYDROData_Transform::Perform()
173 //=======================================================================
176 //=======================================================================
177 void HYDROData_Transform::Detect()
179 Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
180 Standard_Real aXc, aYc, aZc;
186 BRepBndLib::Add(myArgument, aBox);
188 aBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
190 aXc=0.5*(aXmin+aXmax);
191 aYc=0.5*(aYmin+aYmax);
192 aZc=0.5*(aZmin+aZmax);
193 printf(" aVc : { %lf %lf %lf }\n", aXc, aYc, aZc);
195 myToTransform=Standard_False;
196 if (fabs(aXc)>myTreshold ||
197 fabs(aYc)>myTreshold ||
198 fabs(aZc)>myTreshold) {
199 myToTransform=!myToTransform;
202 aVec.SetCoord(-aXc, -aYc, -aZc);
203 myTrsf1.SetTranslation(aVec);
205 aVec.SetCoord(aXc, aYc, aZc);
206 myTrsf2.SetTranslation(aVec);
208 //=======================================================================
209 //function : ComputeTrsf
211 //=======================================================================
212 void HYDROData_Transform::ComputeTrsf()
214 if (!myToTransform) {
221 //=======================================================================
222 //function : Transform1
224 //=======================================================================
225 void HYDROData_Transform::Transform1()
227 Standard_Boolean bIsDone;
231 myTransform1=new BRepBuilderAPI_Transform(myTrsf1);
233 myTransform1->Perform(myArgument);
234 bIsDone=myTransform1->IsDone();
240 //=======================================================================
241 //function : BuildFuse
243 //=======================================================================
244 void HYDROData_Transform::BuildFuse()
246 Standard_Integer iErr;
248 BOPCol_ListOfShape aLC;
249 BOPAlgo_PaveFiller aPF;
253 const TopoDS_Shape& aS1=myTransform1->Shape();
256 for (; aIt.More(); aIt.Next()) {
257 const TopoDS_Shape& aS1x=aIt.Value();
261 aPF.SetArguments(aLC);
264 iErr=aPF.ErrorStatus();
270 myBuilder=new BOPAlgo_Builder;
273 for (; aIt.More(); aIt.Next()) {
274 const TopoDS_Shape& aS1x=aIt.Value();
275 myBuilder->AddArgument(aS1x);
278 myBuilder->PerformWithFiller(aPF);
279 iErr=myBuilder->ErrorStatus();
285 //=======================================================================
286 //function : Transform2
288 //=======================================================================
289 void HYDROData_Transform::Transform2()
291 Standard_Boolean bIsDone;
295 const TopoDS_Shape& aR1=myBuilder->Shape();
297 myTransform2=new BRepBuilderAPI_Transform(myTrsf2);
299 myTransform2->Perform(aR1);
300 bIsDone=myTransform2->IsDone();
306 const TopoDS_Shape& aR2=myTransform2->Shape();
311 //=======================================================================
312 //function : Modified
314 //=======================================================================
315 const TopTools_ListOfShape& HYDROData_Transform::Modified
316 (const TopoDS_Shape& aS)
318 TopTools_ListOfShape* pHistShapes;
319 TopTools_ListIteratorOfListOfShape aItLS;
321 pHistShapes=(TopTools_ListOfShape*)&myHistShapes;
322 pHistShapes->Clear();
324 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
325 const TopoDS_Shape& aS1=aLS1.First();
327 const TopTools_ListOfShape& aLS1B=myBuilder->Modified(aS1);
328 aItLS.Initialize(aLS1B);
329 for (; aItLS.More(); aItLS.Next()) {
330 const TopoDS_Shape& aS1B=aItLS.Value();
331 const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
332 const TopoDS_Shape& aS2B=aLS2B.First();
333 pHistShapes->Append(aS2B);
338 //=======================================================================
339 //function : Generated
341 //=======================================================================
342 const TopTools_ListOfShape& HYDROData_Transform::Generated
343 (const TopoDS_Shape& aS)
345 TopTools_ListOfShape* pHistShapes;
346 TopTools_ListIteratorOfListOfShape aItLS;
348 pHistShapes=(TopTools_ListOfShape*)&myHistShapes;
349 pHistShapes->Clear();
351 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
352 const TopoDS_Shape& aS1=aLS1.First();
354 const TopTools_ListOfShape& aLS1B=myBuilder->Generated(aS1);
355 aItLS.Initialize(aLS1B);
356 for (; aItLS.More(); aItLS.Next()) {
357 const TopoDS_Shape& aS1B=aItLS.Value();
358 const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
359 const TopoDS_Shape& aS2B=aLS2B.First();
360 pHistShapes->Append(aS2B);
365 //=======================================================================
366 //function : IsDeleted
368 //=======================================================================
369 Standard_Boolean HYDROData_Transform::IsDeleted(const TopoDS_Shape& aS)
371 Standard_Boolean bIsDeleted;
373 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
374 const TopoDS_Shape& aS1=aLS1.First();
376 bIsDeleted=myBuilder->IsDeleted(aS1);
380 //=======================================================================
381 //function : HasDeleted
383 //=======================================================================
384 Standard_Boolean HYDROData_Transform::HasDeleted()
386 return myBuilder->HasDeleted();
388 //=======================================================================
389 //function : HasGenerated
391 //=======================================================================
392 Standard_Boolean HYDROData_Transform::HasGenerated()
394 return myBuilder->HasGenerated();
396 //=======================================================================
397 //function : HasModified
399 //=======================================================================
400 Standard_Boolean HYDROData_Transform::HasModified()
402 return myBuilder->HasModified();