1 # Copyright (C) 2014-2019 CEA/DEN, EDF R&D
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.
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.
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
17 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 TestProjectionIntoResult.py
22 Unit test of SketchPlugin_Projection class
25 from salome.shaper import model
28 #==============================================================================
30 #==============================================================================
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
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())
50 model.testNbSubShapes(theSketch, GeomAPI_Shape.EDGE, [len(edgeProj)])
52 # exclude some edges from result
56 proj.setIncludeToResult(False)
58 if num >= NB_TO_EXCLUDE:
61 model.testNbSubShapes(theSketch, GeomAPI_Shape.EDGE, [len(edgeProj) - num])
64 #==============================================================================
66 #==============================================================================
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)
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())
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)
96 #==============================================================================
98 #==============================================================================
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"),
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"),
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]"),
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]"),
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]"),
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]")
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)
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)
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)
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)
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)
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([0, 1])
163 testProjections(Part_1_doc, Sketch_8, aProjectedList, aFailedIDs)