]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
New Attribute - "String" added into the model.
authorsbh <sergey.belash@opencascade.com>
Fri, 29 Aug 2014 07:30:43 +0000 (11:30 +0400)
committersbh <sergey.belash@opencascade.com>
Fri, 29 Aug 2014 07:30:43 +0000 (11:30 +0400)
src/Model/CMakeLists.txt
src/Model/Model_AttributeBoolean.h
src/Model/Model_AttributeString.cpp [new file with mode: 0644]
src/Model/Model_AttributeString.h [new file with mode: 0644]
src/Model/Model_Data.cpp
src/Model/Model_Data.h
src/ModelAPI/CMakeLists.txt
src/ModelAPI/ModelAPI.i
src/ModelAPI/ModelAPI_AttributeBoolean.h
src/ModelAPI/ModelAPI_AttributeString.h [new file with mode: 0644]
src/ModelAPI/ModelAPI_Data.h

index d2d6cc78d8d9c0dec995dadcb6ab29d0939c58d0..bd10db278bc1ca934146eb2be6c47d331d2a9998 100644 (file)
@@ -12,6 +12,7 @@ SET(PROJECT_HEADERS
     Model_AttributeRefAttr.h
     Model_AttributeRefList.h
     Model_AttributeBoolean.h
+    Model_AttributeString.h
     Model_Events.h
     Model_Update.h
     Model_Validator.h
@@ -33,6 +34,7 @@ SET(PROJECT_SOURCES
     Model_AttributeRefAttr.cpp
     Model_AttributeRefList.cpp
     Model_AttributeBoolean.cpp
+    Model_AttributeString.cpp
     Model_Events.cpp
     Model_Update.cpp
     Model_Validator.cpp
index 0e4fbdf61302952307d544269cbd0598d9ca40f7..f52d52691a7217392fa965bbe7031d0ed167cc24 100644 (file)
@@ -10,7 +10,7 @@
 #include <TDataStd_Integer.hxx>
 #include <TDF_Label.hxx>
 
-/**\class Model_AttributeDouble
+/**\class Model_AttributeBoolean
  * \ingroup DataModel
  * \brief Attribute that contains real value with double precision.
  */
diff --git a/src/Model/Model_AttributeString.cpp b/src/Model/Model_AttributeString.cpp
new file mode 100644 (file)
index 0000000..fa22e10
--- /dev/null
@@ -0,0 +1,41 @@
+// File:        Model_AttributeString.cpp
+// Created:     2 june 2014
+// Author:      Vitaly Smetannikov
+
+#include <Model_AttributeString.h>
+#include <ModelAPI_AttributeString.h>
+#include <ModelAPI_Attribute.h>
+#include <ModelAPI_Data.h>
+#include <ModelAPI_Object.h>
+
+#include <Standard_TypeDef.hxx>
+#include <TCollection_AsciiString.hxx>
+#include <TCollection_ExtendedString.hxx>
+#include <TDataStd_Integer.hxx>
+#include <TDataStd_Name.hxx>
+
+#include <string>
+
+void Model_AttributeString::setValue(const std::string& theValue)
+{
+  TCollection_ExtendedString aValue(theValue.c_str());
+  if (!myIsInitialized || myString->Get() != aValue) {
+    myString->Set(aValue);
+    owner()->data()->sendAttributeUpdated(this);
+  }
+}
+
+std::string Model_AttributeString::value()
+{
+  return TCollection_AsciiString(myString->Get()).ToCString();
+}
+
+Model_AttributeString::Model_AttributeString(TDF_Label& theLabel)
+{
+  // check the attribute could be already presented in this doc (after load document)
+  myIsInitialized = theLabel.FindAttribute(TDataStd_Integer::GetID(), myString) == Standard_True;
+  if (!myIsInitialized) {
+    // create attribute: not initialized by value yet, just empty string
+    myString = TDataStd_Name::Set(theLabel, TCollection_ExtendedString());
+  }
+}
diff --git a/src/Model/Model_AttributeString.h b/src/Model/Model_AttributeString.h
new file mode 100644 (file)
index 0000000..2695cbc
--- /dev/null
@@ -0,0 +1,38 @@
+// File:        Model_AttributeString.h
+// Created:     2 june 2014
+// Author:      Vitaly Smetannikov
+
+#ifndef Model_AttributeString_H_
+#define Model_AttributeString_H_
+
+#include <Model.h>
+#include <ModelAPI_AttributeString.h>
+
+#include <TDF_Label.hxx>
+#include <Handle_TDataStd_Name.hxx>
+
+#include <string>
+
+/**\class Model_AttributeString
+ * \ingroup DataModel
+ * \brief Attribute that contains std (null terminated) string.
+ */
+
+class Model_AttributeString : public ModelAPI_AttributeString
+{
+  Handle_TDataStd_Name myString;  ///< double is Real attribute
+ public:
+  /// Defines the double value
+  MODEL_EXPORT virtual void setValue(const std::string& theValue);
+
+  /// Returns the double value
+  MODEL_EXPORT virtual std::string value();
+
+ protected:
+  /// Initializes attibutes
+  Model_AttributeString(TDF_Label& theLabel);
+
+  friend class Model_Data;
+};
+
+#endif
index 592fc75db9d6479b27c06f869c95ec26246ed269..dc80d902407594bf1794ad48ce6a5ed69877b567 100644 (file)
@@ -9,15 +9,16 @@
 #include <Model_AttributeRefAttr.h>
 #include <Model_AttributeRefList.h>
 #include <Model_AttributeBoolean.h>
+#include <Model_AttributeString.h>
+#include <Model_Events.h>
+
 #include <GeomData_Point.h>
 #include <GeomData_Point2D.h>
 #include <GeomData_Dir.h>
-#include <TDataStd_Name.hxx>
-#include "Model_Events.h"
 #include <Events_Loop.h>
 #include <Events_Error.h>
 
-using namespace std;
+#include <TDataStd_Name.hxx>
 
 Model_Data::Model_Data()
 {
@@ -28,15 +29,15 @@ void Model_Data::setLabel(TDF_Label theLab)
   myLab = theLab;
 }
 
-string Model_Data::name()
+std::string Model_Data::name()
 {
   Handle(TDataStd_Name) aName;
   if (myLab.FindAttribute(TDataStd_Name::GetID(), aName))
-    return string(TCollection_AsciiString(aName->Get()).ToCString());
+    return std::string(TCollection_AsciiString(aName->Get()).ToCString());
   return "";  // not defined
 }
 
-void Model_Data::setName(const string& theName)
+void Model_Data::setName(const std::string& theName)
 {
   bool isModified = false;
   Handle(TDataStd_Name) aName;
@@ -55,29 +56,31 @@ void Model_Data::setName(const string& theName)
    }*/
 }
 
-void Model_Data::addAttribute(const string& theID, const string theAttrType)
+void Model_Data::addAttribute(const std::string& theID, const std::string theAttrType)
 {
   TDF_Label anAttrLab = myLab.FindChild(myAttrs.size() + 1);
   ModelAPI_Attribute* anAttr = 0;
-  if (theAttrType == ModelAPI_AttributeDocRef::type())
+  if (theAttrType == ModelAPI_AttributeDocRef::type()) {
     anAttr = new Model_AttributeDocRef(anAttrLab);
-  else if (theAttrType == ModelAPI_AttributeDouble::type())
+  } else if (theAttrType == ModelAPI_AttributeDouble::type()) {
     anAttr = new Model_AttributeDouble(anAttrLab);
-  else if (theAttrType == ModelAPI_AttributeReference::type())
+  } else if (theAttrType == ModelAPI_AttributeReference::type()) {
     anAttr = new Model_AttributeReference(anAttrLab);
-  else if (theAttrType == ModelAPI_AttributeRefAttr::type())
+  } else if (theAttrType == ModelAPI_AttributeRefAttr::type()) {
     anAttr = new Model_AttributeRefAttr(anAttrLab);
-  else if (theAttrType == ModelAPI_AttributeRefList::type())
+  } else if (theAttrType == ModelAPI_AttributeRefList::type()) {
     anAttr = new Model_AttributeRefList(anAttrLab);
-  else if (theAttrType == GeomData_Point::type())
+  } else if (theAttrType == GeomData_Point::type()) {
     anAttr = new GeomData_Point(anAttrLab);
-  else if (theAttrType == GeomData_Dir::type())
+  } else if (theAttrType == GeomData_Dir::type()) {
     anAttr = new GeomData_Dir(anAttrLab);
-  else if (theAttrType == GeomData_Point2D::type())
+  } else if (theAttrType == GeomData_Point2D::type()) {
     anAttr = new GeomData_Point2D(anAttrLab);
-  else if (theAttrType == Model_AttributeBoolean::type())
+  } else if (theAttrType == Model_AttributeBoolean::type()) {
     anAttr = new Model_AttributeBoolean(anAttrLab);
-
+  } else if (theAttrType == Model_AttributeString::type()) {
+    anAttr = new Model_AttributeString(anAttrLab);
+  }
   if (anAttr) {
     myAttrs[theID] = boost::shared_ptr<ModelAPI_Attribute>(anAttr);
     anAttr->setObject(myObject);
@@ -86,9 +89,9 @@ void Model_Data::addAttribute(const string& theID, const string theAttrType)
   }
 }
 
-boost::shared_ptr<ModelAPI_AttributeDocRef> Model_Data::docRef(const string& theID)
+boost::shared_ptr<ModelAPI_AttributeDocRef> Model_Data::docRef(const std::string& theID)
 {
-  map<string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
+  std::map<std::string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
   if (aFound == myAttrs.end()) {
     // TODO: generate error on unknown attribute request and/or add mechanism for customization
     return boost::shared_ptr<ModelAPI_AttributeDocRef>();
@@ -101,9 +104,9 @@ boost::shared_ptr<ModelAPI_AttributeDocRef> Model_Data::docRef(const string& the
   return aRes;
 }
 
-boost::shared_ptr<ModelAPI_AttributeDouble> Model_Data::real(const string& theID)
+boost::shared_ptr<ModelAPI_AttributeDouble> Model_Data::real(const std::string& theID)
 {
-  map<string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
+  std::map<std::string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
   if (aFound == myAttrs.end()) {
     // TODO: generate error on unknown attribute request and/or add mechanism for customization
     return boost::shared_ptr<ModelAPI_AttributeDouble>();
@@ -118,7 +121,7 @@ boost::shared_ptr<ModelAPI_AttributeDouble> Model_Data::real(const string& theID
 
 boost::shared_ptr<ModelAPI_AttributeBoolean> Model_Data::boolean(const std::string& theID)
 {
-  map<string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
+  std::map<std::string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
   if (aFound == myAttrs.end()) {
     // TODO: generate error on unknown attribute request and/or add mechanism for customization
     return boost::shared_ptr<ModelAPI_AttributeBoolean>();
@@ -131,9 +134,25 @@ boost::shared_ptr<ModelAPI_AttributeBoolean> Model_Data::boolean(const std::stri
   return aRes;
 }
 
-boost::shared_ptr<ModelAPI_AttributeReference> Model_Data::reference(const string& theID)
+boost::shared_ptr<ModelAPI_AttributeString> Model_Data::string(const std::string& theID)
+{
+  std::map<std::string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
+  if (aFound == myAttrs.end()) {
+    // TODO: generate error on unknown attribute request and/or add mechanism for customization
+    return boost::shared_ptr<ModelAPI_AttributeString>();
+  }
+  boost::shared_ptr<ModelAPI_AttributeString> aRes =
+      boost::dynamic_pointer_cast<ModelAPI_AttributeString>(aFound->second);
+  if (!aRes) {
+    // TODO: generate error on invalid attribute type request
+  }
+  return aRes;
+
+}
+
+boost::shared_ptr<ModelAPI_AttributeReference> Model_Data::reference(const std::string& theID)
 {
-  map<string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
+  std::map<std::string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
   if (aFound == myAttrs.end()) {
     // TODO: generate error on unknown attribute request and/or add mechanism for customization
     return boost::shared_ptr<ModelAPI_AttributeReference>();
@@ -146,9 +165,9 @@ boost::shared_ptr<ModelAPI_AttributeReference> Model_Data::reference(const strin
   return aRes;
 }
 
-boost::shared_ptr<ModelAPI_AttributeRefAttr> Model_Data::refattr(const string& theID)
+boost::shared_ptr<ModelAPI_AttributeRefAttr> Model_Data::refattr(const std::string& theID)
 {
-  map<string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
+  std::map<std::string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
   if (aFound == myAttrs.end()) {
     // TODO: generate error on unknown attribute request and/or add mechanism for customization
     return boost::shared_ptr<ModelAPI_AttributeRefAttr>();
@@ -161,9 +180,9 @@ boost::shared_ptr<ModelAPI_AttributeRefAttr> Model_Data::refattr(const string& t
   return aRes;
 }
 
-boost::shared_ptr<ModelAPI_AttributeRefList> Model_Data::reflist(const string& theID)
+boost::shared_ptr<ModelAPI_AttributeRefList> Model_Data::reflist(const std::string& theID)
 {
-  map<string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
+  std::map<std::string, boost::shared_ptr<ModelAPI_Attribute> >::iterator aFound = myAttrs.find(theID);
   if (aFound == myAttrs.end()) {
     // TODO: generate error on unknown attribute request and/or add mechanism for customization
     return boost::shared_ptr<ModelAPI_AttributeRefList>();
@@ -184,15 +203,15 @@ boost::shared_ptr<ModelAPI_Attribute> Model_Data::attribute(const std::string& t
   return myAttrs[theID];
 }
 
-const string& Model_Data::id(const boost::shared_ptr<ModelAPI_Attribute>& theAttr)
+const std::string& Model_Data::id(const boost::shared_ptr<ModelAPI_Attribute>& theAttr)
 {
-  map<string, boost::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = myAttrs.begin();
+  std::map<std::string, boost::shared_ptr<ModelAPI_Attribute> >::iterator anAttr = myAttrs.begin();
   for (; anAttr != myAttrs.end(); anAttr++) {
     if (anAttr->second == theAttr)
       return anAttr->first;
   }
   // not found
-  static string anEmpty;
+  static std::string anEmpty;
   return anEmpty;
 }
 
@@ -209,10 +228,10 @@ bool Model_Data::isValid()
   return !myLab.IsNull() && myLab.HasAttribute();
 }
 
-list<boost::shared_ptr<ModelAPI_Attribute> > Model_Data::attributes(const string& theType)
+std::list<boost::shared_ptr<ModelAPI_Attribute> > Model_Data::attributes(const std::string& theType)
 {
-  list<boost::shared_ptr<ModelAPI_Attribute> > aResult;
-  map<string, boost::shared_ptr<ModelAPI_Attribute> >::iterator anAttrsIter = myAttrs.begin();
+  std::list<boost::shared_ptr<ModelAPI_Attribute> > aResult;
+  std::map<std::string, boost::shared_ptr<ModelAPI_Attribute> >::iterator anAttrsIter = myAttrs.begin();
   for (; anAttrsIter != myAttrs.end(); anAttrsIter++) {
     if (theType.empty() || anAttrsIter->second->attributeType() == theType) {
       aResult.push_back(anAttrsIter->second);
index ce939de8f721f265678650d9e2cdd678aef28af5..6597787697e15399e192b73edfa4eaa003ace48a 100644 (file)
@@ -5,12 +5,26 @@
 #ifndef Model_Data_H_
 #define Model_Data_H_
 
-#include "Model.h"
+#include <Model.h>
+#include <ModelAPI_Attribute.h>
+#include <ModelAPI_AttributeBoolean.h>
+#include <ModelAPI_AttributeDocRef.h>
+#include <ModelAPI_AttributeDouble.h>
+#include <ModelAPI_AttributeRefAttr.h>
+#include <ModelAPI_AttributeReference.h>
+#include <ModelAPI_AttributeRefList.h>
+#include <ModelAPI_AttributeString.h>
 #include <ModelAPI_Data.h>
 #include <ModelAPI_Feature.h>
+#include <ModelAPI_Object.h>
+
 #include <TDF_Label.hxx>
 
+#include <boost/smart_ptr/shared_ptr.hpp>
+
 #include <map>
+#include <list>
+#include <string>
 
 class ModelAPI_Attribute;
 
@@ -53,23 +67,26 @@ class Model_Data : public ModelAPI_Data
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_AttributeDouble> real(const std::string& theID);
   /// Returns the attribute that contains reference to a feature
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_AttributeReference>
-  reference(const std::string& theID);
+    reference(const std::string& theID);
   /// Returns the attribute that contains reference to an attribute of a feature
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_AttributeRefAttr>
-  refattr(const std::string& theID);
+    refattr(const std::string& theID);
   /// Returns the attribute that contains list of references to features
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_AttributeRefList>
-  reflist(const std::string& theID);
+    reflist(const std::string& theID);
   /// Returns the attribute that contains boolean value
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_AttributeBoolean>
-  boolean(const std::string& theID);
+    boolean(const std::string& theID);
+  /// Returns the attribute that contains real value with double precision
+  MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_AttributeString>
+    string(const std::string& theID);
   /// Returns the generic attribute by identifier
   /// \param theID identifier of the attribute
   MODEL_EXPORT virtual boost::shared_ptr<ModelAPI_Attribute> attribute(const std::string& theID);
   /// Returns all attributes ofthe feature of the given type
   /// or all attributes if "theType" is empty
   MODEL_EXPORT virtual std::list<boost::shared_ptr<ModelAPI_Attribute> >
-  attributes(const std::string& theType);
+    attributes(const std::string& theType);
 
   /// Identifier by the id (not fast, iteration by map)
   /// \param theAttr attribute already created in this data
index cc1596c0fb89a4670c01bcbd69f917ccc0e45417..e108834735f793213a150204954a9b32ebdce0dc 100644 (file)
@@ -18,6 +18,7 @@ SET(PROJECT_HEADERS
     ModelAPI_AttributeRefAttr.h
     ModelAPI_AttributeRefList.h
     ModelAPI_AttributeBoolean.h
+    ModelAPI_AttributeString.h
     ModelAPI_Events.h
     ModelAPI_Validator.h
     ModelAPI_FeatureValidator.h
index 31936c53eb04a5bc954fe9e9757a70443017b695..29e75fe30145c3d5265fe47cd2c6362ef102dd3d 100644 (file)
@@ -12,6 +12,7 @@
   #include "ModelAPI_Attribute.h"
   #include "ModelAPI_AttributeDocRef.h"
   #include "ModelAPI_AttributeDouble.h"
+  #include "ModelAPI_AttributeString.h"
   #include "ModelAPI_AttributeReference.h"
   #include "ModelAPI_AttributeRefAttr.h"
   #include "ModelAPI_Validator.h"
@@ -49,6 +50,7 @@
 %shared_ptr(ModelAPI_Attribute)
 %shared_ptr(ModelAPI_AttributeDocRef)
 %shared_ptr(ModelAPI_AttributeDouble)
+%shared_ptr(ModelAPI_AttributeString)
 %shared_ptr(ModelAPI_AttributeReference)
 %shared_ptr(ModelAPI_AttributeRefAttr)
 %shared_ptr(ModelAPI_AttributeRefList)
@@ -66,6 +68,7 @@
 %include "ModelAPI_Attribute.h"
 %include "ModelAPI_AttributeDocRef.h"
 %include "ModelAPI_AttributeDouble.h"
+%include "ModelAPI_AttributeString.h"
 %include "ModelAPI_AttributeReference.h"
 %include "ModelAPI_AttributeRefAttr.h"
 %include "ModelAPI_Validator.h"
index 2612e0eed431e900461d31477d3823bb727dfe8b..dcd76efc7a9b7184de03fe8cbcf42c25899f0ab8 100644 (file)
@@ -2,8 +2,8 @@
 // Created:     2 june 2014
 // Author:      Vitaly Smetannikov
 
-#ifndef ModelAPI_AttributeBoolean_H_
-#define ModelAPI_AttributeBoolean_H_
+#ifndef MODELAPI_ATTRIBUTEBOOLEAN_H_
+#define MODELAPI_ATTRIBUTEBOOLEAN_H_
 
 #include "ModelAPI_Attribute.h"
 
diff --git a/src/ModelAPI/ModelAPI_AttributeString.h b/src/ModelAPI/ModelAPI_AttributeString.h
new file mode 100644 (file)
index 0000000..5b037f1
--- /dev/null
@@ -0,0 +1,53 @@
+// File:        ModelAPI_AttributeString.h
+// Created:     2 Apr 2014
+// Author:      Mikhail PONIKAROV
+
+#ifndef MODELAPI_ATTRIBUTESTRING_H_
+#define MODELAPI_ATTRIBUTESTRING_H_
+
+#include "ModelAPI_Attribute.h"
+
+#include <string>
+
+/**\class ModelAPI_AttributeString
+ * \ingroup DataModel
+ * \brief API for the attribute that contains std (null terminated) string.
+ */
+
+class ModelAPI_AttributeString : public ModelAPI_Attribute
+{
+ public:
+  /// Defines the double value
+  MODELAPI_EXPORT virtual void setValue(const std::string& theValue) = 0;
+
+  /// Returns the double value
+  MODELAPI_EXPORT virtual std::string value() = 0;
+
+  /// Returns the type of this class of attributes
+  MODELAPI_EXPORT static std::string type()
+  {
+    return "String";
+  }
+
+  /// Returns the type of this class of attributes, not static method
+  MODELAPI_EXPORT virtual std::string attributeType()
+  {
+    return type();
+  }
+
+  /// To virtually destroy the fields of successors
+  MODELAPI_EXPORT virtual ~ModelAPI_AttributeString()
+  {
+  }
+
+ protected:
+  /// Objects are created for features automatically
+  MODELAPI_EXPORT ModelAPI_AttributeString()
+  {
+  }
+};
+
+//! Pointer on double attribute
+typedef boost::shared_ptr<ModelAPI_AttributeString> AttributeStringPtr;
+
+#endif
index d07d24052e61211215b3452b5e046a1299f04af2..b11bb66fb45b521a589eef83dd561bcb1616bdf6 100644 (file)
@@ -16,6 +16,7 @@ class ModelAPI_AttributeReference;
 class ModelAPI_AttributeRefAttr;
 class ModelAPI_AttributeRefList;
 class ModelAPI_AttributeBoolean;
+class ModelAPI_AttributeString;
 class ModelAPI_Document;
 class ModelAPI_Attribute;
 class GeomAPI_Shape;
@@ -48,6 +49,8 @@ class MODELAPI_EXPORT ModelAPI_Data
   virtual boost::shared_ptr<ModelAPI_AttributeRefList> reflist(const std::string& theID) = 0;
   /// Returns the attribute that contains boolean value
   virtual boost::shared_ptr<ModelAPI_AttributeBoolean> boolean(const std::string& theID) = 0;
+  /// Returns the attribute that contains boolean value
+  virtual boost::shared_ptr<ModelAPI_AttributeString> string(const std::string& theID) = 0;
 
   /// Returns the generic attribute by identifier
   /// \param theID identifier of the attribute