Salome HOME
39249d1ad0a8a5ad4385bc3f16fff750822c73a9
[modules/shaper.git] / src / FeaturesPlugin / Test / TestPlacement.py
1 #=========================================================================
2 # Initialization of the test
3 #=========================================================================
4 from ModelAPI import *
5 from GeomDataAPI import *
6 from GeomAlgoAPI import *
7 from GeomAPI import *
8 import math
9
10 __updated__ = "2014-12-16"
11
12 aSession = ModelAPI_Session.get()
13 aDocument = aSession.moduleDocument()
14
15 aSession.startOperation()
16 aPartFeature = aDocument.addFeature("Part")
17 aSession.finishOperation()
18 assert (len(aPartFeature.results()) == 1)
19 aPartResult = modelAPI_ResultPart(aPartFeature.firstResult())
20 aPart = aPartResult.partDoc()
21
22 #=========================================================================
23 # Create a sketch to extrude
24 #=========================================================================
25 aSession.startOperation()
26 aSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
27 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
28 origin.setValue(0, 0, 0)
29 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
30 dirx.setValue(1, 0, 0)
31 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
32 norm.setValue(0, 0, 1)
33 aLineA1 = aSketchFeature.addFeature("SketchLine")
34 aLineB1 = aSketchFeature.addFeature("SketchLine")
35 aLineC1 = aSketchFeature.addFeature("SketchLine")
36 aLineD1 = aSketchFeature.addFeature("SketchLine")
37 aLineA1StartPoint = geomDataAPI_Point2D(aLineA1.attribute("StartPoint"))
38 aLineA1EndPoint = geomDataAPI_Point2D(aLineA1.attribute("EndPoint"))
39 aLineB1StartPoint = geomDataAPI_Point2D(aLineB1.attribute("StartPoint"))
40 aLineB1EndPoint = geomDataAPI_Point2D(aLineB1.attribute("EndPoint"))
41 aLineC1StartPoint = geomDataAPI_Point2D(aLineC1.attribute("StartPoint"))
42 aLineC1EndPoint = geomDataAPI_Point2D(aLineC1.attribute("EndPoint"))
43 aLineD1StartPoint = geomDataAPI_Point2D(aLineD1.attribute("StartPoint"))
44 aLineD1EndPoint = geomDataAPI_Point2D(aLineD1.attribute("EndPoint"))
45 aLineA1StartPoint.setValue(-100, 0)
46 aLineA1EndPoint.setValue(-50, 0)
47 aLineB1StartPoint.setValue(-50, 0)
48 aLineB1EndPoint.setValue(-50, 50)
49 aLineC1StartPoint.setValue(-50, 50)
50 aLineC1EndPoint.setValue(-100, 50)
51 aLineD1StartPoint.setValue(-100, 50)
52 aLineD1EndPoint.setValue(-100, 0)
53 aLineA2 = aSketchFeature.addFeature("SketchLine")
54 aLineB2 = aSketchFeature.addFeature("SketchLine")
55 aLineC2 = aSketchFeature.addFeature("SketchLine")
56 aLineD2 = aSketchFeature.addFeature("SketchLine")
57 aLineA2StartPoint = geomDataAPI_Point2D(aLineA2.attribute("StartPoint"))
58 aLineA2EndPoint = geomDataAPI_Point2D(aLineA2.attribute("EndPoint"))
59 aLineB2StartPoint = geomDataAPI_Point2D(aLineB2.attribute("StartPoint"))
60 aLineB2EndPoint = geomDataAPI_Point2D(aLineB2.attribute("EndPoint"))
61 aLineC2StartPoint = geomDataAPI_Point2D(aLineC2.attribute("StartPoint"))
62 aLineC2EndPoint = geomDataAPI_Point2D(aLineC2.attribute("EndPoint"))
63 aLineD2StartPoint = geomDataAPI_Point2D(aLineD2.attribute("StartPoint"))
64 aLineD2EndPoint = geomDataAPI_Point2D(aLineD2.attribute("EndPoint"))
65 aLineA2StartPoint.setValue(100, 0)
66 aLineA2EndPoint.setValue(50, 0)
67 aLineB2StartPoint.setValue(50, 0)
68 aLineB2EndPoint.setValue(50, 50)
69 aLineC2StartPoint.setValue(50, 50)
70 aLineC2EndPoint.setValue(100, 50)
71 aLineD2StartPoint.setValue(100, 50)
72 aLineD2EndPoint.setValue(100, 0)
73 aSession.finishOperation()
74
75 #=========================================================================
76 # Make extrusion
77 #=========================================================================
78 aSketchResult = aSketchFeature.firstResult()
79 aSketchEdges = modelAPI_ResultConstruction(aSketchResult).shape()
80 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin")).pnt()
81 dirX = geomDataAPI_Dir(aSketchFeature.attribute("DirX")).dir()
82 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm")).dir()
83 aSketchFaces = ShapeList()
84 GeomAlgoAPI_SketchBuilder.createFaces(origin, dirX, norm, aSketchEdges, aSketchFaces)
85 assert (len(aSketchFaces) > 0)
86 assert (aSketchFaces[0] is not None)
87 assert (aSketchFaces[1] is not None)
88
89 aSession.startOperation()
90 anExtrusionFt = aPart.addFeature("Extrusion")
91 assert (anExtrusionFt.getKind() == "Extrusion")
92 anExtrusionFt.selectionList("base").append(aSketchResult, aSketchFaces[0])
93 anExtrusionFt.selectionList("base").append(aSketchResult, aSketchFaces[1])
94 anExtrusionFt.string("CreationMethod").setValue("BySizes")
95 anExtrusionFt.real("to_size").setValue(50)
96 anExtrusionFt.real("from_size").setValue(0)
97 anExtrusionFt.real("to_offset").setValue(0) #TODO: remove
98 anExtrusionFt.real("from_offset").setValue(0) #TODO: remove
99 anExtrusionFt.execute()
100 aSession.finishOperation()
101 assert (anExtrusionFt.real("to_size").value() == 50.0)
102
103 # Check extrusion results
104 assert (len(anExtrusionFt.results()) > 0)
105 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
106 assert (anExtrusionResult is not None)
107
108 #=========================================================================
109 # Test placement by face - face
110 #=========================================================================
111 aSession.startOperation()
112 aPlacementFt = aPart.addFeature("Placement")
113 aPlacementFt.selectionList("placement_objects_list").append(anExtrusionResult, anExtrusionResult.shape())
114 aPlacementFt.selection("placement_start_shape").selectSubShape("face", "Extrusion_1_1/Generated_Face_1")
115 aPlacementFt.selection("placement_end_shape").selectSubShape("face", "Extrusion_1_2/Generated_Face_3")
116 aPlacementFt.boolean("placement_reverse_direction").setValue(False)
117 aPlacementFt.boolean("placement_centering").setValue(True)
118 aPlacementFt.execute()
119 aSession.finishOperation()
120
121 # Check placement results
122 assert (len(aPlacementFt.results()) > 0)
123 aPlacementResult = modelAPI_ResultBody(aPlacementFt.firstResult())
124 assert (aPlacementResult is not None)
125 aSession.undo()
126
127 #=========================================================================
128 # Test placement by face - edge
129 #=========================================================================
130 aSession.startOperation()
131 aPlacementFt = aPart.addFeature("Placement")
132 aPlacementFt.selectionList("placement_objects_list").append(anExtrusionResult, anExtrusionResult.shape())
133 aPlacementFt.selection("placement_start_shape").selectSubShape("face", "Extrusion_1_1/Generated_Face_1")
134 aPlacementFt.selection("placement_end_shape").selectSubShape("edge", "Extrusion_1_2/To_Face_1_1&Extrusion_1_2/Generated_Face_3")
135 aPlacementFt.boolean("placement_reverse_direction").setValue(False)
136 aPlacementFt.boolean("placement_centering").setValue(True)
137 aPlacementFt.execute()
138 aSession.finishOperation()
139
140 # Check placement results
141 assert (len(aPlacementFt.results()) > 0)
142 aPlacementResult = modelAPI_ResultBody(aPlacementFt.firstResult())
143 assert (aPlacementResult is not None)
144 aSession.undo()
145
146 #=========================================================================
147 # Test placement by face - vertex
148 #=========================================================================
149 aSession.startOperation()
150 aPlacementFt = aPart.addFeature("Placement")
151 aPlacementFt.selectionList("placement_objects_list").append(anExtrusionResult, anExtrusionResult.shape())
152 aPlacementFt.selection("placement_start_shape").selectSubShape("face", "Extrusion_1_1/Generated_Face_1")
153 aPlacementFt.selection("placement_end_shape").selectSubShape("vertex", "Extrusion_1_2/To_Face_1_1&Extrusion_1_2/Generated_Face_3&Extrusion_1_2/Generated_Face_2")
154 aPlacementFt.boolean("placement_reverse_direction").setValue(False)
155 aPlacementFt.boolean("placement_centering").setValue(True)
156 aPlacementFt.execute()
157 aSession.finishOperation()
158
159 # Check placement results
160 assert (len(aPlacementFt.results()) > 0)
161 aPlacementResult = modelAPI_ResultBody(aPlacementFt.firstResult())
162 assert (aPlacementResult is not None)
163 aSession.undo()
164
165 #=========================================================================
166 # Test placement by edge - edge
167 #=========================================================================
168 aSession.startOperation()
169 aPlacementFt = aPart.addFeature("Placement")
170 aPlacementFt.selectionList("placement_objects_list").append(anExtrusionResult, anExtrusionResult.shape())
171 aPlacementFt.selection("placement_start_shape").selectSubShape("edge", "Extrusion_1_1/To_Face_1_1&Extrusion_1_1/Generated_Face_1")
172 aPlacementFt.selection("placement_end_shape").selectSubShape("edge", "Extrusion_1_2/To_Face_1_1&Extrusion_1_2/Generated_Face_3")
173 aPlacementFt.boolean("placement_reverse_direction").setValue(False)
174 aPlacementFt.boolean("placement_centering").setValue(True)
175 aPlacementFt.execute()
176 aSession.finishOperation()
177
178 # Check placement results
179 assert (len(aPlacementFt.results()) > 0)
180 aPlacementResult = modelAPI_ResultBody(aPlacementFt.firstResult())
181 assert (aPlacementResult is not None)
182 aSession.undo()
183
184 #=========================================================================
185 # Test placement by edge - vertex
186 #=========================================================================
187 aSession.startOperation()
188 aPlacementFt = aPart.addFeature("Placement")
189 aPlacementFt.selectionList("placement_objects_list").append(anExtrusionResult, anExtrusionResult.shape())
190 aPlacementFt.selection("placement_start_shape").selectSubShape("edge", "Extrusion_1_1/To_Face_1_1&Extrusion_1_1/Generated_Face_1")
191 aPlacementFt.selection("placement_end_shape").selectSubShape("vertex", "Extrusion_1_2/To_Face_1_1&Extrusion_1_2/Generated_Face_3&Extrusion_1_2/Generated_Face_2")
192 aPlacementFt.boolean("placement_reverse_direction").setValue(False)
193 aPlacementFt.boolean("placement_centering").setValue(True)
194 aPlacementFt.execute()
195 aSession.finishOperation()
196
197 # Check placement results
198 assert (len(aPlacementFt.results()) > 0)
199 aPlacementResult = modelAPI_ResultBody(aPlacementFt.firstResult())
200 assert (aPlacementResult is not None)
201 aSession.undo()
202
203 #=========================================================================
204 # Test placement by vertex - vertex
205 #=========================================================================
206 aSession.startOperation()
207 aPlacementFt = aPart.addFeature("Placement")
208 aPlacementFt.selectionList("placement_objects_list").append(anExtrusionResult, anExtrusionResult.shape())
209 aPlacementFt.selection("placement_start_shape").selectSubShape("vertex", "Extrusion_1_1/Generated_Face_4&Extrusion_1_1/From_Face_1_1&Extrusion_1_1/Generated_Face_1")
210 aPlacementFt.selection("placement_end_shape").selectSubShape("vertex", "Extrusion_1_2/To_Face_1_1&Extrusion_1_2/Generated_Face_3&Extrusion_1_2/Generated_Face_2")
211 aPlacementFt.boolean("placement_reverse_direction").setValue(False)
212 aPlacementFt.boolean("placement_centering").setValue(True)
213 aPlacementFt.execute()
214 aSession.finishOperation()
215
216 # Check placement results
217 assert (len(aPlacementFt.results()) > 0)
218 aPlacementResult = modelAPI_ResultBody(aPlacementFt.firstResult())
219 assert (aPlacementResult is not None)
220
221 from salome.shaper import model
222 assert(model.checkPythonDump())