X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FFeaturesPlugin%2FFeaturesPlugin_Extrusion.cpp;h=10504a1832da15caa49a5e1368fd01d68edba40f;hb=04e2497fc973f0afc95d0a4a6f95e37fb27f45e8;hp=bfcbde007c375efe9356930b07a5597be1e84e97;hpb=4c74e5b864eef28128e27b3ece944990ca8f3fbe;p=modules%2Fshaper.git diff --git a/src/FeaturesPlugin/FeaturesPlugin_Extrusion.cpp b/src/FeaturesPlugin/FeaturesPlugin_Extrusion.cpp index bfcbde007..10504a183 100644 --- a/src/FeaturesPlugin/FeaturesPlugin_Extrusion.cpp +++ b/src/FeaturesPlugin/FeaturesPlugin_Extrusion.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2019 CEA/DEN, EDF R&D +// Copyright (C) 2014-2022 CEA/DEN, 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 @@ -18,13 +18,13 @@ // #include "FeaturesPlugin_Extrusion.h" -#include "FeaturesPlugin_Tools.h" #include #include #include #include #include +#include #include #include @@ -101,53 +101,20 @@ bool FeaturesPlugin_Extrusion::makeExtrusions(ListOfShape& theBaseShapes, getBaseShapes(theBaseShapes); //Getting direction. - static const std::string aSelectionError = "Error: The direction shape selection is bad."; - AttributeSelectionPtr aSelection = selection(DIRECTION_OBJECT_ID()); - GeomShapePtr aShape = aSelection->value(); - if (!aShape.get()) { - if (aSelection->context().get()) { - aShape = aSelection->context()->shape(); - } - } - - GeomEdgePtr anEdge; - if (aShape.get()) { - if (aShape->isEdge()) - { - anEdge = aShape->edge(); - } - else if (aShape->isCompound()) - { - GeomAPI_ShapeIterator anIt(aShape); - anEdge = anIt.current()->edge(); - } - } - std::shared_ptr aDir; - if(anEdge.get()) { - if(anEdge->isLine()) { - aDir = anEdge->line()->direction(); - } - } + getDirection(aDir); // Getting sizes. double aToSize = 0.0; double aFromSize = 0.0; - - if(string(CREATION_METHOD())->value() == CREATION_METHOD_BY_SIZES()) { - aToSize = real(TO_SIZE_ID())->value(); - aFromSize = real(FROM_SIZE_ID())->value(); - } else { - aToSize = real(TO_OFFSET_ID())->value(); - aFromSize = real(FROM_OFFSET_ID())->value(); - } + getSizes(aToSize, aFromSize); // Getting bounding planes. GeomShapePtr aToShape; GeomShapePtr aFromShape; if(string(CREATION_METHOD())->value() == CREATION_METHOD_BY_PLANES()) { - aSelection = selection(TO_OBJECT_ID()); + AttributeSelectionPtr aSelection = selection(TO_OBJECT_ID()); if(aSelection.get()) { aToShape = std::dynamic_pointer_cast(aSelection->value()); if(!aToShape.get() && aSelection->context().get()) { @@ -206,11 +173,56 @@ void FeaturesPlugin_Extrusion::storeResultWithBoundaries( ResultBodyPtr aResultBody = document()->createBody(data(), theIndex); // Store modified shapes. - FeaturesPlugin_Tools::loadModifiedShapes(aResultBody, theBoundaryShapes, ListOfShape(), - theMakeShape, theMakeShape->shape()); + ModelAPI_Tools::loadModifiedShapes(aResultBody, theBoundaryShapes, ListOfShape(), + theMakeShape, theMakeShape->shape()); // Store generated edges/faces. storeGenerationHistory(aResultBody, theBaseShape, theMakeShape); setResult(aResultBody, theIndex); } + +//================================================================================================= +void FeaturesPlugin_Extrusion::getDirection(std::shared_ptr& theDir) +{ + static const std::string aSelectionError = "Error: The direction shape selection is bad."; + AttributeSelectionPtr aSelection = selection(DIRECTION_OBJECT_ID()); + GeomShapePtr aShape = aSelection->value(); + if (!aShape.get()) { + if (aSelection->context().get()) { + aShape = aSelection->context()->shape(); + } + } + + GeomEdgePtr anEdge; + if (aShape.get()) { + if (aShape->isEdge()) + { + anEdge = aShape->edge(); + } + else if (aShape->isCompound()) + { + GeomAPI_ShapeIterator anIt(aShape); + anEdge = anIt.current()->edge(); + } + } + + if (anEdge.get()) { + if (anEdge->isLine()) { + theDir = anEdge->line()->direction(); + } + } +} + +//================================================================================================= +void FeaturesPlugin_Extrusion::getSizes(double& theToSize, double& theFromSize) +{ + if (string(CREATION_METHOD())->value() == CREATION_METHOD_BY_SIZES()) { + theToSize = real(TO_SIZE_ID())->value(); + theFromSize = real(FROM_SIZE_ID())->value(); + } else if (string(CREATION_METHOD())->value() == CREATION_METHOD_BY_PLANES()) { + theToSize = real(TO_OFFSET_ID())->value(); + theFromSize = real(FROM_OFFSET_ID())->value(); + } else { + } +}