]> SALOME platform Git repositories - modules/shaper.git/blob - test.API/SHAPER/Transformations/TestMultiTranslation.py
Salome HOME
Add tests.
[modules/shaper.git] / test.API / SHAPER / Transformations / TestMultiTranslation.py
1 """
2 Test case for MultiTranslation feature. 
3 Written on High API.
4 """
5 from salome.shaper import model
6
7 model.begin()
8 partSet = model.moduleDocument()
9 Part_1 = model.addPart(partSet)
10 Part_1_doc = Part_1.document()
11
12 # Create Boxes
13 Box_1 = model.addBox(Part_1_doc, 10, 10, 10)
14 Box_2 = model.addBox(Part_1_doc, 10, 10, 10)
15 Box_3 = model.addBox(Part_1_doc, 10, 10, 10)
16 Box_4 = model.addBox(Part_1_doc, 10, 10, 10)
17 Box_5 = model.addBox(Part_1_doc, 10, 10, 10)
18 Box_6 = model.addBox(Part_1_doc, 10, 10, 10)
19 Box_7 = model.addBox(Part_1_doc, 10, 10, 10)
20 Box_8 = model.addBox(Part_1_doc, 10, 10, 10)
21 Box_9 = model.addBox(Part_1_doc, 10, 10, 10)
22
23 # Create Sketches
24 # Sketch contenant un contour ferme de 3 lignes
25 Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOY"))
26 SketchLine_1 = Sketch_1.addLine(20.57127738485033, 88.55774147773481, -110.037034305799, -25.45393392073257)
27 SketchLine_2 = Sketch_1.addLine(-110.037034305799, -25.45393392073257, 49.43499267560162, -77.40862144408482)
28 SketchLine_3 = Sketch_1.addLine(49.43499267560162, -77.40862144408482, 68.1964076145899, 55.3644688933709)
29 SketchConstraintCoincidence_1 = Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.startPoint())
30 SketchConstraintCoincidence_2 = Sketch_1.setCoincident(SketchLine_2.endPoint(), SketchLine_3.startPoint())
31
32 # Sketch creer sur la face de la box confondue avec le plan XOZ contenant un cercle inclus dans la face de la box
33 Sketch_2 = model.addSketch(Part_1_doc, model.selection("FACE", "Box_9_1/Left"))
34 SketchCircle_1 = Sketch_2.addCircle(3.420516499282639, 6.702654232424678, 2.660489383382409)
35 model.do()
36
37 # Create Wire & Extrusion
38 Wire_1 = model.addWire(Part_1_doc, [model.selection("EDGE", "Sketch_1/Edge-SketchLine_2"), model.selection("EDGE", "Sketch_1/Edge-SketchLine_1"), model.selection("EDGE", "Sketch_1/Edge-SketchLine_3")])
39 Extrusion_1 = model.addExtrusion(Part_1_doc, [model.selection("WIRE", "Wire_1_1")], model.selection("EDGE", "PartSet/OZ"), 50, 0)
40
41 # Revolution of the circle
42 Revolution_1 = model.addRevolution(Part_1_doc, [model.selection("WIRE", "Sketch_2/Wire-SketchCircle_1_2f")], model.selection("EDGE", "PartSet/OZ"), 360, 0)
43
44 # Create MultiTranslations
45 MultiTranslation_1 = model.addMultiTranslation(Part_1_doc, [model.selection("SOLID", "Box_1_1")], model.selection("EDGE", "PartSet/OX"), 15, 5)
46 MultiTranslation_2 = model.addMultiTranslation(Part_1_doc, [model.selection("SOLID", "Box_2_1")], model.selection("EDGE", "PartSet/OX"), -15, 5)
47 MultiTranslation_3 = model.addMultiTranslation(Part_1_doc, [model.selection("SOLID", "Box_3_1")], model.selection("EDGE", "PartSet/OX"), 15, -2)
48 MultiTranslation_4 = model.addMultiTranslation(Part_1_doc, [model.selection("SOLID", "Box_4_1")], model.selection("EDGE", "InvalidName"), 15, -2)
49 MultiTranslation_5 = model.addMultiTranslation(Part_1_doc, [model.selection("SOLID", "Box_5_1")], model.selection("EDGE", "PartSet/OX"), 10, 5, model.selection("EDGE", "PartSet/OY"), 10, 5)
50 MultiTranslation_6 = model.addMultiTranslation(Part_1_doc, [model.selection("SOLID", "Box_6_1")], model.selection("EDGE", "PartSet/OX"), 10, 5, model.selection("EDGE", "PartSet/OY"), -10, 5)
51 MultiTranslation_7 = model.addMultiTranslation(Part_1_doc, [model.selection("SOLID", "Box_7_1")], model.selection("EDGE", "PartSet/OX"), 10, 5, model.selection("EDGE", "PartSet/OY"), 10, -2)
52 MultiTranslation_8 = model.addMultiTranslation(Part_1_doc, [model.selection("SOLID", "Box_8_1")], model.selection("EDGE", "PartSet/OX"), 10, 5, model.selection("EDGE", "InvalidName"), 10, 5)
53 MultiTranslation_9 = model.addMultiTranslation(Part_1_doc, [model.selection("SHELL", "Extrusion_1_1")], model.selection("EDGE", "PartSet/OZ"), 50, 10)
54 MultiTranslation_10 = model.addMultiTranslation(Part_1_doc, [model.selection("SOLID", "Revolution_1_1"), model.selection("SOLID", "Box_9_1")], model.selection("EDGE", "PartSet/OY"), 20, 3)
55
56 model.do()
57 model.end()
58
59
60
61 # Checks
62 from GeomAPI import GeomAPI_Shape, GeomAPI_ShapeExplorer
63 from GeomAlgoAPI import *
64
65 model.testNbResults(MultiTranslation_1, 1)
66 model.testNbSubResults(MultiTranslation_1, [5])
67 model.testNbSubShapes(MultiTranslation_1, GeomAPI_Shape.COMPOUND, [1])
68 model.testNbSubShapes(MultiTranslation_1, GeomAPI_Shape.SOLID, [5])
69 model.testNbSubShapes(MultiTranslation_1, GeomAPI_Shape.FACE, [30])
70 model.testHaveNamingFaces(MultiTranslation_1, model, Part_1_doc)
71
72 model.testNbResults(MultiTranslation_2, 1)
73 model.testNbSubResults(MultiTranslation_2, [5])
74 model.testNbSubShapes(MultiTranslation_2, GeomAPI_Shape.COMPOUND, [1])
75 model.testNbSubShapes(MultiTranslation_2, GeomAPI_Shape.SOLID, [5])
76 model.testNbSubShapes(MultiTranslation_2, GeomAPI_Shape.FACE, [30])
77 model.testHaveNamingFaces(MultiTranslation_2, model, Part_1_doc)
78
79 model.testNbResults(MultiTranslation_5, 1)
80 model.testNbSubResults(MultiTranslation_5, [25])
81 model.testNbSubShapes(MultiTranslation_5, GeomAPI_Shape.COMPOUND, [1])
82 model.testNbSubShapes(MultiTranslation_5, GeomAPI_Shape.SOLID, [25])
83 model.testNbSubShapes(MultiTranslation_5, GeomAPI_Shape.FACE, [150])
84 model.testHaveNamingFaces(MultiTranslation_5, model, Part_1_doc)
85
86 model.testNbResults(MultiTranslation_6, 1)
87 model.testNbSubResults(MultiTranslation_6, [25])
88 model.testNbSubShapes(MultiTranslation_6, GeomAPI_Shape.COMPOUND, [1])
89 model.testNbSubShapes(MultiTranslation_6, GeomAPI_Shape.SOLID, [25])
90 model.testNbSubShapes(MultiTranslation_6, GeomAPI_Shape.FACE, [150])
91 model.testHaveNamingFaces(MultiTranslation_6, model, Part_1_doc)
92
93 ####################################################################################################
94 # Test of MultiTranslation 10
95 model.testNbResults(MultiTranslation_10, 2)
96 model.testNbSubResults(MultiTranslation_10, [3, 3])
97
98 def testSubResult(theFeature, theModel, thePartDoc, resultIndex, nbSolidsExpected, nbFacesExpected):
99     result = theFeature.results()[resultIndex].resultSubShapePair()[0] 
100     shape = result.shape()
101     shapeExplorer = GeomAPI_ShapeExplorer(shape, GeomAPI_Shape.SOLID)
102     nbSolids = 0
103     while shapeExplorer.more():
104         nbSolids += 1
105         shapeExplorer.next()
106     assert(nbSolids == nbSolidsExpected)
107     
108     shapeExplorer = GeomAPI_ShapeExplorer(shape, GeomAPI_Shape.FACE)
109     nbFaces = 0
110     selectionList = []
111     while shapeExplorer.more():
112         nbFaces += 1
113         selection = theModel.selection(result, shapeExplorer.current()) # First argument should be result/sub-result, second is sub-shape on this result/sub-result
114         selectionList.append(selection)
115         shapeExplorer.next()
116     assert(nbFaces == nbFacesExpected)
117     # Create group with this selection list
118     Group_1 = theModel.addGroup(thePartDoc, selectionList)
119     theModel.do()
120     theModel.end()
121     
122     # Now you can check that all selected shapes in group have right shape type and name.
123     groupFeature = Group_1.feature()
124     groupSelectionList = groupFeature.selectionList("group_list")
125     theModel.end()
126     assert(groupSelectionList.size() == len(selectionList))
127     for index in range(0, groupSelectionList.size()):
128         attrSelection = groupSelectionList.value(index)
129         shape = attrSelection.value()
130         name = attrSelection.namingName()
131         assert(shape.isFace())
132         assert(name != ""), "String empty"
133
134 testSubResult(MultiTranslation_10, model, Part_1_doc, 0, 3, 3)
135 testSubResult(MultiTranslation_10, model, Part_1_doc, 1, 3, 18)
136 ####################################################################################################
137
138 model.testNbResults(MultiTranslation_3, 0)
139 assert(MultiTranslation_3.feature().error() == 'Multitranslation builder :: the number of copies for the first direction is null or negative.')
140
141 model.testNbResults(MultiTranslation_4, 0)
142 assert(MultiTranslation_4.feature().error() == 'Attribute "axis_first_dir" is not initialized.')
143
144 model.testNbResults(MultiTranslation_7, 0)
145 assert(MultiTranslation_7.feature().error() == 'Multitranslation builder :: the number of copies for the second direction is null or negative.')
146
147 model.testNbResults(MultiTranslation_8, 0)
148 assert(MultiTranslation_8.feature().error() == 'Attribute "axis_second_dir" is not initialized.')
149
150
151 # Multitranslation en erreur
152 #model.testNbResults(MultiTranslation_9, 1)
153 #model.testNbSubResults(MultiTranslation_9, [10])
154 #model.testNbSubShapes(MultiTranslation_9, GeomAPI_Shape.COMPOUND, [1])
155 #model.testNbSubShapes(MultiTranslation_9, GeomAPI_Shape.SOLID, [0])
156 #model.testNbSubShapes(MultiTranslation_9, GeomAPI_Shape.SHELL, [10])
157 #model.testNbSubShapes(MultiTranslation_9, GeomAPI_Shape.FACE, [30])
158 #model.testHaveNamingFaces(MultiTranslation_9, model, Part_1_doc)