]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
lot6 / publish exploded shell right in the hydro
authorisn <isn@opencascade.com>
Wed, 5 Oct 2016 13:41:31 +0000 (16:41 +0300)
committerisn <isn@opencascade.com>
Wed, 5 Oct 2016 13:43:07 +0000 (16:43 +0300)
src/HYDROData/HYDROData_CalculationCase.cxx
src/HYDROData/HYDROData_CalculationCase.h
src/HYDROData/HYDROData_GeomTool.cxx
src/HYDROData/HYDROData_GeomTool.h

index f82e4e32a5581fcb1efa118888a9e90a96eae919..633e063a11bd09049454f202a3ff9c69738b5e2f 100644 (file)
@@ -1074,9 +1074,9 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var  theGeomEngine,
   
   // Get faces
   bool isAllNotSubmersible = true;
-  TopTools_ListOfShape aFaces;
   HYDROData_SequenceOfObjects aCaseRegions = GetRegions();
   HYDROData_SequenceOfObjects::Iterator aRegionIter( aCaseRegions );
+  NCollection_IndexedDataMap<TopoDS_Shape, QString> aFacesToNames;
   for ( ; aRegionIter.More(); aRegionIter.Next() )
   {
     Handle(HYDROData_Region) aRegion =
@@ -1088,7 +1088,7 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var  theGeomEngine,
       isAllNotSubmersible = false;
 
     TopoDS_Shape aRegionShape = aRegion->GetShape( &aSeqOfGroupsDefs );
-    aFaces.Append( aRegionShape );
+    aFacesToNames.Add( aRegionShape, aRegion->GetName() );
   }
 
   bool aRes = false;
@@ -1098,7 +1098,7 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var  theGeomEngine,
   } else if ( isAllNotSubmersible ) {
     theErrorMsg = QString("there are no submersible regions.");
   } else {
-    aRes = Export( theGeomEngine, theStudy, aFaces, aSeqOfGroupsDefs, theGeomObjEntry );;
+    aRes = Export( theGeomEngine, theStudy, aFacesToNames, aSeqOfGroupsDefs, theGeomObjEntry );;
   }
 
   if( aRes && !GetLandCoverMap().IsNull() && !GetStricklerTable().IsNull() )
@@ -1111,7 +1111,7 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var  theGeomEngine,
 
 bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var                            theGeomEngine,
                                         SALOMEDS::Study_ptr                           theStudy,
