X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FFeaturesAPI%2FFeaturesAPI_RevolutionBoolean.cpp;h=4ef17362e7fb54b843987ddcdb946a3ad02fb743;hb=225d6f1701361554ace1069e200002c18cd83771;hp=118bd2fe85cdaf129c1ed3712e0d3a83f4bd2db4;hpb=ee0d8d13f92e79b6a06e07c34ef85925014aab64;p=modules%2Fshaper.git diff --git a/src/FeaturesAPI/FeaturesAPI_RevolutionBoolean.cpp b/src/FeaturesAPI/FeaturesAPI_RevolutionBoolean.cpp index 118bd2fe8..4ef17362e 100644 --- a/src/FeaturesAPI/FeaturesAPI_RevolutionBoolean.cpp +++ b/src/FeaturesAPI/FeaturesAPI_RevolutionBoolean.cpp @@ -1,8 +1,21 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> - -// File: FeaturesAPI_RevolutionBoolean.cpp -// Created: 09 June 2016 -// Author: Dmitry Bobylev +// Copyright (C) 2014-2021 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 +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include "FeaturesAPI_RevolutionBoolean.h" @@ -12,7 +25,8 @@ #include //================================================================================================== -FeaturesAPI_RevolutionBoolean::FeaturesAPI_RevolutionBoolean(const std::shared_ptr& theFeature) +FeaturesAPI_RevolutionBoolean::FeaturesAPI_RevolutionBoolean( + const std::shared_ptr& theFeature) : ModelHighAPI_Interface(theFeature) { } @@ -26,6 +40,10 @@ 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()); @@ -70,11 +88,7 @@ void FeaturesAPI_RevolutionBoolean::setAngles(const ModelHighAPI_Double& theToAn //================================================================================================== void FeaturesAPI_RevolutionBoolean::setAngle(const ModelHighAPI_Double& theAngle) { - fillAttribute(FeaturesPlugin_Revolution::CREATION_METHOD_BY_ANGLES(), mycreationMethod); - fillAttribute(theAngle, mytoAngle); - fillAttribute(ModelHighAPI_Double(), myfromAngle); - - execIfBaseNotEmpty(); + setAngles(theAngle, ModelHighAPI_Double()); } //================================================================================================== @@ -93,7 +107,8 @@ void FeaturesAPI_RevolutionBoolean::setPlanesAndOffsets(const ModelHighAPI_Selec } //================================================================================================== -void FeaturesAPI_RevolutionBoolean::setBooleanObjects(const std::list& theBooleanObjects) +void FeaturesAPI_RevolutionBoolean::setBooleanObjects( + const std::list& theBooleanObjects) { fillAttribute(theBooleanObjects, mybooleanObjects); @@ -106,9 +121,12 @@ 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()); + 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()) { @@ -120,7 +138,8 @@ void FeaturesAPI_RevolutionBoolean::dump(ModelHighAPI_Dumper& theDumper) const anAttrSketch->isInitialized() ? theDumper << "[]" : theDumper << anAttrObjects; theDumper << ", " << anAttrAxis; - std::string aCreationMethod = aBase->string(FeaturesPlugin_Revolution::CREATION_METHOD())->value(); + 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()); @@ -128,15 +147,23 @@ void FeaturesAPI_RevolutionBoolean::dump(ModelHighAPI_Dumper& theDumper) const 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; + 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; + } else { + // Through All } - AttributeSelectionListPtr anAttrBoolObjects = aBase->selectionList(FeaturesPlugin_CompositeBoolean::OBJECTS_ID()); + AttributeSelectionListPtr anAttrBoolObjects = + aBase->selectionList(FeaturesPlugin_CompositeBoolean::OBJECTS_ID()); theDumper << ", " << anAttrBoolObjects << ")" << std::endl; if(anAttrSketch->isInitialized()) { @@ -153,37 +180,54 @@ void FeaturesAPI_RevolutionBoolean::execIfBaseNotEmpty() } //================================================================================================== -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 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); + fillAttribute(FeaturesPlugin_Revolution::CREATION_METHOD_THROUGH_ALL(), mycreationMethod); setBooleanObjects(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_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); + setAngle(theSize); + setBooleanObjects(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()) { @@ -197,14 +241,15 @@ 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()) { @@ -219,6 +264,18 @@ FeaturesAPI_RevolutionCut::FeaturesAPI_RevolutionCut(const std::shared_ptr& thePart, + const std::list& theBaseObjects, + const ModelHighAPI_Selection& theAxis, + const std::list& theBooleanObjects) +{ + std::shared_ptr aFeature = + thePart->addFeature(FeaturesPlugin_RevolutionCut::ID()); + return RevolutionCutPtr(new FeaturesAPI_RevolutionCut(aFeature, theBaseObjects, + theAxis, theBooleanObjects)); +} + //================================================================================================== RevolutionCutPtr addRevolutionCut(const std::shared_ptr& thePart, const std::list& theBaseObjects, @@ -226,8 +283,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)); } //================================================================================================== @@ -238,7 +297,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, @@ -257,7 +317,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, @@ -270,18 +331,36 @@ 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 std::list& theBooleanObjects) +: FeaturesAPI_RevolutionBoolean(theFeature) +{ + if(initialize()) { + fillAttribute(theBaseObjects, mybaseObjects); + fillAttribute(theAxis, myaxis); + fillAttribute(FeaturesPlugin_Revolution::CREATION_METHOD_THROUGH_ALL(), mycreationMethod); + setBooleanObjects(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()) { @@ -295,12 +374,13 @@ 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()) { @@ -314,14 +394,15 @@ 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()) { @@ -336,6 +417,18 @@ FeaturesAPI_RevolutionFuse::FeaturesAPI_RevolutionFuse(const std::shared_ptr& thePart, + const std::list& theBaseObjects, + const ModelHighAPI_Selection& theAxis, + const std::list& theBooleanObjects) +{ + std::shared_ptr aFeature = + thePart->addFeature(FeaturesPlugin_RevolutionFuse::ID()); + return RevolutionFusePtr(new FeaturesAPI_RevolutionFuse(aFeature, theBaseObjects, + theAxis, theBooleanObjects)); +} + //================================================================================================== RevolutionFusePtr addRevolutionFuse(const std::shared_ptr& thePart, const std::list& theBaseObjects, @@ -343,8 +436,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)); } //================================================================================================== @@ -355,7 +450,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, @@ -374,7 +470,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,