]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Multi-rotation/translation deselect listo of objects. There is still a crash by desel...
authornds <natalia.donis@opencascade.com>
Tue, 14 Jul 2015 10:41:55 +0000 (13:41 +0300)
committernds <natalia.donis@opencascade.com>
Tue, 14 Jul 2015 12:53:12 +0000 (15:53 +0300)
src/SketchPlugin/SketchPlugin_MultiRotation.cpp
src/SketchPlugin/SketchPlugin_MultiTranslation.cpp
src/SketcherPrs/SketcherPrs_SymbolPrs.cpp
src/XGUI/XGUI_WorkshopListener.cpp

index 1070ce0ebfe39cefdeebcf9a07ed6f99cfb787c9..5864a194e901dcd8a44756c4fed3a7fc5a767374 100644 (file)
@@ -283,11 +283,13 @@ void SketchPlugin_MultiRotation::attributeChanged(const std::string& theID)
   if (theID == ROTATION_LIST_ID()) {
     AttributeSelectionListPtr aRotationObjectRefs = selectionList(ROTATION_LIST_ID());
     if (aRotationObjectRefs->size() == 0) {
+      // the commented code is not necessary here because if an update event is flushed
+      // before the setFlushed with true value happens, it leads to crash
       // Wait all objects being created, then send update events
       static Events_ID anUpdateEvent = Events_Loop::eventByName(EVENT_OBJECT_UPDATED);
-      bool isUpdateFlushed = Events_Loop::loop()->isFlushed(anUpdateEvent);
-      if (isUpdateFlushed)
-        Events_Loop::loop()->setFlushed(anUpdateEvent, false);
+      //bool isUpdateFlushed = Events_Loop::loop()->isFlushed(anUpdateEvent);
+      //if (isUpdateFlushed)
+      //  Events_Loop::loop()->setFlushed(anUpdateEvent, false);
 
       int aNbCopies = integer(NUMBER_OF_COPIES_ID())->value();
       // Clear list of objects
@@ -308,11 +310,16 @@ void SketchPlugin_MultiRotation::attributeChanged(const std::string& theID)
             aDoc->removeFeature(aFeature);
         }
       }
-      integer(NUMBER_OF_COPIES_ID())->setValue(0);
+      aRefListOfRotated->clear();
+      std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(
+        data()->attribute(SketchPlugin_Constraint::ENTITY_A()))->clear();
+      std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(
+        data()->attribute(SketchPlugin_Constraint::ENTITY_B()))->clear();
 
+      // the commented code is incorrect and obsolete, so it is removed
       // send events to update the sub-features by the solver
-      if (isUpdateFlushed)
-        Events_Loop::loop()->setFlushed(anUpdateEvent, true);
+      //if (isUpdateFlushed)
+      //  Events_Loop::loop()->setFlushed(anUpdateEvent, true);
     }
   }
 }
index b644a2f73170f6a6af9dffbc4c223a4685d3498d..7d06cfd13de953db693929f7ec8e2bf3a2c63ee9 100644 (file)
@@ -225,11 +225,13 @@ void SketchPlugin_MultiTranslation::attributeChanged(const std::string& theID)
   if (theID == TRANSLATION_LIST_ID()) {
     AttributeSelectionListPtr aTranslationObjectRefs = selectionList(TRANSLATION_LIST_ID());
     if (aTranslationObjectRefs->size() == 0) {
+      // the commented code is not necessary here because if an update event is flushed
+      // before the setFlushed with true value happens, it leads to crash
       // Wait all objects being created, then send update events
-      static Events_ID anUpdateEvent = Events_Loop::eventByName(EVENT_OBJECT_UPDATED);
-      bool isUpdateFlushed = Events_Loop::loop()->isFlushed(anUpdateEvent);
-      if (isUpdateFlushed)
-        Events_Loop::loop()->setFlushed(anUpdateEvent, false);
+      //static Events_ID anUpdateEvent = Events_Loop::eventByName(EVENT_OBJECT_UPDATED);
+      //bool isUpdateFlushed = Events_Loop::loop()->isFlushed(anUpdateEvent);
+      //if (isUpdateFlushed)
+      //  Events_Loop::loop()->setFlushed(anUpdateEvent, false);
 
       int aNbCopies = integer(NUMBER_OF_COPIES_ID())->value();
       // Clear list of objects
@@ -250,11 +252,15 @@ void SketchPlugin_MultiTranslation::attributeChanged(const std::string& theID)
             aDoc->removeFeature(aFeature);
         }
       }
-      integer(NUMBER_OF_COPIES_ID())->setValue(0);
+      aRefListOfTranslated->clear();
+      std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(
+        data()->attribute(SketchPlugin_Constraint::ENTITY_A()))->clear();
+      std::dynamic_pointer_cast<ModelAPI_AttributeRefList>(
+        data()->attribute(SketchPlugin_Constraint::ENTITY_B()))->clear();
 
       // send events to update the sub-features by the solver
-      if (isUpdateFlushed)
-        Events_Loop::loop()->setFlushed(anUpdateEvent, true);
+      //if (isUpdateFlushed)
+      //  Events_Loop::loop()->setFlushed(anUpdateEvent, true);
     }
   }
 }
index 77b40fc8be0a23bfca4239792257ebb17ee31c2d..30535729acfe1eb998e6806f9829d3260c2e728a 100644 (file)
@@ -342,8 +342,10 @@ void SketcherPrs_SymbolPrs::Compute(const Handle(PrsMgr_PresentationManager3d)&
     aDriver->UserDrawCallback() = SymbolPrsCallBack;
   }
 
-  if (!updatePoints(20))
+  if (!updatePoints(20)) {
+    mySPoints.Clear();
     return;
+  }
 
   int aNbVertex = myPntArray->VertexNumber();
   if (myOwner.IsNull()) {
index 120a9390aafdabb0b8653e26e7cf26fb0b32a968..d6dd2834e566bd3bae0a6228cda1d5bc9df0a3f8 100755 (executable)
@@ -245,8 +245,15 @@ void XGUI_WorkshopListener::onFeatureRedisplayMsg(const std::shared_ptr<ModelAPI
       // Redisplay the visible object or the object of the current operation
       bool isVisibleObject = aDisplayer->isVisible(aObj);
       #ifdef DEBUG_FEATURE_REDISPLAY
-      //QString anObjInfo = ModuleBase_Tools::objectInfo((aObj));
-      //qDebug(QString("visible=%1 : display= %2").arg(isVisibleObject).arg(anObjInfo).toStdString().c_str());
+      QString anObjInfo = ModuleBase_Tools::objectInfo((aObj));
+      qDebug(QString("visible=%1 : display= %2").arg(isVisibleObject).arg(anObjInfo).toStdString().c_str());
+
+      FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObj);
+      if (aFeature.get()) {
+        std::string aKind = aFeature->getKind();
+        if (aKind == "SketchMultiRotation")
+          bool aValue = true;
+      }
       #endif
 
       if (isVisibleObject)  { // redisplay visible object