Salome HOME
Dump with geometrical selection
[modules/shaper.git] / src / Model / Model_Document.cpp
index caba9de1337b13ec201b8b6032512169212f07d7..def62f2e24db7946c42c4c49da1b8eeba7c09f93 100755 (executable)
@@ -91,7 +91,7 @@ static const int TAG_NODES_STATE = 4; ///< array, tag of the Object Browser node
 static const int TAG_EXTERNAL_CONSTRUCTIONS = 5;
 
 Model_Document::Model_Document(const int theID, const std::string theKind)
-    : myID(theID), myKind(theKind), myIsActive(false),
+    : myID(theID), myKind(theKind), myIsActive(false), myIsSetCurrentFeature(false),
       myDoc(new TDocStd_Document("BinOcaf"))  // binary OCAF format
 {
 #ifdef TINSPECTOR
@@ -272,7 +272,7 @@ bool Model_Document::save(
   Handle(Model_Application) anApp = Model_Application::getApplication();
   if (isRoot()) {
 #ifdef WIN32
-    CreateDirectory(theDirName, NULL);
+    CreateDirectory((LPTSTR) theDirName, NULL);
 #else
     mkdir(theDirName, 0x1ff);
 #endif
@@ -1084,6 +1084,9 @@ std::shared_ptr<ModelAPI_Feature> Model_Document::currentFeature(const bool theV
 void Model_Document::setCurrentFeature(
   std::shared_ptr<ModelAPI_Feature> theCurrent, const bool theVisible)
 {
+  if (myIsSetCurrentFeature)
+    return;
+  myIsSetCurrentFeature = true;
   // blocks the flush signals to avoid each objects visualization in the viewer
   // they should not be shown once after all modifications are performed
   Events_Loop* aLoop = Events_Loop::loop();
@@ -1120,6 +1123,7 @@ void Model_Document::setCurrentFeature(
     std::shared_ptr<Model_Data> aData = std::static_pointer_cast<Model_Data>(theCurrent->data());
     if (!aData.get() || !aData->isValid()) {
       aLoop->activateFlushes(isActive);
+      myIsSetCurrentFeature = false;
       return;
     }
     TDF_Label aFeatureLabel = aData->label().Father();
@@ -1192,6 +1196,7 @@ void Model_Document::setCurrentFeature(
       }
     }
   }
+  myIsSetCurrentFeature = false;
   // unblock  the flush signals and up them after this
   aLoop->activateFlushes(isActive);
 }