]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Optimization in the frames of issue #1668
authormpv <mpv@opencascade.com>
Tue, 29 Jan 2019 13:43:58 +0000 (16:43 +0300)
committermpv <mpv@opencascade.com>
Tue, 29 Jan 2019 13:43:58 +0000 (16:43 +0300)
src/Model/Model_Events.cpp
src/Model/Model_Events.h
src/Model/Model_ResultPart.cpp
src/Model/Model_Update.cpp
src/ModelAPI/ModelAPI_Events.h

index e113d3ae7f73b1cbcd66bce97a8dc37b41ff8172..9b5295da05bb8238093719f440d6fc4f8b35a0bc 100644 (file)
@@ -33,6 +33,22 @@ void Model_EventCreator::sendUpdated(const ObjectPtr& theObject, const Events_ID
   Events_Loop::loop()->send(aMsg, isGroupped);
 }
 
+void Model_EventCreator::sendUpdated(const std::list<ObjectPtr>& theObjects,
+  const Events_ID& theEvent, const bool isGroupped) const
+{
+  if (theObjects.empty())
+    return;
+  std::list<ObjectPtr>::const_iterator anObj = theObjects.cbegin();
+  std::shared_ptr<Model_ObjectUpdatedMessage> aMsg(
+    new Model_ObjectUpdatedMessage(*anObj, theEvent));
+  for(anObj++; anObj != theObjects.cend(); anObj++) {
+    std::shared_ptr<Model_ObjectUpdatedMessage> aJoined(
+      new Model_ObjectUpdatedMessage(*anObj, theEvent));
+    aMsg->Join(aJoined);
+  }
+  Events_Loop::loop()->send(aMsg, isGroupped);
+}
+
 void Model_EventCreator::sendDeleted(const std::shared_ptr<ModelAPI_Document>& theDoc,
                                      const std::string& theGroup) const
 {
index c0ed012542e2d581b7ad723f2d70aa8ef789b500..510a9e9a29ecf5cd106077332d07f73695b2dee0 100644 (file)
 
 #include <memory>
 
-/// Allovs to create ModelAPI messages
+/// Allows to create ModelAPI messages
 class Model_EventCreator : public ModelAPI_EventCreator
 {
  public:
   /// creates created, updated or moved messages and sends to the loop
   virtual void sendUpdated(const ObjectPtr& theObject, const Events_ID& theEvent,
                            const bool isGroupped = true) const;
+
+  /// creates created, updated or moved messages with the objects collection and sends to the loop
+  virtual void sendUpdated(const std::list<ObjectPtr>& theObjects, const Events_ID& theEvent,
+    const bool isGroupped = true) const;
   /// creates deleted message and sends to the loop
   virtual void sendDeleted(const std::shared_ptr<ModelAPI_Document>& theDoc,
                            const std::string& theGroup) const;
index 3c53dc54e98ddad73f7669b3a0751d2ed754532a..db3cc0b3d86ee91dc39d1005193531563e52a809 100644 (file)
@@ -66,6 +66,8 @@ std::shared_ptr<ModelAPI_Document> Model_ResultPart::partDoc()
   if (myTrsf.get() && baseRef().get()) { // the second condition is due to #2035
     return baseRef()->partDoc();
   }
+  if (!data()->isValid())
+    return DocumentPtr();
   DocumentPtr aRes = data()->document(DOC_REF())->value();
   return aRes;
 }
index 25a6b6e430cb9f017d54482ddda41f36f4e87f76..fdc61c6e8b7ff13730ece91cdafb0eec891648b3 100755 (executable)
@@ -301,16 +301,19 @@ void Model_Update::processEvent(const std::shared_ptr<Events_Message>& theMessag
         std::dynamic_pointer_cast<ModelAPI_ObjectUpdatedMessage>(theMessage);
     const std::set<ObjectPtr>& anObjs = aMsg->objects();
     std::set<ObjectPtr>::const_iterator anObjIter = anObjs.cbegin();
+    std::list<ObjectPtr> aFeatures, aResults;
     for(; anObjIter != anObjs.cend(); anObjIter++) {
       if (std::dynamic_pointer_cast<Model_Document>((*anObjIter)->document())->executeFeatures()) {
         if ((*anObjIter)->groupName() == ModelAPI_Feature::group()) {
           // results creation means enabling, not update
-          ModelAPI_EventCreator::get()->sendUpdated(*anObjIter, kUpdatedEvent);
+          aFeatures.push_back(*anObjIter);
         } else {
-          ModelAPI_EventCreator::get()->sendUpdated(*anObjIter, kRedisplayEvent);
+          aResults.push_back(*anObjIter);
         }
       }
     }
+    ModelAPI_EventCreator::get()->sendUpdated(aFeatures, kUpdatedEvent);
+    ModelAPI_EventCreator::get()->sendUpdated(aResults, kRedisplayEvent);
     return;
   }
   if (theMessage->eventID() == kUpdatedEvent) {
index ddef5a2d328221689f787381f81ba17adf83d93a..cf8794d803731aa982e2a2199c9dddf380ea6911 100644 (file)
@@ -56,7 +56,7 @@ static const char * EVENT_PLUGIN_LOADED = "PluginLoaded";
 static const char * EVENT_DOCUMENT_CHANGED = "CurrentDocumentChanged";
 
 /// Event ID that order of objects in group is changed,
-/// so, tree must be fully rectreated (movement of feature)
+/// so, tree must be fully recreated (movement of feature)
 static const char * EVENT_ORDER_UPDATED = "OrderUpdated";
 /// Event ID that the sketch is prepared and all grouped messages for the solver may be flushed
 static const char * EVENT_UPDATE_SELECTION = "UpdateSelection";
@@ -142,7 +142,7 @@ public:
   /// Returns the identifier of the kind of a message
   virtual const Events_ID messageId() = 0;
 
-  /// Appenad to this message the given one.
+  /// Appends to this message the given one.
   virtual void Join(const std::shared_ptr<Events_MessageGroup>& theJoined) = 0;
 };
 
@@ -170,6 +170,9 @@ public:
   /// creates created, updated or moved messages and sends to the loop
   virtual void sendUpdated(const ObjectPtr& theObject, const Events_ID& theEvent,
                            const bool isGroupped = true) const = 0;
+  /// creates created, updated or moved messages with the objects collection and sends to the loop
+  virtual void sendUpdated(const std::list<ObjectPtr>& theObjects, const Events_ID& theEvent,
+    const bool isGroupped = true) const = 0;
   /// creates deleted message and sends to the loop
   virtual void sendDeleted(const std::shared_ptr<ModelAPI_Document>& theDoc,
                            const std::string& theGroup) const = 0;
@@ -183,7 +186,6 @@ public:
   static void set(const ModelAPI_EventCreator* theCreator);
 };
 
-// TODO(sbh): Move this message into a separate package, like "GuiAPI"
 /// Contains the state information about the feature: is it enabled or disabled.
 class ModelAPI_FeatureStateMessage : public Events_Message
 {
@@ -470,7 +472,7 @@ private:
   int myDOF;
 };
 
-/// Message sent when feature or attrubute has been moved.
+/// Message sent when feature or attribute has been moved.
 /// Stores the moving object/attribute, original and new positions of mouse.
 class ModelAPI_ObjectMovedMessage : public Events_Message
 {