Salome HOME
Adjust test cases according to redesigned Arc and Circle features
[modules/shaper.git] / src / SketchPlugin / Test / TestConstraintEqual.py
1 """
2     TestConstraintEqual.py
3     Unit test of SketchPlugin_ConstraintEqual class
4         
5     SketchPlugin_ConstraintEqual
6         static const std::string MY_CONSTRAINT_EQAUL_ID("SketchConstraintEqual");
7         data()->addAttribute(SketchPlugin_Constraint::ENTITY_A(), ModelAPI_AttributeRefAttr::typeId());
8         data()->addAttribute(SketchPlugin_Constraint::ENTITY_B(), ModelAPI_AttributeRefAttr::typeId());
9
10 """
11 from GeomDataAPI import *
12 from ModelAPI import *
13 import math
14 from salome.shaper import model
15
16 #=========================================================================
17 # Initialization of the test
18 #=========================================================================
19
20 __updated__ = "2015-03-16"
21
22 #=========================================================================
23 # Auxiliary functions
24 #=========================================================================
25 def externalSketch(theDoc):
26     aSketchFeature = featureToCompositeFeature(theDoc.addFeature("Sketch"))
27     origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
28     origin.setValue(0, 0, 0)
29     dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
30     dirx.setValue(1, 0, 0)
31     norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
32     norm.setValue(0, 0, 1)
33     # add circle defined by 3 points
34     circle = aSketchFeature.addFeature("SketchMacroCircle")
35     circle.string("circle_type").setValue("circle_type_by_three_points")
36     geomDataAPI_Point2D(circle.attribute("first_point")).setValue(-40., 50.)
37     geomDataAPI_Point2D(circle.attribute("second_point")).setValue(-50., 60.)
38     geomDataAPI_Point2D(circle.attribute("third_point")).setValue(-60., 50.)
39     # add line
40     line = aSketchFeature.addFeature("SketchLine")
41     lineStart = geomDataAPI_Point2D(line.attribute("StartPoint"))
42     lineEnd = geomDataAPI_Point2D(line.attribute("EndPoint"))
43     lineStart.setValue(-40., 35.)
44     lineEnd.setValue(-60., 25.)
45
46 def lineLength(theLine):
47     aLineStart = geomDataAPI_Point2D(theLine.attribute("StartPoint"))
48     aLineEnd = geomDataAPI_Point2D(theLine.attribute("EndPoint"))
49     aVecX = aLineStart.x() - aLineEnd.x()
50     aVecY = aLineStart.y() - aLineEnd.y()
51     return math.hypot(aVecX, aVecY)
52
53
54 #=========================================================================
55 # Start of test
56 #=========================================================================
57 aSession = ModelAPI_Session.get()
58 aDocument = aSession.moduleDocument()
59 #=========================================================================
60 # Creation external sketch
61 #=========================================================================
62 aSession.startOperation()
63 externalSketch(aDocument)
64 aSession.finishOperation()
65 #=========================================================================
66 # Creation of a sketch
67 #=========================================================================
68 aSession.startOperation()
69 aSketchCommonFeature = aDocument.addFeature("Sketch")
70 aSketchFeature = featureToCompositeFeature(aSketchCommonFeature)
71 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
72 origin.setValue(0, 0, 0)
73 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
74 dirx.setValue(1, 0, 0)
75 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
76 norm.setValue(0, 0, 1)
77 aSession.finishOperation()
78 #=========================================================================
79 # Creation of an arc and a circle
80 #=========================================================================
81 aSession.startOperation()
82 aSketchArc = aSketchFeature.addFeature("SketchArc")
83 anArcCentr = geomDataAPI_Point2D(aSketchArc.attribute("center_point"))
84 anArcCentr.setValue(10., 10.)
85 anArcStartPoint = geomDataAPI_Point2D(aSketchArc.attribute("start_point"))
86 anArcStartPoint.setValue(0., 50.)
87 anArcEndPoint = geomDataAPI_Point2D(aSketchArc.attribute("end_point"))
88 anArcEndPoint.setValue(50., 0.)
89 aSession.finishOperation()
90 assert (model.dof(aSketchFeature) == 5)
91 # Circle
92 aSession.startOperation()
93 aSketchCircle = aSketchFeature.addFeature("SketchCircle")
94 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("circle_center"))
95 aCircleRadius = aSketchCircle.real("circle_radius")
96 anCircleCentr.setValue(-25., -25.)
97 aCircleRadius.setValue(25.)
98 aSession.finishOperation()
99 assert (model.dof(aSketchFeature) == 8)
100 #=========================================================================
101 # A constraint to make equal radii of arc and circle
102 #=========================================================================
103 aSession.startOperation()
104 aConstraintEqRad = aSketchFeature.addFeature("SketchConstraintEqual")
105 aRefObjectA = aConstraintEqRad.refattr("ConstraintEntityA")
106 aRefObjectB = aConstraintEqRad.refattr("ConstraintEntityB")
107 aResultA = modelAPI_ResultConstruction(aSketchArc.lastResult())
108 aResultB = modelAPI_ResultConstruction(aSketchCircle.lastResult())
109 assert (aResultA is not None)
110 assert (aResultB is not None)
111 aRefObjectA.setObject(aResultA)
112 aRefObjectB.setObject(aResultB)
113 aConstraintEqRad.execute()
114 aSession.finishOperation()
115 aCircRadius = aCircleRadius.value();
116 anArcVecX = anArcStartPoint.x() - anArcCentr.x()
117 anArcVecY = anArcStartPoint.y() - anArcCentr.y()
118 anArcRadius = math.sqrt(anArcVecX**2 + anArcVecY**2)
119 assert (math.fabs(aCircRadius - anArcRadius) <= 1.e-10)
120 assert (model.dof(aSketchFeature) == 7)
121 #=========================================================================
122 # A constraint to make equal radii of arc and external circle
123 #=========================================================================
124 aSession.startOperation()
125 anExtCircle = aSketchFeature.addFeature("SketchCircle")
126 anExtCircleCenter = geomDataAPI_Point2D(anExtCircle.attribute("circle_center"))
127 anExtCircleRadius = anExtCircle.real("circle_radius")
128 anExtCircleCenter.setValue(-50., 50.)
129 anExtCircleRadius.setValue(10.)
130 anExtCircle.selection("External").selectSubShape("EDGE", "Sketch_1/Edge-SketchCircle_1_2")
131 aSession.finishOperation()
132 assert (model.dof(aSketchFeature) == 7)
133 aSession.startOperation()
134 aConstraintEqRad2 = aSketchFeature.addFeature("SketchConstraintEqual")
135 aRefObjectA = aConstraintEqRad2.refattr("ConstraintEntityA")
136 aRefObjectB = aConstraintEqRad2.refattr("ConstraintEntityB")
137 aRefObjectA.setObject(aSketchCircle.lastResult())
138 aRefObjectB.setObject(anExtCircle.lastResult())
139 aSession.finishOperation()
140 assert (math.fabs(anExtCircleRadius.value() - aCircleRadius.value()) < 1.e-10)
141 anArcVecX = anArcStartPoint.x() - anArcCentr.x()
142 anArcVecY = anArcStartPoint.y() - anArcCentr.y()
143 anArcRadius = math.sqrt(anArcVecX**2 + anArcVecY**2)
144 assert (math.fabs(anExtCircleRadius.value() - anArcRadius) <= 1.e-10)
145 assert (model.dof(aSketchFeature) == 6)
146
147 #=========================================================================
148 # Creation of two different lines
149 #=========================================================================
150 # First Line
151 aSession.startOperation()
152 aSketchLine1 = aSketchFeature.addFeature("SketchLine")
153 aLine1StartPoint = geomDataAPI_Point2D(aSketchLine1.attribute("StartPoint"))
154 aLine1EndPoint = geomDataAPI_Point2D(aSketchLine1.attribute("EndPoint"))
155 aLine1StartPoint.setValue(0., 15.)
156 aLine1EndPoint.setValue(20., 25.)
157 aSession.finishOperation()
158 # Second Line
159 aSession.startOperation()
160 aSketchLine2 = aSketchFeature.addFeature("SketchLine")
161 aLine2StartPoint = geomDataAPI_Point2D(aSketchLine2.attribute("StartPoint"))
162 aLine2EndPoint = geomDataAPI_Point2D(aSketchLine2.attribute("EndPoint"))
163 aLine2StartPoint.setValue(0., 0.)
164 aLine2EndPoint.setValue(-1., 10.)
165 aSession.finishOperation()
166 assert (model.dof(aSketchFeature) == 14)
167 #=========================================================================
168 # A constraint to make equal lengths of lines
169 #=========================================================================
170 aSession.startOperation()
171 aConstraintEqLen = aSketchFeature.addFeature("SketchConstraintEqual")
172 aRefObjectA = aConstraintEqLen.refattr("ConstraintEntityA")
173 aRefObjectB = aConstraintEqLen.refattr("ConstraintEntityB")
174 aResultA = modelAPI_ResultConstruction(aSketchLine1.firstResult())
175 aResultB = modelAPI_ResultConstruction(aSketchLine2.firstResult())
176 assert (aResultA is not None)
177 assert (aResultB is not None)
178 aRefObjectA.setObject(aResultA)
179 aRefObjectB.setObject(aResultB)
180 aConstraintEqLen.execute()
181 aSession.finishOperation()
182 aLine1Len = lineLength(aSketchLine1)
183 aLine2Len = lineLength(aSketchLine2)
184 assert (math.fabs(aLine1Len - aLine2Len) < 1.e-10)
185 assert (model.dof(aSketchFeature) == 13)
186 #=========================================================================
187 # A constraint to make equal length of line with external line
188 #=========================================================================
189 aSession.startOperation()
190 anExtLine = aSketchFeature.addFeature("SketchLine")
191 anExtLineStart = geomDataAPI_Point2D(anExtLine.attribute("StartPoint"))
192 anExtLineEnd = geomDataAPI_Point2D(anExtLine.attribute("EndPoint"))
193 anExtLineStart.setValue(-40., 35.)
194 anExtLineEnd.setValue(-60., 25.)
195 anExtLine.selection("External").selectSubShape("EDGE", "Sketch_1/Edge-SketchLine_1")
196 anExtLineLen = lineLength(anExtLine)
197 aSession.finishOperation()
198 assert (model.dof(aSketchFeature) == 13)
199 aSession.startOperation()
200 aConstraintEqLen2 = aSketchFeature.addFeature("SketchConstraintEqual")
201 aRefObjectA = aConstraintEqLen2.refattr("ConstraintEntityA")
202 aRefObjectB = aConstraintEqLen2.refattr("ConstraintEntityB")
203 aRefObjectA.setObject(anExtLine.lastResult())
204 aRefObjectB.setObject(aSketchLine2.lastResult())
205 aSession.finishOperation()
206 aLine1Len = lineLength(aSketchLine1)
207 aLine2Len = lineLength(aSketchLine2)
208 assert (math.fabs(aLine1Len - anExtLineLen) < 1.e-10)
209 assert (math.fabs(aLine2Len - anExtLineLen) < 1.e-10)
210 assert (model.dof(aSketchFeature) == 12)
211 #=========================================================================
212 # Remove costraint to check the DOF
213 #=========================================================================
214 aSession.startOperation()
215 aDocument.removeFeature(aConstraintEqLen2)
216 aSession.finishOperation()
217 assert (model.dof(aSketchFeature) == 13)
218 #=========================================================================
219 # End of test
220 #=========================================================================
221
222 assert(model.checkPythonDump())