Salome HOME
Extension of Parameters interface: to set/get double values of results
authormpv <mpv@opencascade.com>
Wed, 25 Jan 2017 07:25:58 +0000 (10:25 +0300)
committermpv <mpv@opencascade.com>
Wed, 25 Jan 2017 07:25:58 +0000 (10:25 +0300)
src/Model/Model_AttributeBoolean.cpp
src/ParametersAPI/ParametersAPI_Parameter.cpp
src/ParametersAPI/ParametersAPI_Parameter.h
src/PythonAPI/Test/TestSketcherAddArc.py

index f7111f127c63aaabd88ce7b50576a2def0851ec7..666b8bb232cbfb5be1e174d33039a3de8f804bab 100644 (file)
@@ -10,7 +10,7 @@
 
 void Model_AttributeBoolean::setValue(bool theValue)
 {
-  Standard_Boolean aValue = theValue ? Standard_True : Standard_False;
+  Standard_Integer aValue = theValue ? 1 : 0;
   if (!myIsInitialized || myBool->Get() != aValue) {
     if (myBool.IsNull())
       myBool = TDataStd_Integer::Set(myLab, 0);
@@ -21,7 +21,7 @@ void Model_AttributeBoolean::setValue(bool theValue)
 
 bool Model_AttributeBoolean::value()
 {
-  return myIsInitialized && myBool->Get() == Standard_True ;
+  return myIsInitialized && myBool->Get() == 1;
 }
 
 Model_AttributeBoolean::Model_AttributeBoolean(TDF_Label& theLabel)
index b6b9374feaae0314e6353198737177a820e609a7..f4047896ec3e12d79bb6723d5f3ff45264344e5d 100644 (file)
@@ -10,6 +10,7 @@
 //--------------------------------------------------------------------------------------
 #include <ModelHighAPI_Dumper.h>
 #include <ModelHighAPI_Tools.h>
+#include <ModelAPI_ResultParameter.h>
 //--------------------------------------------------------------------------------------
 ParametersAPI_Parameter::ParametersAPI_Parameter(
     const std::shared_ptr<ModelAPI_Feature> & theFeature)
@@ -35,6 +36,22 @@ ParametersAPI_Parameter::ParametersAPI_Parameter(
   }
 }
 
+void ParametersAPI_Parameter::setValue(const double theValue)
+{
+  // convert value to the expression string
+  std::ostringstream aValueStr;
+  aValueStr<<theValue;
+  fillAttribute(aValueStr.str(), expression());
+  execute();
+}
+
+double ParametersAPI_Parameter::value() {
+  ResultParameterPtr aRes =
+    std::dynamic_pointer_cast<ModelAPI_ResultParameter>(feature()->firstResult());
+  // it may raise an exception if result is invalid
+  return aRes->data()->real(ModelAPI_ResultParameter::VALUE())->value();
+}
+
 ParametersAPI_Parameter::~ParametersAPI_Parameter()
 {
 }
index e9122a10777ac836e71788c37279f923a1b3c6f3..82bfce5f04d646a29c62c0c761e4d9eaf9f5e23b 100644 (file)
@@ -47,6 +47,11 @@ public:
               ModelAPI_AttributeString, /** Comment */
   )
 
+  /// Just sets the numeric value to the parameter (it resets the previous expression)
+  PARAMETERSAPI_EXPORT void setValue(const double theValue);
+  /// Returns the current value of the parameter: the expression result.
+  PARAMETERSAPI_EXPORT double value();
+
   /// Dump wrapped feature
   PARAMETERSAPI_EXPORT
   virtual void dump(ModelHighAPI_Dumper& theDumper) const;
index 11e74e46d8bcf60798472086b0576e484a6d7d12..ddd01d97368a9a042d2250bf779012ab1bb3782a 100644 (file)
@@ -7,7 +7,7 @@ from TestSketcher import SketcherTestCase
 
 class SketcherAddArc(SketcherTestCase):
     def test_arc_by_coords(self):
-        arc = self.sketch.addArc(0, 1, 0, 0, 1, 1, 0)
+        arc = self.sketch.addArc(0, 1, 0, 0, 1, 1, False)
         model.do()
         self.assertEqual(arc.startPoint().x(), 0)
         self.assertEqual(arc.startPoint().y(), 0)
@@ -16,15 +16,15 @@ class SketcherAddArc(SketcherTestCase):
         center = geom.Pnt2d(0, 1)
         start = geom.Pnt2d(0, 0)
         end = geom.Pnt2d(1, 1)
-        arc = self.sketch.addArc(center, start, end, 0)
+        arc = self.sketch.addArc(center, start, end, False)
         model.do()
         self.assertEqual(arc.startPoint().x(), 0)
         self.assertEqual(arc.startPoint().y(), 0)
 
     def test_modify_arc(self):
         # Note: arc will modify startPoint and endPoint to be in circle
-        arc = self.sketch.addArc(0, 1, 0, 0, 1, 1, 0)
-        arc.setByCenterStartEnd(0, 0, 1, 1, -1, -1, 0)
+        arc = self.sketch.addArc(0, 1, 0, 0, 1, 1, False)
+        arc.setByCenterStartEnd(0, 0, 1, 1, -1, -1, False)
         model.do()
         self.assertEqual(arc.center().x(), 0)
         self.assertEqual(arc.center().y(), 0)