Salome HOME
Porting to SALOME 9.1.0.
[modules/shaper.git] / src / ParametersPlugin / Test / TestParameterCreation.py
1 ## Copyright (C) 2014-2017  CEA/DEN, EDF R&D
2 ##
3 ## This library is free software; you can redistribute it and/or
4 ## modify it under the terms of the GNU Lesser General Public
5 ## License as published by the Free Software Foundation; either
6 ## version 2.1 of the License, or (at your option) any later version.
7 ##
8 ## This library is distributed in the hope that it will be useful,
9 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
10 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 ## Lesser General Public License for more details.
12 ##
13 ## You should have received a copy of the GNU Lesser General Public
14 ## License along with this library; if not, write to the Free Software
15 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 ##
17 ## See http:##www.salome-platform.org/ or
18 ## email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
19 ##
20
21 """
22     TestParameterCreation.py
23
24     class ParametersPlugin_Parameter
25     static const std::string MY_PARAMETER_ID("Parameter");
26     static const std::string MY_VARIABLE_ID("variable");
27     static const std::string MY_EXPRESSION_ID("expression");
28
29     data()->addAttribute(ParametersPlugin_Parameter::VARIABLE_ID(),
30                          ModelAPI_AttributeString::typeId());
31     data()->addAttribute(ParametersPlugin_Parameter::EXPRESSION_ID(),
32                          ModelAPI_AttributeString::typeId());
33
34     class ModelAPI_ResultParameter
35     static const std::string MY_VALUE_ID("Value");
36     static const std::string MY_VALUE_ID("State");
37 """
38
39 #=========================================================================
40 # Initialization of the test
41 #=========================================================================
42 from GeomDataAPI import *
43 from ModelAPI import *
44 import math
45
46 __updated__ = "2015-04-27"
47
48 aSession = ModelAPI_Session.get()
49 aDocument = aSession.moduleDocument()
50 #=========================================================================
51 # Creation of a sketch
52 #=========================================================================
53 aSession.startOperation()
54 aSketchCommonFeature = aDocument.addFeature("Sketch")
55 aSketchFeature = featureToCompositeFeature(aSketchCommonFeature)
56 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
57 origin.setValue(0, 0, 0)
58 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
59 dirx.setValue(1, 0, 0)
60 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
61 norm.setValue(0, 0, 1)
62 aSession.finishOperation()
63 #=========================================================================
64 # Create several parameters.
65 # 1. Basic parameter definition:
66 #    x1 = 150.0, y1 = 50.0, cr1 = 100.0, cl = 250.0;
67 # 2. Check referencing between parameters:
68 #    x2 = x1 + 100.0, y2 = y1/2.
69 # 3. Check math module
70 #    tm = 2 * pi
71 #=========================================================================
72 ltNames = ["x1", "y1", "cr1", "cl1"]
73 ltExpressions = ["150.", "50.", "100.", "250."]
74 dtParams = {}
75 aSession.startOperation()
76 for name, expr in zip(ltNames, ltExpressions):
77     aParam = aDocument.addFeature("Parameter")
78     aParamName = aParam.string("variable")
79     aParamName.setValue(name)
80     aParamExpr = aParam.string("expression")
81     aParamExpr.setValue(expr)
82     dtParams[name] = aParam
83 aSession.finishOperation()
84 assert (len(dtParams) == len(ltNames))
85 # Check results
86 for name, expr in zip(ltNames, ltExpressions):
87     aParam = dtParams[name]
88     aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
89     assert(aResultAttr.data())
90     assert(aResultAttr.data().real("Value"))
91     aResultValue = aResultAttr.data().real("Value").value()
92     print(aResultValue, " == ", float(expr))
93     assert(aResultValue == float(expr))
94
95 # Check referencing between parameters
96 aSession.startOperation()
97 ltNames = ["x2", "y2"]
98 ltExpressions = ["x1 + 100.0", "y1/2."]
99 aSession.startOperation()
100 for name, expr in zip(ltNames, ltExpressions):
101     aParam = aDocument.addFeature("Parameter")
102     aParamName = aParam.string("variable")
103     aParamName.setValue(name)
104     aParamExpr = aParam.string("expression")
105     aParamExpr.setValue(expr)
106     dtParams[name] = aParam
107 aSession.finishOperation()
108
109 aParam = dtParams["x2"]
110 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
111 assert(aResultAttr.data())
112 assert(aResultAttr.data().real("Value"))
113 aX2Value = aResultAttr.data().real("Value").value()
114 assert (aX2Value == 250.)
115 aParam = dtParams["y2"]
116 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
117 assert(aResultAttr.data())
118 assert(aResultAttr.data().real("Value"))
119 aY2Value = aResultAttr.data().real("Value").value()
120 assert (aY2Value == 25.)
121 # check math
122 aSession.startOperation()
123 aParam = aDocument.addFeature("Parameter")
124 aParamName = aParam.string("variable")
125 aParamName.setValue("tm")
126 aParamExpr = aParam.string("expression")
127 aParamExpr.setValue("round(2 * pi, 6)")
128 aSession.finishOperation()
129 aResultAttr = modelAPI_ResultParameter(aParam.firstResult())
130 assert(aResultAttr.data())
131 assert(aResultAttr.data().real("Value"))
132 aTmValue = aResultAttr.data().real("Value").value()
133 assert (aTmValue == round(2 * math.pi, 6))
134 #=========================================================================
135 # Use parameters to set radius of a circle :
136 # 1. Create a circle (250., 250), r = 25.
137 # 2. Create a radius constraint and set 'cr1' as text value of constraint
138 #=========================================================================
139 aSession.startOperation()
140 aSketchCircle = aSketchFeature.addFeature("SketchCircle")
141 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("circle_center"))
142 aRadiusAttr = aSketchCircle.real("circle_radius")
143 anCircleCentr.setValue(250., 250)
144 aRadiusAttr.setValue(25.)
145 aSession.finishOperation()
146 # Apply parameter
147 aSession.startOperation()
148 aRadiusConstraint = aSketchFeature.addFeature("SketchConstraintRadius")
149 refattrA = aRadiusConstraint.refattr("ConstraintEntityA")
150 refattrA.setObject(modelAPI_ResultConstruction(aSketchCircle.lastResult()))
151 aRadiusConstrAttr = aRadiusConstraint.real("ConstraintValue")
152 aRadiusConstrAttr.setText("cr1")
153 aRadiusConstraint.execute()
154 aSession.finishOperation()
155 assert(aRadiusAttr.value() == 100.)
156 #=========================================================================
157 # Use parameters for a length constraint on a line:
158 # 1. Create a line A(10., 10.) - B(-10., -10.)
159 # 2. Create a length constraint, l = 100;
160 # 3. Set a 'cl1' as text value of length attribute
161 #=========================================================================
162 aSession.startOperation()
163 aSketchLine = aSketchFeature.addFeature("SketchLine")
164 aLineStartPoint = geomDataAPI_Point2D(aSketchLine.attribute("StartPoint"))
165 aLineEndPoint = geomDataAPI_Point2D(aSketchLine.attribute("EndPoint"))
166 aLineStartPoint.setValue(10., 10.)
167 aLineEndPoint.setValue(-10., -10.)
168 aSession.finishOperation()
169 # Length constraint
170 aSession.startOperation()
171 aLengthConstraint = aSketchFeature.addFeature("SketchConstraintLength")
172 refattrA = aLengthConstraint.refattr("ConstraintEntityA")
173 refattrA.setObject(modelAPI_ResultConstruction(aSketchLine.firstResult()))
174 aLengthConstraint.execute()
175 aSession.finishOperation()
176
177 # Apply parameter
178 aSession.startOperation()
179 aLengthAttr = aLengthConstraint.real("ConstraintValue")
180 aLengthAttr.setText("cl1")
181 aSession.finishOperation()
182 assert(aLengthAttr.value() == 250.)
183 #=========================================================================
184 # End of test
185 #=========================================================================
186
187 from salome.shaper import model
188 assert(model.checkPythonDump())