1 // Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 #include <HYDROData_Transform.h>
27 #include <Bnd_Box.hxx>
30 #include <TopoDS_Shape.hxx>
31 #include <TopoDS_Iterator.hxx>
33 #include <BRepBndLib.hxx>
35 #include <TopTools_ListIteratorOfListOfShape.hxx>
37 #include <BOPCol_ListOfShape.hxx>
38 #include <BOPCol_MapOfShape.hxx>
40 #include <BOPCol_ListOfShape.hxx>
42 #include <BOPAlgo_BuilderShape.hxx>
43 #include <BOPAlgo_PaveFiller.hxx>
45 //#define DEB_SPLIT_TO_ZONES_CHECK_PARTITION 1
46 #ifdef DEB_SPLIT_TO_ZONES_CHECK_PARTITION
47 #include <BRepTools.hxx>
48 #include <TCollection_AsciiString.hxx>
49 static TCollection_AsciiString fileNameAfter("AfterTranslation");
52 void HYDROData_Transform::SetFileName(const TCollection_AsciiString& theNameAfter)
54 #ifdef DEB_SPLIT_TO_ZONES_CHECK_PARTITION
55 fileNameAfter = theNameAfter;
58 //=======================================================================
59 //function : HYDROData_Transform
61 //=======================================================================
62 HYDROData_Transform::HYDROData_Transform()
64 BOPAlgo_BuilderShape()
66 myToTransform=Standard_False;
72 //=======================================================================
75 //=======================================================================
76 HYDROData_Transform::~HYDROData_Transform()
80 //=======================================================================
83 //=======================================================================
84 void HYDROData_Transform::Clear()
101 BOPAlgo_BuilderShape::PrepareHistory();
103 //=======================================================================
104 //function : SetArgument
106 //=======================================================================
107 void HYDROData_Transform::SetArgument(const TopoDS_Shape& theShape)
111 //=======================================================================
112 //function : AddArgument
114 //=======================================================================
115 const TopoDS_Shape& HYDROData_Transform::Argument()const
119 //=======================================================================
120 //function : SetTreshold
122 //=======================================================================
123 void HYDROData_Transform::SetTreshold(const Standard_Real theTreshold)
125 myTreshold=theTreshold;
127 //=======================================================================
128 //function : Treshold
130 //=======================================================================
131 Standard_Real HYDROData_Transform::Treshold()const
135 //=======================================================================
136 //function : SetToTransform
138 //=======================================================================
139 void HYDROData_Transform::SetToTransform(const Standard_Boolean theFlag)
141 myToTransform=theFlag;
143 //=======================================================================
144 //function : ToTransform
146 //=======================================================================
147 Standard_Boolean HYDROData_Transform::ToTransform()const
149 return myToTransform;
151 //=======================================================================
152 //function : CheckData
154 //=======================================================================
155 void HYDROData_Transform::CheckData()
157 if(myArgument.IsNull()) {
161 //=======================================================================
164 //=======================================================================
165 void HYDROData_Transform::Prepare()
173 //=======================================================================
176 //=======================================================================
177 void HYDROData_Transform::Perform()
208 //=======================================================================
211 //=======================================================================
212 void HYDROData_Transform::Detect()
214 Standard_Real aXmin, aYmin, aZmin, aXmax, aYmax, aZmax;
215 Standard_Real aXc, aYc, aZc;
221 BRepBndLib::Add(myArgument, aBox);
223 aBox.Get(aXmin, aYmin, aZmin, aXmax, aYmax, aZmax);
225 aXc=0.5*(aXmin+aXmax);
226 aYc=0.5*(aYmin+aYmax);
227 aZc=0.5*(aZmin+aZmax);
228 //printf(" aVc : { %lf %lf %lf }\n", aXc, aYc, aZc);
230 myToTransform=Standard_False;
231 if (fabs(aXc)>myTreshold ||
232 fabs(aYc)>myTreshold ||
233 fabs(aZc)>myTreshold) {
234 myToTransform=!myToTransform;
237 aVec.SetCoord(-aXc, -aYc, -aZc);
238 myTrsf1.SetTranslation(aVec);
240 aVec.SetCoord(aXc, aYc, aZc);
241 myTrsf2.SetTranslation(aVec);
243 //=======================================================================
244 //function : ComputeTrsf
246 //=======================================================================
247 void HYDROData_Transform::ComputeTrsf()
249 if (!myToTransform) {
256 //=======================================================================
257 //function : Transform1
259 //=======================================================================
260 void HYDROData_Transform::Transform1()
264 if (myToTransform) {//pkv ft
265 Standard_Boolean bIsDone;
269 myTransform1=new BRepBuilderAPI_Transform(myTrsf1);
271 myTransform1->Perform(myArgument);
272 bIsDone=myTransform1->IsDone();
278 //=======================================================================
279 //function : BuildFuse
281 //=======================================================================
282 void HYDROData_Transform::BuildFuse()
284 Standard_Integer iErr;
286 BOPCol_ListOfShape aLC;
287 BOPAlgo_PaveFiller aPF;
291 //modified by NIZNHY-PKV Wed Jan 15 13:24:48 2014f
292 const TopoDS_Shape& aS1=
293 (myToTransform)? myTransform1->Shape() : myArgument;
294 //const TopoDS_Shape& aS1=()Transform1->Shape();
295 //modified by NIZNHY-PKV Wed Jan 15 13:24:52 2014t
297 #ifdef DEB_SPLIT_TO_ZONES_CHECK_PARTITION
298 TCollection_AsciiString aNameBefore = fileNameAfter + ".brep";
299 BRepTools::Write(aS1, aNameBefore.ToCString());
303 for (; aIt.More(); aIt.Next()) {
304 const TopoDS_Shape& aS1x=aIt.Value();
308 aPF.SetArguments(aLC);
311 iErr=aPF.ErrorStatus();
317 myBuilder=new BOPAlgo_Builder;
320 for (; aIt.More(); aIt.Next()) {
321 const TopoDS_Shape& aS1x=aIt.Value();
322 myBuilder->AddArgument(aS1x);
325 myBuilder->PerformWithFiller(aPF);
326 iErr=myBuilder->ErrorStatus();
332 //=======================================================================
333 //function : Transform2
335 //=======================================================================
336 void HYDROData_Transform::Transform2()
340 const TopoDS_Shape& aR1=myBuilder->Shape();
342 myShape=aR1; //pkv ft
343 if (myToTransform) { //pkv ft
344 Standard_Boolean bIsDone;
346 myTransform2=new BRepBuilderAPI_Transform(myTrsf2);
348 myTransform2->Perform(aR1);
349 bIsDone=myTransform2->IsDone();
355 const TopoDS_Shape& aR2=myTransform2->Shape();
361 //=======================================================================
362 //function : Modified
364 //=======================================================================
365 const TopTools_ListOfShape& HYDROData_Transform::Modified
366 (const TopoDS_Shape& aS)
368 TopTools_ListOfShape* pHistShapes;
369 TopTools_ListIteratorOfListOfShape aItLS;
371 pHistShapes=(TopTools_ListOfShape*)&myHistShapes;
372 pHistShapes->Clear();
374 if (myToTransform) { //pkv ft
375 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
376 const TopoDS_Shape& aS1=aLS1.First();
378 const TopTools_ListOfShape& aLS1B=myBuilder->Modified(aS1);
380 if (aLS1B.IsEmpty()) { //pkv ft
381 const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1);
382 const TopoDS_Shape& aS2B=aLS2B.First();
383 pHistShapes->Append(aS2B);
386 aItLS.Initialize(aLS1B);
387 for (; aItLS.More(); aItLS.Next()) {
388 const TopoDS_Shape& aS1B=aItLS.Value();
389 const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
390 const TopoDS_Shape& aS2B=aLS2B.First();
391 pHistShapes->Append(aS2B);
396 const TopTools_ListOfShape& aLS1B=myBuilder->Modified(aS);
397 aItLS.Initialize(aLS1B);
398 for (; aItLS.More(); aItLS.Next()) {
399 const TopoDS_Shape& aS1B=aItLS.Value();
400 pHistShapes->Append(aS1B);
406 //=======================================================================
407 //function : Generated
409 //=======================================================================
410 const TopTools_ListOfShape& HYDROData_Transform::Generated
411 (const TopoDS_Shape& aS)
413 TopTools_ListOfShape* pHistShapes;
414 TopTools_ListIteratorOfListOfShape aItLS;
416 pHistShapes=(TopTools_ListOfShape*)&myHistShapes;
417 pHistShapes->Clear();
419 if (myToTransform) { //pkv ft
420 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
421 const TopoDS_Shape& aS1=aLS1.First();
423 const TopTools_ListOfShape& aLS1B=myBuilder->Generated(aS1);
424 if (aLS1B.IsEmpty()) { //pkv ft
425 const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1);
426 const TopoDS_Shape& aS2B=aLS2B.First();
427 pHistShapes->Append(aS2B);
430 aItLS.Initialize(aLS1B);
431 for (; aItLS.More(); aItLS.Next()) {
432 const TopoDS_Shape& aS1B=aItLS.Value();
433 const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
434 const TopoDS_Shape& aS2B=aLS2B.First();
435 pHistShapes->Append(aS2B);
440 const TopTools_ListOfShape& aLS1B=myBuilder->Generated(aS);
441 aItLS.Initialize(aLS1B);
442 for (; aItLS.More(); aItLS.Next()) {
443 const TopoDS_Shape& aS1B=aItLS.Value();
444 pHistShapes->Append(aS1B);
450 //=======================================================================
451 //function : IsDeleted
453 //=======================================================================
454 Standard_Boolean HYDROData_Transform::IsDeleted(const TopoDS_Shape& aS)
456 Standard_Boolean bIsDeleted;
458 if (myToTransform) { //pkv ft
459 const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
460 const TopoDS_Shape& aS1=aLS1.First();
462 bIsDeleted=myBuilder->IsDeleted(aS1);
465 bIsDeleted=myBuilder->IsDeleted(aS);
470 //=======================================================================
471 //function : HasDeleted
473 //=======================================================================
474 Standard_Boolean HYDROData_Transform::HasDeleted()
476 return myBuilder->HasDeleted();
478 //=======================================================================
479 //function : HasGenerated
481 //=======================================================================
482 Standard_Boolean HYDROData_Transform::HasGenerated()
484 return myBuilder->HasGenerated();
486 //=======================================================================
487 //function : HasModified
489 //=======================================================================
490 Standard_Boolean HYDROData_Transform::HasModified()
492 return myBuilder->HasModified();