1 // Copyright (C) 2014-20xx CEA/DEN, EDF R&D
3 // File: PartSet_WidgetShapeSelector.cpp
4 // Created: 27 Nov 2014
5 // Author: Vitaly Smetannikov
7 #include "PartSet_WidgetShapeSelector.h"
9 #include <ModelAPI_AttributeRefAttr.h>
10 #include <PartSet_Tools.h>
11 #include <SketchPlugin_Feature.h>
14 bool PartSet_WidgetShapeSelector::storeValue() const
16 if (!mySelectedObject)
19 FeaturePtr aSelectedFeature = ModelAPI_Feature::feature(mySelectedObject);
20 if (aSelectedFeature == myFeature) // In order to avoid selection of the same object
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);
29 PartSet_WidgetShapeSelector* that = (PartSet_WidgetShapeSelector*) this;
30 that->mySelectedObject = aObj;
34 // Processing of sketch object
35 DataPtr aData = myFeature->data();
37 AttributePtr aAttr = aData->attribute(attributeID());
38 AttributeRefAttrPtr aRefAttr =
39 std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(aAttr);
41 TopoDS_Shape aShape = myShape->impl<TopoDS_Shape>();
42 AttributePtr aPntAttr = PartSet_Tools::findAttributeBy2dPoint(mySelectedObject, aShape, mySketch);
43 // this is an alternative, whether the attribute should be set or object in the attribute
44 // the first check is the attribute because the object already exist
45 // the object is set only if there is no selected attribute
46 // test case is - preselection for distance operation, which contains two points selected on lines
48 aRefAttr->setAttr(aPntAttr);
49 else if (mySelectedObject)
50 aRefAttr->setObject(mySelectedObject);
51 updateObject(myFeature);
56 return ModuleBase_WidgetShapeSelector::storeValue();
59 //*********************************************
60 bool PartSet_WidgetConstraintShapeSelector::storeValue() const
62 FeaturePtr aFeature = ModelAPI_Feature::feature(mySelectedObject);
64 std::shared_ptr<SketchPlugin_Feature> aSPFeature =
65 std::dynamic_pointer_cast<SketchPlugin_Feature>(aFeature);
66 if ((!aSPFeature) && (!myShape->isNull())) {
67 ObjectPtr aObj = PartSet_Tools::createFixedObjectByEdge(myShape->impl<TopoDS_Shape>(),
68 mySelectedObject, mySketch);
70 PartSet_WidgetConstraintShapeSelector* that = (PartSet_WidgetConstraintShapeSelector*) this;
71 that->mySelectedObject = aObj;
76 return ModuleBase_WidgetShapeSelector::storeValue();