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 *
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()
54 def createParameters(self):
55 ltNames = ["x1", "y1", "x2"]
56 ltExpressions = ["150.", "200.", "x1 + y1 + 100.0"]
58 for name, expr in zip(ltNames, ltExpressions):
59 self.aSession.startOperation()
60 aParam = self.aDocument.addFeature("Parameter")
61 aParamName = aParam.string("variable")
62 aParamName.setValue(name)
63 aParamExpr = aParam.string("expression")
64 aParamExpr.setValue(expr)
65 self.dtParams[name] = aParam
66 self.aSession.finishOperation()
67 self.assertEqual(len(self.dtParams), len(ltNames))
69 aParam = self.dtParams["x2"]
70 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
71 self.assertEqual(aResultAttr.data().real("Value").value(), 450.)
73 def createFeature(self):
74 self.aSession.startOperation()
75 aSketchCommonFeature = self.aDocument.addFeature("Sketch")
76 aSketchFeature = featureToCompositeFeature(aSketchCommonFeature)
77 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
78 origin.setValue(0, 0, 0)
79 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
80 dirx.setValue(1, 0, 0)
81 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
82 norm.setValue(0, 0, 1)
83 aSketchCircle = aSketchFeature.addFeature("SketchCircle")
84 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
85 aRadiusAttr = aSketchCircle.real("CircleRadius")
86 anCircleCentr.setValue(10., 20.)
87 aRadiusAttr.setValue(10.)
88 self.aSession.finishOperation()
90 self.anCircleCentr = anCircleCentr
91 self.aRadiusAttr = aRadiusAttr
93 # constraints to fix circle position and radius
94 self.aSession.startOperation()
96 aDistanceConstraint1 = aSketchFeature.addFeature("SketchConstraintDistance")
97 refattrA = aDistanceConstraint1.refattr("ConstraintEntityA")
98 refattrA.setAttr(anCircleCentr)
99 refattrB = aDistanceConstraint1.refattr("ConstraintEntityB")
100 anOY = aSketchFeature.addFeature("SketchLine")
101 aStartPoint = geomDataAPI_Point2D(anOY.attribute("StartPoint"))
102 anEndPoint = geomDataAPI_Point2D(anOY.attribute("EndPoint"))
103 aStartPoint.setValue(0., 0.)
104 anEndPoint.SetValue(0., 100.)
105 anOY.selection("External").selectSubShape("EDGE", "OY")
106 refattrB.setObject(modelAPI_ResultConstruction(anOY.firstResult()))
107 valueX = aDistanceConstraint1.real("ConstraintValue")
108 valueX.setText("x1 + 10.0")
109 aDistanceConstraint1.execute();
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 anOX.selection("External").selectSubShape("EDGE", "OX")
121 refattrB.setObject(modelAPI_ResultConstruction(anOX.firstResult()))
122 valueY = aDistanceConstraint2.real("ConstraintValue")
123 valueY.setText("x1 + 20.0")
124 aDistanceConstraint2.execute();
126 aRadiusConstraint = aSketchFeature.addFeature("SketchConstraintRadius")
127 refattrA = aRadiusConstraint.refattr("ConstraintEntityA")
128 refattrA.setObject(modelAPI_ResultConstruction(aSketchCircle.lastResult()))
129 aRadiusConstrAttr = aRadiusConstraint.real("ConstraintValue")
130 aRadiusConstrAttr.setText("x1")
131 aRadiusConstraint.execute()
132 self.aSession.finishOperation()
134 self.aCircleCenterX = valueX
135 self.aCircleCenterY = valueY
136 sel.aCircleRadius = aRadiusConstraintAttr
138 self.assertEqual(self.anCircleCentr.x(), 160.)
139 self.assertEqual(self.anCircleCentr.y(), 170.)
140 self.assertEqual(aRadiusAttr.value(), 150.)
142 def test_rename(self):
144 aParam = self.dtParams["x1"]
145 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
146 self.aSession.startOperation()
147 aResultAttr.data().setName("a1")
148 self.aSession.finishOperation()
150 # Check rename in the parameter
151 self.assertEqual(aParam.name(), "a1")
152 self.assertEqual(aParam.string("variable").value(), "a1")
153 self.assertEqual(aResultAttr.data().name(), "a1")
154 # Check rename in references
155 aParam = self.dtParams["x2"]
156 self.assertEqual(aParam.string("expression").value(), "a1 + y1 + 100.0")
157 # Check rename in the feature
158 self.assertEqual(self.aCircleCenterX.text(), "a1 + 10.0")
159 self.assertEqual(self.aCircleCenterY.text(), "a1 + 20.0")
160 self.assertEqual(self.aCircleRadius.text(), "a1")
162 self.assertEqual(self.anCircleCentr.x(), 160.)
163 self.assertEqual(self.anCircleCentr.y(), 170.)
164 self.assertEqual(self.aRadiusAttr.value(), 150.)
166 def test_rename_not_unique(self):
167 # Rename to not unique name
168 aParam = self.dtParams["x1"]
169 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
170 self.aSession.startOperation()
171 aResultAttr.data().setName("y1")
172 self.aSession.finishOperation()
173 # Check rename in the parameter (Expected: not renamed)
174 self.assertEqual(aParam.name(), "x1")
175 self.assertEqual(aParam.string("variable").value(), "x1")
176 self.assertEqual(aResultAttr.data().name(), "x1")
177 # Check rename in references (Expected: not renamed)
178 aParam = self.dtParams["x2"]
179 self.assertEqual(aParam.string("expression").value(), "x1 + y1 + 100.0")
180 # Check rename in the feature (Expected: not renamed)
181 self.assertEqual(self.aCircleCenterX.text(), "x1 + 10.0")
182 self.assertEqual(self.aCircleCenterY.text(), "x1 + 20.0")
183 self.assertEqual(self.aCircleRadius.text(), "x1")
185 self.assertEqual(self.anCircleCentr.x(), 160.)
186 self.assertEqual(self.anCircleCentr.y(), 170.)
187 self.assertEqual(self.aRadiusAttr.value(), 150.)
189 if __name__ == '__main__':
191 #=========================================================================
193 #=========================================================================