]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Fix the point by XYZ coordinates python export/dump
authormpv <mpv@opencascade.com>
Wed, 11 Jul 2018 13:30:02 +0000 (16:30 +0300)
committermpv <mpv@opencascade.com>
Wed, 11 Jul 2018 13:30:15 +0000 (16:30 +0300)
12 files changed:
src/ConstructionAPI/ConstructionAPI_Point.cpp
src/ConstructionAPI/ConstructionAPI_Point.h
src/ConstructionPlugin/ConstructionPlugin_Point.cpp
src/ConstructionPlugin/ConstructionPlugin_Point.h
src/GeomData/GeomData_Point.cpp
src/GeomData/GeomData_Point.h
src/GeomDataAPI/GeomDataAPI_Point.h
src/ModelAPI/Test/TestUndoRedo.py
src/ModelHighAPI/ModelHighAPI_Double.cpp
src/ModelHighAPI/ModelHighAPI_Double.h
src/ModelHighAPI/ModelHighAPI_Tools.cpp
src/ModelHighAPI/ModelHighAPI_Tools.h

index 7d536c9fd01ae0d093a4ed35dbabb837c6e41afe..7dcca33b67b9938706c226b5c0b2ba9cc292e9f2 100644 (file)
@@ -139,6 +139,7 @@ void ConstructionAPI_Point::setByXYZ(const ModelHighAPI_Double& theX,
   //fillAttribute(theZ, myz);
 
   fillAttribute(ConstructionPlugin_Point::CREATION_METHOD_BY_XYZ(), mycreationMethod);
+  fillAttribute(theX, theY, theZ, mypoint);
 
   execute(false);
 }
