Salome HOME
b8acec087a8ae2259653f874129ed7716179a926
[modules/shaper.git] / src / SketchPlugin / Test / TestTrimLine.py
1 from salome.shaper import model
2
3 from ModelAPI import *
4 from GeomDataAPI import *
5 from salome.shaper import geom
6 import math
7
8 TOLERANCE = 1.e-7
9
10 SketchPointId = 'SketchPoint'
11 SketchLineId = 'SketchLine'
12 SketchArcId = 'SketchArc'
13 SketchCircleId = 'SketchCircle'
14 SketchConstraintCoincidenceId = 'SketchConstraintCoincidence'
15 SketchConstraintMirrorId = 'SketchConstraintMirror'
16 SketchConstraintTangentId = 'SketchConstraintTangent'
17 SketchConstraintEqualId = 'SketchConstraintEqual'
18
19 model.begin()
20 partSet = model.moduleDocument()
21 Part_1 = model.addPart(partSet)
22 Part_1_doc = Part_1.document()
23
24 # Test1:begin split on circle with coincident point and intersection line : smaller part
25 Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOY"))
26 SketchCircle_1_1 = Sketch_1.addCircle(50, 50, 20)
27 SketchLine_1_1 = Sketch_1.addLine(50, 30, 100, 30)
28 SketchLine_1_2 = Sketch_1.addLine(60, 50, 100, 30)
29
30 SketchConstraintCoincidence_1_1 = Sketch_1.setCoincident(SketchLine_1_1.startPoint(), SketchCircle_1_1.results()[1])
31 SketchConstraintCoincidence_1_2 = Sketch_1.setCoincident(SketchLine_1_1.endPoint(), SketchLine_1_2.endPoint())
32 GeomPoint_1_1 = geom.Pnt2d(60, 35)
33
34 #check number of features before trim
35 Sketch_1_feature = featureToCompositeFeature(Sketch_1.feature())
36 idList_before_1 = []
37 for index in range(Sketch_1_feature.numberOfSubs()):
38   idList_before_1.append(Sketch_1_feature.subFeature(index).getKind())
39 assert(idList_before_1.count(SketchCircleId) == 1)
40 assert(idList_before_1.count(SketchArcId) == 0)
41 assert(idList_before_1.count(SketchLineId) == 2)
42 assert(idList_before_1.count(SketchConstraintCoincidenceId) == 2)
43
44 #perform trim
45 SketchTrim_1_1 = Sketch_1.addTrim(SketchCircle_1_1, GeomPoint_1_1)
46 SketchTrim_1_1.execute()
47 model.do()
48
49 #check number of features after trim
50 SketchFeatures = featureToCompositeFeature(Sketch_1.feature())
51 idList_after_1 = []
52 for SubIndex in range(SketchFeatures.numberOfSubs()):
53     SubFeature = SketchFeatures.subFeature(SubIndex)
54     idList_after_1.append(SubFeature.getKind())
55     if SubFeature.getKind() == SketchArcId:
56       ArcFeature_1 = SubFeature
57
58
59 assert(idList_after_1.count(SketchCircleId) == 0)
60 assert(idList_after_1.count(SketchArcId) == 1)
61 assert(idList_after_1.count(SketchLineId) == 2)
62 assert(idList_after_1.count(SketchConstraintCoincidenceId) == 3)
63
64 #test created arc: it is not inversed, has coincidence to end line point
65 anInversed_1 = ArcFeature_1.boolean("InversedArc").value()
66 assert(anInversed_1 == False)
67 ArcPoint_1 = geomDataAPI_Point2D(ArcFeature_1.attribute("ArcEndPoint"))
68 LinePoint_1 = geomDataAPI_Point2D(SketchLine_1_1.startPoint())
69 aDistance_1 = math.hypot(LinePoint_1.x() - ArcPoint_1.x(), LinePoint_1.y() - ArcPoint_1.y())
70 #print "Distance " + repr(aDistance)
71 assert (math.fabs(aDistance_1) <= TOLERANCE)
72 # Test1:end
73
74
75 # Test2: split on circle with coincident point and intersection line : largest part
76 Sketch_2 = model.addSketch(Part_1_doc, model.defaultPlane("XOY"))
77 move_test_delta_y = 100
78 move_test_delta_x = 0
79 SketchCircle_2_1 = Sketch_2.addCircle(50, 50 + move_test_delta_y, 20)
80 SketchLine_2_1 = Sketch_2.addLine(50, 30 + move_test_delta_y, 100, 30 + move_test_delta_y)
81 SketchLine_2_2 = Sketch_2.addLine(60, 50 + move_test_delta_y, 100, 30 + move_test_delta_y)
82
83 SketchConstraintCoincidence_2_1 = Sketch_2.setCoincident(SketchLine_2_1.startPoint(), SketchCircle_2_1.results()[1])
84 SketchConstraintCoincidence_2_2 = Sketch_2.setCoincident(SketchLine_2_1.endPoint(), SketchLine_2_2.endPoint())
85 GeomPoint_2_1 = geom.Pnt2d(50, 75 + move_test_delta_y)
86
87 #check number of features before trim
88 Sketch_2_feature = featureToCompositeFeature(Sketch_2.feature())
89 idList_before_2 = []
90 for index in range(Sketch_2_feature.numberOfSubs()):
91   idList_before_2.append(Sketch_2_feature.subFeature(index).getKind())
92 assert(idList_before_2.count(SketchCircleId) == 1)
93 assert(idList_before_2.count(SketchArcId) == 0)
94 assert(idList_before_2.count(SketchLineId) == 2)
95 assert(idList_before_2.count(SketchConstraintCoincidenceId) == 2)
96
97 #perform trim
98 SketchTrim_2_1 = Sketch_2.addTrim(SketchCircle_2_1, GeomPoint_2_1)
99 SketchTrim_2_1.execute()
100 model.do()
101
102 #check number of features after trim
103 SketchFeatures = featureToCompositeFeature(Sketch_2.feature())
104 idList_after_2 = []
105 for SubIndex in range(SketchFeatures.numberOfSubs()):
106     SubFeature = SketchFeatures.subFeature(SubIndex)
107     idList_after_2.append(SubFeature.getKind())
108     if SubFeature.getKind() == SketchArcId:
109       ArcFeature_2 = SubFeature
110
111
112 assert(idList_after_2.count(SketchCircleId) == 0)
113 assert(idList_after_2.count(SketchArcId) == 1)
114 assert(idList_after_2.count(SketchLineId) == 2)
115 assert(idList_after_2.count(SketchConstraintCoincidenceId) == 3)
116
117 #test created arc : it is not inversed, has coincidence to start line point
118 anInversed_2 = ArcFeature_2.boolean("InversedArc").value()
119 assert(anInversed_2 == False)
120 ArcPoint_2 = geomDataAPI_Point2D(ArcFeature_2.attribute("ArcStartPoint"))
121 LinePoint_2 = geomDataAPI_Point2D(SketchLine_2_1.startPoint())
122 aDistance_2 = math.hypot(LinePoint_2.x() - ArcPoint_2.x(), LinePoint_2.y() - ArcPoint_2.y())
123 #print "Distance " + repr(aDistance_2)
124 assert (math.fabs(aDistance_2) <= TOLERANCE)
125 # Test2:end
126
127
128 # Test3: constraints to circle
129 Sketch_3 = model.addSketch(Part_1_doc, model.defaultPlane("XOY"))
130 SketchCircle_3_1 = Sketch_3.addCircle(150, 50, 25)
131 SketchLine_3_1 = Sketch_3.addLine(160, 30, 200, 30)
132 SketchLine_3_2 = Sketch_3.addLine(160, 50, 200, 30)
133 SketchLine_3_3 = Sketch_3.addLine(240, 120, 280, 100)
134 SketchCircle_3_2 = Sketch_3.addCircle(150, 120, 20)
135 aSketchPoint_3 = Sketch_3.addPoint(145, 70)
136 SketchLine_3_4 = Sketch_3.addLine(120, 25, 120, 70)
137
138 SketchConstraintCoincidence_3_1 = Sketch_3.setCoincident(SketchLine_3_1.startPoint(), SketchCircle_3_1.results()[1])
139 SketchConstraintCoincidence_3_2 = Sketch_3.setCoincident(SketchLine_3_1.endPoint(), SketchLine_3_2.endPoint())
140 GeomPoint_3_1 = geom.Pnt2d(165, 40)
141
142 #Constraints
143 aConstraint_3_1 = Sketch_3.setDistance(SketchLine_3_1.endPoint(), SketchCircle_3_1.center(), 50)
144 aConstraint_3_2 = Sketch_3.setEqual(SketchCircle_3_1.results()[1], SketchCircle_3_2.results()[1])
145 aConstraint_3_3 = Sketch_3.setRadius(SketchCircle_3_1.results()[1], 25)
146 aConstraint_3_4 = Sketch_3.setCoincident(SketchCircle_3_1.results()[1], aSketchPoint_3.results()[0])
147 aConstraint_3_4 = Sketch_3.setTangent(SketchCircle_3_1.results()[1], SketchLine_3_4.results()[0])
148
149 MirrorObjects_3 = [SketchCircle_3_1.results()[1], SketchCircle_3_2.results()[1]]
150 aConstraint_3_5 = Sketch_3.addMirror(SketchLine_3_3.result(), MirrorObjects_3)
151
152 #check number of features before trim
153 Sketch_3_feature = featureToCompositeFeature(Sketch_3.feature())
154 idList_before_3 = []
155 for index in range(Sketch_3_feature.numberOfSubs()):
156   idList_before_3.append(Sketch_3_feature.subFeature(index).getKind())
157
158 assert(idList_before_3.count(SketchCircleId) == 4)
159 assert(idList_before_3.count(SketchArcId) == 0)
160 assert(idList_before_3.count(SketchLineId) == 4)
161 assert(idList_before_3.count(SketchConstraintCoincidenceId) == 3)
162 assert(idList_before_3.count(SketchConstraintMirrorId) == 1)
163 assert(idList_before_3.count(SketchConstraintTangentId) == 1)
164 assert(idList_before_3.count(SketchConstraintEqualId) == 1)
165
166 #perform trim
167 SketchTrim_3_1 = Sketch_3.addTrim(SketchCircle_3_1, GeomPoint_3_1)
168 SketchTrim_3_1.execute()
169 model.do()
170
171 #check number of features after trim
172 SketchFeatures = featureToCompositeFeature(Sketch_3.feature())
173 idList_after_3 = []
174 for SubIndex in range(SketchFeatures.numberOfSubs()):
175     SubFeature = SketchFeatures.subFeature(SubIndex)
176     idList_after_3.append(SubFeature.getKind())
177
178
179 assert(idList_after_3.count(SketchCircleId) == 3)
180 assert(idList_after_3.count(SketchArcId) == 1)
181 assert(idList_after_3.count(SketchLineId) == 4)
182 assert(idList_after_3.count(SketchConstraintCoincidenceId) == 3)
183 assert(idList_after_3.count(SketchConstraintMirrorId) == 0)
184 assert(idList_after_3.count(SketchConstraintTangentId) == 1)
185 assert(idList_after_3.count(SketchConstraintEqualId) == 1)
186 # Test3:end
187
188
189 model.end()
190
191 #assert(model.checkPythonDump())