]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
refs #30 - Sketch base GUI: create, draw lines
authornds <natalia.donis@opencascade.com>
Tue, 20 May 2014 06:16:02 +0000 (10:16 +0400)
committernds <natalia.donis@opencascade.com>
Tue, 20 May 2014 06:16:02 +0000 (10:16 +0400)
Check the following scenario: create sketch, line. Undo/Redo. As a result the line is displayed. Undo/Redo. The line is displayed again.

src/SketchPlugin/SketchPlugin_Feature.cpp
src/XGUI/XGUI_Displayer.cpp

index e75bc01e6aa72beb9741ee463d17bfe150e8c232..dbaa6f8240e9b6461e7e2ace6f738ae8e0e3e111 100644 (file)
@@ -2,6 +2,7 @@
 #include "SketchPlugin_Sketch.h"
 #include <ModelAPI_Document.h>
 #include <ModelAPI_Data.h>
+#include <ModelAPI_Object.h>
 #include <ModelAPI_AttributeRefList.h>
 
 SketchPlugin_Feature::SketchPlugin_Feature()
@@ -16,16 +17,20 @@ void SketchPlugin_Feature::setData(boost::shared_ptr<ModelAPI_Data> theData)
   // find sketch that references to this feature
   int aSketches = document()->size("Construction");
   for(int a = 0; a < aSketches && !mySketch; a++) {
-    boost::shared_ptr<SketchPlugin_Sketch> aSketch = 
-      boost::dynamic_pointer_cast<SketchPlugin_Sketch>(document()->feature("Construction", a));
-    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(theData)) {
-          mySketch = aSketch.get();
-          break;
+    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(theData)) {
+            mySketch = aSketch.get();
+            break;
+          }
         }
       }
     }
index 73515eae779dc9ba8e501c4a2e8c13b9cbfddb40..7f6bb00d77885b772f7febee71cd8fac6d7fa6b7 100644 (file)
@@ -247,7 +247,7 @@ void XGUI_Displayer::EraseDeletedFeatures(const bool isUpdateViewer)
   for (; aFIt != aFLast; aFIt++)
   {
     boost::shared_ptr<ModelAPI_Feature> aFeature = (*aFIt).first;
-    if (!aFeature || !aFeature->data()->isValid()) {
+    if (!aFeature || !aFeature->data() || !aFeature->data()->isValid()) {
       Handle(AIS_InteractiveObject) anAIS = (*aFIt).second;
       if (!anAIS.IsNull()) {
         aContext->Erase(anAIS, false);