-// 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 "PartSet_Validators.h"
return false;
GeomAPI_Edge aEdge1(aShape);
- if (aEdge1.isLine() || aEdge1.isArc()) {
- if (aList.size() == 2) {
- // Check second selection
- aPrs = aList.last();
- const GeomShapePtr& aShape2 = aPrs->shape();
- if (!aShape2.get() || aShape2->isNull() || aShape2->shapeType() != GeomAPI_Shape::EDGE)
- return false;
- GeomAPI_Edge aEdge2(aShape2);
-
- if (aEdge1.isLine() && aEdge2.isArc())
- return true;
- else if (aEdge1.isArc() && aEdge2.isLine())
- return true;
- else
- return false;
- } else
- return true;
+ if (aList.size() == 2) {
+ // Check second selection
+ aPrs = aList.last();
+ const GeomShapePtr& aShape2 = aPrs->shape();
+ if (!aShape2.get() || aShape2->isNull() || aShape2->shapeType() != GeomAPI_Shape::EDGE)
+ return false;
+ GeomAPI_Edge aEdge2(aShape2);
+
+ if (aEdge1.isLine() && aEdge2.isLine())
+ return false;
}
- return false;
}
+ return true;
}
bool PartSet_AngleSelection::isValid(const ModuleBase_ISelection* theSelection,
aType = 1;
else if (aType != 1)
return false;
- } else if (aEdge.isCircle()) {
+ } else if (aEdge.isCircle() || aEdge.isArc()) {
if (aCount == 1)
aType = 2;
else if (aType != 2)
return false;
- } else if (aEdge.isArc()) {
+ } else if (aEdge.isEllipse()) {
if (aCount == 1)
aType = 3;
else if (aType != 3)
AttributeSelectionPtr anAttr =
std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(theAttribute);
ResultPtr aContext = anAttr->context();
+ FeaturePtr aContextFeature = anAttr->contextFeature();
GeomShapePtr aShape = anAttr->value();
// Check selection attributes
return false;
}
}
+ // check the whole selected feature contains the result
+ if (aContextFeature.get()) {
+ if (aRef->contextFeature().get()) {
+ if (aContextFeature == aRef->contextFeature()) {
+ theError = errorMessage(EqualShapes, "", theAttribute->id(), aRef->id());
+ return false;
+ }
+ } else if (aRef->context().get() &&
+ aRef->context()->document()->feature(aRef->context()) == aContextFeature) {
+ theError = errorMessage(EqualShapes, "", theAttribute->id(), aRef->id());
+ return false;
+ }
+ } else if (aRef->contextFeature().get() && aContext.get()) {
+ if (aContext->document()->feature(aContext) == aRef->contextFeature()) {
+ theError = errorMessage(EqualShapes, "", theAttribute->id(), aRef->id());
+ return false;
+ }
+ }
}
}
}
for(int i = 0; i < aCurSelList->size(); i++) {
std::shared_ptr<ModelAPI_AttributeSelection> aCurSel = aCurSelList->value(i);
ResultPtr aCurSelContext = aCurSel->context();
+ FeaturePtr aCurSelFeature = aCurSel->contextFeature();
ResultBodyPtr aCurSelCompSolidPtr = ModelAPI_Tools::bodyOwner(aCurSelContext);
std::shared_ptr<GeomAPI_Shape> aCurSelCompSolid;
if(aCurSelCompSolidPtr.get()) {
for(int j = 0; j < aRefSelList->size(); j++) {
std::shared_ptr<ModelAPI_AttributeSelection> aRefSel = aRefSelList->value(j);
ResultPtr aRefSelContext = aRefSel->context();
+ FeaturePtr aRefSelFeature = aRefSel->contextFeature();
ResultBodyPtr aRefSelCompSolidPtr =
ModelAPI_Tools::bodyOwner(aRefSelContext);
std::shared_ptr<GeomAPI_Shape> aRefSelCompSolid;
- if(aRefSelCompSolidPtr.get()) {
+ if (aRefSelCompSolidPtr.get()) {
aRefSelCompSolid = aRefSelCompSolidPtr->shape();
}
if ((aCurSelCompSolid.get() && aCurSelCompSolid->isEqual(aRefSel->value()))
|| (aRefSelCompSolid.get() && aRefSelCompSolid->isEqual(aCurSel->value()))) {
- theError = errorMessage(EqualShapes, "", theAttribute->id(),
- aRefSel->id());
- return false;
+ theError = errorMessage(EqualShapes, "", theAttribute->id(),
+ aRefSel->id());
+ return false;
}
- if(aCurSelContext == aRefSelContext) {
+ if (aCurSelContext == aRefSelContext) {
if (aCurSel->value().get() == NULL || aRefSel->value().get() == NULL) {
- theError = errorMessage(EmptyShapes, "", theAttribute->id(),
- aRefSel->id());
+ theError = errorMessage(EmptyShapes, "", theAttribute->id(), aRefSel->id());
return false;
}
if (aCurSel->value()->isEqual(aRefSel->value())) {
- theError = errorMessage(EqualShapes, "", theAttribute->id(),
- aRefSel->id());
+ theError = errorMessage(EqualShapes, "", theAttribute->id(), aRefSel->id());
+ return false;
+ }
+ }
+
+ // check the whole selected feature contains the result
+ if (aCurSelFeature.get()) {
+ if (aRefSelFeature.get()) {
+ if (aCurSelFeature == aRefSelFeature) {
+ theError = errorMessage(EqualShapes, "", theAttribute->id(), aRefSel->id());
+ return false;
+ }
+ }
+ else if (aRefSelContext.get() &&
+ aRefSelContext->document()->feature(aRefSelContext) == aCurSelFeature) {
+ theError = errorMessage(EqualShapes, "", theAttribute->id(), aRefSel->id());
+ return false;
+ }
+ }
+ else if (aRefSelFeature.get() && aCurSelContext.get()) {
+ if (aCurSelContext->document()->feature(aCurSelContext) == aRefSelFeature) {
+ theError = errorMessage(EqualShapes, "", theAttribute->id(), aRefSel->id());
return false;
}
}