Salome HOME
global misprinting in the word "splitted" is replaced by "split"
[modules/hydro.git] / src / HYDROData / HYDROData_SplitToZonesTool.cxx
index 16062cf5b19877fd96cb7f8a74be1b6e9aa15890..f91732cd2fcdba0a6ae49707008b8b684b76dee3 100644 (file)
@@ -1,3 +1,20 @@
+// 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_SplitToZonesTool.h"
 
@@ -122,12 +139,14 @@ HYDROData_SplitToZonesTool::SplitDataList
 #endif
   for( int anIndex = 1, aLength = theObjectList.Length(); anIndex <= aLength; anIndex++ )
   {
-    Handle(HYDROData_Object) aGeomObj = 
-      Handle(HYDROData_Object)::DownCast( theObjectList.Value( anIndex ) );
-    if( aGeomObj.IsNull() )
-      continue;
+    Handle(HYDROData_Entity) anObj = theObjectList.Value( anIndex );
+    TopoDS_Shape aShape;
+
+    Handle(HYDROData_Object) aGeomObj = Handle(HYDROData_Object)::DownCast( anObj );
+    if( !aGeomObj.IsNull() ) {
+      aShape = aGeomObj->GetTopShape();
+    }
 
-    TopoDS_Shape aShape = aGeomObj->GetTopShape();
     if ( aShape.IsNull() )
       continue;  
 #ifdef DEB_SPLIT_TO_ZONES
@@ -140,12 +159,12 @@ HYDROData_SplitToZonesTool::SplitDataList
       for ( ; anExp.More(); anExp.Next() ) {
         const TopoDS_Face& aFace = TopoDS::Face( anExp.Current() );
         if ( !aFace.IsNull() ) {
-          SplitData aSplitData( SplitData::Data_Zone, aFace, aGeomObj->GetName() );
+          SplitData aSplitData( SplitData::Data_Zone, aFace, anObj->GetName() );
           anInputSplitDataList.append( aSplitData );
         }
       }
     } else {
-      SplitData aSplitData( SplitData::Data_Zone, aShape, aGeomObj->GetName() );
+      SplitData aSplitData( SplitData::Data_Zone, aShape, anObj->GetName() );
       anInputSplitDataList.append( aSplitData );
     }
   }
@@ -201,7 +220,7 @@ HYDROData_SplitToZonesTool::SplitDataList
     QStringList aListOfNames;
     for (int i=0;i < anInputGroupList.size() ;i++) {
       const TopoDS_Shape& aSh = anInputGroupList.at(i).Shape;
-      aDM3.Bind(aSh, anInputGroupList.at(i).ObjectNames);
+      aDM3.Add(aSh, anInputGroupList.at(i).ObjectNames);
     }
   }
 
@@ -214,7 +233,7 @@ HYDROData_SplitToZonesTool::SplitDataList
   aBB.MakeCompound(aCmp);
   for (int i=0;i < anInputSplitDataList.size() ;i++) {
     const TopoDS_Shape& aSh = anInputSplitDataList.at(i).Shape;
-    aDM3.Bind(aSh, anInputSplitDataList.at(i).ObjectNames);
+    aDM3.Add(aSh, anInputSplitDataList.at(i).ObjectNames);
     aLS.Append(aSh);
     aBB.Add(aCmp,aSh);
 #ifdef DEB_SPLIT_TO_ZONES
@@ -266,16 +285,18 @@ HYDROData_SplitToZonesTool::SplitDataList
       TopTools_ListIteratorOfListOfShape it(aListOfNew);
       for(;it.More();it.Next())       
         aList.Append(it.Value());
+         /* *********************************************************************
       // Bug in History: partition should give only modified entities! => temporary solution is used
-      const TopTools_ListOfShape& aListOfGen = splitTool.Generated(anIt.Value());
-      if(!aListOfGen.IsEmpty())
-        foundF = Standard_True;
-      it.Initialize(aListOfGen);    
-      for(;it.More();it.Next())     
-        aList.Append(it.Value());
+      //const TopTools_ListOfShape& aListOfGen = splitTool.Generated(anIt.Value());
+      //if(!aListOfGen.IsEmpty())
+        //foundF = Standard_True;
+      //it.Initialize(aListOfGen);    
+      //for(;it.More();it.Next())     
+       // aList.Append(it.Value());  
+          ********************************************************************* */
       if(!foundF) // face is not modified
         aList.Append (anIt.Value());
-      aDM1.Bind(anIt.Value(), aList);
+      aDM1.Add(anIt.Value(), aList);
   #ifdef DEB_SPLIT_TO_ZONES
       TCollection_AsciiString aName;
   #endif
@@ -295,12 +316,14 @@ HYDROData_SplitToZonesTool::SplitDataList
             //BRepTools::Write(it.Value(),aName.ToCString());
   #endif
           }
