Salome HOME
Tests for parameter creation, referencing and use added.
[modules/shaper.git] / src / ParametersPlugin / Test / TestParameterCreation.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
26 __updated__ = "2015-04-27"
27
28 aSession = ModelAPI_Session.get()
29 aDocument = aSession.moduleDocument()
30 #=========================================================================
31 # Creation of a sketch
32 #=========================================================================
33 aSession.startOperation()
34 aSketchCommonFeature = aDocument.addFeature("Sketch")
35 aSketchFeature = featureToCompositeFeature(aSketchCommonFeature)
36 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
37 origin.setValue(0, 0, 0)
38 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
39 dirx.setValue(1, 0, 0)
40 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
41 norm.setValue(0, 0, 1)
42 aSession.finishOperation()
43 #=========================================================================
44 # Create several parameters.
45 # 1. Basic parameter definition:
46 #    x1 = 150.0, y1 = 50.0, cr1 = 100.0, cl = 250.0;
47 # 2. Check referencing between parameters:
48 #    x2 = x1 + 100.0, y2 = y1/2.
49 # 3. Check math module
50 #    tm = 2 * pi
51 #=========================================================================
52 ltNames = ["x1", "y1", "cr1", "cl1"]
53 ltExpressions = ["150.", "50.", "100.", "250."]
54 dtParams = {}
55 aSession.startOperation()
56 for name, expr in zip(ltNames, ltExpressions):
57     aParam = aDocument.addFeature("Parameter")
58     aParamName = aParam.string("variable")
59     aParamName.setValue(name)
60     aParamExpr = aParam.string("expression")
61     aParamExpr.setValue(expr)
62     dtParams[name] = aParam
63 aSession.finishOperation()
64 assert (len(dtParams) == len(ltNames))
65 # Check results
66 for name, expr in zip(ltNames, ltExpressions):
67     aParam = dtParams[name]
68     aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
69     assert(aResultAttr.data())
70     assert(aResultAttr.data().real("Value"))
71     aResultValue = aResultAttr.data().real("Value").value()
72     print aResultValue, " == ", float(expr)
73     assert(aResultValue == float(expr))
74
75 # Check referencing between parameters
76 aSession.startOperation()
77 ltNames = ["x2", "y2"]
78 ltExpressions = ["x1 + 100.0", "y1/2."]
79 aSession.startOperation()
80 for name, expr in zip(ltNames, ltExpressions):
81     aParam = aDocument.addFeature("Parameter")
82     aParamName = aParam.string("variable")
83     aParamName.setValue(name)
84     aParamExpr = aParam.string("expression")
85     aParamExpr.setValue(expr)
86     dtParams[name] = aParam
87 aSession.finishOperation()
88
89 aParam = dtParams["x2"]
90 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
91 assert(aResultAttr.data())
92 assert(aResultAttr.data().real("Value"))
93 aX2Value = aResultAttr.data().real("Value").value()
94 assert (aX2Value == 250.)
95 aParam = dtParams["y2"]
96 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
97 assert(aResultAttr.data())
98 assert(aResultAttr.data().real("Value"))
99 aY2Value = aResultAttr.data().real("Value").value()
100 assert (aY2Value == 25.)
101 # check math
102 aSession.startOperation()
103 aParam = aDocument.addFeature("Parameter")
104 aParamName = aParam.string("variable")
105 aParamName.setValue("tm")
106 aParamExpr = aParam.string("expression")
107 aParamExpr.setValue("round(2 * pi, 6)")
108 aSession.finishOperation()
109 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
110 assert(aResultAttr.data())
111 assert(aResultAttr.data().real("Value"))
112 aTmValue = aResultAttr.data().real("Value").value()
113 assert (aTmValue == round(2 * math.pi, 6))
114 #=========================================================================
115 # Use parameters to set radius of a circle :
116 # 1. Create a circle (250., 250), r = 25.
117 # 2. Set a 'cr1' as text value of radius attribute
118 #=========================================================================
119 aSession.startOperation()
120 aSketchCircle = aSketchFeature.addFeature("SketchCircle")
121 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
122 aRadiusAttr = aSketchCircle.real("CircleRadius")
123 anCircleCentr.setValue(250., 250)
124 aRadiusAttr.setValue(25.)
125 aSession.finishOperation()
126 # Apply parameter
127 aSession.startOperation()
128 aRadiusAttr.setText("cr1")
129 aSession.finishOperation()
130 assert(aRadiusAttr.value() == 100.)
131 #=========================================================================
132 # Use parameters for a length constraint on a line:
133 # 1. Create a line A(10., 10.) - B(-10., -10.)
134 # 2. Create a length constraint, l = 100;
135 # 3. Set a 'cl1' as text value of length attribute
136 #=========================================================================
137 aSession.startOperation()
138 aSketchLine = aSketchFeature.addFeature("SketchLine")
139 aLineStartPoint = geomDataAPI_Point2D(aSketchLine.attribute("StartPoint"))
140 aLineEndPoint = geomDataAPI_Point2D(aSketchLine.attribute("EndPoint"))
141 aLineStartPoint.setValue(10., 10.)
142 aLineEndPoint.setValue(-10., -10.)
143 aSession.finishOperation()
144 # Length constraint
145 aSession.startOperation()
146 aLengthConstraint = aSketchFeature.addFeature("SketchConstraintLength")
147 refattrA = aLengthConstraint.refattr("ConstraintEntityA")
148 refattrA.setObject(modelAPI_ResultConstruction(aSketchLine.firstResult()))
149 aLengthConstraint.execute()
150 aSession.finishOperation()
151
152 # Apply parameter
153 aSession.startOperation()
154 aLengthAttr = aLengthConstraint.real("ConstraintValue")
155 aLengthAttr.setText("cl1")
156 aSession.finishOperation()
157 assert(aLengthAttr.value() == 250.)
158 #=========================================================================
159 # End of test
160 #=========================================================================