Salome HOME
correct update status of stream and DTM
[modules/hydro.git] / src / HYDROData / HYDROData_CalculationCase.cxx
index 9323fe6ce90221ede273a5a1a7ded33126c9cbfb..610e96a12bdb70606d38955d917eb5c08119afce 100644 (file)
@@ -303,7 +303,8 @@ void HYDROData_CalculationCase::Update()
         const HYDROData_SplitToZonesTool::SplitData& aSplitData = anIter.next();
         if ( aSplitData.Type == HYDROData_SplitToZonesTool::SplitData::Data_Zone )
           aZonesList.append( aSplitData );
-        else if ( aSplitData.Type == HYDROData_SplitToZonesTool::SplitData::Data_Edge )
+        else if ( aSplitData.Type == HYDROData_SplitToZonesTool::SplitData::Data_Edge ||
+                  aSplitData.Type == HYDROData_SplitToZonesTool::SplitData::Data_IntEdge)
           anEdgesList.append( aSplitData );
       }
     }
@@ -460,6 +461,12 @@ void HYDROData_CalculationCase::CreateEdgeGroupsDef( const Handle(HYDROData_Docu
       continue;
 
     aSplitGroup->AddShape( aSplitData.Shape );
+
+    TopTools_SequenceOfShape theShapes;
+    aSplitGroup->GetShapes(theShapes);
+
+    if (aSplitData.Type == HYDROData_SplitToZonesTool::SplitData::Data_IntEdge)
+      aSplitGroup->SetInternal(true); 
   }
 }
 
@@ -1055,6 +1062,7 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var  theGeomEngine,
   // Get groups definitions
   HYDROData_SequenceOfObjects aSplitGroups = GetSplitGroups();
 
+  TopTools_SequenceOfShape IntSh; //internal edges
   HYDROData_SequenceOfObjects::Iterator anIter( aSplitGroups );
   for ( ; anIter.More(); anIter.Next() )
   {
@@ -1070,6 +1078,16 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var  theGeomEngine,
     aGroup->GetShapes( aGroupDef.Shapes );
 
     aSeqOfGroupsDefs.Append( aGroupDef );
+
+    Handle(HYDROData_SplitShapesGroup) aSSGroup = Handle(HYDROData_SplitShapesGroup)::DownCast( anIter.Value() );
+    TopTools_SequenceOfShape dummy;
+    if (!aSSGroup.IsNull())
+      if (aSSGroup->GetInternal())
+      {
+        aSSGroup->GetShapes(dummy);
+        IntSh.Append(dummy);
+      }
+
   }
   
   // Get faces
@@ -1087,7 +1105,7 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var  theGeomEngine,
     if ( isAllNotSubmersible )
       isAllNotSubmersible = false;
 
-    TopoDS_Shape aRegionShape = aRegion->GetShape( &aSeqOfGroupsDefs );
+    TopoDS_Shape aRegionShape = aRegion->GetShape( &aSeqOfGroupsDefs, &IntSh );
     aShToNames.Add( aRegionShape, aRegion->GetName() );
   }
 
@@ -1122,33 +1140,32 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
   TCollection_AsciiString aNam("Sh_");
   int i=1;
 #endif
+  TopTools_DataMapOfShapeListOfShape SH2M;
   for ( int i = 1; i <= aShToName.Extent(); i++ )
   {
     const TopoDS_Shape& aShape = aShToName.FindKey(i);
     if ( aShape.IsNull() )
       continue;
-
-    if ( aShape.ShapeType() == TopAbs_FACE )
+    
+    SH2M.Bind(aShape, TopTools_ListOfShape());
+    TopTools_ListOfShape& LM = SH2M.ChangeFind(aShape);
+    if ( aShape.ShapeType() == TopAbs_FACE || aShape.ShapeType() == TopAbs_SHELL )
     {
       aSewing.Add( aShape );
-#ifdef DEB_CALCULATION
-      TCollection_AsciiString aName = aNam + ++i + ".brep";
-      BRepTools::Write(aShape ,aName.ToCString());
-#endif
+      LM.Append(aShape);
     }
-    else
+    else if (aShape.ShapeType() == TopAbs_COMPOUND)
     {
-#ifdef DEB_CALCULATION
-      int j = 1;
-#endif
-      TopExp_Explorer anExp( aShape, TopAbs_FACE );
-      for (; anExp.More(); anExp.Next() ) {
+      TopExp_Explorer anExp( aShape, TopAbs_SHELL );
+      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
+        LM.Append(anExp.Current());
+      }
+      anExp.Init( aShape, TopAbs_FACE, TopAbs_SHELL );
+      {
+        aSewing.Add( anExp.Current() );
+        LM.Append(anExp.Current());
       }
     }
   } // faces iterator
@@ -1162,13 +1179,14 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
   {
     const TopoDS_Shape& CurShape = aShToName.FindKey(i);
     const QString& Qstr = aShToName.FindFromIndex(i);
-    for (TopExp_Explorer Exp(CurShape, TopAbs_FACE); Exp.More(); Exp.Next())
+    const TopTools_ListOfShape& LM = SH2M(CurShape);
+    for (TopTools_ListIteratorOfListOfShape it(LM); it.More(); it.Next())
     {
-      const TopoDS_Face& cf = TopoDS::Face(Exp.Current());
-      if (aSewing.IsModified(cf))
-        aFacesToNameModif.Add(aSewing.Modified(cf), Qstr);
+      const TopoDS_Shape& csh = it.Value();
+      if (aSewing.IsModified(csh))
+        aFacesToNameModif.Add(aSewing.Modified(csh), Qstr);
       else
-        aFacesToNameModif.Add(cf, Qstr);
+        aFacesToNameModif.Add(csh, Qstr);
     }
   }