Salome HOME
Merge branch 'BR_v14_rc' into BR_SINUSX_FORMAT
[modules/hydro.git] / src / HYDROData / HYDROData_Transform.cxx
index a4a2f12223900461c57f20b64497151a87eb3cb8..391482b5fc51a7fb6d7cd8eb8a93f83cd7b97126 100644 (file)
@@ -1,3 +1,21 @@
+// Copyright (C) 2014-2015  EDF-R&D
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
 #include <HYDROData_Transform.h>
 
 #include <math.h>
 #include <BOPAlgo_BuilderShape.hxx>
 #include <BOPAlgo_PaveFiller.hxx>
 
+//#define DEB_SPLIT_TO_ZONES_CHECK_PARTITION 1
+#ifdef DEB_SPLIT_TO_ZONES_CHECK_PARTITION
+#include <BRepTools.hxx>
+#include <TCollection_AsciiString.hxx>
+static TCollection_AsciiString fileNameAfter("AfterTranslation");
+#endif
+
+void HYDROData_Transform::SetFileName(const TCollection_AsciiString& theNameAfter)
+{
+#ifdef DEB_SPLIT_TO_ZONES_CHECK_PARTITION
+  fileNameAfter = theNameAfter;
+#endif
+}
 //=======================================================================
 //function : HYDROData_Transform
 //purpose  : 
@@ -190,7 +221,7 @@ void HYDROData_Transform::Detect()
   aXc=0.5*(aXmin+aXmax);
   aYc=0.5*(aYmin+aYmax);
   aZc=0.5*(aZmin+aZmax);
