+
+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, TopTools_ShapeMapHasher>& 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;
+
+ NCollection_IndexedDataMap<TopoDS_Shape, QString, TopTools_ShapeMapHasher> aFF2N;
+ for (int i = 1; i <= aFacesToNameModif.Extent(); i++)
+ {
+ TopExp_Explorer exp (aFacesToNameModif.FindKey(i), TopAbs_FACE);
+ for (;exp.More(); exp.Next())
+ aFF2N.Add(exp.Current(), aFacesToNameModif.FindFromIndex(i));
+ }
+
+ 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 = aFF2N.FindFromKey(csh);
+ Names.push_back(Qstr);
+ }
+ }
+
+ for (size_t i = 0; i < aFc->length(); i++)
+ GEOMBase::PublishSubObject(aFc->operator[](i), Names[i]);
+
+ return aGeomObj;
+}
+
+