Salome HOME
Bug #1098: Create fillet problem
[modules/shaper.git] / src / SketchPlugin / SketchPlugin_Validators.cpp
index a432becdaa31f84efa7cf8f0a641362b45d96310..d774e390eff01044bc727d6e94eec256aa30c1dc 100755 (executable)
@@ -414,7 +414,7 @@ bool SketchPlugin_FilletVertexValidator::isValid(const AttributePtr& theAttribut
   FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
   AttributePtr aBaseLinesAttribute = aFeature->attribute(SketchPlugin_Constraint::ENTITY_C());
   AttributeRefListPtr aRefListOfBaseLines = std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(aBaseLinesAttribute);
-  if(aRefListOfBaseLines->list().size() == 2) {
+  if(!aRefListOfBaseLines->list().empty()) {
     return true;
   }
 
@@ -451,34 +451,39 @@ bool SketchPlugin_FilletVertexValidator::isValid(const AttributePtr& theAttribut
     return false;
   }
 
-  std::set<FeaturePtr> aCoinsideLines;
+  std::set<FeaturePtr> aCoinsides;
   SketchPlugin_Tools::findCoincidences(aCoincident,
                                        SketchPlugin_ConstraintCoincidence::ENTITY_A(),
-                                       aCoinsideLines);
+                                       aCoinsides);
   SketchPlugin_Tools::findCoincidences(aCoincident,
                                        SketchPlugin_ConstraintCoincidence::ENTITY_B(),
-                                       aCoinsideLines);
-  if(aCoinsideLines.size() < 2) {
-    return false;
+                                       aCoinsides);
+  // Remove points
+  std::set<FeaturePtr> aNewLines;
+  for(std::set<FeaturePtr>::iterator anIt = aCoinsides.begin(); anIt != aCoinsides.end(); ++anIt) {
+    if((*anIt)->getKind() != SketchPlugin_Point::ID()) {
+      aNewLines.insert(*anIt);
+    }
   }
+  aCoinsides = aNewLines;
 
   // Remove auxilary lines
-  if(aCoinsideLines.size() > 2) {
-    std::set<FeaturePtr> aNewLines;
-    for(std::set<FeaturePtr>::iterator anIt = aCoinsideLines.begin(); anIt != aCoinsideLines.end(); ++anIt) {
+  if(aCoinsides.size() > 2) {
+    aNewLines.clear();
+    for(std::set<FeaturePtr>::iterator anIt = aCoinsides.begin(); anIt != aCoinsides.end(); ++anIt) {
       if(!(*anIt)->boolean(SketchPlugin_SketchEntity::AUXILIARY_ID())->value()) {
         aNewLines.insert(*anIt);
       }
     }
-    aCoinsideLines = aNewLines;
+    aCoinsides = aNewLines;
   }
 
-  if(aCoinsideLines.size() != 2) {
+  if(aCoinsides.size() != 2) {
     return false;
   }
 
   // Check that lines not collinear
-  std::set<FeaturePtr>::iterator anIt = aCoinsideLines.begin();
+  std::set<FeaturePtr>::iterator anIt = aCoinsides.begin();
   FeaturePtr aFirstFeature = *anIt++;
   FeaturePtr aSecondFeature = *anIt;
   if(aFirstFeature->getKind() == SketchPlugin_Line::ID() && aSecondFeature->getKind() == SketchPlugin_Line::ID()) {