X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FFeaturesAPI%2FFeaturesAPI_RevolutionBoolean.cpp;h=17571521185142b9806d948247956f847a6a18e1;hb=6adfe7af58002dc090736f54bff11a403a34b42b;hp=3ca6f2b7d55612da19c0cbd3bfe6816cd2c3e730;hpb=f98f887290d4e2b4bd6618389911e82b6b9674f3;p=modules%2Fshaper.git diff --git a/src/FeaturesAPI/FeaturesAPI_RevolutionBoolean.cpp b/src/FeaturesAPI/FeaturesAPI_RevolutionBoolean.cpp index 3ca6f2b7d..175715211 100644 --- a/src/FeaturesAPI/FeaturesAPI_RevolutionBoolean.cpp +++ b/src/FeaturesAPI/FeaturesAPI_RevolutionBoolean.cpp @@ -7,10 +7,13 @@ #include "FeaturesAPI_RevolutionBoolean.h" #include +#include +#include #include //================================================================================================== -FeaturesAPI_RevolutionBoolean::FeaturesAPI_RevolutionBoolean(const std::shared_ptr& theFeature) +FeaturesAPI_RevolutionBoolean::FeaturesAPI_RevolutionBoolean( + const std::shared_ptr& theFeature) : ModelHighAPI_Interface(theFeature) { } @@ -20,12 +23,34 @@ FeaturesAPI_RevolutionBoolean::~FeaturesAPI_RevolutionBoolean() { } +//================================================================================================== +void FeaturesAPI_RevolutionBoolean::setNestedSketch(const ModelHighAPI_Reference& theSketch) +{ + mysketch->setValue(theSketch.feature()); + + // To make Sketch feature execute and subfeatures execute. + feature()->document()->setCurrentFeature(feature(), false); + + // to inform that the history is updated due to the sketch moved under the composite feature + if (theSketch.feature().get()) { + theSketch.feature()->document()->updateHistory(ModelAPI_Feature::group()); + if (theSketch.feature()->firstResult().get()) + theSketch.feature()->firstResult()->setDisplayed(false); + } + mybaseObjects->clear(); + mybaseObjects->append(theSketch.feature()->firstResult(), GeomShapePtr()); + + execIfBaseNotEmpty(); +} + //================================================================================================== void FeaturesAPI_RevolutionBoolean::setBase(const std::list& theBaseObjects) { + mysketch->setValue(ObjectPtr()); + mybaseObjects->clear(); fillAttribute(theBaseObjects, mybaseObjects); - execute(); + execIfBaseNotEmpty(); } //================================================================================================== @@ -33,7 +58,7 @@ void FeaturesAPI_RevolutionBoolean::setAxis(const ModelHighAPI_Selection& theAxi { fillAttribute(theAxis, myaxis); - execute(); + execIfBaseNotEmpty(); } //================================================================================================== @@ -44,7 +69,7 @@ void FeaturesAPI_RevolutionBoolean::setAngles(const ModelHighAPI_Double& theToAn fillAttribute(theToAngle, mytoAngle); fillAttribute(theFromAngle, myfromAngle); - execute(); + execIfBaseNotEmpty(); } //================================================================================================== @@ -54,13 +79,13 @@ void FeaturesAPI_RevolutionBoolean::setAngle(const ModelHighAPI_Double& theAngle fillAttribute(theAngle, mytoAngle); fillAttribute(ModelHighAPI_Double(), myfromAngle); - execute(); + execIfBaseNotEmpty(); } //================================================================================================== void FeaturesAPI_RevolutionBoolean::setPlanesAndOffsets(const ModelHighAPI_Selection& theToObject, const ModelHighAPI_Double& theToOffset, - const ModelHighAPI_Selection& theFromObject, + const ModelHighAPI_Selection& theFromObject, const ModelHighAPI_Double& theFromOffset) { fillAttribute(FeaturesPlugin_Revolution::CREATION_METHOD_BY_PLANES(), mycreationMethod); @@ -69,35 +94,101 @@ void FeaturesAPI_RevolutionBoolean::setPlanesAndOffsets(const ModelHighAPI_Selec fillAttribute(theFromObject, myfromObject); fillAttribute(theFromOffset, myfromOffset); - execute(); + execIfBaseNotEmpty(); } //================================================================================================== -void FeaturesAPI_RevolutionBoolean::setBooleanObjects(const std::list& theBooleanObjects) +void FeaturesAPI_RevolutionBoolean::setBooleanObjects( + const std::list& theBooleanObjects) { fillAttribute(theBooleanObjects, mybooleanObjects); - execute(); + execIfBaseNotEmpty(); +} + +//================================================================================================== +void FeaturesAPI_RevolutionBoolean::dump(ModelHighAPI_Dumper& theDumper) const +{ + FeaturePtr aBase = feature(); + const std::string& aDocName = theDumper.name(aBase->document()); + + AttributeReferencePtr anAttrSketch = + aBase->reference(FeaturesPlugin_Revolution::SKETCH_ID()); + AttributeSelectionListPtr anAttrObjects = + aBase->selectionList(FeaturesPlugin_Revolution::BASE_OBJECTS_ID()); + AttributeSelectionPtr anAttrAxis = + aBase->selection(FeaturesPlugin_Revolution::AXIS_OBJECT_ID()); + + theDumper << aBase << " = model.addRevolution"; + if(aBase->getKind() == FeaturesPlugin_RevolutionCut::ID()) { + theDumper << "Cut"; + } else if(aBase->getKind() == FeaturesPlugin_RevolutionFuse::ID()) { + theDumper << "Fuse"; + } + theDumper << "(" << aDocName << ", "; + anAttrSketch->isInitialized() ? theDumper << "[]" : theDumper << anAttrObjects; + theDumper << ", " << anAttrAxis; + + std::string aCreationMethod = + aBase->string(FeaturesPlugin_Revolution::CREATION_METHOD())->value(); + + if(aCreationMethod == FeaturesPlugin_Revolution::CREATION_METHOD_BY_ANGLES()) { + AttributeDoublePtr anAttrToAngle = aBase->real(FeaturesPlugin_Revolution::TO_ANGLE_ID()); + AttributeDoublePtr anAttrFromAngle = aBase->real(FeaturesPlugin_Revolution::FROM_ANGLE_ID()); + + theDumper << ", " << anAttrToAngle << ", " << anAttrFromAngle; + } else if(aCreationMethod == FeaturesPlugin_Revolution::CREATION_METHOD_BY_PLANES()) { + AttributeSelectionPtr anAttrToObject = + aBase->selection(FeaturesPlugin_Revolution::TO_OBJECT_ID()); + AttributeDoublePtr anAttrToOffset = + aBase->real(FeaturesPlugin_Revolution::TO_OFFSET_ID()); + AttributeSelectionPtr anAttrFromObject = + aBase->selection(FeaturesPlugin_Revolution::FROM_OBJECT_ID()); + AttributeDoublePtr anAttrFromOffset = + aBase->real(FeaturesPlugin_Revolution::FROM_OFFSET_ID()); + + theDumper << ", " << anAttrToObject << ", " << anAttrToOffset << + ", " << anAttrFromObject << ", " << anAttrFromOffset; + } + + AttributeSelectionListPtr anAttrBoolObjects = + aBase->selectionList(FeaturesPlugin_CompositeBoolean::OBJECTS_ID()); + theDumper << ", " << anAttrBoolObjects << ")" << std::endl; + + if(anAttrSketch->isInitialized()) { + theDumper << aBase << ".setNestedSketch(" << anAttrSketch << ")" << std::endl; + } +} + +//================================================================================================== +void FeaturesAPI_RevolutionBoolean::execIfBaseNotEmpty() +{ + if(mybaseObjects->size() > 0) { + execute(); + } } //================================================================================================== -FeaturesAPI_RevolutionCut::FeaturesAPI_RevolutionCut(const std::shared_ptr& theFeature) +FeaturesAPI_RevolutionCut::FeaturesAPI_RevolutionCut( + const std::shared_ptr& theFeature) : FeaturesAPI_RevolutionBoolean(theFeature) { initialize(); } //================================================================================================== -FeaturesAPI_RevolutionCut::FeaturesAPI_RevolutionCut(const std::shared_ptr& theFeature, - const std::list& theBaseObjects, - const ModelHighAPI_Selection& theAxis, - const ModelHighAPI_Double& theSize, - const std::list& theBooleanObjects) +FeaturesAPI_RevolutionCut::FeaturesAPI_RevolutionCut( + const std::shared_ptr& theFeature, + const std::list& theBaseObjects, + const ModelHighAPI_Selection& theAxis, + const ModelHighAPI_Double& theSize, + const std::list& theBooleanObjects) : FeaturesAPI_RevolutionBoolean(theFeature) { if(initialize()) { fillAttribute(theBaseObjects, mybaseObjects); fillAttribute(theAxis, myaxis); + fillAttribute(FeaturesPlugin_Revolution::CREATION_METHOD_BY_ANGLES(), mycreationMethod); fillAttribute(theSize, mytoAngle); fillAttribute(ModelHighAPI_Double(), myfromAngle); setBooleanObjects(theBooleanObjects); @@ -105,17 +196,19 @@ FeaturesAPI_RevolutionCut::FeaturesAPI_RevolutionCut(const std::shared_ptr& theFeature, - const std::list& theBaseObjects, - const ModelHighAPI_Selection& theAxis, - const ModelHighAPI_Double& theToAngle, - const ModelHighAPI_Double& theFromAngle, - const std::list& theBooleanObjects) +FeaturesAPI_RevolutionCut::FeaturesAPI_RevolutionCut( + const std::shared_ptr& theFeature, + const std::list& theBaseObjects, + const ModelHighAPI_Selection& theAxis, + const ModelHighAPI_Double& theToAngle, + const ModelHighAPI_Double& theFromAngle, + const std::list& theBooleanObjects) : FeaturesAPI_RevolutionBoolean(theFeature) { if(initialize()) { fillAttribute(theBaseObjects, mybaseObjects); fillAttribute(theAxis, myaxis); + fillAttribute(FeaturesPlugin_Revolution::CREATION_METHOD_BY_ANGLES(), mycreationMethod); fillAttribute(theToAngle, mytoAngle); fillAttribute(theFromAngle, myfromAngle); setBooleanObjects(theBooleanObjects); @@ -123,19 +216,21 @@ FeaturesAPI_RevolutionCut::FeaturesAPI_RevolutionCut(const std::shared_ptr& theFeature, - const std::list& theBaseObjects, - const ModelHighAPI_Selection& theAxis, - const ModelHighAPI_Selection& theToObject, - const ModelHighAPI_Double& theToOffset, - const ModelHighAPI_Selection& theFromObject, - const ModelHighAPI_Double& theFromOffset, - const std::list& theBooleanObjects) +FeaturesAPI_RevolutionCut::FeaturesAPI_RevolutionCut( + const std::shared_ptr& theFeature, + const std::list& theBaseObjects, + const ModelHighAPI_Selection& theAxis, + const ModelHighAPI_Selection& theToObject, + const ModelHighAPI_Double& theToOffset, + const ModelHighAPI_Selection& theFromObject, + const ModelHighAPI_Double& theFromOffset, + const std::list& theBooleanObjects) : FeaturesAPI_RevolutionBoolean(theFeature) { if(initialize()) { fillAttribute(theBaseObjects, mybaseObjects); fillAttribute(theAxis, myaxis); + fillAttribute(FeaturesPlugin_Revolution::CREATION_METHOD_BY_PLANES(), mycreationMethod); fillAttribute(theToObject, mytoObject); fillAttribute(theToOffset, mytoOffset); fillAttribute(theFromObject, myfromObject); @@ -151,8 +246,10 @@ RevolutionCutPtr addRevolutionCut(const std::shared_ptr& theP const ModelHighAPI_Double& theSize, const std::list& theBooleanObjects) { - std::shared_ptr aFeature = thePart->addFeature(FeaturesPlugin_RevolutionCut::ID()); - return RevolutionCutPtr(new FeaturesAPI_RevolutionCut(aFeature, theBaseObjects, theAxis, theSize, theBooleanObjects)); + std::shared_ptr aFeature = + thePart->addFeature(FeaturesPlugin_RevolutionCut::ID()); + return RevolutionCutPtr(new FeaturesAPI_RevolutionCut(aFeature, theBaseObjects, + theAxis, theSize, theBooleanObjects)); } //================================================================================================== @@ -163,7 +260,8 @@ RevolutionCutPtr addRevolutionCut(const std::shared_ptr& theP const ModelHighAPI_Double& theFromAngle, const std::list& theBooleanObjects) { - std::shared_ptr aFeature = thePart->addFeature(FeaturesPlugin_RevolutionCut::ID()); + std::shared_ptr aFeature = + thePart->addFeature(FeaturesPlugin_RevolutionCut::ID()); return RevolutionCutPtr(new FeaturesAPI_RevolutionCut(aFeature, theBaseObjects, theAxis, @@ -182,7 +280,8 @@ RevolutionCutPtr addRevolutionCut(const std::shared_ptr& theP const ModelHighAPI_Double& theFromOffset, const std::list& theBooleanObjects) { - std::shared_ptr aFeature = thePart->addFeature(FeaturesPlugin_RevolutionCut::ID()); + std::shared_ptr aFeature = + thePart->addFeature(FeaturesPlugin_RevolutionCut::ID()); return RevolutionCutPtr(new FeaturesAPI_RevolutionCut(aFeature, theBaseObjects, theAxis, @@ -195,23 +294,26 @@ RevolutionCutPtr addRevolutionCut(const std::shared_ptr& theP //================================================================================================== -FeaturesAPI_RevolutionFuse::FeaturesAPI_RevolutionFuse(const std::shared_ptr& theFeature) +FeaturesAPI_RevolutionFuse::FeaturesAPI_RevolutionFuse( + const std::shared_ptr& theFeature) : FeaturesAPI_RevolutionBoolean(theFeature) { initialize(); } //================================================================================================== -FeaturesAPI_RevolutionFuse::FeaturesAPI_RevolutionFuse(const std::shared_ptr& theFeature, - const std::list& theBaseObjects, - const ModelHighAPI_Selection& theAxis, - const ModelHighAPI_Double& theSize, - const std::list& theBooleanObjects) +FeaturesAPI_RevolutionFuse::FeaturesAPI_RevolutionFuse( + const std::shared_ptr& theFeature, + const std::list& theBaseObjects, + const ModelHighAPI_Selection& theAxis, + const ModelHighAPI_Double& theSize, + const std::list& theBooleanObjects) : FeaturesAPI_RevolutionBoolean(theFeature) { if(initialize()) { fillAttribute(theBaseObjects, mybaseObjects); fillAttribute(theAxis, myaxis); + fillAttribute(FeaturesPlugin_Revolution::CREATION_METHOD_BY_ANGLES(), mycreationMethod); fillAttribute(theSize, mytoAngle); fillAttribute(ModelHighAPI_Double(), myfromAngle); setBooleanObjects(theBooleanObjects); @@ -219,17 +321,19 @@ FeaturesAPI_RevolutionFuse::FeaturesAPI_RevolutionFuse(const std::shared_ptr& theFeature, - const std::list& theBaseObjects, - const ModelHighAPI_Selection& theAxis, - const ModelHighAPI_Double& theToAngle, - const ModelHighAPI_Double& theFromAngle, - const std::list& theBooleanObjects) +FeaturesAPI_RevolutionFuse::FeaturesAPI_RevolutionFuse( + const std::shared_ptr& theFeature, + const std::list& theBaseObjects, + const ModelHighAPI_Selection& theAxis, + const ModelHighAPI_Double& theToAngle, + const ModelHighAPI_Double& theFromAngle, + const std::list& theBooleanObjects) : FeaturesAPI_RevolutionBoolean(theFeature) { if(initialize()) { fillAttribute(theBaseObjects, mybaseObjects); fillAttribute(theAxis, myaxis); + fillAttribute(FeaturesPlugin_Revolution::CREATION_METHOD_BY_ANGLES(), mycreationMethod); fillAttribute(theToAngle, mytoAngle); fillAttribute(theFromAngle, myfromAngle); setBooleanObjects(theBooleanObjects); @@ -237,19 +341,21 @@ FeaturesAPI_RevolutionFuse::FeaturesAPI_RevolutionFuse(const std::shared_ptr& theFeature, - const std::list& theBaseObjects, - const ModelHighAPI_Selection& theAxis, - const ModelHighAPI_Selection& theToObject, - const ModelHighAPI_Double& theToOffset, - const ModelHighAPI_Selection& theFromObject, - const ModelHighAPI_Double& theFromOffset, - const std::list& theBooleanObjects) +FeaturesAPI_RevolutionFuse::FeaturesAPI_RevolutionFuse( + const std::shared_ptr& theFeature, + const std::list& theBaseObjects, + const ModelHighAPI_Selection& theAxis, + const ModelHighAPI_Selection& theToObject, + const ModelHighAPI_Double& theToOffset, + const ModelHighAPI_Selection& theFromObject, + const ModelHighAPI_Double& theFromOffset, + const std::list& theBooleanObjects) : FeaturesAPI_RevolutionBoolean(theFeature) { if(initialize()) { fillAttribute(theBaseObjects, mybaseObjects); fillAttribute(theAxis, myaxis); + fillAttribute(FeaturesPlugin_Revolution::CREATION_METHOD_BY_PLANES(), mycreationMethod); fillAttribute(theToObject, mytoObject); fillAttribute(theToOffset, mytoOffset); fillAttribute(theFromObject, myfromObject); @@ -265,8 +371,10 @@ RevolutionFusePtr addRevolutionFuse(const std::shared_ptr& th const ModelHighAPI_Double& theSize, const std::list& theBooleanObjects) { - std::shared_ptr aFeature = thePart->addFeature(FeaturesPlugin_RevolutionFuse::ID()); - return RevolutionFusePtr(new FeaturesAPI_RevolutionFuse(aFeature, theBaseObjects, theAxis, theSize, theBooleanObjects)); + std::shared_ptr aFeature = + thePart->addFeature(FeaturesPlugin_RevolutionFuse::ID()); + return RevolutionFusePtr(new FeaturesAPI_RevolutionFuse(aFeature, theBaseObjects, + theAxis, theSize, theBooleanObjects)); } //================================================================================================== @@ -277,7 +385,8 @@ RevolutionFusePtr addRevolutionFuse(const std::shared_ptr& th const ModelHighAPI_Double& theFromAngle, const std::list& theBooleanObjects) { - std::shared_ptr aFeature = thePart->addFeature(FeaturesPlugin_RevolutionFuse::ID()); + std::shared_ptr aFeature = + thePart->addFeature(FeaturesPlugin_RevolutionFuse::ID()); return RevolutionFusePtr(new FeaturesAPI_RevolutionFuse(aFeature, theBaseObjects, theAxis, @@ -296,7 +405,8 @@ RevolutionFusePtr addRevolutionFuse(const std::shared_ptr& th const ModelHighAPI_Double& theFromOffset, const std::list& theBooleanObjects) { - std::shared_ptr aFeature = thePart->addFeature(FeaturesPlugin_RevolutionFuse::ID()); + std::shared_ptr aFeature = + thePart->addFeature(FeaturesPlugin_RevolutionFuse::ID()); return RevolutionFusePtr(new FeaturesAPI_RevolutionFuse(aFeature, theBaseObjects, theAxis,