Salome HOME
Feature selector widget for recover feature.
[modules/shaper.git] / src / PartSet / PartSet_ExternalObjectsMgr.cpp
old mode 100644 (file)
new mode 100755 (executable)
index 2cdcd24..c636f5b
@@ -42,34 +42,27 @@ bool PartSet_ExternalObjectsMgr::isValidObject(const ObjectPtr& theObject)
 
 ObjectPtr PartSet_ExternalObjectsMgr::externalObject(const ObjectPtr& theSelectedObject,
                                                      const GeomShapePtr& theShape,
-                                                     const CompositeFeaturePtr& theSketch)
+                                                     const CompositeFeaturePtr& theSketch,
+                                                     const bool theTemporary)
 {
-  ObjectPtr aSelectedObject = PartSet_Tools::findFixedObjectByExternal(theShape->impl<TopoDS_Shape>(),
-                                                             theSelectedObject, theSketch);
-  if (!aSelectedObject.get()) {
-    // Processing of external (non-sketch) object
-    aSelectedObject = PartSet_Tools::createFixedObjectByExternal(theShape->impl<TopoDS_Shape>(),
-                                                                 theSelectedObject, theSketch);
-    if (aSelectedObject.get())
-      myExternalObjects.append(aSelectedObject);
+  ObjectPtr aSelectedObject = PartSet_Tools::findFixedObjectByExternal(
+                                  theShape->impl<TopoDS_Shape>(), theSelectedObject, theSketch);
+  FeaturePtr aFeature = ModelAPI_Feature::feature(aSelectedObject);
+  if (aFeature.get()) {
+    std::shared_ptr<SketchPlugin_Feature> aSketchFeature =
+                            std::dynamic_pointer_cast<SketchPlugin_Feature>(aFeature);
+    /// some sketch entities should be never shown, e.g. projection feature
+    /// such external features should not be used in selection
+    if (aSketchFeature.get() && !aSketchFeature->canBeDisplayed())
+      return ObjectPtr();
   }
-  return aSelectedObject;
-}
 
-//********************************************************************
-ObjectPtr PartSet_ExternalObjectsMgr::externalObjectValidated(const ObjectPtr& theSelectedObject,
-                                                     const GeomShapePtr& theShape,
-                                                     const CompositeFeaturePtr& theSketch)
-{
-  // TODO(nds): unite with externalObject()
-  ObjectPtr aSelectedObject = PartSet_Tools::findFixedObjectByExternal(theShape->impl<TopoDS_Shape>(),
-                                                             theSelectedObject, theSketch);
   if (!aSelectedObject.get()) {
     // Processing of external (non-sketch) object
     aSelectedObject = PartSet_Tools::createFixedObjectByExternal(theShape->impl<TopoDS_Shape>(),
-                                                                 theSelectedObject, theSketch);
-    if (aSelectedObject.get())
-      myExternalObjectValidated = aSelectedObject;
+                                                    theSelectedObject, theSketch, theTemporary);
+    if (aSelectedObject.get() && theTemporary)
+        myExternalObjectValidated = aSelectedObject;
   }
   return aSelectedObject;
 }
@@ -77,66 +70,15 @@ ObjectPtr PartSet_ExternalObjectsMgr::externalObjectValidated(const ObjectPtr& t
 //********************************************************************
 void PartSet_ExternalObjectsMgr::removeExternal(const CompositeFeaturePtr& theSketch,
                                                 const FeaturePtr& theFeature,
-                                                ModuleBase_IWorkshop* theWorkshop)
-{
-  QObjectPtrList::const_iterator anIt = myExternalObjects.begin(), aLast = myExternalObjects.end();
-  for (; anIt != aLast; anIt++) {
-    ObjectPtr anObject = *anIt;
-    if (anObject.get()) {
-      DocumentPtr aDoc = anObject->document();
-      FeaturePtr aFeature = ModelAPI_Feature::feature(anObject);
-      if (aFeature.get() != NULL) {
-        QObjectPtrList anObjects;
-        anObjects.append(aFeature);
-        // the external feature should be removed with all references, sketch feature should be ignored
-        std::set<FeaturePtr> anIgnoredFeatures;
-        // the current feature should be ignored, because it can use the external feature in the
-        // attributes and, therefore have a references to it. So, the delete functionality tries
-        // to delete this feature. Test case is creation of a constraint on external point,
-        // use in this control after an external point, the point of the sketch.
-        anIgnoredFeatures.insert(theFeature);
-        workshop(theWorkshop)->deleteFeatures(anObjects, anIgnoredFeatures);
-      }
-    }
-    //removeExternalObject(anObject, theSketch, theFeature);
-  }
-  myExternalObjects.clear();
-}
-
-//********************************************************************
-void PartSet_ExternalObjectsMgr::removeUnusedExternalObjects(const QObjectPtrList& theIgnoreObjects,
-                                                             const CompositeFeaturePtr& theSketch,
-                                                             const FeaturePtr& theFeature)
-{
-  /*
-  // TODO(nds): unite with removeExternal(), remove parameters
-  QObjectPtrList aUsedExternalObjects;
-
-  QObjectPtrList::const_iterator anIt = myExternalObjects.begin(), aLast = myExternalObjects.end();
-  for (; anIt != aLast; anIt++) {
-    ObjectPtr anObject = *anIt;
-    if (theIgnoreObjects.contains(anObject))
-      aUsedExternalObjects.append(anObject);
-    else
-      removeExternalObject(anObject, theSketch, theFeature);
-  }*/
-  myExternalObjects.clear();
-  //if (!aUsedExternalObjects.empty())
-  //  myExternalObjects = aUsedExternalObjects;
-}
-
-//********************************************************************
-void PartSet_ExternalObjectsMgr::removeExternalValidated(const CompositeFeaturePtr& theSketch,
-                                                         const FeaturePtr& theFeature,
-                                                         ModuleBase_IWorkshop* theWorkshop)
+                                                ModuleBase_IWorkshop* theWorkshop,
+                                                const bool theTemporary)
 {
-  // TODO(nds): unite with removeExternal(), remove parameters
-  removeExternalObject(myExternalObjectValidated, theSketch, theFeature, theWorkshop);
-  myExternalObjectValidated = ObjectPtr();
+  if (theTemporary)
+    removeExternalObject(myExternalObjectValidated, theSketch, theFeature, theWorkshop);
 }
 
 void PartSet_ExternalObjectsMgr::removeExternalObject(const ObjectPtr& theObject,
-                                                      const CompositeFeaturePtr& theSketch,
+                                                      const CompositeFeaturePtr& /*theSketch*/,
                                                       const FeaturePtr& theFeature,
                                                       ModuleBase_IWorkshop* theWorkshop)
 {
@@ -146,14 +88,8 @@ void PartSet_ExternalObjectsMgr::removeExternalObject(const ObjectPtr& theObject
     if (aFeature.get() != NULL) {
       QObjectPtrList anObjects;
       anObjects.append(aFeature);
-      // the external feature should be removed with all references, sketch feature should be ignored
-      std::set<FeaturePtr> anIgnoredFeatures;
-      // the current feature should be ignored, because it can use the external feature in the
-      // attributes and, therefore have a references to it. So, the delete functionality tries
-      // to delete this feature. Test case is creation of a constraint on external point,
-      // use in this control after an external point, the point of the sketch.
-      anIgnoredFeatures.insert(theFeature);
-      workshop(theWorkshop)->deleteFeatures(anObjects, anIgnoredFeatures);
+      // the external feature should be removed with all references, composite sketch feature will be ignored
+      workshop(theWorkshop)->deleteFeatures(anObjects);
     }
   }
 }