-  printf(" aVc : { %lf %lf %lf }\n", aXc, aYc, aZc);
+  //printf(" aVc : { %lf %lf %lf }\n", aXc, aYc, aZc);
   //
   myToTransform=Standard_False;
   if (fabs(aXc)>myTreshold || 
@@ -223,18 +254,21 @@ void HYDROData_Transform::ComputeTrsf()
 //purpose  : 
 //=======================================================================
 void HYDROData_Transform::Transform1()
-{
-  Standard_Boolean bIsDone;
-  //
+{ 
   myErrorStatus=0;
   //
-  myTransform1=new BRepBuilderAPI_Transform(myTrsf1);
-  //
-  myTransform1->Perform(myArgument);
-  bIsDone=myTransform1->IsDone();
-  if (!bIsDone) {
-    myErrorStatus=11;
-    return;
+  if (myToTransform) {//pkv ft
+    Standard_Boolean bIsDone;
+    //
+    myErrorStatus=0;
+    //
+    myTransform1=new BRepBuilderAPI_Transform(myTrsf1);
+    //
+    myTransform1->Perform(myArgument);
+    bIsDone=myTransform1->IsDone();
+    if (!bIsDone) {
+      myErrorStatus=11;
+    }
   }
 }
 //=======================================================================
@@ -250,7 +284,16 @@ void HYDROData_Transform::BuildFuse()
   //
   myErrorStatus=0;
   //
-  const TopoDS_Shape& aS1=myTransform1->Shape();
+   //modified by NIZNHY-PKV Wed Jan 15 13:24:48 2014f
+  const TopoDS_Shape& aS1=
+    (myToTransform)? myTransform1->Shape() : myArgument;
+  //const TopoDS_Shape& aS1=()Transform1->Shape();
+  //modified by NIZNHY-PKV Wed Jan 15 13:24:52 2014t
+
+#ifdef DEB_SPLIT_TO_ZONES_CHECK_PARTITION
+  TCollection_AsciiString aNameBefore = fileNameAfter + ".brep";
+  BRepTools::Write(aS1, aNameBefore.ToCString());
+#endif
   //
   aIt.Initialize(aS1);
   for (; aIt.More(); aIt.Next()) {
@@ -288,24 +331,27 @@ void HYDROData_Transform::BuildFuse()
 //=======================================================================
 void HYDROData_Transform::Transform2()
 {
-  Standard_Boolean bIsDone;
-  //
   myErrorStatus=0;
   //
   const TopoDS_Shape& aR1=myBuilder->Shape();
   //
-  myTransform2=new BRepBuilderAPI_Transform(myTrsf2);
-  //
-  myTransform2->Perform(aR1);
-  bIsDone=myTransform2->IsDone();
-  if (!bIsDone) {
-    myErrorStatus=12;
-    return;
+  myShape=aR1; //pkv ft
+  if (myToTransform) { //pkv ft
+    Standard_Boolean bIsDone;
+    //
+    myTransform2=new BRepBuilderAPI_Transform(myTrsf2);
+    //
+    myTransform2->Perform(aR1);
+    bIsDone=myTransform2->IsDone();
+    if (!bIsDone) {
+      myErrorStatus=12;
+      return;
+    }
+    //
+    const TopoDS_Shape& aR2=myTransform2->Shape();
+    //
+    myShape=aR2;
   }
-  //
-  const TopoDS_Shape& aR2=myTransform2->Shape();
-  //
-  myShape=aR2;
 }
 //
 //=======================================================================
@@ -321,16 +367,34 @@ const TopTools_ListOfShape& HYDROData_Transform::Modified
   pHistShapes=(TopTools_ListOfShape*)&myHistShapes;
   pHistShapes->Clear();
   //
-  const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
-  const TopoDS_Shape& aS1=aLS1.First();
-  //
-  const TopTools_ListOfShape& aLS1B=myBuilder->Modified(aS1);
-  aItLS.Initialize(aLS1B);
-  for (; aItLS.More(); aItLS.Next()) {
-    const TopoDS_Shape& aS1B=aItLS.Value();
-    const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
-    const TopoDS_Shape& aS2B=aLS2B.First();
-    pHistShapes->Append(aS2B);
+  if (myToTransform) { //pkv ft
+    const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
+    const TopoDS_Shape& aS1=aLS1.First();
+    //
+    const TopTools_ListOfShape& aLS1B=myBuilder->Modified(aS1);
+    //
+    if (aLS1B.IsEmpty()) { //pkv ft
+      const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1);
+      const TopoDS_Shape& aS2B=aLS2B.First();
+      pHistShapes->Append(aS2B);
+    }
+    else {
+      aItLS.Initialize(aLS1B);
+      for (; aItLS.More(); aItLS.Next()) {
+       const TopoDS_Shape& aS1B=aItLS.Value();
+       const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
+       const TopoDS_Shape& aS2B=aLS2B.First();
+       pHistShapes->Append(aS2B);
+      }
+    }
+  }
+  else {
+    const TopTools_ListOfShape& aLS1B=myBuilder->Modified(aS);
+    aItLS.Initialize(aLS1B);
+    for (; aItLS.More(); aItLS.Next()) {
+      const TopoDS_Shape& aS1B=aItLS.Value();
+      pHistShapes->Append(aS1B);
+    }
   }
   //
   return myHistShapes;
@@ -348,16 +412,33 @@ const TopTools_ListOfShape& HYDROData_Transform::Generated
   pHistShapes=(TopTools_ListOfShape*)&myHistShapes;
   pHistShapes->Clear();
   //
-  const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
-  const TopoDS_Shape& aS1=aLS1.First();
-  //
-  const TopTools_ListOfShape& aLS1B=myBuilder->Generated(aS1);
-  aItLS.Initialize(aLS1B);
-  for (; aItLS.More(); aItLS.Next()) {
-    const TopoDS_Shape& aS1B=aItLS.Value();
-    const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
-    const TopoDS_Shape& aS2B=aLS2B.First();
-    pHistShapes->Append(aS2B);
+  if (myToTransform) { //pkv ft
+    const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
+    const TopoDS_Shape& aS1=aLS1.First();
+    //
+    const TopTools_ListOfShape& aLS1B=myBuilder->Generated(aS1);
+    if (aLS1B.IsEmpty()) { //pkv ft
+      const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1);
+      const TopoDS_Shape& aS2B=aLS2B.First();
+      pHistShapes->Append(aS2B);
+    }
+    else {
+      aItLS.Initialize(aLS1B);
+      for (; aItLS.More(); aItLS.Next()) {
+       const TopoDS_Shape& aS1B=aItLS.Value();
+       const TopTools_ListOfShape& aLS2B=myTransform2->Modified(aS1B);
+       const TopoDS_Shape& aS2B=aLS2B.First();
+       pHistShapes->Append(aS2B);
+      }
+    }
+  }
+  else {
+    const TopTools_ListOfShape& aLS1B=myBuilder->Generated(aS);
+    aItLS.Initialize(aLS1B);
+    for (; aItLS.More(); aItLS.Next()) {
+      const TopoDS_Shape& aS1B=aItLS.Value();
+      pHistShapes->Append(aS1B);
+    }
   }
   //
   return myHistShapes;
@@ -370,10 +451,15 @@ Standard_Boolean HYDROData_Transform::IsDeleted(const TopoDS_Shape& aS)
 {
   Standard_Boolean bIsDeleted;
   //
-  const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
-  const TopoDS_Shape& aS1=aLS1.First();
-  //
-  bIsDeleted=myBuilder->IsDeleted(aS1);
+  if (myToTransform) { //pkv ft
+    const TopTools_ListOfShape& aLS1=myTransform1->Modified(aS);
+    const TopoDS_Shape& aS1=aLS1.First();
+    //
+    bIsDeleted=myBuilder->IsDeleted(aS1);
+  }
+  else {
+    bIsDeleted=myBuilder->IsDeleted(aS);
+  }
   //
   return bIsDeleted;
 }