-//============================================================================
-void FeaturesPlugin_Extrusion::LoadNamingDS(GeomAlgoAPI_Extrusion& theFeature,
- std::shared_ptr<ModelAPI_ResultBody> theResultBody,
- std::shared_ptr<GeomAPI_Shape> theBasis,
- std::shared_ptr<GeomAPI_Shape> theContext)
-{
+ // Searching faces with common edges.
+ ListOfShape aShells;
+ ListOfShape aFreeFaces;
+ std::shared_ptr<GeomAPI_Shape> aFacesCompound = GeomAlgoAPI_CompoundBuilder::compound(aFacesList);
+ GeomAlgoAPI_ShapeTools::combineShapes(aFacesCompound, GeomAPI_Shape::SHELL, aShells, aFreeFaces);
+ aShells.insert(aShells.end(), aFreeFaces.begin(), aFreeFaces.end());
+
+ // Generating result for each shell and face.
+ int aResultIndex = 0;
+ for(ListOfShape::const_iterator anIter = aShells.cbegin(); anIter != aShells.cend(); anIter++) {
+ std::shared_ptr<GeomAPI_Shape> aBaseShape = *anIter;
+
+ GeomAlgoAPI_Prism aPrismAlgo(aBaseShape, aToShape, aToSize, aFromShape, aFromSize);
+ if(!aPrismAlgo.isDone()) {
+ static const std::string aPrismAlgoError = "Extrusion algorithm failed";
+ setError(aPrismAlgoError);
+ aResultIndex = 0;
+ break;
+ }
+
+ // Check if shape is valid
+ if(!aPrismAlgo.shape().get() || aPrismAlgo.shape()->isNull()) {
+ static const std::string aShapeError = "Resulting shape is Null";
+ setError(aShapeError);
+ aResultIndex = 0;
+ break;
+ }
+ if(!aPrismAlgo.isValid()) {
+ std::string aPrismAlgoError = "Warning: resulting shape is not valid";
+ setError(aPrismAlgoError);
+ aResultIndex = 0;
+ break;
+ }
+
+ ResultBodyPtr aResultBody = document()->createBody(data(), aResultIndex);
+ loadNamingDS(aPrismAlgo, aResultBody, aBaseShape);
+ setResult(aResultBody, aResultIndex);
+ aResultIndex++;
+ }