]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Connection of the feature to the document
authormpv <mikhail.ponikarov@opencascade.com>
Tue, 1 Apr 2014 07:58:33 +0000 (11:58 +0400)
committermpv <mikhail.ponikarov@opencascade.com>
Tue, 1 Apr 2014 07:58:33 +0000 (11:58 +0400)
12 files changed:
src/Model/CMakeLists.txt
src/Model/Model_Application.cxx
src/Model/Model_Application.h
src/Model/Model_Document.cxx
src/Model/Model_Document.h
src/Model/Model_Feature.cxx
src/Model/Model_Feature.h
src/Model/Model_PluginManager.cxx
src/Model/Model_PluginManager.h
src/ModelAPI/ModelAPI_Document.h
src/ModelAPI/ModelAPI_PluginManager.h
src/PartSetPlugin/PartSetPlugin_Plugin.cxx

index 42ee4f4c64d9fc1f2895cb1c2b53d3b8cd86917a..5f0b4e883b31d06e2ea68736159c63a1a497ee4b 100644 (file)
@@ -6,12 +6,14 @@ INCLUDE(FindBoost)
 
 SET(PROJECT_HEADERS
     Model.h
+    Model_Application.h
     Model_Document.h
     Model_PluginManager.h
     Model_Feature.h
 )
 
 SET(PROJECT_SOURCES
+    Model_Application.cxx
     Model_Document.cxx
     Model_PluginManager.cxx
     Model_Feature.cxx
index dab193d13b3cf3a2734c3e8dafea19a93b5f3640..560f5805c980b9d0143baaa0fdaa974e6f5c86be 100644 (file)
@@ -2,8 +2,8 @@
 // Created:    Fri Sep 2 2011
 // Author:     Mikhail PONIKAROV
 
-#include <Model_Application.hxx>
-#include <Model_Document.hxx>
+#include <Model_Application.h>
+#include <Model_Document.h>
 
 IMPLEMENT_STANDARD_HANDLE(Model_Application, TDocStd_Application)
 IMPLEMENT_STANDARD_RTTIEXT(Model_Application, TDocStd_Application)
@@ -14,7 +14,7 @@ static Handle_Model_Application TheApplication = new Model_Application;
 //function : getApplication
 //purpose  : 
 //=======================================================================
-Handle_Model_Application Model_Application::GetApplication()
+Handle(Model_Application) Model_Application::getApplication()
 {
   return TheApplication;
 }
@@ -23,13 +23,14 @@ Handle_Model_Application Model_Application::GetApplication()
 //function : getDocument
 //purpose  : 
 //=======================================================================
-ModelAPI_Document* Model_Application::GetMainDocument()
+boost::shared_ptr<Model_Document> Model_Application::getDocument(std::string theDocID)
 {
+  if (myDocs.find(theDocID) != myDocs.end())
+    return myDocs[theDocID];
 
-  if (myMainDoc.IsNull()) {
-    myMainDoc = new Model_Document("BinOcaf");
-  }
-  return *myMainDoc;
+  boost::shared_ptr<Model_Document> aNew(new Model_Document("BinOcaf"));
+  myDocs[theDocID] = aNew;
+  return aNew;
 }
 
 //=======================================================================
index 77d669257079fc13b303f0bd4203334cf570a16b..265eafbe174ed28b67d455e934d521e623aa112c 100644 (file)
@@ -6,9 +6,9 @@
 #ifndef Model_Application_HeaderFile
 #define Model_Application_HeaderFile
 
-#include <Model_Document.hxx> 
-#include <ModelAPI_Application.hxx> 
+#include <Model_Document.h> 
 #include <TDocStd_Application.hxx>
+#include <map>
 
 // Define handle class 
 DEFINE_STANDARD_HANDLE(Model_Application, TDocStd_Application)
@@ -19,19 +19,18 @@ DEFINE_STANDARD_HANDLE(Model_Application, TDocStd_Application)
  * Application supports the formats and document management. It is uses OCAF-lke
  * architecture and just implements specific features of the module.
  */
-class Model_Application: public TDocStd_Application, public ModelAPI_Application
+class Model_Application: public TDocStd_Application
 {
 public:
   // useful methods inside of the module
 
   // CASCADE RTTI
-  DEFINE_STANDARD_RTTI(Model_Application)
-  ;
+  DEFINE_STANDARD_RTTI(Model_Application);
 
   //! Retuns the application: one per process    
-  MODEL_EXPORT static Handle_Model_Application GetApplication();
-  //! Returns the main document (on first call creates it)
-  MODEL_EXPORT ModelAPI_Document* GetMainDocument();
+  MODEL_EXPORT static Handle_Model_Application getApplication();
+  //! Returns the main document (on first call creates it) by the string identifier
+  MODEL_EXPORT boost::shared_ptr<Model_Document> getDocument(std::string theDocID);
 
 public:
   // Redefined OCAF methods
@@ -46,8 +45,8 @@ public:
   Model_Application();
 
 private:
-
-  Handle_Model_Document myMainDoc; ///< main document of an application
+  /// Map from string identifiers to created documents of an application
+  std::map<std::string, boost::shared_ptr<Model_Document> > myDocs;
 };
 
 #endif
index dd34e598b24aeb0e165af8b104c162084fa69c21..ddbdfc53a4ec6518bf18603a73ae88e905568c94 100644 (file)
@@ -1,21 +1,20 @@
 // File:        Model_Document.cxx
-// Created:     28 Dec 2011
+// Created:     28 Feb 2014
 // Author:      Mikhail PONIKAROV
-// Copyright:   CEA 2011
 
 #include <Model_Document.h>
+#include <Model_Feature.h>
 
 #include <TDataStd_Integer.hxx>
 
 IMPLEMENT_STANDARD_HANDLE(Model_Document, MMgt_TShared)
 IMPLEMENT_STANDARD_RTTIEXT(Model_Document, MMgt_TShared)
 
-static const int UNDO_LIMIT = 10; // number of possible undo operations in the module
+static const int UNDO_LIMIT = 10; // number of possible undo operations
 
 static const int TAG_GENERAL = 1; // general properties tag
 static const int TAG_OBJECTS = 2; // tag of the objects sub-tree (Root for Model_ObjectsMgr)
 static const int TAG_HISTORY = 3; // tag of the history sub-tree (Root for Model_History)
-static const int TAG_ISOTOPES = 4; // tag of the isotopes sub-tree (Root for MaterialMC_Isotope)
 
 using namespace std;
 
@@ -151,6 +150,18 @@ void Model_Document::Redo()
   myTransactionsAfterSave++;
 }
 
