Salome HOME
Merge branch 'master' into Dev_1.1.0
[modules/shaper.git] / src / SketchPlugin / Test / TestConstraintTangent.py
1 """
2     TestConstraintTangent.py
3     Unit test of SketchPlugin_ConstraintTangent class
4         
5     SketchPlugin_ConstraintTangent
6         static const std::string MY_CONSTRAINT_TANGENT_ID("SketchConstraintTangent");
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 GeomAPI import *
13 from ModelAPI import *
14 import math
15 #=========================================================================
16 # Initialization of the test
17 #=========================================================================
18
19 __updated__ = "2015-03-17"
20
21 aSession = ModelAPI_Session.get()
22 aDocument = aSession.moduleDocument()
23 #=========================================================================
24 # Creation of a sketch
25 #=========================================================================
26 aSession.startOperation()
27 aSketchCommonFeature = aDocument.addFeature("Sketch")
28 aSketchFeature = modelAPI_CompositeFeature(aSketchCommonFeature)
29 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
30 origin.setValue(0, 0, 0)
31 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
32 dirx.setValue(1, 0, 0)
33 diry = geomDataAPI_Dir(aSketchFeature.attribute("DirY"))
34 diry.setValue(0, 1, 0)
35 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
36 norm.setValue(0, 0, 1)
37 aSession.finishOperation()
38 #=========================================================================
39 # TEST 1. Arc-line tangency
40 #=========================================================================
41 # Creation of an arc and two lines
42 #=========================================================================
43 # Arc
44 aSession.startOperation()
45 aSketchArc1 = aSketchFeature.addFeature("SketchArc")
46 anArcCentr = geomDataAPI_Point2D(aSketchArc1.attribute("ArcCenter"))
47 anArcCentr.setValue(10., 10.)
48 anArcStartPoint = geomDataAPI_Point2D(aSketchArc1.attribute("ArcStartPoint"))
49 anArcStartPoint.setValue(0., 50.)
50 anArcEndPoint = geomDataAPI_Point2D(aSketchArc1.attribute("ArcEndPoint"))
51 anArcEndPoint.setValue(50., 0.)
52 aSession.finishOperation()
53 # Line 1
54 aSession.startOperation()
55 aSketchLine1 = aSketchFeature.addFeature("SketchLine")
56 aLine1StartPoint = geomDataAPI_Point2D(aSketchLine1.attribute("StartPoint"))
57 aLine1EndPoint = geomDataAPI_Point2D(aSketchLine1.attribute("EndPoint"))
58 aLine1StartPoint.setValue(0., 50.)
59 aLine1EndPoint.setValue(0., 100.)
60 aSession.finishOperation()
61 # Line 2
62 aSession.startOperation()
63 aSketchLine2 = aSketchFeature.addFeature("SketchLine")
64 aLine2StartPoint = geomDataAPI_Point2D(aSketchLine2.attribute("StartPoint"))
65 aLine2EndPoint = geomDataAPI_Point2D(aSketchLine2.attribute("EndPoint"))
66 aLine2StartPoint.setValue(50., 0.)
67 aLine2EndPoint.setValue(100., 0.)
68 aSession.finishOperation()
69 #=========================================================================
70 # Link arc points and lines points by the coincidence constraint
71 #=========================================================================
72 aSession.startOperation()
73 aConstraint = aSketchFeature.addFeature("SketchConstraintCoincidence")
74 reflistA = aConstraint.refattr("ConstraintEntityA")
75 reflistB = aConstraint.refattr("ConstraintEntityB")
76 reflistA.setAttr(anArcStartPoint)
77 reflistB.setAttr(aLine1StartPoint)
78 aConstraint.execute()
79 aSession.finishOperation()
80 aSession.startOperation()
81 aConstraint = aSketchFeature.addFeature("SketchConstraintCoincidence")
82 reflistA = aConstraint.refattr("ConstraintEntityA")
83 reflistB = aConstraint.refattr("ConstraintEntityB")
84 reflistA.setAttr(anArcEndPoint)
85 reflistB.setAttr(aLine2StartPoint)
86 aConstraint.execute()
87 aSession.finishOperation()
88 #=========================================================================
89 # Add tangency constraint and check correctness
90 #=========================================================================
91 aSession.startOperation()
92 aTangency = aSketchFeature.addFeature("SketchConstraintTangent")
93 aRefObjectA = aTangency.refattr("ConstraintEntityA")
94 aRefObjectB = aTangency.refattr("ConstraintEntityB")
95 anObjectA = modelAPI_ResultConstruction(aSketchArc1.lastResult())
96 anObjectB = modelAPI_ResultConstruction(aSketchLine1.firstResult())
97 assert (anObjectA is not None)
98 assert (anObjectB is not None)
99 aRefObjectA.setObject(anObjectA)
100 aRefObjectB.setObject(anObjectB)
101 aTangency.execute()
102 aSession.finishOperation()
103 anArcVecX = anArcStartPoint.x() - anArcCentr.x()
104 anArcVecY = anArcStartPoint.y() - anArcCentr.y()
105 aLineVecX = aLine1EndPoint.x() - aLine1StartPoint.x()
106 aLineVecY = aLine1EndPoint.y() - aLine1StartPoint.y()
107 aDot = anArcVecX * aLineVecX + anArcVecY * aLineVecY
108 assert(math.fabs(aDot) <= 1.e-12)
109 #=========================================================================
110 # Add tangency constraint for arc and second line and check correctness
111 #=========================================================================
112 aSession.startOperation()
113 aTangency = aSketchFeature.addFeature("SketchConstraintTangent")
114 aRefObjectA = aTangency.refattr("ConstraintEntityA")
115 aRefObjectB = aTangency.refattr("ConstraintEntityB")
116 anObjectA = modelAPI_ResultConstruction(aSketchArc1.lastResult())
117 anObjectB = modelAPI_ResultConstruction(aSketchLine2.firstResult())
118 assert (anObjectA is not None)
119 assert (anObjectB is not None)
120 aRefObjectA.setObject(anObjectA)
121 aRefObjectB.setObject(anObjectB)
122 aTangency.execute()
123 aSession.finishOperation()
124 anArcVecX = anArcEndPoint.x() - anArcCentr.x()
125 anArcVecY = anArcEndPoint.y() - anArcCentr.y()
126 aLineVecX = aLine2EndPoint.x() - aLine2StartPoint.x()
127 aLineVecY = aLine2EndPoint.y() - aLine2StartPoint.y()
128 aDot = anArcVecX * aLineVecX + anArcVecY * aLineVecY
129 assert(math.fabs(aDot) <= 1.e-12)
130
131 #=========================================================================
132 # TEST 2. Arc-arc tangency
133 #=========================================================================
134 # Creation of arcs
135 #=========================================================================
136 # Arc 1
137 aSession.startOperation()
138 aSketchArc1 = aSketchFeature.addFeature("SketchArc")
139 anArc1Centr = geomDataAPI_Point2D(aSketchArc1.attribute("ArcCenter"))
140 anArc1Centr.setValue(10., 10.)
141 anArc1StartPoint = geomDataAPI_Point2D(aSketchArc1.attribute("ArcStartPoint"))
142 anArc1StartPoint.setValue(50., 0.)
143 anArc1EndPoint = geomDataAPI_Point2D(aSketchArc1.attribute("ArcEndPoint"))
144 anArc1EndPoint.setValue(0., 50.)
145 aSession.finishOperation()
146 # Arc 2
147 aSession.startOperation()
148 aSketchArc2 = aSketchFeature.addFeature("SketchArc")
149 anArc2Centr = geomDataAPI_Point2D(aSketchArc2.attribute("ArcCenter"))
150 anArc2Centr.setValue(-10., 10.)
151 anArc2StartPoint = geomDataAPI_Point2D(aSketchArc2.attribute("ArcStartPoint"))
152 anArc2StartPoint.setValue(0., 50.)
153 anArc2EndPoint = geomDataAPI_Point2D(aSketchArc2.attribute("ArcEndPoint"))
154 anArc2EndPoint.setValue(-50., 0.)
155 aSession.finishOperation()
156 #=========================================================================
157 # Link points of arcs by the coincidence constraint
158 #=========================================================================
159 aSession.startOperation()
160 aConstraint = aSketchFeature.addFeature("SketchConstraintCoincidence")
161 reflistA = aConstraint.refattr("ConstraintEntityA")
162 reflistB = aConstraint.refattr("ConstraintEntityB")
163 reflistA.setAttr(anArc1EndPoint)
164 reflistB.setAttr(anArc2StartPoint)
165 aConstraint.execute()
166 aSession.finishOperation()
167 #=========================================================================
168 # Add tangency constraint and check correctness
169 #=========================================================================
170 aSession.startOperation()
171 aTangency = aSketchFeature.addFeature("SketchConstraintTangent")
172 aRefObjectA = aTangency.refattr("ConstraintEntityA")
173 aRefObjectB = aTangency.refattr("ConstraintEntityB")
174 anObjectA = modelAPI_ResultConstruction(aSketchArc1.lastResult())
175 anObjectB = modelAPI_ResultConstruction(aSketchArc2.lastResult())
176 assert (anObjectA is not None)
177 assert (anObjectB is not None)
178 aRefObjectA.setObject(anObjectA)
179 aRefObjectB.setObject(anObjectB)
180 aTangency.execute()
181 aSession.finishOperation()
182 anArc1VecX = anArc1EndPoint.x() - anArc1Centr.x()
183 anArc1VecY = anArc1EndPoint.y() - anArc1Centr.y()
184 anArc2VecX = anArc2StartPoint.x() - anArc2Centr.x()
185 anArc2VecY = anArc2StartPoint.y() - anArc2Centr.y()
186 aCross = anArc1VecX * anArc2VecY - anArc1VecY * anArc2VecX
187 assert(math.fabs(aCross) <= 1.e-12)
188
189 #=========================================================================
190 # TEST 3. Tangency between non-connected objects should be wrong
191 #=========================================================================
192 # Store data
193 aLine2StartPointPrev = (aLine2StartPoint.x(), aLine2StartPoint.y())
194 aLine2EndPointPrev = (aLine2EndPoint.x(), aLine2EndPoint.y())
195 anArc2CenterPrev = (anArc2Centr.x(), anArc2Centr.y())
196 anArc2StartPointPrev = (anArc2StartPoint.x(), anArc2StartPoint.y())
197 anArc2EndPointPrev = (anArc2EndPoint.x(), anArc2EndPoint.y())
198 #=========================================================================
199 # Add tangency between arc2 and line2
200 #=========================================================================
201 aSession.startOperation()
202 aTangency = aSketchFeature.addFeature("SketchConstraintTangent")
203 aRefObjectA = aTangency.refattr("ConstraintEntityA")
204 aRefObjectB = aTangency.refattr("ConstraintEntityB")
205 anObjectA = modelAPI_ResultConstruction(aSketchArc2.lastResult())
206 anObjectB = modelAPI_ResultConstruction(aSketchLine2.firstResult())
207 assert (anObjectA is not None)
208 assert (anObjectB is not None)
209 aRefObjectA.setObject(anObjectA)
210 aRefObjectB.setObject(anObjectB)
211 aTangency.execute()
212 aSession.finishOperation()
213 # Check that nothing is changed
214 aLine2StartPointNew = (aLine2StartPoint.x(), aLine2StartPoint.y())
215 aLine2EndPointNew = (aLine2EndPoint.x(), aLine2EndPoint.y())
216 anArc2CenterNew = (anArc2Centr.x(), anArc2Centr.y())
217 anArc2StartPointNew = (anArc2StartPoint.x(), anArc2StartPoint.y())
218 anArc2EndPointNew = (anArc2EndPoint.x(), anArc2EndPoint.y())
219 assert(aLine2StartPointNew == aLine2StartPointPrev)
220 assert(aLine2EndPointNew == aLine2EndPointPrev)
221 assert(anArc2CenterNew == anArc2CenterPrev)
222 assert(anArc2StartPointNew == anArc2StartPointPrev)
223 assert(anArc2EndPointNew == anArc2EndPointPrev)
224 #=========================================================================
225 # End of test
226 #=========================================================================