Salome HOME
updated copyright message
[modules/shaper.git] / src / SketchPlugin / Test / TestProjectionIntoResult.py
1 # Copyright (C) 2014-2023  CEA, EDF
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 email : webmaster.salome@opencascade.com
18 #
19
20 """
21     TestProjectionIntoResult.py
22     Unit test of SketchPlugin_Projection class
23 """
24
25 from salome.shaper import model
26 from GeomAPI import *
27
28 #==============================================================================
29 # Auxiliary functions
30 #==============================================================================
31
32 # Project all features from 'theProjected' list.
33 # Argument 'theFailed' shows indices of projections which should fail because of validator
34 def testProjections(theDocument, theSketch, theProjected, theFailed):
35     # generate list of projected features
36     ind = 0
37     edgeProj = set()
38     for type, name in theProjected:
39         proj = theSketch.addProjection(model.selection(type, name), True)
40         assert(bool(proj.feature().error() != '') == bool(ind in theFailed))
41         if proj.feature().error() != '':
42             if proj.createdFeature() is not None:
43                 theDocument.removeFeature(proj.createdFeature().feature())
44             theDocument.removeFeature(proj.feature())
45             model.do()
46         elif type == "EDGE":
47             edgeProj.add(proj)
48         ind += 1
49     model.do()
50     model.testNbSubShapes(theSketch, GeomAPI_Shape.EDGE, [len(edgeProj)])
51
52     # exclude some edges from result
53     NB_TO_EXCLUDE = 2
54     num = 0
55     for proj in edgeProj:
56         proj.setIncludeToResult(False)
57         num += 1
58         if num >= NB_TO_EXCLUDE:
59             break
60     model.do()
61     model.testNbSubShapes(theSketch, GeomAPI_Shape.EDGE, [len(edgeProj) - num])
62
63
64 #==============================================================================
65 # Initial model
66 #==============================================================================
67 model.begin()
68 partSet = model.moduleDocument()
69 Part_1 = model.addPart(partSet)
70 Part_1_doc = Part_1.document()
71 Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOY"))
72 SketchCircle_1 = Sketch_1.addCircle(-187.9303398287678, -363.2915373234726, 182.2190183849013)
73 SketchArc_1 = Sketch_1.addArc(-229.9631763073051, -65.7360230979784, -105.4201011859997, -97.06956797196608, -326.3502666769664, 19.13032715412109, False)
74 SketchLine_1 = Sketch_1.addLine(-438.4308780225287, -71.00741660505224, 161.0737545348623, -582.1237015141244)
75 SketchPoint_1 = Sketch_1.addPoint(-446.0706301668712, -312.4620987423343)
76 model.do()
77 Sketch_2 = model.addSketch(Part_1_doc, model.defaultPlane("YOZ"))
78 SketchLine_2 = Sketch_2.addLine(27.19276215608871, 61.51157581079401, 72.96621462024476, 0)
79 SketchLine_3 = Sketch_2.addLine(model.selection("EDGE", "PartSet/OZ"))
80 SketchLine_4 = Sketch_2.addLine(model.selection("EDGE", "PartSet/OY"))
81 SketchConstraintCoincidence_1 = Sketch_2.setCoincident(SketchLine_2.endPoint(), SketchLine_4.result())
82 SketchLine_5 = Sketch_2.addLine(72.96621462024476, 0, 0, 0)
83 SketchConstraintCoincidence_2 = Sketch_2.setCoincident(SketchLine_2.endPoint(), SketchLine_5.startPoint())
84 SketchConstraintCoincidence_3 = Sketch_2.setCoincident(SketchLine_3.startPoint(), SketchLine_5.endPoint())
85 SketchLine_6 = Sketch_2.addLine(0, 0, 0, 61.51157581079401)
86 SketchConstraintCoincidence_4 = Sketch_2.setCoincident(SketchLine_3.startPoint(), SketchLine_6.startPoint())
87 SketchConstraintCoincidence_5 = Sketch_2.setCoincident(SketchLine_6.endPoint(), SketchLine_3.result())
88 SketchLine_7 = Sketch_2.addLine(0, 61.51157581079401, 27.19276215608871, 61.51157581079401)
89 SketchConstraintCoincidence_6 = Sketch_2.setCoincident(SketchLine_6.endPoint(), SketchLine_7.startPoint())
90 SketchConstraintCoincidence_7 = Sketch_2.setCoincident(SketchLine_2.startPoint(), SketchLine_7.endPoint())
91 SketchConstraintHorizontal_1 = Sketch_2.setHorizontal(SketchLine_7.result())
92 model.do()
93 Extrusion_1 = model.addExtrusion(Part_1_doc, [model.selection("FACE", "Sketch_2/Face-SketchLine_7r-SketchLine_6r-SketchLine_5r-SketchLine_2r")], model.selection(), 100, 0)
94 model.do()
95
96 #==============================================================================
97 # Tests
98 #==============================================================================
99
100 aProjectedList = [("EDGE", "Sketch_1/SketchCircle_1_2"),
101                   ("EDGE", "Sketch_1/SketchArc_1_2"),
102                   ("EDGE", "Sketch_1/SketchLine_1"),
103                   ("VERTEX", "Sketch_1/SketchPoint_1"),
104                   #
105                   ("VERTEX", "Sketch_1/SketchCircle_1_2__cc"),
106                   ("VERTEX", "Sketch_1/SketchLine_1_EndVertex"),
107                   ("VERTEX", "Sketch_1/SketchLine_1_StartVertex"),
108                   ("VERTEX", "Sketch_1/SketchArc_1_2_StartVertex"),
109                   ("VERTEX", "Sketch_1/SketchArc_1_2_EndVertex"),
110                   ("VERTEX", "Sketch_1/SketchArc_1"),
111                   #
112                   ("VERTEX", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_5][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_2][Extrusion_1_1/From_Face]"),
113                   ("VERTEX", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_6][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_5][Extrusion_1_1/From_Face]"),
114                   ("VERTEX", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_7][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_6][Extrusion_1_1/From_Face]"),
115                   ("VERTEX", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_7][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_2][Extrusion_1_1/From_Face]"),
116                   ("VERTEX", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_5][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_2][Extrusion_1_1/To_Face]"),
117                   ("VERTEX", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_7][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_2][Extrusion_1_1/To_Face]"),
118                   ("VERTEX", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_7][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_6][Extrusion_1_1/To_Face]"),
119                   ("VERTEX", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_6][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_5][Extrusion_1_1/To_Face]"),
120                   #
121                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_5][Extrusion_1_1/From_Face]"),
122                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_2][Extrusion_1_1/From_Face]"),
123                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_7][Extrusion_1_1/From_Face]"),
124                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_6][Extrusion_1_1/From_Face]"),
125                   #
126                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_6][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_5]"),
127                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_5][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_2]"),
128                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_7][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_2]"),
129                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_7][Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_6]"),
130                   #
131                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_5][Extrusion_1_1/To_Face]"),
132                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_2][Extrusion_1_1/To_Face]"),
133                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_7][Extrusion_1_1/To_Face]"),
134                   ("EDGE", "[Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_6][Extrusion_1_1/To_Face]")
135                   ]
136
137 # Test projection to the same plane
138 Sketch_3 = model.addSketch(Part_1_doc, model.selection("FACE", "Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_5"))
139 aFailedIDs = set([21, 29])
140 testProjections(Part_1_doc, Sketch_3, aProjectedList, aFailedIDs)
141
142 # Test projection to parallel plane
143 Sketch_4 = model.addSketch(Part_1_doc, model.selection("FACE", "Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_7"))
144 testProjections(Part_1_doc, Sketch_4, aProjectedList, aFailedIDs)
145
146 # Test projection to lower base of the prism
147 Sketch_5 = model.addSketch(Part_1_doc, model.selection("FACE", "Extrusion_1_1/From_Face"))
148 aFailedIDs = set([0, 1, 22, 23, 24, 25])
149 testProjections(Part_1_doc, Sketch_5, aProjectedList, aFailedIDs)
150
151 # Test projection to upper base of the prism
152 Sketch_6 = model.addSketch(Part_1_doc, model.selection("FACE", "Extrusion_1_1/To_Face"))
153 testProjections(Part_1_doc, Sketch_6, aProjectedList, aFailedIDs)
154
155 # Test projection to orthogonal side face of the prism
156 Sketch_7 = model.addSketch(Part_1_doc, model.selection("FACE", "Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_6"))
157 aFailedIDs = set([0, 1, 18, 20, 26, 28])
158 testProjections(Part_1_doc, Sketch_7, aProjectedList, aFailedIDs)
159
160 # Test projection to slope side face of the prism
161 Sketch_8 = model.addSketch(Part_1_doc, model.selection("FACE", "Extrusion_1_1/Generated_Face&Sketch_2/SketchLine_2"))
162 aFailedIDs = set()
163 testProjections(Part_1_doc, Sketch_8, aProjectedList, aFailedIDs)
164
165 model.end()