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");
30 void HYDROData_Transform::SetFileName(const TCollection_AsciiString& theNameAfter)
32 #ifdef DEB_SPLIT_TO_ZONES_CHECK_PARTITION
33 fileNameAfter = theNameAfter;
36 //=======================================================================
37 //function : HYDROData_Transform
39 //=======================================================================
40 HYDROData_Transform::HYDROData_Transform()
42 BOPAlgo_BuilderShape()
44 myToTransform=Standard_False;
50 //=======================================================================
53 //=======================================================================
54 HYDROData_Transform::~HYDROData_Transform()
58 //=======================================================================
61 //=======================================================================
62 void HYDROData_Transform::Clear()
79 BOPAlgo_BuilderShape::PrepareHistory();
81 //=======================================================================
82 //function : SetArgument
84 //=======================================================================
85 void HYDROData_Transform::SetArgument(const TopoDS_Shape& theShape)
89 //=======================================================================
90 //function : AddArgument
92 //=======================================================================
93 const TopoDS_Shape& HYDROData_Transform::Argument()const
97 //=======================================================================
98 //function : SetTreshold
100 //=======================================================================
101 void HYDROData_Transform::SetTreshold(const Standard_Real theTreshold)
103 myTreshold=theTreshold;
105 //=======================================================================
106 //function : Treshold
108 //=======================================================================
109 Standard_Real HYDROData_Transform::Treshold()const
113 //=======================================================================
114 //function : SetToTransform
116 //=======================================================================
117 void HYDROData_Transform::SetToTransform(const Standard_Boolean theFlag)
119 myToTransform=theFlag;
121 //=======================================================================
122 //function : ToTransform
124 //=======================================================================
125 Standard_Boolean HYDROData_Transform::ToTransform()const
127 return myToTransform;
129 //=======================================================================
130 //function : CheckData
132 //=======================================================================
133 void HYDROData_Transform::CheckData()
135 if(myArgument.IsNull()) {
139 //=======================================================================
142 //=======================================================================
143 void HYDROData_Transform::Prepare()
151 //=======================================================================
154 //=======================================================================
155 void HYDROData_Transform::Perform()
186 //=======================================================================
189 //=======================================================================
190 void HYDROData_Transform::Detect()
192 Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
193 Standard_Real aXc, aYc, aZc;
199 BRepBndLib::Add(myArgument, aBox);
201 aBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
203 aXc=0.5*(aXmin+aXmax);
204 aYc=0.5*(aYmin+aYmax);
205 aZc=0.5*(aZmin+aZmax);
206 printf(" aVc : { %lf %lf %lf }\n", aXc, aYc, aZc);
208 myToTransform=Standard_False;
209 if (fabs(aXc)>myTreshold ||
210 fabs(aYc)>myTreshold ||
211 fabs(aZc)>myTreshold) {
212 myToTransform=!myToTransform;
215 aVec.SetCoord(-aXc, -aYc, -aZc);
216 myTrsf1.SetTranslation(aVec);
218 aVec.SetCoord(aXc, aYc, aZc);
219 myTrsf2.SetTranslation(aVec);
221 //=======================================================================
222 //function : ComputeTrsf
224 //=======================================================================
225 void HYDROData_Transform::ComputeTrsf()
227 if (!myToTransform) {
234 //=======================================================================
235 //function : Transform1
237 //=======================================================================
238 void HYDROData_Transform::Transform1()
240 Standard_Boolean bIsDone;
244 myTransform1=new BRepBuilderAPI_Transform(myTrsf1);
246 myTransform1->Perform(myArgument);
247 bIsDone=myTransform1->IsDone();
253 //=======================================================================
254 //function : BuildFuse
256 //=======================================================================
257 void HYDROData_Transform::BuildFuse()
259 Standard_Integer iErr;
261 BOPCol_ListOfShape aLC;
262 BOPAlgo_PaveFiller aPF;
266 const TopoDS_Shape& aS1=myTransform1->Shape();
267 #ifdef DEB_SPLIT_TO_ZONES_CHECK_PARTITION
268 TCollection_AsciiString aNameBefore = fileNameAfter + ".brep";
269 BRepTools::Write(aS1, aNameBefore.ToCString());
273 for (; aIt.More(); aIt.Next()) {
274 const TopoDS_Shape& aS1x=aIt.Value();
278 aPF.SetArguments(aLC);
281 iErr=aPF.ErrorStatus();
287 myBuilder=new BOPAlgo_Builder;
290 for (; aIt.More(); aIt.Next()) {
291 const TopoDS_Shape& aS1x=aIt.Value();
292 myBuilder->AddArgument(aS1x);
295 myBuilder->PerformWithFiller(aPF);
296 iErr=myBuilder->ErrorStatus();
302 //=======================================================================
303 //function : Transform2
305 //=======================================================================
306 void HYDROData_Transform::Transform2()
308 Standard_Boolean bIsDone;
312 const TopoDS_Shape& aR1=myBuilder->Shape();
314 myTransform2=new BRepBuilderAPI_Transform(myTrsf2);
316 myTransform2->Perform(aR1);
317 bIsDone=myTransform2->IsDone();
323 const TopoDS_Shape& aR2=myTransform2->Shape();
328 //=======================================================================
329 //function : Modified
331 //=======================================================================
332 const TopTools_ListOfShape& HYDROData_Transform::Modified
333 (const TopoDS_Shape& aS)
335 TopTools_ListOfShape* pHistShapes;
336 TopTools_ListIteratorOfListOfShape aItLS;
338 pHistShapes=(TopTools_ListOfShape*)&myHistShapes;
339 pHistShapes->Clear();
341 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
342 const TopoDS_Shape& aS1=aLS1.First();
344 const TopTools_ListOfShape& aLS1B=myBuilder->Modified(aS1);
345 aItLS.Initialize(aLS1B);
346 for (; aItLS.More(); aItLS.Next()) {
347 const TopoDS_Shape& aS1B=aItLS.Value();
348 const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
349 const TopoDS_Shape& aS2B=aLS2B.First();
350 pHistShapes->Append(aS2B);
355 //=======================================================================
356 //function : Generated
358 //=======================================================================
359 const TopTools_ListOfShape& HYDROData_Transform::Generated
360 (const TopoDS_Shape& aS)
362 TopTools_ListOfShape* pHistShapes;
363 TopTools_ListIteratorOfListOfShape aItLS;
365 pHistShapes=(TopTools_ListOfShape*)&myHistShapes;
366 pHistShapes->Clear();
368 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
369 const TopoDS_Shape& aS1=aLS1.First();
371 const TopTools_ListOfShape& aLS1B=myBuilder->Generated(aS1);
372 aItLS.Initialize(aLS1B);
373 for (; aItLS.More(); aItLS.Next()) {
374 const TopoDS_Shape& aS1B=aItLS.Value();
375 const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
376 const TopoDS_Shape& aS2B=aLS2B.First();
377 pHistShapes->Append(aS2B);
382 //=======================================================================
383 //function : IsDeleted
385 //=======================================================================
386 Standard_Boolean HYDROData_Transform::IsDeleted(const TopoDS_Shape& aS)
388 Standard_Boolean bIsDeleted;
390 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
391 const TopoDS_Shape& aS1=aLS1.First();
393 bIsDeleted=myBuilder->IsDeleted(aS1);
397 //=======================================================================
398 //function : HasDeleted
400 //=======================================================================
401 Standard_Boolean HYDROData_Transform::HasDeleted()
403 return myBuilder->HasDeleted();
405 //=======================================================================
406 //function : HasGenerated
408 //=======================================================================
409 Standard_Boolean HYDROData_Transform::HasGenerated()
411 return myBuilder->HasGenerated();
413 //=======================================================================
414 //function : HasModified
416 //=======================================================================
417 Standard_Boolean HYDROData_Transform::HasModified()
419 return myBuilder->HasModified();