Salome HOME
Process non-sketch Points for Distance constraint
[modules/shaper.git] / src / PartSet / PartSet_WidgetShapeSelector.cpp
1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
2
3 // File:        PartSet_WidgetShapeSelector.cpp
4 // Created:     27 Nov 2014
5 // Author:      Vitaly Smetannikov
6
7 #include "PartSet_WidgetShapeSelector.h"
8
9 #include <ModelAPI_AttributeRefAttr.h>
10 #include <PartSet_Tools.h>
11 #include <SketchPlugin_Feature.h>
12
13
14 bool PartSet_WidgetShapeSelector::storeValue() const
15 {
16   if (!mySelectedObject)
17     return false;
18
19   FeaturePtr aSelectedFeature = ModelAPI_Feature::feature(mySelectedObject);
20   if (aSelectedFeature == myFeature)  // In order to avoid selection of the same object
21     return false;
22   std::shared_ptr<SketchPlugin_Feature> aSPFeature = 
23           std::dynamic_pointer_cast<SketchPlugin_Feature>(aSelectedFeature);
24   if ((!aSPFeature) && (!myShape->isNull())) {
25     // Processing of external (non-sketch) object
26     ObjectPtr aObj = PartSet_Tools::createFixedObjectByEdge(myShape->impl<TopoDS_Shape>(),
27                                                             mySelectedObject, mySketch);
28     if (aObj) {
29       PartSet_WidgetShapeSelector* that = (PartSet_WidgetShapeSelector*) this;
30       that->mySelectedObject = aObj;
31     } else 
32       return false;
33   } else {
34     // Processing of sketch object
35     DataPtr aData = myFeature->data();
36     if (myUseSubShapes && myShape) {
37       AttributePtr aAttr = aData->attribute(attributeID());
38       AttributeRefAttrPtr aRefAttr = 
39         std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aAttr);
40       if (aRefAttr) {
41         TopoDS_Shape aShape = myShape->impl<TopoDS_Shape>();
42         AttributePtr aPntAttr = PartSet_Tools::findAttributeBy2dPoint(mySelectedObject, aShape, mySketch);
43         if (mySelectedObject)
44           aRefAttr->setObject(mySelectedObject);
45         if (aPntAttr)
46           aRefAttr->setAttr(aPntAttr);
47
48         updateObject(myFeature);
49         return true;
50       }
51     }
52   }
53   return ModuleBase_WidgetShapeSelector::storeValue();
54 }
55
56 //*********************************************
57 bool PartSet_WidgetConstraintShapeSelector::storeValue() const
58 {
59   FeaturePtr aFeature = ModelAPI_Feature::feature(mySelectedObject);
60   if (aFeature) {
61     std::shared_ptr<SketchPlugin_Feature> aSPFeature = 
62             std::dynamic_pointer_cast<SketchPlugin_Feature>(aFeature);
63     if ((!aSPFeature) && (!myShape->isNull())) {
64       ObjectPtr aObj = PartSet_Tools::createFixedObjectByEdge(myShape->impl<TopoDS_Shape>(),
65                                                               mySelectedObject, mySketch);
66       if (aObj) {
67         PartSet_WidgetConstraintShapeSelector* that = (PartSet_WidgetConstraintShapeSelector*) this;
68         that->mySelectedObject = aObj;
69       } else 
70         return false;
71     }
72   }
73   return ModuleBase_WidgetShapeSelector::storeValue();
74 }
75