-          const TopTools_ListOfShape& aListG = splitTool.Generated(exp.Current());
-          if(aListG.Extent()) foundE = Standard_True;
-          it.Initialize(aListG);    
-          for(int k=1;it.More();it.Next(),k++)
-            aList.Append(it.Value());
+          /* *********************************************************************
+                 //const TopTools_ListOfShape& aListG = splitTool.Generated(exp.Current());
+          //if(aListG.Extent()) foundE = Standard_True;
+          //it.Initialize(aListG);    
+          //for(int k=1;it.More();it.Next(),k++)
+            //aList.Append(it.Value());
           //cout << "NB_EDGE = " << aList.Extent() <<endl;
+                 ************************************************************************** */
           if(!foundE) {
             aList.Append (exp.Current());
   #ifdef DEB_SPLIT_TO_ZONES
@@ -309,7 +332,7 @@ HYDROData_SplitToZonesTool::SplitDataList
             cout << aName.ToCString()<< " = " << exp.Current().TShape() <<endl;
   #endif
           }
-          aDM1.Bind(exp.Current(), aList);
+          aDM1.Add(exp.Current(), aList);
         }
       }
     }
@@ -348,10 +371,10 @@ HYDROData_SplitToZonesTool::SplitDataList
               aBndView.Add(anEdge);
               QStringList aListOfNames;
               aListOfNames.append(aBndName);
-              aDM3.Bind(anEdge, aListOfNames);
+              aDM3.Add(anEdge, aListOfNames);
               TopTools_ListOfShape aList;
               aList.Append(anEdge);
-              aDM1.Bind(anEdge,aList);
+              aDM1.Add(anEdge,aList);
             }
             HYDROData_MapOfShape aView;
             exp.Init (aResult, TopAbs_FACE);
@@ -361,7 +384,7 @@ HYDROData_SplitToZonesTool::SplitDataList
                 const TopTools_ListOfShape& aListOfNew = mkCom.Modified(aFace);
                 //cout << "Modified: " << aListOfNew.Extent() <<endl;                                    
                 if(!aListOfNew.IsEmpty()) {
-                  aDM4.Bind(aFace, aListOfNew);
+                  aDM4.Add(aFace, aListOfNew);
 #ifdef DEB_SPLIT_TO_ZONES
                   //TCollection_AsciiString aName = aNam + i + ".brep";
                   //BRepTools::Write(aListOfNew.Last(), aName.ToCString());                
@@ -371,7 +394,7 @@ HYDROData_SplitToZonesTool::SplitDataList
                     if(!mkCom.IsDeleted(aFace)) {
                       const TopTools_ListOfShape& aListOfGen = mkCom.Generated(aFace);    
                       if(!aListOfGen.IsEmpty()) {
-                        aDM4.Bind(aFace, aListOfGen);    
+                        /* aDM4.Bind(aFace, aListOfGen); ???   */
 #ifdef DEB_SPLIT_TO_ZONES
                         //TCollection_AsciiString aName = aNam + i + "g.brep";
                         //BRepTools::Write(aListOfGen.Last(), aName.ToCString());
@@ -380,7 +403,7 @@ HYDROData_SplitToZonesTool::SplitDataList
                        else {
                         TopTools_ListOfShape aList; 
                         aList.Append(aFace);
-                        aDM4.Bind(aFace, aList); //the same face - not modified
+                        aDM4.Add(aFace, aList); //the same face - not modified
                        }
                     }
              }
@@ -392,16 +415,16 @@ HYDROData_SplitToZonesTool::SplitDataList
                  aView.Add(anEdge);
                  const TopTools_ListOfShape& aListOfNewEd = mkCom.Modified(anEdge);                 
                  if(!aListOfNewEd.IsEmpty())
-                   aDM4.Bind(anEdge, aListOfNewEd);
+                   aDM4.Add(anEdge, aListOfNewEd);
                  else {
                    if(!mkCom.IsDeleted(anEdge)) {
                      const TopTools_ListOfShape& aListOfGenEd = mkCom.Generated(anEdge);
                      if(!aListOfGenEd.IsEmpty()) {
-                       aDM4.Bind(anEdge, aListOfGenEd);
+                       /* aDM4.Bind(anEdge, aListOfGenEd); ???*/
                      } else {
                        TopTools_ListOfShape aList; 
                        aList.Append(anEdge);
-                       aDM4.Bind(anEdge, aList);//the same edge - not modified
+                       aDM4.Add(anEdge, aList);//the same edge - not modified
                      }
                    }
                  }
@@ -428,16 +451,16 @@ HYDROData_SplitToZonesTool::SplitDataList
              }
 #endif
              if(!aListOfNewEd.IsEmpty())
