Salome HOME
2eca3f077527b1af01e1acf371052fb6c0220137
[modules/shaper.git] / src / ParametersPlugin / Test / TestParameterChangeValue.py
1 """
2     TestParameterCreation.py
3     
4     class ParametersPlugin_Parameter
5     static const std::string MY_PARAMETER_ID("Parameter");
6     static const std::string MY_VARIABLE_ID("variable");
7     static const std::string MY_EXPRESSION_ID("expression");
8     
9     data()->addAttribute(ParametersPlugin_Parameter::VARIABLE_ID(),
10                          ModelAPI_AttributeString::typeId());
11     data()->addAttribute(ParametersPlugin_Parameter::EXPRESSION_ID(),
12                          ModelAPI_AttributeString::typeId());
13                          
14     class ModelAPI_ResultParameter
15     static const std::string MY_VALUE_ID("Value");
16     static const std::string MY_VALUE_ID("State");
17 """
18
19 #=========================================================================
20 # Initialization of the test
21 #=========================================================================
22 from GeomDataAPI import *
23 from ModelAPI import *
24 import math
25 import unittest
26 from salome.shaper import model
27
28 __updated__ = "2015-04-27"
29
30 #=========================================================================
31 # Create several parameters and a feature.
32 # 1. Basic parameter definition:
33 #    x1 = 150.0, y1 = 200.0
34 # 2. Referencing between parameters:
35 #    x2 = x1 + y1 + 100.0
36 # 3. Referencing in feature SketchCircle
37 #    CircleCenter = (x1 + 10.0, x1 + 20.0), CircleRadius = x1
38 # 3. Change value
39 #    x1 = 200.0
40 #=========================================================================
41 class TestParameterRename(unittest.TestCase):
42     def setUp(self):
43         self.aSession = ModelAPI_Session.get()
44         self.aDocument = self.aSession.moduleDocument()
45         self.createParameters()
46         self.createFeature()
47
48     def tearDown(self):
49         assert(model.checkPythonDump())
50         self.aSession.closeAll()
51
52     def createParameters(self):
53         ltNames = ["x1", "y1", "x2"]
54         ltExpressions = ["150.", "200.", "x1 + y1 + 100.0"]
55         self.dtParams = {}
56         for name, expr in zip(ltNames, ltExpressions):
57             self.aSession.startOperation()
58             aParam = self.aDocument.addFeature("Parameter")
59             aParamName = aParam.string("variable")
60             aParamName.setValue(name)
61             aParamExpr = aParam.string("expression")
62             aParamExpr.setValue(expr)
63             self.dtParams[name] = aParam
64             self.aSession.finishOperation()
65         self.assertEqual(len(self.dtParams), len(ltNames))
66
67         aParam = self.dtParams["x2"]
68         aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
69         self.assertEqual(aResultAttr.data().real("Value").value(), 450.)
70
71     def createFeature(self):
72         self.aSession.startOperation()
73         aSketchCommonFeature = self.aDocument.addFeature("Sketch")
74         aSketchFeature = featureToCompositeFeature(aSketchCommonFeature)
75         origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
76         origin.setValue(0, 0, 0)
77         dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
78         dirx.setValue(1, 0, 0)
79         norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
80         norm.setValue(0, 0, 1)
81         aSketchCircle = aSketchFeature.addFeature("SketchCircle")
82         anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("circle_center"))
83         aRadiusAttr = aSketchCircle.real("circle_radius")
84         anCircleCentr.setValue(10., 20.)
85         aRadiusAttr.setValue(10.)
86         self.aSession.finishOperation()
87
88         self.anCircleCentr = anCircleCentr
89         self.aRadiusAttr = aRadiusAttr
90
91         # constraints to fix circle position and radius
92         self.aSession.startOperation()
93         # fix X coordinate
94         aDistanceConstraint1 = aSketchFeature.addFeature("SketchConstraintDistance")
95         refattrA = aDistanceConstraint1.refattr("ConstraintEntityA")
96         refattrA.setAttr(anCircleCentr)
97         refattrB = aDistanceConstraint1.refattr("ConstraintEntityB")
98         anOY = aSketchFeature.addFeature("SketchLine")
99         aStartPoint = geomDataAPI_Point2D(anOY.attribute("StartPoint"))
100         anEndPoint = geomDataAPI_Point2D(anOY.attribute("EndPoint"))
101         aStartPoint.setValue(0., 0.)
102         anEndPoint.setValue(0., 100.)
103         anOYRes = modelAPI_Result(self.aDocument.objectByName("Construction", "OY"))
104         anOY.selection("External").setValue(anOYRes, anOYRes.shape())
105         anOY.execute()
106         refattrB.setObject(modelAPI_ResultConstruction(anOY.firstResult()))
107         value = aDistanceConstraint1.real("ConstraintValue")
108         value.setText("x1 + 10.0")
109         aDistanceConstraint1.execute();
110         # fix Y coordinate
111         aDistanceConstraint2 = aSketchFeature.addFeature("SketchConstraintDistance")
112         refattrA = aDistanceConstraint2.refattr("ConstraintEntityA")
113         refattrA.setAttr(anCircleCentr)
114         refattrB = aDistanceConstraint2.refattr("ConstraintEntityB")
115         anOX = aSketchFeature.addFeature("SketchLine")
116         aStartPoint = geomDataAPI_Point2D(anOX.attribute("StartPoint"))
117         anEndPoint = geomDataAPI_Point2D(anOX.attribute("EndPoint"))
118         aStartPoint.setValue(0., 0.)
119         anEndPoint.setValue(100., 0.)
120         anOXRes = modelAPI_Result(self.aDocument.objectByName("Construction", "OX"))
121         anOX.selection("External").setValue(anOXRes, anOXRes.shape())
122         anOX.execute()
123         refattrB.setObject(modelAPI_ResultConstruction(anOX.firstResult()))
124         value = aDistanceConstraint2.real("ConstraintValue")
125         value.setText("x1 + 20.0")
126         aDistanceConstraint2.execute();
127         # fix radius
128         aRadiusConstraint = aSketchFeature.addFeature("SketchConstraintRadius")
129         refattrA = aRadiusConstraint.refattr("ConstraintEntityA")
130         refattrA.setObject(modelAPI_ResultConstruction(aSketchCircle.lastResult()))
131         aRadiusConstrAttr = aRadiusConstraint.real("ConstraintValue")
132         aRadiusConstrAttr.setText("x1")
133         aRadiusConstraint.execute()
134         self.aSession.finishOperation()
135
136         self.assertEqual(self.anCircleCentr.x(), 160.)
137         self.assertEqual(self.anCircleCentr.y(), 170.)
138         self.assertEqual(aRadiusAttr.value(), 150.)
139
140     def test_change_value(self):
141         aParam = self.dtParams["x1"]
142         aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
143         self.aSession.startOperation()
144         aParam.string("expression").setValue("200.0")
145         self.aSession.finishOperation()
146
147         # Check value of the parameter 
148         self.assertEqual(aResultAttr.data().real("Value").value(), 200.)
149         # Check value of references
150         aParam = self.dtParams["x2"]
151         aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
152         self.assertEqual(aResultAttr.data().real("Value").value(), 500.)
153         # Check value in the feature
154         self.assertEqual(self.anCircleCentr.x(), 210.)
155         self.assertEqual(self.anCircleCentr.y(), 220.)
156         self.assertEqual(self.aRadiusAttr.value(), 200.)
157
158 if __name__ == '__main__':
159     unittest.main()
160 #=========================================================================
161 # End of test
162 #=========================================================================