- int aSketches = document()->size("Construction");
- for(int a = 0; a < aSketches && !mySketch; a++) {
- boost::shared_ptr<ModelAPI_Object> anObj =
- boost::dynamic_pointer_cast<ModelAPI_Object>(document()->feature("Construction", a));
- if (anObj) {
- boost::shared_ptr<SketchPlugin_Sketch> aSketch =
- boost::dynamic_pointer_cast<SketchPlugin_Sketch>(anObj->featureRef());
- if (aSketch) {
- std::list<boost::shared_ptr<ModelAPI_Feature> > aList =
- aSketch->data()->reflist(SKETCH_ATTR_FEATURES)->list();
- std::list<boost::shared_ptr<ModelAPI_Feature> >::iterator aSub = aList.begin();
- for(; aSub != aList.end(); aSub++) {
- if ((*aSub)->data()->isEqual(data())) {
- mySketch = aSketch.get();
- break;
- }
- }
- }
+ const std::set<AttributePtr>& aBackRefs = data()->refsToMe();
+ std::set<AttributePtr>::const_iterator aBackRef = aBackRefs.begin();
+ for(; aBackRef != aBackRefs.end(); aBackRef++) {
+ std::shared_ptr<SketchPlugin_Sketch> aSketch =
+ std::dynamic_pointer_cast<SketchPlugin_Sketch>((*aBackRef)->owner());
+ if (aSketch) {
+ mySketch = aSketch.get();
+ break;