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 #define DEB_SPLIT_TO_ZONES_CHECK_PARTITION 1
24 #ifdef DEB_SPLIT_TO_ZONES_CHECK_PARTITION
25 #include <BRepTools.hxx>
26 #include <TCollection_AsciiString.hxx>
27 static TCollection_AsciiString fileNameAfter("AfterTranslation");
31 //=======================================================================
32 //function : HYDROData_Transform
34 //=======================================================================
35 HYDROData_Transform::HYDROData_Transform()
37 BOPAlgo_BuilderShape()
39 myToTransform=Standard_False;
45 //=======================================================================
48 //=======================================================================
49 HYDROData_Transform::~HYDROData_Transform()
53 //=======================================================================
56 //=======================================================================
57 void HYDROData_Transform::Clear()
74 BOPAlgo_BuilderShape::PrepareHistory();
76 //=======================================================================
77 //function : SetArgument
79 //=======================================================================
80 void HYDROData_Transform::SetArgument(const TopoDS_Shape& theShape)
84 //=======================================================================
85 //function : AddArgument
87 //=======================================================================
88 const TopoDS_Shape& HYDROData_Transform::Argument()const
92 //=======================================================================
93 //function : SetTreshold
95 //=======================================================================
96 void HYDROData_Transform::SetTreshold(const Standard_Real theTreshold)
98 myTreshold=theTreshold;
100 //=======================================================================
101 //function : Treshold
103 //=======================================================================
104 Standard_Real HYDROData_Transform::Treshold()const
108 //=======================================================================
109 //function : SetToTransform
111 //=======================================================================
112 void HYDROData_Transform::SetToTransform(const Standard_Boolean theFlag)
114 myToTransform=theFlag;
116 //=======================================================================
117 //function : ToTransform
119 //=======================================================================
120 Standard_Boolean HYDROData_Transform::ToTransform()const
122 return myToTransform;
124 //=======================================================================
125 //function : CheckData
127 //=======================================================================
128 void HYDROData_Transform::CheckData()
130 if(myArgument.IsNull()) {
134 //=======================================================================
137 //=======================================================================
138 void HYDROData_Transform::Prepare()
146 //=======================================================================
149 //=======================================================================
150 void HYDROData_Transform::Perform()
181 //=======================================================================
184 //=======================================================================
185 void HYDROData_Transform::Detect()
187 Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
188 Standard_Real aXc, aYc, aZc;
194 BRepBndLib::Add(myArgument, aBox);
196 aBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
198 aXc=0.5*(aXmin+aXmax);
199 aYc=0.5*(aYmin+aYmax);
200 aZc=0.5*(aZmin+aZmax);
201 printf(" aVc : { %lf %lf %lf }\n", aXc, aYc, aZc);
203 myToTransform=Standard_False;
204 if (fabs(aXc)>myTreshold ||
205 fabs(aYc)>myTreshold ||
206 fabs(aZc)>myTreshold) {
207 myToTransform=!myToTransform;
210 aVec.SetCoord(-aXc, -aYc, -aZc);
211 myTrsf1.SetTranslation(aVec);
213 aVec.SetCoord(aXc, aYc, aZc);
214 myTrsf2.SetTranslation(aVec);
216 //=======================================================================
217 //function : ComputeTrsf
219 //=======================================================================
220 void HYDROData_Transform::ComputeTrsf()
222 if (!myToTransform) {
229 //=======================================================================
230 //function : Transform1
232 //=======================================================================
233 void HYDROData_Transform::Transform1()
235 Standard_Boolean bIsDone;
239 myTransform1=new BRepBuilderAPI_Transform(myTrsf1);
241 myTransform1->Perform(myArgument);
242 bIsDone=myTransform1->IsDone();
248 //=======================================================================
249 //function : BuildFuse
251 //=======================================================================
252 void HYDROData_Transform::BuildFuse()
254 Standard_Integer iErr;
256 BOPCol_ListOfShape aLC;
257 BOPAlgo_PaveFiller aPF;
261 const TopoDS_Shape& aS1=myTransform1->Shape();
262 #ifdef DEB_SPLIT_TO_ZONES_CHECK_PARTITION
263 TCollection_AsciiString aNameBefore = fileNameAfter + ".brep";
264 BRepTools::Write(aS1, aNameBefore.ToCString());
268 for (; aIt.More(); aIt.Next()) {
269 const TopoDS_Shape& aS1x=aIt.Value();
273 aPF.SetArguments(aLC);
276 iErr=aPF.ErrorStatus();
282 myBuilder=new BOPAlgo_Builder;
285 for (; aIt.More(); aIt.Next()) {
286 const TopoDS_Shape& aS1x=aIt.Value();
287 myBuilder->AddArgument(aS1x);
290 myBuilder->PerformWithFiller(aPF);
291 iErr=myBuilder->ErrorStatus();
297 //=======================================================================
298 //function : Transform2
300 //=======================================================================
301 void HYDROData_Transform::Transform2()
303 Standard_Boolean bIsDone;
307 const TopoDS_Shape& aR1=myBuilder->Shape();
309 myTransform2=new BRepBuilderAPI_Transform(myTrsf2);
311 myTransform2->Perform(aR1);
312 bIsDone=myTransform2->IsDone();
318 const TopoDS_Shape& aR2=myTransform2->Shape();
323 //=======================================================================
324 //function : Modified
326 //=======================================================================
327 const TopTools_ListOfShape& HYDROData_Transform::Modified
328 (const TopoDS_Shape& aS)
330 TopTools_ListOfShape* pHistShapes;
331 TopTools_ListIteratorOfListOfShape aItLS;
333 pHistShapes=(TopTools_ListOfShape*)&myHistShapes;
334 pHistShapes->Clear();
336 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
337 const TopoDS_Shape& aS1=aLS1.First();
339 const TopTools_ListOfShape& aLS1B=myBuilder->Modified(aS1);
340 aItLS.Initialize(aLS1B);
341 for (; aItLS.More(); aItLS.Next()) {
342 const TopoDS_Shape& aS1B=aItLS.Value();
343 const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
344 const TopoDS_Shape& aS2B=aLS2B.First();
345 pHistShapes->Append(aS2B);
350 //=======================================================================
351 //function : Generated
353 //=======================================================================
354 const TopTools_ListOfShape& HYDROData_Transform::Generated
355 (const TopoDS_Shape& aS)
357 TopTools_ListOfShape* pHistShapes;
358 TopTools_ListIteratorOfListOfShape aItLS;
360 pHistShapes=(TopTools_ListOfShape*)&myHistShapes;
361 pHistShapes->Clear();
363 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
364 const TopoDS_Shape& aS1=aLS1.First();
366 const TopTools_ListOfShape& aLS1B=myBuilder->Generated(aS1);
367 aItLS.Initialize(aLS1B);
368 for (; aItLS.More(); aItLS.Next()) {
369 const TopoDS_Shape& aS1B=aItLS.Value();
370 const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
371 const TopoDS_Shape& aS2B=aLS2B.First();
372 pHistShapes->Append(aS2B);
377 //=======================================================================
378 //function : IsDeleted
380 //=======================================================================
381 Standard_Boolean HYDROData_Transform::IsDeleted(const TopoDS_Shape& aS)
383 Standard_Boolean bIsDeleted;
385 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
386 const TopoDS_Shape& aS1=aLS1.First();
388 bIsDeleted=myBuilder->IsDeleted(aS1);
392 //=======================================================================
393 //function : HasDeleted
395 //=======================================================================
396 Standard_Boolean HYDROData_Transform::HasDeleted()
398 return myBuilder->HasDeleted();
400 //=======================================================================
401 //function : HasGenerated
403 //=======================================================================
404 Standard_Boolean HYDROData_Transform::HasGenerated()
406 return myBuilder->HasGenerated();
408 //=======================================================================
409 //function : HasModified
411 //=======================================================================
412 Standard_Boolean HYDROData_Transform::HasModified()
414 return myBuilder->HasModified();