+void Model_Document::AddObject(
+  boost::shared_ptr<ModelAPI_Feature> theFeature, const int theGroupID)
+{
+  boost::shared_ptr<Model_Feature> aModelFeature = 
+    boost::dynamic_pointer_cast<Model_Feature>(theFeature);
+  if (aModelFeature) {
+    TDF_Label aGroupLab = Main().FindChild(TAG_OBJECTS).FindChild(theGroupID + 1);
+    TDF_Label anObjLab = aGroupLab.NewChild();
+    aModelFeature->setLabel(anObjLab);
+  }
+}
+
 Model_Document::Model_Document(const TCollection_ExtendedString& theStorageFormat)
     : TDocStd_Document(theStorageFormat)
 {
index bdd5d8e0c510d8d04b28d42b4860da287dfb3180..3e7c1c9800b0c4b73d1f9cc909769c646619008f 100644 (file)
@@ -1,7 +1,6 @@
-// File:        Model_Document.hxx
-// Created:     28 Dec 2011
+// File:        Model_Document.cxx
+// Created:     28 Feb 2014
 // Author:      Mikhail PONIKAROV
-// Copyright:   CEA 2011
 
 #ifndef Model_Document_HeaderFile
 #define Model_Document_HeaderFile
@@ -25,8 +24,7 @@ class Model_Document: public TDocStd_Document, public ModelAPI_Document
 {
 public:
 
-  DEFINE_STANDARD_RTTI(Model_Document)
-  ;
+  DEFINE_STANDARD_RTTI(Model_Document);
 
   //! Creates new document by the format string of a storage
   Model_Document(const TCollection_ExtendedString& theStorageFormat);
@@ -67,6 +65,12 @@ public:
   //! Redoes last operation
   MODEL_EXPORT void Redo();
 
+  //! Adds to the document the new object of the given group id
+  //! \param theFeature a feature object that will be connected to the document in this method
+  //! \param theGroupID identifier of the groups of objects (must be greater than zero)
+  MODEL_EXPORT virtual void AddObject(boost::shared_ptr<ModelAPI_Feature> theFeature,
+    const int theGroupID);
+
 protected:
 
 private:
index 0ff28389207f8e70c5a7c8cf5922f0625c5247c9..10455a7fc6ac9bb9ec1fdb35d907aa9109aa28fd 100644 (file)
@@ -10,7 +10,7 @@ Model_Feature::Model_Feature()
 {
 }
 
-string Model_Feature::GetKind()
+void Model_Feature::setLabel(TDF_Label& theLab)
 {
-  return "Point";
+  myLab = theLab;
 }
index 0b51f725f54d6904898359bd599ceb7a87af93b5..ac930c0784e807ede7d7a814272bd0759e23a9af 100644 (file)
@@ -7,6 +7,7 @@
 
 #include "Model.h"
 #include <ModelAPI_Feature.h>
+#include <TDF_Label.hxx>
 
 /**\class Model_Feature
  * \ingroup DataModel
 
 class Model_Feature: public ModelAPI_Feature
 {
-  Model_Feature();
+  TDF_Label myLab; ///< label of the feature in the document
 
+  Model_Feature();
   friend class Model_PluginManager;
 public:
   /// Returns the kind of a feature (like "Point")
-  virtual std::string GetKind();
+  virtual std::string GetKind() = 0;
+
+  void setLabel(TDF_Label& theLab);
 };
 
 #endif
index c4e28665dcd82d3e7d086d489d0ca02ac801caeb..e9990eed4f1f0ec0a6a45a11aa7dbe6edcbb62a9 100644 (file)
@@ -6,6 +6,8 @@
 #include <ModelAPI_Feature.h>
 #include <ModelAPI_Plugin.h>
 #include <Model_Feature.h>
+#include <Model_Document.h>
+#include <Model_Application.h>
 #include <Event_Loop.h>
 #include <Config_FeatureMessage.h>
 #include <Config_ModuleReader.h>
@@ -26,13 +28,21 @@ boost::shared_ptr<ModelAPI_Feature> Model_PluginManager::createFeature(string th
       loadLibrary(myCurrentPluginName);
     }
     if (myPluginObjs.find(myCurrentPluginName) != myPluginObjs.end()) {
-      return myPluginObjs[myCurrentPluginName]->createFeature(theFeatureID);
+      boost::shared_ptr<ModelAPI_Feature> aCreated = 
+        myPluginObjs[myCurrentPluginName]->createFeature(theFeatureID);
     }
   }
 
   return boost::shared_ptr<ModelAPI_Feature>(); // return nothing
 }
 
+boost::shared_ptr<ModelAPI_Document> Model_PluginManager::rootDocument()
+{
+  return boost::shared_ptr<ModelAPI_Document>(
+    Model_Application::getApplication()->getDocument("root"));
+}
+
+
 Model_PluginManager::Model_PluginManager()
 {
   myPluginsInfoLoaded = false;
@@ -51,7 +61,7 @@ void Model_PluginManager::processEvent(const Event_Message* theMessage)
   if (aMsg) {
     // proccess the plugin info, load plugin
     if (myPlugins.find(aMsg->id()) == myPlugins.end()) {
-      myPlugins[aMsg->id()] = aMsg->pluginLibrary(); // TO DO: plugin name must be also imported from XMLs
+      myPlugins[aMsg->id()] = aMsg->pluginLibrary();
     }
   }
   // plugins information was started to load, so, it will be loaded
index 5a847abce16589cfe4f65c7c2b274afcbfe8586d..5f9fdb73c1e0de410f5182d1b61342613de4a5dc 100644 (file)
@@ -10,6 +10,8 @@
 #include <Event_Listener.h>
 #include <map>
 
+class Model_Document;
+
 /**\class Model_PluginManager
  * \ingroup DataModel
  * \brief Object that knows (from the initial XML file) which
@@ -28,6 +30,9 @@ public:
   /// Creates the feature object using plugins functionality
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_Feature> createFeature(std::string theFeatureID);
 
+  /// Returns the root document of the application (that may contains sub-documents)
+  virtual boost::shared_ptr<ModelAPI_Document> rootDocument();
+
   /// Registers the plugin that creates features.
   /// It is obligatory for each plugin to call this function on loading to be found by 
   /// the plugin manager on call of the feature)
index 911aca0680be06183f0093859ee21bebed285c9a..2f60c2643f09ad9bec00354a87e7d9a730c9a3c6 100644 (file)
@@ -1,12 +1,14 @@
-// File:        Model_Document.hxx
-// Created:     28 Dec 2011
+// File:        ModelAPI_Document.cxx
+// Created:     28 Feb 2014
 // Author:      Mikhail PONIKAROV
-// Copyright:   CEA 2011
 
 #ifndef ModelAPI_Document_HeaderFile
 #define ModelAPI_Document_HeaderFile
 
 #include <ModelAPI.h>
+#include <boost/shared_ptr.hpp>
+
+class ModelAPI_Feature;
 
 /**\class Model_Document
  * \ingroup DataModel
@@ -55,6 +57,12 @@ public:
   //! Redoes last operation
   MODELAPI_EXPORT virtual void Redo() = 0;
 
+  //! Adds to the document the new object of the given group id
+  //! \param theFeature a feature object that will be connected to the document in this method
+  //! \param theGroupID identifier of the groups of objects (must be greater than zero)
+  MODELAPI_EXPORT virtual void AddObject(boost::shared_ptr<ModelAPI_Feature> theFeature,
+    const int theGroupID) = 0;
+
 protected:
   /// Only for SWIG wrapping it is here
   MODELAPI_EXPORT ModelAPI_Document()
index 620501bfd07e97d18d1cbf8dc82236ba6a5fafce..a7b0c7bcd769895137a649fc16d3874b734123f1 100644 (file)
@@ -11,6 +11,7 @@
 
 class ModelAPI_Feature;
 class ModelAPI_Plugin;
+class ModelAPI_Document;
 
 /**\class ModelAPI_PluginManager
  * \ingroup DataModel
@@ -33,6 +34,9 @@ public:
   /// the plugin manager on call of the feature)
   virtual void registerPlugin(ModelAPI_Plugin* thePlugin) = 0;
 
+  /// Returns the root document of the application (that may contains sub-documents)
+  virtual boost::shared_ptr<ModelAPI_Document> rootDocument() = 0;
+
   /// loads the library with specific name, appends "lib*.dll" or "*.so" depending on the platform
   static void ModelAPI_PluginManager::loadLibrary(const std::string theLibName);
 
index d3d295dc72f8c90fc1e81cf81b3d84e83c6cbf9c..d94a74f30f14e513ab4aadec38cd3146f37e2e80 100644 (file)
@@ -1,9 +1,13 @@
 #include "PartSetPlugin_Plugin.h"
 #include "PartSetPlugin_NewPart.h"
 #include <ModelAPI_PluginManager.h>
+#include <ModelAPI_Document.h>
 
 using namespace std;
 
+// group identification of the newly created parts in the Part Set document
+const int MY_PARTS_GROUP = 1;
+
 // the only created instance of this plugin
 static PartSetPlugin_Plugin* MY_INSTANCE = new PartSetPlugin_Plugin();
 
@@ -15,9 +19,13 @@ PartSetPlugin_Plugin::PartSetPlugin_Plugin()
 
 boost::shared_ptr<ModelAPI_Feature> PartSetPlugin_Plugin::createFeature(string theFeatureID)
 {
+  boost::shared_ptr<ModelAPI_Feature> aCreated;
   if (theFeatureID == "new_part") {
-    return boost::shared_ptr<ModelAPI_Feature>(new PartSetPlugin_NewPart());
+    aCreated = boost::shared_ptr<ModelAPI_Feature>(new PartSetPlugin_NewPart());
   }
+  // add to a root document for the current moment
+  if (aCreated)
+    ModelAPI_PluginManager::get()->rootDocument()->AddObject(aCreated, MY_PARTS_GROUP);
   // feature of such kind is not found
-  return boost::shared_ptr<ModelAPI_Feature>();
+  return aCreated;
 }