-                                        const TopTools_ListOfShape&                   theFaces,
+                                        const NCollection_IndexedDataMap<TopoDS_Shape, QString>& aFacesToName,
                                         const HYDROData_ShapesGroup::SeqOfGroupsDefs& theGroupsDefs,
                                         QString& theGeomObjEntry ) const
 {
@@ -1122,10 +1122,9 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
   TCollection_AsciiString aNam("Sh_");
   int i=1;
 #endif
-  TopTools_ListIteratorOfListOfShape aFaceIter( theFaces );
-  for ( ; aFaceIter.More(); aFaceIter.Next() )
+  for ( int i = 1; i <= aFacesToName.Extent(); i++ )
   {
-    TopoDS_Shape aShape = aFaceIter.Value();
+    const TopoDS_Shape& aShape = aFacesToName.FindKey(i);
     if ( aShape.IsNull() )
       continue;
 
@@ -1157,6 +1156,19 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
   aSewing.Perform();
   TopoDS_Shape aSewedShape = aSewing.SewedShape();
 
+  NCollection_IndexedDataMap<TopoDS_Shape, QString> aFacesToNameModif;
+
+  for ( int i = 1; i <= aFacesToName.Extent(); i++ )
+  {
+    const TopoDS_Shape& CurShape = aFacesToName.FindKey(i);
+    const QString& Qstr = aFacesToName.FindFromIndex(i);
+    if (aSewing.IsModified(CurShape))
+      aFacesToNameModif.Add(aSewing.Modified(CurShape), Qstr);
+    else
+      aFacesToNameModif.Add(CurShape, Qstr);
+  }
+
   // If the sewed shape is empty - return false
   if ( aSewedShape.IsNull() || !TopoDS_Iterator( aSewedShape ).More() )
     return false;
@@ -1167,7 +1179,7 @@ bool HYDROData_CalculationCase::Export( GEOM::GEOM_Gen_var
   // Publish the sewed shape
   QString aName = EXPORT_NAME;
   GEOM::GEOM_Object_ptr aMainShape = 
-    HYDROData_GeomTool::publishShapeInGEOM( theGeomEngine, theStudy, aSewedShape, aName, theGeomObjEntry );
+    HYDROData_GeomTool::ExplodeShapeInGEOMandPublish( theGeomEngine, theStudy, aSewedShape, aFacesToNameModif, aName, theGeomObjEntry );
 
   if ( aMainShape->_is_nil() )  
     return false;
index ca0fd81cb7440fd67c66a972ae83b618904bd734..242a8b6832138f0be4360ecdacfe269687639f9b 100644 (file)
@@ -440,7 +440,7 @@ private:
 #ifndef LIGHT_MODE
   bool Export( GEOM::GEOM_Gen_var                            theGeomEngine,
                SALOMEDS::Study_ptr                           theStudy,
-               const TopTools_ListOfShape&                   theFaces,
+               const NCollection_IndexedDataMap<TopoDS_Shape, QString>& aFacesToName,
                const HYDROData_ShapesGroup::SeqOfGroupsDefs& theGroupsDefs,
                QString& theGeomObjEntry ) const;
 #endif
index 7517677a5653c00d5b6629d706ff6dccfe76a6f7..8423f6d314083b7a514fdf993d29ea673841e2cb 100644 (file)
@@ -23,6 +23,7 @@
 #include <TopoDS_Shape.hxx>
 
 #include <BRepTools.hxx>
+#include <GEOMBase.h>
 
 #ifdef WIN32
   #pragma warning ( disable: 4251 )
 #include <SALOME_NamingService.hxx>
 #include <SALOME_LifeCycleCORBA.hxx>
 
+#include <TopTools_MapOfShape.hxx>
+#include <TopExp_Explorer.hxx>
+
 #ifdef WIN32
   #pragma warning ( default: 4251 )
 #endif
 
 #include <QStringList>
+#include <QVector>
 #include <QSet>
 
 static int _argc = 0;
@@ -155,6 +160,41 @@ GEOM::GEOM_Object_ptr HYDROData_GeomTool::publishShapeInGEOM(
   return aGeomObj._retn();
 }
 
+
+GEOM::GEOM_Object_ptr HYDROData_GeomTool::ExplodeShapeInGEOMandPublish( GEOM::GEOM_Gen_var theGeomEngine, 
+  SALOMEDS::Study_ptr theStudy, 
+  const TopoDS_Shape& theShape,   
+  const NCollection_IndexedDataMap<TopoDS_Shape, QString>& aFacesToNameModif,  
+  const QString& theName,
+  QString& theGeomObjEntry)
+{ 
+  GEOM::GEOM_Object_ptr aGeomObj = HYDROData_GeomTool::publishShapeInGEOM( theGeomEngine, theStudy, theShape, theName, theGeomObjEntry );
+
+  GEOM::GEOM_IShapesOperations_var anExpOp = theGeomEngine->GetIShapesOperations( theStudy->StudyId() );
+  GEOM::ListOfGO* aFc = anExpOp->MakeExplode(aGeomObj, TopAbs_FACE, false);
+
+  TopTools_MapOfShape mapShape;
+
+  TopExp_Explorer exp (theShape, TopAbs_FACE);
+  QVector<QString> Names;
+  for (; exp.More(); exp.Next())
+  {
+    const TopoDS_Shape& csh = exp.Current();
+    if (mapShape.Add(csh))
+    {
+      //listShape.Append(csh);
+      QString Qstr = aFacesToNameModif.FindFromKey(csh);
+      Names.push_back(Qstr);
+    }
+  }
+
+  for (size_t i = 0; i < aFc->length(); i++)
+    GEOMBase::PublishSubObject(aFc->operator[](i), Names[i]);  
+
+  return aGeomObj;
+}
+
+
  GEOM::GEOM_Object_ptr HYDROData_GeomTool::createFaceInGEOM( GEOM::GEOM_Gen_var theGeomEngine,
                                                              SALOMEDS::Study_ptr theStudy,
                                                              const int theWidth,
index 278e6cafc84cf9b577eb880bc451961f494e64ca..2ffa63cffd7b3139e3b7ddae9b215969e4fd1c0b 100644 (file)
@@ -20,6 +20,7 @@
 #define HYDROData_GeomTool_HeaderFile
 
 #include "HYDROData.h"
+#include <NCollection_IndexedDataMap.hxx>
 
 #ifdef WIN32
   #pragma warning ( disable: 4251 )
@@ -113,6 +114,13 @@ public:
                                     GEOM::GEOM_Object_ptr theGeomObj,
                                     const QString& theName );
 
+  static GEOM::GEOM_Object_ptr ExplodeShapeInGEOMandPublish( GEOM::GEOM_Gen_var theGeomEngine, 
+                                                      SALOMEDS::Study_ptr theStudy, 
+                                                      const TopoDS_Shape& theShape, 
+                                                      const NCollection_IndexedDataMap<TopoDS_Shape, QString>& aFacesToNameModif,
+                                                      const QString& theName,
+                                                      QString& theGeomObjEntry);
+
 };
 
 #endif