@@ -265,7 +266,7 @@ void ConstructionAPI_Point::dump(ModelHighAPI_Dumper& theDumper) const
 
   if (aMeth == "" || // default is XYZ
       aMeth == ConstructionPlugin_Point::CREATION_METHOD_BY_XYZ()) {
-    theDumper << point() << ")" << std::endl;
+    theDumper << point();
   } else if (aMeth == ConstructionPlugin_Point::CREATION_METHOD_BY_INTERSECTION()) {
     const std::string anIntersectionType = intersectionType()->value();
     if (anIntersectionType == ConstructionPlugin_Point::INTERSECTION_TYPE_BY_LINES())
index 2cd8934e52357f40e5b306f4557cc8db023ff092..32e2878d58b7a2e1344f5948c7322a330a87118d 100644 (file)
@@ -81,7 +81,7 @@ public:
   virtual ~ConstructionAPI_Point();
 
   INTERFACE_25(ConstructionPlugin_Point::ID(),
-    point, ConstructionPlugin_Point::point3d(),
+    point, ConstructionPlugin_Point::POINT3D(),
     GeomDataAPI_Point, /** Point attribute */,
     creationMethod, ConstructionPlugin_Point::CREATION_METHOD(),
     ModelAPI_AttributeString, /** Creation method */,
index 03c12caff77e0acd965610dd9381c15543e3dd2c..bb59c3d550acee82307197fd38c07ec3a372ee5b 100644 (file)
@@ -52,7 +52,7 @@ const std::string& ConstructionPlugin_Point::getKind()
 //==================================================================================================
 void ConstructionPlugin_Point::initAttributes()
 {
-  data()->addAttribute(point3d(), GeomDataAPI_Point::typeId());
+  data()->addAttribute(POINT3D(), GeomDataAPI_Point::typeId());
 
   data()->addAttribute(CREATION_METHOD(), ModelAPI_AttributeString::typeId());
 
@@ -162,7 +162,7 @@ bool ConstructionPlugin_Point::customisePresentation(ResultPtr theResult,
 std::shared_ptr<GeomAPI_Vertex> ConstructionPlugin_Point::createByXYZ()
 {
   AttributePointPtr aPoint =
-    std::dynamic_pointer_cast<GeomDataAPI_Point>(data()->attribute(point3d()));
+    std::dynamic_pointer_cast<GeomDataAPI_Point>(data()->attribute(POINT3D()));
   return GeomAlgoAPI_PointBuilder::vertex(aPoint->x(), aPoint->y(), aPoint->z());
 }
 
index e04696cbcde36535f002c1f9ea813852e0639606..bf63d8baf4ecd85f324217a0b60ee62ce6f3e1db 100644 (file)
@@ -89,7 +89,7 @@ public:
     return MY_CREATION_METHOD_ID;
   }
 
-  inline static const std::string& point3d()
+  inline static const std::string& POINT3D()
   {
     static const std::string POINT_ATTR("point3d");
     return POINT_ATTR;
index 7e59e15ed1bc1f3b181983b5abe7cceb79ed70fa..cb6b8d47df05f5fe8cae9e3d482dee6c104a8c84 100644 (file)
@@ -80,6 +80,38 @@ double GeomData_Point::z() const
   return myExpression[2]->value();
 }
 
+void GeomData_Point::setX(const double theX)
+{
+  if (!myIsInitialized) {
+    setCalculatedValue(theX, 0, 0);
+  } else if (x() != theX) {
+    myExpression[0]->setValue(theX);
+    owner()->data()->sendAttributeUpdated(this);
+  }
+}
+
+void GeomData_Point::setY(const double theY)
+{
+  if (!myIsInitialized) {
+    setCalculatedValue(0, theY, 0);
+  } else if (y() != theY) {
+    myExpression[1]->setValue(theY);
+    owner()->data()->sendAttributeUpdated(this);
+  }
+}
+
+void GeomData_Point::setZ(const double theZ)
+{
+  if (!myIsInitialized) {
+    setCalculatedValue(0, 0, theZ);
+  }
+  else if (z() != theZ) {
+    myExpression[2]->setValue(theZ);
+    owner()->data()->sendAttributeUpdated(this);
+  }
+}
+
+
 std::shared_ptr<GeomAPI_Pnt> GeomData_Point::pnt()
 {
   std::shared_ptr<GeomAPI_Pnt> aResult(new GeomAPI_Pnt(x(), y(), z()));
@@ -100,6 +132,48 @@ void GeomData_Point::setText(const std::string& theX,
   }
 }
 
+void GeomData_Point::setTextX(const std::string& theX)
+{
+  if (!myIsInitialized) {
+    static const std::string aDefaultText = "0";
+    setText(theX, aDefaultText, aDefaultText);
+  }
+  else if (textX() != theX) {
+    myExpression[0]->setText(theX);
+    // Send it to evaluator to convert into the double and store in the attribute
+    ModelAPI_AttributeEvalMessage::send(owner()->data()->attribute(id()), this);
+    owner()->data()->sendAttributeUpdated(this);
+  }
+}
+
+void GeomData_Point::setTextY(const std::string& theY)
+{
+  if (!myIsInitialized) {
+    static const std::string aDefaultText = "0";
+    setText(aDefaultText, theY, aDefaultText);
+  }
+  else if (textY() != theY) {
+    myExpression[1]->setText(theY);
+    // Send it to evaluator to convert into the double and store in the attribute
+    ModelAPI_AttributeEvalMessage::send(owner()->data()->attribute(id()), this);
+    owner()->data()->sendAttributeUpdated(this);
+  }
+}
+
+void GeomData_Point::setTextZ(const std::string& theZ)
+{
+  if (!myIsInitialized) {
+    static const std::string aDefaultText = "0";
+    setText(aDefaultText, aDefaultText, theZ);
+  }
+  else if (textZ() != theZ) {
+    myExpression[2]->setText(theZ);
+    // Send it to evaluator to convert into the double and store in the attribute
+    ModelAPI_AttributeEvalMessage::send(owner()->data()->attribute(id()), this);
+    owner()->data()->sendAttributeUpdated(this);
+  }
+}
+
 std::string GeomData_Point::textX()
 {
   return myExpression[0]->text();
index ee2de40a5062a64e3b6c7a1b992eac8e6f9cc493..dbb6baf4510285fbeae520e2284a995a152670f7 100644 (file)
@@ -49,6 +49,13 @@ class GeomData_Point : public GeomDataAPI_Point
   GEOMDATA_EXPORT virtual double y() const;
   /// Returns the Z double value
   GEOMDATA_EXPORT virtual double z() const;
+  /// Defines the X coordinate value
+  GEOMDATA_EXPORT void setX(const double theX);
+  /// Defines the Y coordinate value
+  GEOMDATA_EXPORT void setY(const double theY);
+  /// Defines the Z coordinate value
+  GEOMDATA_EXPORT void setZ(const double theZ);
+
   /// Returns the 3D point
   GEOMDATA_EXPORT virtual std::shared_ptr<GeomAPI_Pnt> pnt();
 
@@ -60,6 +67,12 @@ class GeomData_Point : public GeomDataAPI_Point
   GEOMDATA_EXPORT virtual void setText(const std::string& theX,
                                        const std::string& theY,
                                        const std::string& theZ);
+  /// Defines the X text value
+  GEOMDATA_EXPORT virtual void setTextX(const std::string& theX);
+  /// Defines the Y text value
+  GEOMDATA_EXPORT virtual void setTextY(const std::string& theY);
+  /// Defines the Z text value
+  GEOMDATA_EXPORT virtual void setTextZ(const std::string& theZ);
 
   /// Returns the X text value
   GEOMDATA_EXPORT virtual std::string textX();
index 69238cb4bb62128c896f636cce1f8b91f8685357..d47e3048d6aead1f5d29553e27a698353bcd57d2 100644 (file)
@@ -55,11 +55,25 @@ class GeomDataAPI_Point : public ModelAPI_Attribute
   GEOMDATAAPI_EXPORT virtual
     void setCalculatedValue(const double theX, const double theY, const double theZ) = 0;
 
+  /// Defines the X coordinate value
+  GEOMDATAAPI_EXPORT virtual void setX(const double theX) = 0;
+  /// Defines the Y coordinate value
+  GEOMDATAAPI_EXPORT virtual void setY(const double theY) = 0;
+  /// Defines the Z coordinate value
+  GEOMDATAAPI_EXPORT virtual void setZ(const double theZ) = 0;
+
   /// Defines the text values
   GEOMDATAAPI_EXPORT virtual void setText(const std::string& theX,
                                           const std::string& theY,
                                           const std::string& theZ) = 0;
 
+  /// Defines the X text value
+  GEOMDATAAPI_EXPORT virtual void setTextX(const std::string& theX) = 0;
+  /// Defines the Y text value
+  GEOMDATAAPI_EXPORT virtual void setTextY(const std::string& theY) = 0;
+  /// Defines the Z text value
+  GEOMDATAAPI_EXPORT virtual void setTextZ(const std::string& theZ) = 0;
+
   /// Returns the text value for X
   GEOMDATAAPI_EXPORT virtual std::string textX() = 0;
   /// Returns the text value for Y
index 5f748b665f9164a2869d6491cfef6a7db078956d..68f29eec2b8945f019dc42320d67b72384e3af04 100644 (file)
@@ -19,6 +19,8 @@
 ##
 
 from ModelAPI import *
+from GeomDataAPI import *
+
 aSession = ModelAPI_Session.get()
 aDoc = aSession.moduleDocument()
 assert(not aSession.canUndo())
@@ -26,12 +28,7 @@ assert(not aSession.canRedo())
 
 aSession.startOperation()
 aFeature = aDoc.addFeature("Point")
-# Since validators are introduced we have to initialize all
-# the feature's attributes
-# aFeature.string("creation_method").setValue("by_xyz")
-aFeature.real("x").setValue(1.)
-aFeature.real("y").setValue(-1.)
-aFeature.real("z").setValue(0.)
+geomDataAPI_Point(aFeature.attribute("point3d")).setValue(1., -1., 0.)
 aFeature.string("creation_method").setValue("by_xyz")
 aFeatureName = aFeature.name()
 # "2" is because Origin is the first point
index 72667c3ec727f5abdcf32d8556d0bce5943bbc20..aa02d3cdb6fb8a724f6456e1c588ee84a12575c0 100644 (file)
@@ -21,6 +21,7 @@
 #include "ModelHighAPI_Double.h"
 
 #include <ModelAPI_AttributeDouble.h>
+#include <GeomDataAPI_Point.h>
 //--------------------------------------------------------------------------------------
 
 //--------------------------------------------------------------------------------------
@@ -55,3 +56,23 @@ void ModelHighAPI_Double::fillAttribute(
     case VT_STRING: theAttribute->setText(myString); return;
   }
 }
+
+void ModelHighAPI_Double::fillAttribute(
+  const std::shared_ptr<GeomDataAPI_Point> & thePoint,
+  const ModelHighAPI_Double & theX,
+  const ModelHighAPI_Double & theY,
+  const ModelHighAPI_Double & theZ) const
+{
+  switch (theX.myVariantType) {
+  case VT_DOUBLE: thePoint->setX(theX.myDouble); break;
+  case VT_STRING: thePoint->setTextX(theX.myString);
+  }
+  switch (theY.myVariantType) {
+  case VT_DOUBLE: thePoint->setY(theY.myDouble); break;
+  case VT_STRING: thePoint->setTextY(theY.myString);
+  }
+  switch (theZ.myVariantType) {
+  case VT_DOUBLE: thePoint->setZ(theZ.myDouble); break;
+  case VT_STRING: thePoint->setTextZ(theZ.myString);
+  }
+}
index 59686dfa23f97789fb916a6882db8fff7cc9b16e..f7997c904b46e3406ab1f112887beb402a64e32b 100644 (file)
@@ -28,6 +28,7 @@
 #include <string>
 //--------------------------------------------------------------------------------------
 class ModelAPI_AttributeDouble;
+class GeomDataAPI_Point;
 //--------------------------------------------------------------------------------------
 /**\class ModelHighAPI_Double
  * \ingroup CPPHighAPI
@@ -53,6 +54,13 @@ public:
   MODELHIGHAPI_EXPORT
   virtual void fillAttribute(const std::shared_ptr<ModelAPI_AttributeDouble> & theAttribute) const;
 
+  /// Sets the zero-based coordinates of a point
+  MODELHIGHAPI_EXPORT virtual void fillAttribute(
+    const std::shared_ptr<GeomDataAPI_Point> & thePoint,
+    const ModelHighAPI_Double & theX,
+    const ModelHighAPI_Double & theY,
+    const ModelHighAPI_Double & theZ) const;
+
 private:
   enum VariantType { VT_DOUBLE, VT_STRING } myVariantType;
   double myDouble;
index ce7245fba164afd585ffec1eabb1f85f06ab2123..b7b5f1dabdf9b13b5dd191606a3c6aef4d9adbc0 100644 (file)
@@ -239,6 +239,15 @@ void fillAttribute(const std::list<ModelHighAPI_Integer> & theValue,
     theAttribute->setValue(anIndex, it->intValue()); // use only values, no text support in array
 }
 
+void fillAttribute(const ModelHighAPI_Double & theX,
+                   const ModelHighAPI_Double & theY,
+                   const ModelHighAPI_Double & theZ,
+                   const std::shared_ptr<GeomDataAPI_Point> & theAttribute)
+{
+  theX.fillAttribute(theAttribute, theX, theY, theZ);
+}
+
+
 //==================================================================================================
 GeomAPI_Shape::ShapeType shapeTypeByStr(std::string theShapeTypeStr)
 {
index c9d55b1cacfb47030d93a7b8157f641271d6cb99..e3bea33054a4bd87f559ddc20184e10dbd8048fb 100644 (file)
@@ -147,6 +147,12 @@ MODELHIGHAPI_EXPORT
 void fillAttribute(const std::list<ModelHighAPI_Integer> & theValue,
                    const std::shared_ptr<ModelAPI_AttributeIntArray> & theAttribute);
 
+MODELHIGHAPI_EXPORT
+void fillAttribute(const ModelHighAPI_Double & theX,
+                   const ModelHighAPI_Double & theY,
+                   const ModelHighAPI_Double & theZ,
+                   const std::shared_ptr<GeomDataAPI_Point> & theAttribute);
+
 MODELHIGHAPI_EXPORT
 GeomAPI_Shape::ShapeType shapeTypeByStr(std::string theShapeTypeStr);