Salome HOME
Issue #2027 Sketcher Trim Feature
[modules/shaper.git] / src / SketchPlugin / Test / TestTrimCircle.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 SketchConstraintParallelId = 'SketchConstraintParallel'
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 model.end()
128
129 #assert(model.checkPythonDump())