Salome HOME
Process non-sketch Points for Distance constraint
[modules/shaper.git] / src / PartSet / PartSet_WidgetShapeSelector.cpp
index fe34cc85911daf828a8dd1d363ce3bac859eb043..04f026112ce43b54ca6d18f01898b82081209fe0 100644 (file)
@@ -19,22 +19,35 @@ bool PartSet_WidgetShapeSelector::storeValue() const
   FeaturePtr aSelectedFeature = ModelAPI_Feature::feature(mySelectedObject);
   if (aSelectedFeature == myFeature)  // In order to avoid selection of the same object
     return false;
+  std::shared_ptr<SketchPlugin_Feature> aSPFeature = 
+          std::dynamic_pointer_cast<SketchPlugin_Feature>(aSelectedFeature);
+  if ((!aSPFeature) && (!myShape->isNull())) {
+    // Processing of external (non-sketch) object
+    ObjectPtr aObj = PartSet_Tools::createFixedObjectByEdge(myShape->impl<TopoDS_Shape>(),
+                                                            mySelectedObject, mySketch);
+    if (aObj) {
+      PartSet_WidgetShapeSelector* that = (PartSet_WidgetShapeSelector*) this;
+      that->mySelectedObject = aObj;
+    } else 
+      return false;
+  } else {
+    // Processing of sketch object
+    DataPtr aData = myFeature->data();
+    if (myUseSubShapes && myShape) {
+      AttributePtr aAttr = aData->attribute(attributeID());
+      AttributeRefAttrPtr aRefAttr = 
+        std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aAttr);
+      if (aRefAttr) {
+        TopoDS_Shape aShape = myShape->impl<TopoDS_Shape>();
+        AttributePtr aPntAttr = PartSet_Tools::findAttributeBy2dPoint(mySelectedObject, aShape, mySketch);
+        if (mySelectedObject)
+          aRefAttr->setObject(mySelectedObject);
+        if (aPntAttr)
+          aRefAttr->setAttr(aPntAttr);
 
-  DataPtr aData = myFeature->data();
-  if (myUseSubShapes && myShape) {
-    AttributePtr aAttr = aData->attribute(attributeID());
-    AttributeRefAttrPtr aRefAttr = 
-      std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aAttr);
-    if (aRefAttr) {
-      TopoDS_Shape aShape = myShape->impl<TopoDS_Shape>();
-      AttributePtr aPntAttr = PartSet_Tools::findAttributeBy2dPoint(mySelectedObject, aShape, mySketch);
-      if (mySelectedObject)
-        aRefAttr->setObject(mySelectedObject);
-      if (aPntAttr)
-        aRefAttr->setAttr(aPntAttr);
-
-      updateObject(myFeature);
-      return true;
+        updateObject(myFeature);
+        return true;
+      }
     }
   }
   return ModuleBase_WidgetShapeSelector::storeValue();
@@ -53,7 +66,8 @@ bool PartSet_WidgetConstraintShapeSelector::storeValue() const
       if (aObj) {
         PartSet_WidgetConstraintShapeSelector* that = (PartSet_WidgetConstraintShapeSelector*) this;
         that->mySelectedObject = aObj;
-      }
+      } else 
+        return false;
     }
   }
   return ModuleBase_WidgetShapeSelector::storeValue();