-               aDM4.Bind(anEdge, aListOfNewEd);
+               aDM4.Add(anEdge, aListOfNewEd);
              else {
                if(!mkCom.IsDeleted(anEdge)) {
                  const TopTools_ListOfShape& aListOfGenEd = mkCom.Generated(anEdge);
                  if(!aListOfGenEd.IsEmpty()) {
-                   aDM4.Bind(anEdge, aListOfGenEd);
+                   /* aDM4.Bind(anEdge, aListOfGenEd); ??? */
                  } else {
                    TopTools_ListOfShape aList; 
                    aList.Append(anEdge);
-                   aDM4.Bind(anEdge, aList);//the same edge - not modified
+                   aDM4.Add(anEdge, aList);//the same edge - not modified
                  }
                }
              }
@@ -452,13 +475,13 @@ HYDROData_SplitToZonesTool::SplitDataList
              TopTools_ListOfShape aList;
              aList.Append(aKey);
              const TopTools_ListOfShape& aListOfNew = mIt.Value();
-             aDM1.Bind(aKey, aListOfNew);
+             aDM1.Add(aKey, aListOfNew);
              TopTools_ListIteratorOfListOfShape it(aListOfNew);
              for(;it.More();it.Next()) {
-               if(!aDM2.IsBound(it.Value()))
-                 aDM2.Bind(it.Value(), aList);
+               if(!aDM2.Contains(it.Value()))
+                 aDM2.Add(it.Value(), aList);
                else {
-                 TopTools_ListOfShape& aList = aDM2.ChangeFind(it.Value());
+                 TopTools_ListOfShape& aList = aDM2.ChangeFromKey(it.Value());
                  aList.Prepend(aKey);
                }
              }
@@ -473,16 +496,16 @@ HYDROData_SplitToZonesTool::SplitDataList
              const TopTools_ListOfShape& aListOfNew = aMIt.Value();
              TopTools_ListIteratorOfListOfShape it(aListOfNew);
              for(;it.More();it.Next()) {// iterate new: b1, b2, b3...
-               if(!aDM4.IsBound(it.Value())) // bi - is deleted
+               if(!aDM4.Contains(it.Value())) // bi - is deleted
                  continue; // go to the next bi
                else {
-                  const TopTools_ListOfShape& aListOfNew4 = aDM4.Find(it.Value());
+                 const TopTools_ListOfShape& aListOfNew4 = aDM4.FindFromKey(it.Value());
                   TopTools_ListIteratorOfListOfShape it4(aListOfNew4); // {c1, c2, c3,...}
                   for(;it4.More();it4.Next()) {
-                    if(!aDM2.IsBound(it4.Value()))
-                      aDM2.Bind(it4.Value(), aList);
+                    if(!aDM2.Contains(it4.Value()))
+                      aDM2.Add(it4.Value(), aList);
                     else {
-                      TopTools_ListOfShape& aList = aDM2.ChangeFind(it4.Value());
+                      TopTools_ListOfShape& aList = aDM2.ChangeFromKey(it4.Value());
                       aList.Prepend(aKey);
                     }
                   }
@@ -509,10 +532,10 @@ HYDROData_SplitToZonesTool::SplitDataList
       const TopTools_ListOfShape& aListOfNew = aMIt.Value();
       TopTools_ListIteratorOfListOfShape it(aListOfNew);
       for(;it.More();it.Next()) {
-        if(!aDM2.IsBound(it.Value()))
-          aDM2.Bind(it.Value(), aList);
+        if(!aDM2.Contains(it.Value()))
+          aDM2.Add(it.Value(), aList);
         else {
-          TopTools_ListOfShape& aList = aDM2.ChangeFind(it.Value());
+          TopTools_ListOfShape& aList = aDM2.ChangeFromKey(it.Value());
           aList.Prepend(aKey);
         }
       }
@@ -542,8 +565,8 @@ HYDROData_SplitToZonesTool::SplitDataList
     TopTools_ListIteratorOfListOfShape it(aListOfOld);
     for(int j =1;it.More();it.Next(),j++) {    
       const TopoDS_Shape& aSh = it.Value(); //old
-      if(aDM3.IsBound(aSh)) {
-        const QStringList& ObjectNames = aDM3.Find(aSh);    
+      if(aDM3.Contains(aSh)) {
+        const QStringList& ObjectNames = aDM3.FindFromKey(aSh);    
         aListOfNames.append(ObjectNames);
 #ifdef DEB_SPLIT_TO_ZONES
         TCollection_AsciiString aName = aNam4 + i +"_" + j + ".brep";
@@ -575,3 +598,11 @@ HYDROData_SplitToZonesTool::SplitDataList
   return anOutputSplitDataList;
 }
 
+HYDROData_SplitToZonesTool::SplitDataList
+  HYDROData_SplitToZonesTool::Split( const HYDROData_SequenceOfObjects& theObjectList )
+{
+  HYDROData_SequenceOfObjects aGeomGroups;
+  Handle(HYDROData_PolylineXY) aPolyline;
+
+  return Split( theObjectList, aGeomGroups, aPolyline );
+}
\ No newline at end of file