Salome HOME
Optimization and minor fix of the Filter By Neighbors algorithm.
[modules/shaper.git] / src / SketchPlugin / Test / Test2119.py
1 ## Copyright (C) 2018-20xx  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     Test2119.py
23     Test case for issue #2119 "Sketch lost when creating a tangent constraint"
24 """
25
26 from salome.shaper import model
27
28 from ModelAPI import *
29 from SketchAPI import *
30
31 model.begin()
32 partSet = model.moduleDocument()
33 Part_1 = model.addPart(partSet)
34 Part_1_doc = Part_1.document()
35 model.addParameter(Part_1_doc, "a", "63")
36 model.addParameter(Part_1_doc, "b", "50")
37 model.addParameter(Part_1_doc, "c", "100")
38 Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOZ"))
39 SketchLine_1 = Sketch_1.addLine(-45, 0, 0, 0)
40 SketchLine_2 = Sketch_1.addLine(0, 0, 23.33965093306752, 8.494938217797719)
41 SketchConstraintCoincidence_1 = Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.startPoint())
42 SketchLine_3 = Sketch_1.addLine(33.83092017818969, 6.16907982180411, 40, 0)
43 SketchLine_4 = Sketch_1.addLine(40, 0, 55, 0)
44 SketchConstraintCoincidence_2 = Sketch_1.setCoincident(SketchLine_3.endPoint(), SketchLine_4.startPoint())
45 SketchLine_5 = Sketch_1.addLine(55, 0, 55, 48)
46 SketchConstraintCoincidence_3 = Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_5.startPoint())
47 SketchLine_6 = Sketch_1.addLine(55, 48, 15, 48)
48 SketchConstraintCoincidence_4 = Sketch_1.setCoincident(SketchLine_5.endPoint(), SketchLine_6.startPoint())
49 SketchLine_7 = Sketch_1.addLine(15, 48, 15, 63)
50 SketchConstraintCoincidence_5 = Sketch_1.setCoincident(SketchLine_6.endPoint(), SketchLine_7.startPoint())
51 SketchLine_8 = Sketch_1.addLine(15, 63, -15, 63)
52 SketchConstraintCoincidence_6 = Sketch_1.setCoincident(SketchLine_7.endPoint(), SketchLine_8.startPoint())
53 SketchLine_9 = Sketch_1.addLine(-15, 63, -15, 35)
54 SketchConstraintCoincidence_7 = Sketch_1.setCoincident(SketchLine_8.endPoint(), SketchLine_9.startPoint())
55 SketchConstraintHorizontal_1 = Sketch_1.setHorizontal(SketchLine_1.result())
56 SketchConstraintHorizontal_2 = Sketch_1.setHorizontal(SketchLine_6.result())
57 SketchConstraintHorizontal_3 = Sketch_1.setHorizontal(SketchLine_8.result())
58 SketchConstraintCollinear_1 = Sketch_1.setCollinear(SketchLine_1.result(), SketchLine_4.result())
59 SketchConstraintVertical_1 = Sketch_1.setVertical(SketchLine_5.result())
60 SketchConstraintVertical_2 = Sketch_1.setVertical(SketchLine_9.result())
61 SketchConstraintVertical_3 = Sketch_1.setVertical(SketchLine_7.result())
62 SketchConstraintDistance_1 = Sketch_1.setDistance(SketchLine_3.endPoint(), SketchLine_4.endPoint(), 15, False)
63 SketchConstraintDistance_2 = Sketch_1.setDistance(SketchLine_3.endPoint(), SketchLine_1.endPoint(), 40, False)
64 SketchConstraintDistance_3 = Sketch_1.setDistance(SketchLine_1.startPoint(), SketchLine_4.endPoint(), "c", False)
65 SketchConstraintDistance_4 = Sketch_1.setDistance(SketchLine_8.startPoint(), SketchLine_6.result(), 15, False)
66 SketchConstraintDistance_5 = Sketch_1.setDistance(SketchLine_8.startPoint(), SketchLine_5.result(), 40, False)
67 SketchLine_10 = Sketch_1.addLine(-45, 5, -45, 0)
68 SketchConstraintCoincidence_8 = Sketch_1.setCoincident(SketchLine_1.startPoint(), SketchLine_10.endPoint())
69 SketchConstraintVertical_4 = Sketch_1.setVertical(SketchLine_10.result())
70 SketchConstraintDistance_6 = Sketch_1.setDistance(SketchLine_9.startPoint(), SketchLine_1.result(), "a", False)
71 SketchArc_1 = Sketch_1.addArc(-45, 35, -45, 5, -15, 35, False)
72 SketchConstraintCoincidence_9 = Sketch_1.setCoincident(SketchArc_1.center(), SketchLine_10.result())
73 SketchConstraintCoincidence_10 = Sketch_1.setCoincident(SketchArc_1.startPoint(), SketchLine_10.startPoint())
74 SketchConstraintAngle_1 = Sketch_1.setAngle(SketchLine_3.result(), SketchLine_1.result(), 45)
75 SketchConstraintAngle_2 = Sketch_1.setAngleBackward(SketchLine_2.result(), SketchLine_4.result(), 20)
76 SketchConstraintCoincidence_11 = Sketch_1.setCoincident(SketchArc_1.endPoint(), SketchLine_9.endPoint())
77 SketchConstraintTangent_1 = Sketch_1.setTangent(SketchArc_1.results()[1], SketchLine_9.result())
78 SketchConstraintDistance_7 = Sketch_1.setDistance(SketchArc_1.center(), SketchLine_1.result(), 35, False)
79 SketchConstraintRadius_1 = Sketch_1.setRadius(SketchArc_1.results()[1], 30)
80 SketchArc_2 = Sketch_1.addArc(26.75985236632421, -0.9019879900613652, 33.83092017818969, 6.16907982180411, 23.33965093306752, 8.494938217797719, False)
81 SketchConstraintCoincidence_12 = Sketch_1.setCoincident(SketchArc_2.startPoint(), SketchLine_3.startPoint())
82 SketchConstraintCoincidence_13 = Sketch_1.setCoincident(SketchArc_2.endPoint(), SketchLine_2.endPoint())
83 SketchConstraintTangent_2 = Sketch_1.setTangent(SketchArc_2.results()[1], SketchLine_2.result())
84 SketchConstraintTangent_3 = Sketch_1.setTangent(SketchArc_2.results()[1], SketchLine_3.result())
85 SketchConstraintRadius_2 = Sketch_1.setRadius(SketchArc_2.results()[1], 10)
86 SketchPoint_1 = Sketch_1.addPoint(model.selection("VERTEX", "PartSet/Origin"))
87 SketchConstraintCoincidence_14 = Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchPoint_1.coordinates())
88 model.do()
89 Extrusion_1 = model.addExtrusion(Part_1_doc, [model.selection("FACE", "Sketch_1/Face-SketchLine_1r-SketchLine_2f-SketchArc_2_2r-SketchLine_3f-SketchLine_4f-SketchLine_5f-SketchLine_6f-SketchLine_7f-SketchLine_8f-SketchLine_9f-SketchArc_1_2r-SketchLine_10f")], model.selection(), "b/2", "b/2")
90 Sketch_2 = model.addSketch(Part_1_doc, model.selection("FACE", "Extrusion_1_1/To_Face"))
91 SketchProjection_1 = Sketch_2.addProjection(model.selection("VERTEX", "[Extrusion_1_1/Generated_Face&Sketch_1/SketchLine_9][Extrusion_1_1/Generated_Face&Sketch_1/SketchArc_1_2][Extrusion_1_1/To_Face]"), False)
92 SketchPoint_2 = SketchProjection_1.createdFeature()
93 SketchCircle_1 = Sketch_2.addCircle(-15, 35, 25)
94 SketchConstraintCoincidence_15 = Sketch_2.setCoincident(SketchCircle_1.center(), SketchPoint_2.result())
95 SketchConstraintRadius_3 = Sketch_2.setRadius(SketchCircle_1.results()[1], "50/2")
96 model.do()
97 ExtrusionCut_1 = model.addExtrusionCut(Part_1_doc, [model.selection("WIRE", "Sketch_2/Face-SketchCircle_1_2f_wire")], model.selection(), 0, 13, [model.selection("SOLID", "Extrusion_1_1")])
98 Sketch_3 = model.addSketch(Part_1_doc, model.selection("FACE", "ExtrusionCut_1_1/Modified_Face&ExtrusionCut_1_1/From_Face"))
99 SketchProjection_2 = Sketch_3.addProjection(model.selection("VERTEX", "ExtrusionCut_1_1/Generated_Vertex&ExtrusionCut_1_1/From_Face"), False)
100 SketchPoint_3 = SketchProjection_2.createdFeature()
101 SketchProjection_3 = Sketch_3.addProjection(model.selection("EDGE", "([ExtrusionCut_1_1/Modified_Face&Sketch_1/SketchArc_1_2][ExtrusionCut_1_1/Modified_Face&Sketch_1/SketchLine_9])([Extrusion_1_1/From_Face][ExtrusionCut_1_1/Modified_Face&Sketch_1/SketchLine_9])2([Extrusion_1_1/From_Face][ExtrusionCut_1_1/Modified_Face&Sketch_1/SketchArc_1_2])2([ExtrusionCut_1_1/Modified_Face&Extrusion_1_1/To_Face][ExtrusionCut_1_1/Modified_Face&Sketch_1/SketchLine_9])2"), False)
102 SketchLine_11 = SketchProjection_3.createdFeature()
103 SketchArc_3 = Sketch_3.addArc(-15, 35, -15, 46.0103340429751, -17.02045759563166, 24.17663606626138, True)
104 SketchConstraintCoincidence_16 = Sketch_3.setCoincident(SketchPoint_3.result(), SketchArc_3.center())
105 SketchConstraintCoincidence_17 = Sketch_3.setCoincident(SketchLine_11.result(), SketchArc_3.startPoint())
106 SketchProjection_4 = Sketch_3.addProjection(model.selection("EDGE", "([ExtrusionCut_1_1/Modified_Face&Sketch_1/SketchArc_1_2][ExtrusionCut_1_1/Modified_Face&Sketch_1/SketchLine_9])([Extrusion_1_1/From_Face][ExtrusionCut_1_1/Modified_Face&Sketch_1/SketchLine_9])2([Extrusion_1_1/From_Face][ExtrusionCut_1_1/Modified_Face&Sketch_1/SketchArc_1_2])2([ExtrusionCut_1_1/Modified_Face&Extrusion_1_1/To_Face][ExtrusionCut_1_1/Modified_Face&Sketch_1/SketchArc_1_2])2"), False)
107 SketchArc_4 = SketchProjection_4.createdFeature()
108 SketchConstraintCoincidence_18 = Sketch_3.setCoincident(SketchArc_3.endPoint(), SketchArc_4.results()[1])
109 SketchLine_12 = Sketch_3.addLine(-15, 46.0103340429751, -15, 35)
110 SketchConstraintCoincidence_19 = Sketch_3.setCoincident(SketchArc_3.startPoint(), SketchLine_12.startPoint())
111 SketchArc_5 = Sketch_3.addArc(-24.92022800465918, 31.2515971841183, -15, 35, -17.02045759563166, 24.17663606626138, True)
112 SketchConstraintCoincidence_20 = Sketch_3.setCoincident(SketchAPI_Point(SketchPoint_3).coordinates(), SketchArc_5.startPoint())
113 SketchConstraintCoincidence_21 = Sketch_3.setCoincident(SketchArc_3.endPoint(), SketchArc_5.endPoint())
114 model.do()
115 model.end()
116
117
118 # case 1: undo the error
119 model.begin()
120 aTangent = Sketch_3.setTangent(SketchArc_5.results()[1], SketchArc_4.results()[1])
121 model.do()
122 model.end()
123 model.checkSketchErrorDegenerated(Sketch_3)
124 model.undo()
125 model.checkSketch(Sketch_3)
126
127 # case 2: remove degeneracy-producting constraint
128 model.begin()
129 aTangent = Sketch_3.setTangent(SketchArc_5.results()[1], SketchArc_4.results()[1])
130 model.do()
131 model.checkSketchErrorDegenerated(Sketch_3)
132 Part_1_doc.removeFeature(aTangent.feature())
133 model.do()
134 model.end()
135 model.checkSketch(Sketch_3)
136
137 # case 3: remove degenerated edge
138 model.begin()
139 aTangent = Sketch_3.setTangent(SketchArc_5.results()[1], SketchArc_4.results()[1])
140 model.do()
141 model.checkSketchErrorDegenerated(Sketch_3)
142 ModelAPI.removeFeaturesAndReferences(FeatureSet([SketchArc_5.feature()]))
143 model.do()
144 model.end()
145 model.checkSketch(Sketch_3)
146
147 assert(model.checkPythonDump())