X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FGeomValidators%2FGeomValidators_ZeroOffset.cpp;h=0c98260fa61610476326caaa30e9b2149304378c;hb=d75b1b5c09b57fd8326d846118fa3246a9857492;hp=3d08e9fd95817006dd9de5983b8865e88ab65539;hpb=a57ebcbce92f5113504466d88dc12cc722baeddb;p=modules%2Fshaper.git diff --git a/src/GeomValidators/GeomValidators_ZeroOffset.cpp b/src/GeomValidators/GeomValidators_ZeroOffset.cpp index 3d08e9fd9..0c98260fa 100644 --- a/src/GeomValidators/GeomValidators_ZeroOffset.cpp +++ b/src/GeomValidators/GeomValidators_ZeroOffset.cpp @@ -6,6 +6,8 @@ #include +#include + #include #include #include @@ -21,7 +23,7 @@ //================================================================================================= bool GeomValidators_ZeroOffset::isValid(const std::shared_ptr& theFeature, const std::list& theArguments, - std::string& theError) const + Events_InfoMessage& theError) const { if(theArguments.size() != 9) { theError = "Wrong number of validator arguments in xml(expected 9)."; @@ -41,12 +43,16 @@ bool GeomValidators_ZeroOffset::isValid(const std::shared_ptr& ListOfShape aFacesList; if(theFeature->selection(*anIt)) { AttributeSelectionPtr aFaceSelection = theFeature->selection(*anIt); - ResultConstructionPtr aConstruction = std::dynamic_pointer_cast(aFaceSelection->context()); + ResultConstructionPtr aConstruction = + std::dynamic_pointer_cast(aFaceSelection->context()); if(aConstruction.get()) { int aSketchFacesNum = aConstruction->facesNum(); for(int aFaceIndex = 0; aFaceIndex < aSketchFacesNum; aFaceIndex++) { - std::shared_ptr aFace = std::dynamic_pointer_cast(aConstruction->face(aFaceIndex)); - aFacesList.push_back(aFace); + std::shared_ptr aFace = + std::dynamic_pointer_cast(aConstruction->face(aFaceIndex)); + if(aFace->isFace() && aFace->isPlanar()) { + aFacesList.push_back(aFace); + } } } } else if(theFeature->selectionList(*anIt)) { @@ -55,21 +61,26 @@ bool GeomValidators_ZeroOffset::isValid(const std::shared_ptr& AttributeSelectionPtr aFaceSel = aFacesSelectionList->value(anIndex); std::shared_ptr aFaceShape = aFaceSel->value(); if(aFaceShape.get() && !aFaceShape->isNull()) { // Getting face. - aFacesList.push_back(aFaceShape); + if(aFaceShape->isFace() && aFaceShape->isPlanar()) { + aFacesList.push_back(aFaceShape); + } } else { // This may be the whole sketch result selected, check and get faces. ResultPtr aContext = aFaceSel->context(); std::shared_ptr aContextShape = aContext->shape(); if(!aContextShape.get()) { break; } - ResultConstructionPtr aConstruction = std::dynamic_pointer_cast(aContext); + ResultConstructionPtr aConstruction = + std::dynamic_pointer_cast(aContext); if(!aConstruction.get()) { break; } int aFacesNum = aConstruction->facesNum(); for(int aFaceIndex = 0; aFaceIndex < aFacesNum || aFacesNum == -1; aFaceIndex++) { aFaceShape = std::dynamic_pointer_cast(aConstruction->face(aFaceIndex)); - aFacesList.push_back(aFaceShape); + if(aFaceShape->isFace() && aFaceShape->isPlanar()) { + aFacesList.push_back(aFaceShape); + } } } } @@ -79,11 +90,11 @@ bool GeomValidators_ZeroOffset::isValid(const std::shared_ptr& double aToSize = 0.0; double aFromSize = 0.0; - if(theFeature->real(*anIt)) { + if(theFeature->real(*anIt) && theFeature->real(*anIt)->isInitialized()) { aToSize = theFeature->real(*anIt)->value(); } anIt++; - if(theFeature->real(*anIt)) { + if(theFeature->real(*anIt) && theFeature->real(*anIt)->isInitialized()) { aFromSize = theFeature->real(*anIt)->value(); } anIt++; @@ -101,7 +112,7 @@ bool GeomValidators_ZeroOffset::isValid(const std::shared_ptr& std::shared_ptr aFromShape; std::shared_ptr anAttrSel = theFeature->selection(*anIt); - if(anAttrSel) { + if(anAttrSel && anAttrSel->isInitialized()) { aToShape = std::dynamic_pointer_cast(anAttrSel->value()); if(aToShape.get() == NULL && anAttrSel->context().get() != NULL) { aToShape = anAttrSel->context()->shape(); @@ -110,13 +121,13 @@ bool GeomValidators_ZeroOffset::isValid(const std::shared_ptr& anIt++; std::shared_ptr anAttrDouble = theFeature->real(*anIt); - if(anAttrDouble) { + if(anAttrDouble && anAttrDouble->isInitialized()) { aToSize = anAttrDouble->value(); } anIt++; anAttrSel = theFeature->selection(*anIt); - if(anAttrSel) { + if(anAttrSel && anAttrSel->isInitialized()) { aFromShape = std::dynamic_pointer_cast(anAttrSel->value()); if(aFromShape.get() == NULL && anAttrSel->context().get() != NULL) { aFromShape = anAttrSel->context()->shape(); @@ -125,7 +136,7 @@ bool GeomValidators_ZeroOffset::isValid(const std::shared_ptr& anIt++; anAttrDouble = theFeature->real(*anIt); - if(anAttrDouble) { + if(anAttrDouble && anAttrDouble->isInitialized()) { aFromSize = anAttrDouble->value(); } @@ -134,9 +145,17 @@ bool GeomValidators_ZeroOffset::isValid(const std::shared_ptr& isPlanesCoincident = true; } else if(aFromShape.get() && aToShape.get()) { std::shared_ptr aFromFace(new GeomAPI_Face(aFromShape)); + if (aFromFace->isNull()) { + theError = "From face selection is invalid."; + return false; + } std::shared_ptr aFromPln = aFromFace->getPlane(); std::shared_ptr aToFace(new GeomAPI_Face(aToShape)); + if (aToFace->isNull()) { + theError = "To face selection is invalid."; + return false; + } std::shared_ptr aToPln = aToFace->getPlane(); if(aFromPln.get()) { @@ -146,12 +165,21 @@ bool GeomValidators_ZeroOffset::isValid(const std::shared_ptr& std::shared_ptr aFace; if(aFromShape.get()) { aFace.reset(new GeomAPI_Face(aFromShape)); + if (aFace->isNull()) { + theError = "From face selection is invalid."; + return false; + } } else { aFace.reset(new GeomAPI_Face(aToShape)); + if (aFace->isNull()) { + theError = "To face selection is invalid."; + return false; + } } std::shared_ptr aPln = aFace->getPlane(); if(aPln.get()) { - for(ListOfShape::const_iterator anIter = aFacesList.cbegin(); anIter != aFacesList.cend(); anIter++) { + for(ListOfShape::const_iterator + anIter = aFacesList.cbegin(); anIter != aFacesList.cend(); anIter++) { std::shared_ptr aSketchShape = *anIter; std::shared_ptr aSketchFace(new GeomAPI_Face(aSketchShape)); std::shared_ptr aSketchPln = aSketchFace->getPlane();