]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
15.01.2014. Fix for bug of GroupDef edges.
authorszy <szy@opencascade.com>
Wed, 15 Jan 2014 12:30:19 +0000 (12:30 +0000)
committerszy <szy@opencascade.com>
Wed, 15 Jan 2014 12:30:19 +0000 (12:30 +0000)
src/HYDROData/HYDROData_CalculationCase.cxx
src/HYDROData/HYDROData_Transform.cxx

index a6bc84e7a9bc3bea726a8ca5867207bec517fe42..7ee3bd8cfb085eab23fb50f1982d3685d6de8b30 100644 (file)
 #include <TopTools_ListOfShape.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
 
-
+//#define  DEB_CALCULATION 1
+#ifdef DEB_CALCULATION
+#include <BRepTools.hxx>
+#include <TopLoc_Location.hxx>
+#endif 
 #define CALCULATION_REGIONS_PREF GetName() + "_Reg"
 #define CALCULATION_ZONES_PREF GetName() + "_Zone"
 #define CALCULATION_GROUPS_PREF GetName() + "_"
@@ -668,8 +672,11 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
 {
   // Sew faces
   BRepBuilderAPI_Sewing aSewing( Precision::Confusion() * 10.0 );
-  aSewing.SetNonManifoldMode( Standard_True );
-
+  aSewing.SetNonManifoldMode( Standard_False );
+#ifdef DEB_CALCULATION
+  TCollection_AsciiString aNam("Sh_");
+  int i=1;
+#endif
   TopTools_ListIteratorOfListOfShape aFaceIter( theFaces );
   for ( ; aFaceIter.More(); aFaceIter.Next() )
   {
@@ -680,12 +687,25 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
     if ( aShape.ShapeType() == TopAbs_FACE )
     {
       aSewing.Add( aShape );
+#ifdef DEB_CALCULATION
+         TCollection_AsciiString aName = aNam + ++i + ".brep";
+         BRepTools::Write(aShape ,aName.ToCString());
+#endif
     }
     else
     {
+#ifdef DEB_CALCULATION
+         int j = 1;
+#endif
       TopExp_Explorer anExp( aShape, TopAbs_FACE );
-      for ( ; anExp.More(); anExp.Next() )
+         for (; anExp.More(); anExp.Next() ) {
         aSewing.Add( anExp.Current() );
+#ifdef DEB_CALCULATION
+
+        TCollection_AsciiString aName = aNam + i + "_" + ++j + ".brep";
+               BRepTools::Write(anExp.Current() ,aName.ToCString());
+#endif
+         }
     }
   } // faces iterator
   
@@ -696,12 +716,15 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
   if ( aSewedShape.IsNull() || !TopoDS_Iterator( aSewedShape ).More() )
     return false;
 
+#ifdef DEB_CALCULATION
+  BRepTools::Write(aSewedShape ,"Sew.brep");
+#endif
   // Publish the sewed shape
   QString aName = EXPORT_NAME;
   GEOM::GEOM_Object_ptr aMainShape = 
     publishShapeInGEOM( theGeomEngine, theStudy, aSewedShape, aName );
 
-  if ( aMainShape->_is_nil() )
+  if ( aMainShape->_is_nil() )  
     return false;
 
   if ( theGroupsDefs.IsEmpty() )
@@ -719,15 +742,23 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
 
     NCollection_Sequence<int> aGroupIndexes;
     for( int i = 1, n = aGroupDef.Shapes.Length(); i <= n; i++ )
-    {
+       {
       const TopoDS_Shape& aShape = aGroupDef.Shapes.Value( i );
-
+#ifdef DEB_CALCULATION
+      cout << "\nOld shape(" << i << ") = " << aShape.TShape() <<endl;
+#endif
       const TopoDS_Shape& aModifiedShape = aSewing.Modified( aShape );
       if ( aModifiedShape.IsNull() )
         continue;
 
+#ifdef DEB_CALCULATION
+         const TopLoc_Location& aL1 = aShape.Location();
+         const TopLoc_Location& aL2 = aModifiedShape.Location();
+         cout << "\nNew shape(" << i << ") = " << aModifiedShape.TShape() << " Location is Equal = " << aL1.IsEqual(aL2)<<endl;
+#endif
+
       // Workaround for TopTools_IndexedMapOfShape::FindIndex()
-      for ( int anIndex = 1; anIndex <= aMapOfSubShapes.Extent(); anIndex++ )
+      /*for ( int anIndex = 1; anIndex <= aMapOfSubShapes.Extent(); anIndex++ )
       {
         if ( aModifiedShape.IsPartner( aMapOfSubShapes.FindKey( anIndex ) ) )
         {
@@ -735,12 +766,34 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
           break;
         }
       }
-    }
-
+    */
+         int anIndex = aMapOfSubShapes.FindIndex(aModifiedShape);
+         if(anIndex > 0) {
+               aGroupIndexes.Append( anIndex );
+        //break;
+         } else {
+#ifdef DEB_CALCULATION 
+         TCollection_AsciiString aNam("Lost_");
+         if(!aMapOfSubShapes.Contains(aModifiedShape)) {
+       for ( int anIndex = 1; anIndex <= aMapOfSubShapes.Extent(); anIndex++ )
+       {
+            const TopoDS_Shape& aS = aMapOfSubShapes.FindKey( anIndex );
+         if ( aModifiedShape.IsPartner( aS ) )
+                {
+                  cout <<"\nIndex in Map = " << anIndex << "TShape = " << aS.TShape() <<endl;
+                  TCollection_AsciiString aName = aNam + i + "_" + anIndex + ".brep";
+                  BRepTools::Write(aS ,aName.ToCString());
+          break;
+                }
+          }
+         }
+#endif
+       }
+       }
     if ( !aGroupIndexes.IsEmpty() )
       aGroupsData.Bind( aGroupDef.Name, aGroupIndexes );
   }
-  
   if ( !aGroupsData.IsEmpty() )
   {
     GEOM::GEOM_IGroupOperations_var aGroupOp = 
index 2ba5f3c71d00b494fe867ce73fd0fb3fa39099ea..f2aed48a62332dfdb3e4c8cc3838bb1c3665ded4 100644 (file)
@@ -203,7 +203,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 || 
@@ -236,18 +236,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;
+    }
   }
 }
 //=======================================================================
@@ -263,7 +266,12 @@ 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());
@@ -305,24 +313,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;
 }
 //
 //=======================================================================
@@ -338,16 +349,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;
@@ -365,16 +394,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;
@@ -387,10 +433,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;
 }