X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FFeaturesPlugin%2FFeaturesPlugin_Boolean.cpp;h=2932d5e5cce410fa963f068e5579554a3dcfc13c;hb=c65c7a084cf32f54c8d8a93fceace414c3b0fb21;hp=e582019b4839f3d18ee494cd9ff39c0f60860873;hpb=acebef0bc5fb22dc9672e0046085b896e957af56;p=modules%2Fshaper.git diff --git a/src/FeaturesPlugin/FeaturesPlugin_Boolean.cpp b/src/FeaturesPlugin/FeaturesPlugin_Boolean.cpp index e582019b4..2932d5e5c 100644 --- a/src/FeaturesPlugin/FeaturesPlugin_Boolean.cpp +++ b/src/FeaturesPlugin/FeaturesPlugin_Boolean.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> + // File: FeaturesPlugin_Boolean.cpp // Created: 02 Sept 2014 // Author: Vitaly SMETANNIKOV @@ -10,12 +12,7 @@ #include #include #include -#include using namespace std; -#ifdef _DEBUG -#include -#include -#endif #define FACE 4 #define _MODIFY_TAG 1 @@ -26,63 +23,67 @@ FeaturesPlugin_Boolean::FeaturesPlugin_Boolean() void FeaturesPlugin_Boolean::initAttributes() { - data()->addAttribute(FeaturesPlugin_Boolean::TYPE_ID(), ModelAPI_AttributeInteger::type()); - data()->addAttribute(FeaturesPlugin_Boolean::OBJECT_ID(), ModelAPI_AttributeReference::type()); - data()->addAttribute(FeaturesPlugin_Boolean::TOOL_ID(), ModelAPI_AttributeReference::type()); + data()->addAttribute(FeaturesPlugin_Boolean::TYPE_ID(), ModelAPI_AttributeInteger::typeId()); + data()->addAttribute(FeaturesPlugin_Boolean::OBJECT_ID(), ModelAPI_AttributeReference::typeId()); + data()->addAttribute(FeaturesPlugin_Boolean::TOOL_ID(), ModelAPI_AttributeReference::typeId()); } -boost::shared_ptr FeaturesPlugin_Boolean::getShape(const std::string& theAttrName) +std::shared_ptr FeaturesPlugin_Boolean::getShape(const std::string& theAttrName) { - boost::shared_ptr aObjRef = boost::dynamic_pointer_cast< + std::shared_ptr aObjRef = std::dynamic_pointer_cast< ModelAPI_AttributeReference>(data()->attribute(theAttrName)); if (aObjRef) { - boost::shared_ptr aConstr = boost::dynamic_pointer_cast< + std::shared_ptr aConstr = std::dynamic_pointer_cast< ModelAPI_ResultBody>(aObjRef->value()); if (aConstr) return aConstr->shape(); } - return boost::shared_ptr(); + return std::shared_ptr(); } void FeaturesPlugin_Boolean::execute() { - boost::shared_ptr aTypeAttr = boost::dynamic_pointer_cast< + std::shared_ptr aTypeAttr = std::dynamic_pointer_cast< ModelAPI_AttributeInteger>(data()->attribute(FeaturesPlugin_Boolean::TYPE_ID())); if (!aTypeAttr) return; int aType = aTypeAttr->value(); - boost::shared_ptr anObject = this->getShape(FeaturesPlugin_Boolean::OBJECT_ID()); + std::shared_ptr anObject = this->getShape(FeaturesPlugin_Boolean::OBJECT_ID()); if (!anObject) return; - boost::shared_ptr aTool = this->getShape(FeaturesPlugin_Boolean::TOOL_ID()); + std::shared_ptr aTool = this->getShape(FeaturesPlugin_Boolean::TOOL_ID()); if (!aTool) return; - boost::shared_ptr aResultBody = document()->createBody(data()); + std::shared_ptr aResultBody = document()->createBody(data()); GeomAlgoAPI_Boolean* aFeature = new GeomAlgoAPI_Boolean(anObject, aTool, aType); if(aFeature && !aFeature->isDone()) { - std::string aFeatureError = "Boolean feature: algorithm failed"; - Events_Error::send(aFeatureError, this); + static const std::string aFeatureError = "Boolean feature: algorithm failed"; + setError(aFeatureError); return; } // Check if shape is valid if (aFeature->shape()->isNull()) { - std::string aShapeError = "Boolean feature: resulting shape is Null"; - Events_Error::send(aShapeError, this); -#ifdef _DEBUG - std::cerr << aShapeError << std::endl; -#endif + static const std::string aShapeError = "Boolean feature: resulting shape is Null"; + setError(aShapeError); return; } if(!aFeature->isValid()) { - std::string aFeatureError = "Boolean feature: resulting shape is not valid"; - Events_Error::send(aFeatureError, this); + static const std::string aFeatureError = "Boolean feature: resulting shape is not valid"; + setError(aFeatureError); return; } + // if result of Boolean operation is same as was before it means that Boolean operation has no sence + // and naming provides no result, so, generate an error in this case + if (anObject->isEqual(aFeature->shape())) { + static const std::string aFeatureError = "Boolean feature: operation was not performed"; + setError(aFeatureError); + return; + } //LoadNamingDS LoadNamingDS(aFeature, aResultBody, anObject, aTool, aType); @@ -91,9 +92,9 @@ void FeaturesPlugin_Boolean::execute() //============================================================================ void FeaturesPlugin_Boolean::LoadNamingDS(GeomAlgoAPI_Boolean* theFeature, - boost::shared_ptr theResultBody, - boost::shared_ptr theObject, - boost::shared_ptr theTool, + std::shared_ptr theResultBody, + std::shared_ptr theObject, + std::shared_ptr theTool, int theType) { @@ -104,8 +105,9 @@ void FeaturesPlugin_Boolean::LoadNamingDS(GeomAlgoAPI_Boolean* theFeature, theFeature->mapOfShapes(*aSubShapes); // Put in DF modified faces - theResultBody->loadAndOrientModifiedShapes(theFeature->makeShape(), theObject, FACE, _MODIFY_TAG, *aSubShapes); - theResultBody->loadAndOrientModifiedShapes(theFeature->makeShape(), theTool, FACE, _MODIFY_TAG, *aSubShapes); + std::string aModName = "Modified"; + theResultBody->loadAndOrientModifiedShapes(theFeature->makeShape(), theObject, FACE, _MODIFY_TAG, aModName, *aSubShapes); + theResultBody->loadAndOrientModifiedShapes(theFeature->makeShape(), theTool, FACE, _MODIFY_TAG, aModName, *aSubShapes); //Put in DF deleted faces theResultBody->loadDeletedShapes(theFeature->makeShape(), theObject, FACE, _DELETED_TAG);