2 TestParameterCreation.py
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");
9 data()->addAttribute(ParametersPlugin_Parameter::VARIABLE_ID(),
10 ModelAPI_AttributeString::typeId());
11 data()->addAttribute(ParametersPlugin_Parameter::EXPRESSION_ID(),
12 ModelAPI_AttributeString::typeId());
14 class ModelAPI_ResultParameter
15 static const std::string MY_VALUE_ID("Value");
16 static const std::string MY_VALUE_ID("State");
19 #=========================================================================
20 # Initialization of the test
21 #=========================================================================
22 from GeomDataAPI import *
23 from ModelAPI import *
26 from salome.shaper import model
28 __updated__ = "2015-04-27"
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
40 # 4. Check renaming to not unique name
42 #=========================================================================
43 class TestParameterRename(unittest.TestCase):
45 self.aSession = ModelAPI_Session.get()
46 self.aDocument = self.aSession.moduleDocument()
47 self.createParameters()
51 #assert(model.checkPythonDump())
52 #self.aSession.closeAll()
55 def createParameters(self):
56 ltNames = ["x1", "y1", "x2"]
57 ltExpressions = ["150.", "200.", "x1 + y1 + 100.0"]
59 for name, expr in zip(ltNames, ltExpressions):
60 self.aSession.startOperation()
61 aParam = self.aDocument.addFeature("Parameter")
62 aParamName = aParam.string("variable")
63 aParamName.setValue(name)
64 aParamExpr = aParam.string("expression")
65 aParamExpr.setValue(expr)
66 self.dtParams[name] = aParam
67 self.aSession.finishOperation()
68 self.assertEqual(len(self.dtParams), len(ltNames))
70 aParam = self.dtParams["x2"]
71 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
72 self.assertEqual(aResultAttr.data().real("Value").value(), 450.)
74 def createFeature(self):
75 self.aSession.startOperation()
76 aSketchCommonFeature = self.aDocument.addFeature("Sketch")
77 aSketchFeature = featureToCompositeFeature(aSketchCommonFeature)
78 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
79 origin.setValue(0, 0, 0)
80 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
81 dirx.setValue(1, 0, 0)
82 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
83 norm.setValue(0, 0, 1)
84 aSketchCircle = aSketchFeature.addFeature("SketchCircle")
85 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("circle_center"))
86 aRadiusAttr = aSketchCircle.real("circle_radius")
87 anCircleCentr.setValue(10., 20.)
88 aRadiusAttr.setValue(10.)
89 self.aSession.finishOperation()
91 self.anCircleCentr = anCircleCentr
92 self.aRadiusAttr = aRadiusAttr
94 # constraints to fix circle position and radius
95 self.aSession.startOperation()
97 aDistanceConstraint1 = aSketchFeature.addFeature("SketchConstraintDistance")
98 refattrA = aDistanceConstraint1.refattr("ConstraintEntityA")
99 refattrA.setAttr(anCircleCentr)
100 refattrB = aDistanceConstraint1.refattr("ConstraintEntityB")
101 anOY = aSketchFeature.addFeature("SketchLine")
102 aStartPoint = geomDataAPI_Point2D(anOY.attribute("StartPoint"))
103 anEndPoint = geomDataAPI_Point2D(anOY.attribute("EndPoint"))
104 aStartPoint.setValue(0., 0.)
105 anEndPoint.setValue(0., 100.)
106 anOYRes = modelAPI_Result(self.aDocument.objectByName("Construction", "OY"))
107 anOY.selection("External").setValue(anOYRes, anOYRes.shape())
109 refattrB.setObject(modelAPI_ResultConstruction(anOY.firstResult()))
110 valueX = aDistanceConstraint1.real("ConstraintValue")
111 valueX.setText("x1 + 10.0")
112 aDistanceConstraint1.execute();
114 aDistanceConstraint2 = aSketchFeature.addFeature("SketchConstraintDistance")
115 refattrA = aDistanceConstraint2.refattr("ConstraintEntityA")
116 refattrA.setAttr(anCircleCentr)
117 refattrB = aDistanceConstraint2.refattr("ConstraintEntityB")
118 anOX = aSketchFeature.addFeature("SketchLine")
119 aStartPoint = geomDataAPI_Point2D(anOX.attribute("StartPoint"))
120 anEndPoint = geomDataAPI_Point2D(anOX.attribute("EndPoint"))
121 aStartPoint.setValue(0., 0.)
122 anEndPoint.setValue(100., 0.)
123 anOXRes = modelAPI_Result(self.aDocument.objectByName("Construction", "OX"))
124 anOX.selection("External").setValue(anOXRes, anOXRes.shape())
126 refattrB.setObject(modelAPI_ResultConstruction(anOX.firstResult()))
127 valueY = aDistanceConstraint2.real("ConstraintValue")
128 valueY.setText("x1 + 20.0")
129 aDistanceConstraint2.execute();
131 aRadiusConstraint = aSketchFeature.addFeature("SketchConstraintRadius")
132 refattrA = aRadiusConstraint.refattr("ConstraintEntityA")
133 refattrA.setObject(modelAPI_ResultConstruction(aSketchCircle.lastResult()))
134 aRadiusConstrAttr = aRadiusConstraint.real("ConstraintValue")
135 aRadiusConstrAttr.setText("x1")
136 aRadiusConstraint.execute()
137 self.aSession.finishOperation()
139 self.aCircleCenterX = valueX
140 self.aCircleCenterY = valueY
141 self.aCircleRadius = aRadiusConstrAttr
143 self.assertEqual(self.anCircleCentr.x(), 160.)
144 self.assertEqual(self.anCircleCentr.y(), 170.)
145 self.assertEqual(aRadiusAttr.value(), 150.)
147 def test_rename(self):
149 aParam = self.dtParams["x1"]
150 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
151 self.aSession.startOperation()
152 aResultAttr.data().setName("a1")
153 self.aSession.finishOperation()
155 # Check rename in the parameter
156 self.assertEqual(aParam.name(), "a1")
157 self.assertEqual(aParam.string("variable").value(), "a1")
158 self.assertEqual(aResultAttr.data().name(), "a1")
159 # Check rename in references
160 aParam = self.dtParams["x2"]
161 self.assertEqual(aParam.string("expression").value(), "a1 + y1 + 100.0")
162 # Check rename in the feature
163 self.assertEqual(self.aCircleCenterX.text(), "a1 + 10.0")
164 self.assertEqual(self.aCircleCenterY.text(), "a1 + 20.0")
165 self.assertEqual(self.aCircleRadius.text(), "a1")
167 self.assertEqual(self.anCircleCentr.x(), 160.)
168 self.assertEqual(self.anCircleCentr.y(), 170.)
169 self.assertEqual(self.aRadiusAttr.value(), 150.)
171 def test_rename_not_unique(self):
172 # Rename to not unique name
173 aParam = self.dtParams["x1"]
175 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
176 self.aSession.startOperation() # don't finish operation until feature is valid (real case)
177 aResultAttr.data().setName("y1")
178 # Check rename in the parameter (Expected: renamed, but invalid)
179 self.assertEqual(aParam.name(), "y1")
180 validators = ModelAPI_Session.get().validators()
181 self.assertEqual(validators.validate(aParamX1), False)
182 # Check rename in references (Expected: not renamed)
183 aParam = self.dtParams["x2"]
184 self.assertEqual(aParam.string("expression").value(), "x1 + y1 + 100.0")
185 # Check rename in the feature (Expected: not renamed)
186 self.assertEqual(self.aCircleCenterX.text(), "x1 + 10.0")
187 self.assertEqual(self.aCircleCenterY.text(), "x1 + 20.0")
188 self.assertEqual(self.aCircleRadius.text(), "x1")
190 self.assertEqual(self.anCircleCentr.x(), 160.)
191 self.assertEqual(self.anCircleCentr.y(), 170.)
192 self.assertEqual(self.aRadiusAttr.value(), 150.)
194 # rename to the correct one, but new
195 aResultAttr.data().setName("xx1")
196 self.aSession.finishOperation() # feature becomes valid
197 # Check rename in the parameter (Expected: renamed)
198 self.assertEqual(validators.validate(aParamX1), True)
199 self.assertEqual(aParamX1.name(), "xx1")
200 self.assertEqual(aParamX1.error(), "")
201 # Check rename in references (Expected: renamed)
202 aParam = self.dtParams["x2"]
203 self.assertEqual(aParam.string("expression").value(), "xx1 + y1 + 100.0")
204 # Check rename in the feature (Expected: renamed)
205 self.assertEqual(self.aCircleCenterX.text(), "xx1 + 10.0")
206 self.assertEqual(self.aCircleCenterY.text(), "xx1 + 20.0")
207 self.assertEqual(self.aCircleRadius.text(), "xx1")
209 self.assertEqual(self.anCircleCentr.x(), 160.)
210 self.assertEqual(self.anCircleCentr.y(), 170.)
211 self.assertEqual(self.aRadiusAttr.value(), 150.)
213 if __name__ == '__main__':
214 unittest.main(exit=False)
215 #=========================================================================
217 #=========================================================================