Salome HOME
Issue #427, 420 - crash during work through external edges.
[modules/shaper.git] / src / Model / Model_AttributeDouble.cpp
index 13b4c97c650b8984971a2e0fdb7689432304a463..4764420f7c515a0184b7471f416ae4a328e5bdaa 100644 (file)
@@ -1,20 +1,20 @@
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
 // File:        ModelAPI_AttributeDouble.cxx
 // Created:     2 Apr 2014
 // Author:      Mikhail PONIKAROV
 
 #include "Model_AttributeDouble.h"
-#include "Model_Events.h"
-#include <Events_Loop.h>
+#include <ModelAPI_Feature.h>
+#include <ModelAPI_Data.h>
 
 using namespace std;
 
 void Model_AttributeDouble::setValue(const double theValue)
 {
-  if (myReal->Get() != theValue) {
+  if (!myIsInitialized || myReal->Get() != theValue) {
     myReal->Set(theValue);
-    static Events_ID anEvent = Events_Loop::eventByName(EVENT_FEATURE_UPDATED);
-    Model_FeatureUpdatedMessage aMsg(feature(), anEvent);
-    Events_Loop::loop()->send(aMsg);
+    owner()->data()->sendAttributeUpdated(this);
   }
 }
 
@@ -26,7 +26,8 @@ double Model_AttributeDouble::value()
 Model_AttributeDouble::Model_AttributeDouble(TDF_Label& theLabel)
 {
   // check the attribute could be already presented in this doc (after load document)
-  if (!theLabel.FindAttribute(TDataStd_Real::GetID(), myReal)) {
+  myIsInitialized = theLabel.FindAttribute(TDataStd_Real::GetID(), myReal) == Standard_True;
+  if (!myIsInitialized) {
     // create attribute: not initialized by value yet, just zero
     myReal = TDataStd_Real::Set(theLabel, 0.);
   }