]> SALOME platform Git repositories - modules/shaper.git/blob - src/PartSet/PartSet_WidgetShapeSelector.cpp
Salome HOME
Provide sub-shapes selection in sketcher
[modules/shaper.git] / src / PartSet / PartSet_WidgetShapeSelector.cpp
1 // File:        PartSet_WidgetShapeSelector.cpp
2 // Created:     27 Nov 2014
3 // Author:      Vitaly Smetannikov
4
5 #include "PartSet_WidgetShapeSelector.h"
6
7 #include <ModelAPI_AttributeRefAttr.h>
8 #include <PartSet_Tools.h>
9
10
11 bool PartSet_WidgetShapeSelector::storeValue() const
12 {
13   if (!mySelectedObject)
14     return false;
15
16   FeaturePtr aSelectedFeature = ModelAPI_Feature::feature(mySelectedObject);
17   if (aSelectedFeature == myFeature)  // In order to avoid selection of the same object
18     return false;
19
20   DataPtr aData = myFeature->data();
21   if (myUseSubShapes && myShape) {
22     AttributePtr aAttr = aData->attribute(attributeID());
23     AttributeRefAttrPtr aRefAttr = 
24       std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aAttr);
25     if (aRefAttr) {
26       TopoDS_Shape aShape = myShape->impl<TopoDS_Shape>();
27       AttributePtr aPntAttr = PartSet_Tools::findAttributeBy2dPoint(mySelectedObject, aShape, mySketch);
28       if (mySelectedObject)
29         aRefAttr->setObject(mySelectedObject);
30       if (aPntAttr)
31         aRefAttr->setAttr(aPntAttr);
32
33       updateObject(myFeature);
34       return true;
35     }
36   }
37   return ModuleBase_WidgetShapeSelector::storeValue();
38 }