-// Copyright (C) 2014-2017 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2019 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
//
// 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
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// See http://www.salome-platform.org/ or
-// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include "FeaturesPlugin_Validators.h"
AttributeSelectionPtr aPathAttrSelection =
std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(theAttribute);
if(!aPathAttrSelection.get()) {
+// LCOV_EXCL_START
theError = "Error: This validator can only work with path selector in \"Pipe\" feature.";
return false;
+// LCOV_EXCL_STOP
}
GeomShapePtr aPathShape = aPathAttrSelection->value();
AttributeSelectionListPtr anAttrSelectionList =
std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(theAttribute);
if(!anAttrSelectionList.get()) {
+// LCOV_EXCL_START
theError =
"Error: This validator can only work with selection list attributes in \"Pipe\" feature.";
return false;
+// LCOV_EXCL_STOP
}
std::shared_ptr<FeaturesPlugin_Pipe> aFeature =
std::dynamic_pointer_cast<FeaturesPlugin_Pipe>(theAttribute->owner());
AttributeSelectionPtr aPathSelection = aFeature->selection(FeaturesPlugin_Pipe::PATH_OBJECT_ID());
if (!aPathSelection.get()) {
+// LCOV_EXCL_START
theError = "Error: Path not selected.";
return false;
+// LCOV_EXCL_STOP
}
GeomShapePtr aPathShape = aPathSelection->value();
}
//==================================================================================================
+// LCOV_EXCL_START
bool FeaturesPlugin_ValidatorPipeLocationsNumber::isValid(
const std::shared_ptr<ModelAPI_Feature>& theFeature,
const std::list<std::string>& theArguments,
return true;
}
+// LCOV_EXCL_STOP
//==================================================================================================
bool FeaturesPlugin_ValidatorBaseForGeneration::isValid(const AttributePtr& theAttribute,
const std::list<std::string>& theArguments,
Events_InfoMessage& theError) const
{
+// LCOV_EXCL_START
if(theArguments.empty()) {
theError = "Error: Validator parameters is empty.";
return false;
}
+// LCOV_EXCL_STOP
// Checking attribute.
if(!isValidAttribute(theAttribute, theArguments, theError)) {
std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(aContext);
if(!aResultConstruction.get()) {
// It is not a result construction.
- // If shape is compound check that it contains only faces and edges.
+ // If shape is compound check that it contains only faces, edges or vertices.
GeomShapePtr aShape = aSelectionAttr->value();
if(!aShape.get()) {
if (aContext.get()) {
if(aShape->shapeType() == GeomAPI_Shape::COMPOUND) {
for(GeomAPI_ShapeIterator anIt(aShape); anIt.more(); anIt.next()) {
GeomShapePtr aSubShape = anIt.current();
- if(aSubShape->shapeType() != GeomAPI_Shape::EDGE
+ if(aSubShape->shapeType() != GeomAPI_Shape::VERTEX
+ && aSubShape->shapeType() != GeomAPI_Shape::EDGE
&& aSubShape->shapeType() != GeomAPI_Shape::FACE) {
- theError = "Error: Compound should contain only faces and edges.";
+ theError = "Error: Compound should contain only faces, edges or vertices.";
return false;
}
}
AttributeSelectionListPtr aListAttr = theFeature->selectionList(aBaseObjectsID);
if(!aListAttr.get()) {
+// LCOV_EXCL_START
theError = "Error: Could not get \"%1\" attribute.";
theError.arg(aBaseObjectsID);
return false;
+// LCOV_EXCL_STOP
}
std::set<ResultConstructionPtr> aSelectedSketches;
Events_InfoMessage& theError) const
{
if(!theAttribute.get()) {
+// LCOV_EXCL_START
theError = "Error: Empty attribute.";
return false;
+// LCOV_EXCL_STOP
}
std::string anAttributeType = theAttribute->attributeType();
if (aContext.get())
aConstruction = std::dynamic_pointer_cast<ModelAPI_ResultConstruction>(aContext);
if(aConstruction.get()) {
- // Construciotn selected. Check that is is not infinite.
+ // Construction selected. Check that it is not infinite.
if(aConstruction->isInfinite()) {
theError = "Error: Infinite constructions is not allowed as base.";
return false;
return true;
}
}
-
return false;
}
}
} else {
+// LCOV_EXCL_START
theError = "Error: Attribute \"%1\" does not supported by this validator.";
theError.arg(anAttributeType);
return false;
+// LCOV_EXCL_STOP
}
return true;
}
//==================================================================================================
+// LCOV_EXCL_START
bool FeaturesPlugin_ValidatorCompositeLauncher::isValid(const AttributePtr& theAttribute,
const std::list<std::string>& theArguments,
Events_InfoMessage& theError) const
bool aValid = !aFeatureKind && aPlanarFace;
return aValid;
}
+// LCOV_EXCL_STOP
//==================================================================================================
bool FeaturesPlugin_ValidatorExtrusionDir::isValid(
Events_InfoMessage& theError) const
{
if(theArguments.size() != 2) {
+// LCOV_EXCL_START
theError = "Error: Validator should be used with 2 parameters for extrusion.";
return false;
+// LCOV_EXCL_STOP
}
std::list<std::string>::const_iterator
}
}
- if(!aDirShape.get()) {
+ if(!aDirShape.get() || aDirShape->isNull() ||
+ aDirShape->shapeType() != GeomAPI_Shape::EDGE) {
// Check that dir can be empty.
if(!isShapesCanBeEmpty(aCheckAttribute, theError)) {
theError = "Error: Base objects list contains vertex or edge, so attribute \"%1\" "
bool FeaturesPlugin_ValidatorExtrusionDir::isShapesCanBeEmpty(const AttributePtr& theAttribute,
Events_InfoMessage& theError) const
{
+// LCOV_EXCL_START
if(!theAttribute.get()) {
return true;
}
+// LCOV_EXCL_STOP
std::string anAttributeType = theAttribute->attributeType();
if(anAttributeType == ModelAPI_AttributeSelectionList::typeId()) {
AttributeSelectionListPtr anAttrSelectionList =
std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(theAttribute);
if(!anAttrSelectionList.get()) {
+// LCOV_EXCL_START
theError =
"Error: This validator can only work with selection list attributes in \"Boolean\" feature.";
return false;
+// LCOV_EXCL_STOP
}
std::shared_ptr<FeaturesPlugin_Boolean> aFeature =
std::dynamic_pointer_cast<FeaturesPlugin_Boolean>(theAttribute->owner());
AttributeSelectionListPtr anAttrSelectionList =
std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(theAttribute);
if(!anAttrSelectionList.get()) {
+// LCOV_EXCL_START
theError =
"Error: This validator can only work with selection list attributes in \"Fillet\" feature.";
return false;
+// LCOV_EXCL_STOP
}
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
AttributeSelectionListPtr anAttrSelectionList =
std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(theAttribute);
if(!anAttrSelectionList.get()) {
+// LCOV_EXCL_START
theError = "Error: This validator can only work with selection list in \"Partition\" feature.";
return false;
+// LCOV_EXCL_STOP
}
for(int anIndex = 0; anIndex < anAttrSelectionList->size(); ++anIndex) {
AttributeSelectionListPtr aSubShapesAttrList =
std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(theAttribute);
if(!aSubShapesAttrList.get()) {
+// LCOV_EXCL_START
theError =
"Error: This validator can only work with selection list in \"Remove Sub-Shapes\" feature.";
return false;
+// LCOV_EXCL_STOP
}
static const std::string aBaseShapeID = "base_shape";
AttributeSelectionPtr aShapeAttrSelection = aFeature->selection(aBaseShapeID);
if(!aShapeAttrSelection.get()) {
+// LCOV_EXCL_START
theError = "Error: Could not get \"%1\" attribute.";
theError.arg(aBaseShapeID);
return false;
+// LCOV_EXCL_STOP
}
GeomShapePtr aBaseShape = aShapeAttrSelection->value();
static const std::string aBaseShapeID = "base_shape";
static const std::string aSubShapesID = "subshapes_to_keep";
+// LCOV_EXCL_START
if(theFeature->getKind() != "Remove_SubShapes") {
theError = "Error: Feature \"%1\" does not supported by this validator.";
theError.arg(theFeature->getKind());
theError.arg(aSubShapesID);
return false;
}
+// LCOV_EXCL_STOP
// Copy base shape.
GeomShapePtr aBaseShape = aShapeAttrSelection->value();
}
//==================================================================================================
+// LCOV_EXCL_START
bool FeaturesPlugin_ValidatorUnionSelection::isValid(const AttributePtr& theAttribute,
const std::list<std::string>& theArguments,
Events_InfoMessage& theError) const
return true;
}
+// LCOV_EXCL_STOP
//==================================================================================================
bool FeaturesPlugin_ValidatorUnionArguments::isValid(
const std::list<std::string>& theArguments,
Events_InfoMessage& theError) const
{
+// LCOV_EXCL_START
// Check feature kind.
if(theFeature->getKind() != FeaturesPlugin_Union::ID()) {
theError = "Error: This validator supports only \"%1\" feature.";
theError.arg(FeaturesPlugin_Union::BASE_OBJECTS_ID());
return false;
}
+// LCOV_EXCL_STOP
// Get all shapes.
GeomAPI_Shape::ShapeType aType = GeomAPI_Shape::COMPSOLID;
// Make compound and find connected.
GeomShapePtr aCompound = GeomAlgoAPI_CompoundBuilder::compound(aBaseShapesList);
- ListOfShape aCombined, aFree;
- GeomAlgoAPI_ShapeTools::combineShapes(
- aCompound,
- aType,
- aCombined,
- aFree);
-
- if(aFree.size() > 0 || aCombined.size() > 1) {
+ ListOfShape aResults;
+ GeomAlgoAPI_ShapeTools::combineShapes(aCompound, aType, aResults);
+
+ if(aResults.size() > 1 || (aResults.size() == 1 && aResults.front()->shapeType() > aType)) {
theError = "Error: Not all shapes have shared topology.";
return false;
}
Events_InfoMessage& theError) const
{
if (theAttribute->attributeType() != ModelAPI_AttributeReference::typeId()) {
+// LCOV_EXCL_START
theError = "Error: The attribute with the %1 type is not processed";
theError.arg(theAttribute->attributeType());
return false;
+// LCOV_EXCL_STOP
}
AttributeReferencePtr aRefAttribute = std::dynamic_pointer_cast<ModelAPI_AttributeReference>
const std::list<std::string>& theArguments,
Events_InfoMessage& theError) const
{
+// LCOV_EXCL_START
if (theArguments.size() != 2)
{
theError = "Wrong number of arguments (expected 2).";
return false;
}
+// LCOV_EXCL_STOP
- int anObjectsNb = 0, aToolsNb = 0;
- //int anOperationType = 0;
+ int anObjectsToolsNb[2] = { 0, 0 };
std::list<std::string>::const_iterator anIt = theArguments.begin(), aLast = theArguments.end();
bool isAllInSameCompSolid = true;
ResultBodyPtr aCompSolid;
- AttributeSelectionListPtr anAttrSelList = theFeature->selectionList(*anIt);
- if (anAttrSelList)
- {
- anObjectsNb = anAttrSelList->size();
- for (int anIndex = 0; anIndex < anObjectsNb; ++anIndex)
- {
- AttributeSelectionPtr anAttr = anAttrSelList->value(anIndex);
- ResultPtr aContext = anAttr->context();
- ResultBodyPtr aResCompSolidPtr = ModelAPI_Tools::bodyOwner(aContext);
- if (aResCompSolidPtr.get())
- {
- if (aCompSolid.get())
- {
- isAllInSameCompSolid = aCompSolid == aResCompSolidPtr;
- }
- else
- {
- aCompSolid = aResCompSolidPtr;
- }
- }
- else
- {
- isAllInSameCompSolid = false;
- break;
- }
- }
- }
- anIt++;
-
-
- anAttrSelList = theFeature->selectionList(*anIt);
- if (anAttrSelList)
- {
- aToolsNb = anAttrSelList->size();
- if (isAllInSameCompSolid)
+ for (int* anArgNbIt = anObjectsToolsNb; anIt != aLast; ++anIt, ++anArgNbIt) {
+ AttributeSelectionListPtr anAttrSelList = theFeature->selectionList(*anIt);
+ if (anAttrSelList)
{
- for (int anIndex = 0; anIndex < aToolsNb; ++anIndex)
- {
- AttributeSelectionPtr anAttr = anAttrSelList->value(anIndex);
- ResultPtr aContext = anAttr->context();
- ResultBodyPtr aResCompSolidPtr = ModelAPI_Tools::bodyOwner(aContext);
- if (aResCompSolidPtr.get())
+ *anArgNbIt = anAttrSelList->size();
+ if (isAllInSameCompSolid) {
+ for (int anIndex = 0; anIndex < *anArgNbIt; ++anIndex)
{
- if (aCompSolid.get())
+ AttributeSelectionPtr anAttr = anAttrSelList->value(anIndex);
+ ResultPtr aContext = anAttr->context();
+ ResultBodyPtr aResCompSolidPtr = ModelAPI_Tools::bodyOwner(aContext);
+ if (aResCompSolidPtr.get())
{
- isAllInSameCompSolid = aCompSolid == aResCompSolidPtr;
+ if (aCompSolid.get())
+ {
+ isAllInSameCompSolid = aCompSolid == aResCompSolidPtr;
+ }
+ else
+ {
+ aCompSolid = aResCompSolidPtr;
+ }
}
else
{
- aCompSolid = aResCompSolidPtr;
+ isAllInSameCompSolid = false;
+ break;
}
}
- else
- {
- isAllInSameCompSolid = false;
- break;
- }
}
}
}
- anIt++;
std::shared_ptr<FeaturesPlugin_Boolean> aFeature =
std::dynamic_pointer_cast<FeaturesPlugin_Boolean>(theFeature);
if (anOperationType == FeaturesPlugin_Boolean::BOOL_FUSE)
{
// Fuse operation
- if (anObjectsNb + aToolsNb < 2)
+ if (anObjectsToolsNb[0] + anObjectsToolsNb[1] < 2)
{
theError = "Not enough arguments for Fuse operation.";
return false;
}
else
{
- if (anObjectsNb < 1)
+ if (anObjectsToolsNb[0] < 1) // check number of objects
{
theError = "Objects not selected.";
return false;
}
- if (aToolsNb < 1)
+ if (anObjectsToolsNb[1] < 1) // check number of tools
{
theError = "Tools not selected.";
return false;
}
//=================================================================================================
+// LCOV_EXCL_START
bool FeaturesPlugin_ValidatorBooleanArguments::isNotObligatory(std::string theFeature,
std::string theAttribute)
{
return false;
}
+// LCOV_EXCL_STOP
//==================================================================================================
bool FeaturesPlugin_ValidatorBooleanSmashSelection::isValid(
AttributeSelectionListPtr anAttrSelectionList =
std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(theAttribute);
if (!aFeature.get() || !anAttrSelectionList.get()) {
+// LCOV_EXCL_START
theError =
"Error: Validator used in wrong feature or attribute";
return false;
+// LCOV_EXCL_STOP
}
AttributeSelectionListPtr anOtherAttrSelectionList;
ResultPtr aContext = anAttrSelection->context();
std::shared_ptr<GeomAPI_Shape> aShape = anAttrSelection->value();
- GeomShapePtr aContextShape = aContext->shape();
if (!aShape.get()) {
- aShape = aContextShape;
+ if (!aContext.get()) {
+ theError = "Error: Empty selection.";
+ return false;
+ }
+ aShape = aContext->shape();
}
if (aShape->isSolid() || aShape->isCompSolid()) {
theError = "Error: Selected shapes should have the same type.";
return false;
}
-
- ResultBodyPtr aResCompSolidPtr = ModelAPI_Tools::bodyOwner(aContext);
- if (aResCompSolidPtr.get()) {
- GeomShapePtr aCompSolidShape = aResCompSolidPtr->shape();
- if (aSelectedCompSolidsInOtherList.isBound(aCompSolidShape)) {
- theError = "Error: Solids from compsolid in other list not allowed.";
- return false;
- }
- }
} else {
GeomAPI_Face aFace(aShape);
GeomPlanePtr aPln = aFace.getPlane();
}
//==================================================================================================
+// LCOV_EXCL_START
bool FeaturesPlugin_IntersectionSelection::isValid(const AttributePtr& theAttribute,
const std::list<std::string>& theArguments,
Events_InfoMessage& theError) const
return true;
}
+// LCOV_EXCL_STOP
//==================================================================================================
+// LCOV_EXCL_START
bool FeaturesPlugin_ValidatorBooleanFuseSelection::isValid(
const AttributePtr& theAttribute,
const std::list<std::string>& theArguments,
return true;
}
+// LCOV_EXCL_STOP
//=================================================================================================
bool FeaturesPlugin_ValidatorBooleanFuseArguments::isValid(
const std::list<std::string>& theArguments,
Events_InfoMessage& theError) const
{
+// LCOV_EXCL_START
if (theArguments.size() != 2) {
theError = "Wrong number of arguments (expected 2).";
return false;
}
+// LCOV_EXCL_STOP
std::shared_ptr<FeaturesPlugin_BooleanFuse> aFeature =
std::dynamic_pointer_cast<FeaturesPlugin_BooleanFuse>(theFeature);
}
//=================================================================================================
+// LCOV_EXCL_START
bool FeaturesPlugin_ValidatorBooleanFuseArguments::isNotObligatory(
std::string theFeature,
std::string theAttribute)
return false;
}
+// LCOV_EXCL_STOP
//==================================================================================================
+// LCOV_EXCL_START
bool FeaturesPlugin_ValidatorBooleanCommonSelection::isValid(
const AttributePtr& theAttribute,
const std::list<std::string>& theArguments,
return true;
}
+// LCOV_EXCL_STOP
//=================================================================================================
bool FeaturesPlugin_ValidatorBooleanCommonArguments::isValid(
Events_InfoMessage& theError) const
{
if (theArguments.size() != 2) {
+// LCOV_EXCL_START
theError = "Wrong number of arguments (expected 2).";
return false;
+// LCOV_EXCL_STOP
}
std::shared_ptr<FeaturesPlugin_BooleanCommon> aFeature =
}
//=================================================================================================
+// LCOV_EXCL_START
bool FeaturesPlugin_ValidatorBooleanCommonArguments::isNotObligatory(
std::string theFeature,
std::string theAttribute)
{
return false;
}
+// LCOV_EXCL_STOP