Salome HOME
Some minor changes in tests. Now the initialization plugin performs correctly in...
[modules/shaper.git] / src / FeaturesPlugin / Test / TestCompositeFeaturesOnCompSolids.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
9 __updated__ = "2014-12-16"
10
11 aSession = ModelAPI_Session.get()
12 # Create a part for extrusions & boolean
13 aSession.startOperation()
14 aPartFeature = aSession.moduleDocument().addFeature("Part")
15 aSession.finishOperation()
16 aPart = aSession.activeDocument()
17
18 #=========================================================================
19 # Create a sketch with circle to extrude
20 #=========================================================================
21 aSession.startOperation()
22 aCircleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
23 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
24 origin.setValue(0, 0, 0)
25 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
26 dirx.setValue(1, 0, 0)
27 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
28 norm.setValue(0, 0, 1)
29
30 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
31 aCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
32 aCircleRadius = aSketchCircle.real("CircleRadius")
33 aCircleCentr.setValue(0, 0)
34 aCircleRadius.setValue(50)
35
36 aSketchLine = aCircleSketchFeature.addFeature("SketchLine")
37 aLineStartPoint = geomDataAPI_Point2D(aSketchLine.attribute("StartPoint"))
38 aLineEndPoint = geomDataAPI_Point2D(aSketchLine.attribute("EndPoint"))
39 aLineStartPoint.setValue(0, -50)
40 aLineEndPoint.setValue(0, 50)
41 aSession.finishOperation()
42
43 #=========================================================================
44 # Make extrusion on circle
45 #=========================================================================
46 # Build shape from sketcher results
47 aCircleSketchResult = aCircleSketchFeature.firstResult()
48 aCircleSketchEdges = modelAPI_ResultConstruction(aCircleSketchResult).shape()
49 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin")).pnt()
50 dirX = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX")).dir()
51 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm")).dir()
52 aCircleSketchFaces = ShapeList()
53 GeomAlgoAPI_SketchBuilder.createFaces(
54     origin, dirX, norm, aCircleSketchEdges, aCircleSketchFaces)
55 assert (len(aCircleSketchFaces) > 0)
56 assert (aCircleSketchFaces[0] is not None)
57 # Create extrusion
58 aSession.startOperation()
59 anExtrusionFt = aPart.addFeature("Extrusion")
60 assert (anExtrusionFt.getKind() == "Extrusion")
61 # selection type FACE=4
62 anExtrusionFt.selectionList("base").append(
63     aCircleSketchResult, None)
64 anExtrusionFt.string("CreationMethod").setValue("BySizes")
65 anExtrusionFt.real("to_size").setValue(50)
66 anExtrusionFt.real("from_size").setValue(0)
67 anExtrusionFt.real("to_offset").setValue(0) #TODO: remove
68 anExtrusionFt.real("from_offset").setValue(0) #TODO: remove
69 anExtrusionFt.execute()
70 aSession.finishOperation()
71 assert (anExtrusionFt.real("to_size").value() == 50.0)
72
73 # Check extrusion results
74 assert (len(anExtrusionFt.results()) > 0)
75 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
76 assert (anExtrusionResult is not None)
77
78 #=========================================================================
79 # Test extrusion cut between bounding planes
80 #=========================================================================
81 # Create from plane
82 aSession.startOperation()
83 aFromPlaneFeature = aPart.addFeature("Plane")
84 aFromPlaneFeature.string("CreationMethod").setValue("PlaneByGeneralEquation")
85 aFromPlaneFeature.real("A").setValue(0.)
86 aFromPlaneFeature.real("B").setValue(0.)
87 aFromPlaneFeature.real("C").setValue(1.)
88 aFromPlaneFeature.real("D").setValue(-25.)
89 aSession.finishOperation()
90
91 # Create to plane
92 aSession.startOperation()
93 aToPlaneFeature = aPart.addFeature("Plane")
94 aToPlaneFeature.string("CreationMethod").setValue("PlaneByGeneralEquation")
95 aToPlaneFeature.real("A").setValue(0.)
96 aToPlaneFeature.real("B").setValue(0.)
97 aToPlaneFeature.real("C").setValue(1.)
98 aToPlaneFeature.real("D").setValue(-60.)
99 aSession.finishOperation()
100
101 #=========================================================================
102 # Make extrusion cut
103 #=========================================================================
104 aSession.startOperation()
105 anExtrusionCutFt = featureToCompositeFeature(aPart.addFeature("ExtrusionCut"))
106 assert (anExtrusionCutFt.getKind() == "ExtrusionCut")
107 # selection type FACE=4
108 aSession.startOperation()
109 aCircleSketchFeature = featureToCompositeFeature(anExtrusionCutFt.addFeature("Sketch"))
110 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
111 origin.setValue(0, 0, 50)
112 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
113 dirx.setValue(1, 0, 0)
114 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
115 norm.setValue(0, 0, 1)
116 aCircleSketchFeature.selection("External").selectSubShape("face", "Extrusion_1/To_Face_1")
117 aSession.startOperation()
118 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
119 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
120 aCircleRadius = aSketchCircle.real("CircleRadius")
121 anCircleCentr.setValue(0, 0)
122 aCircleRadius.setValue(10)
123 aSession.finishOperation()
124 aSession.finishOperation()
125 aSession.startOperation()
126 aCircleSketchFeature.execute() # execute for sketch should be called here, because it is not set as current feature, so it is disabled.
127 anExtrusionCutFt.selectionList("base").append(aCircleSketchFeature.firstResult(), None)
128 anExtrusionCutFt.string("CreationMethod").setValue("ByPlanesAndOffsets")
129 anExtrusionCutFt.real("to_size").setValue(0)
130 anExtrusionCutFt.real("from_size").setValue(0)
131 aToResult = aToPlaneFeature.firstResult()
132 aToShape = modelAPI_ResultConstruction(aToResult).shape()
133 anExtrusionCutFt.selection("to_object").setValue(aToResult, aToShape)
134 anExtrusionCutFt.real("to_offset").setValue(0)
135 aFromResult = aFromPlaneFeature.firstResult()
136 aFromShape = modelAPI_ResultConstruction(aFromResult).shape()
137 anExtrusionCutFt.selection("from_object").setValue(aFromResult, aFromShape)
138 anExtrusionCutFt.real("from_offset").setValue(0)
139 anExtrusionCutFt.selectionList("main_objects").append(modelAPI_ResultCompSolid(anExtrusionResult).subResult(1), None)
140 aSession.finishOperation()
141 aSession.finishOperation()
142
143 #=========================================================================
144 # Test results
145 #=========================================================================
146 aFactory = ModelAPI_Session.get().validators()
147 assert (aFactory.validate(anExtrusionCutFt))
148 assert (len(anExtrusionCutFt.results()) > 0)
149 aCurrentResult = modelAPI_ResultBody(anExtrusionCutFt.firstResult())
150 assert (aCurrentResult is not None)
151 aSession.undo()
152
153 #=========================================================================
154 # Create a sketch line to revol
155 #=========================================================================
156 aSession.startOperation()
157 aLineSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
158 origin = geomDataAPI_Point(aLineSketchFeature.attribute("Origin"))
159 origin.setValue(0, 0, 0)
160 dirx = geomDataAPI_Dir(aLineSketchFeature.attribute("DirX"))
161 dirx.setValue(1, 0, 0)
162 norm = geomDataAPI_Dir(aLineSketchFeature.attribute("Norm"))
163 norm.setValue(0, 0, 1)
164
165 aSketchLine = aLineSketchFeature.addFeature("SketchLine")
166 aLineStartPoint = geomDataAPI_Point2D(aSketchLine.attribute("StartPoint"))
167 aLineEndPoint = geomDataAPI_Point2D(aSketchLine.attribute("EndPoint"))
168 aLineStartPoint.setValue(-50., 50.)
169 aLineEndPoint.setValue(-50., -50.)
170 aSession.finishOperation()
171
172 # Build shape from sketcher results
173 aLineSketchResult = aLineSketchFeature.firstResult()
174 aLineSketchShape = modelAPI_ResultConstruction(aLineSketchResult).shape()
175 aShapeExplorer = GeomAPI_ShapeExplorer(aLineSketchShape, GeomAPI_Shape.EDGE)
176 aLineEdge = aShapeExplorer.current()
177
178 #=========================================================================
179 # Make revolution fuse
180 #=========================================================================
181 aSession.startOperation()
182 anRevolutionFuseFt = featureToCompositeFeature(aPart.addFeature("RevolutionFuse"))
183 assert (anRevolutionFuseFt.getKind() == "RevolutionFuse")
184 # selection type FACE=4
185 aSession.startOperation()
186 aCircleSketchFeature = featureToCompositeFeature(anRevolutionFuseFt.addFeature("Sketch"))
187 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
188 origin.setValue(0, 0, 50)
189 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
190 dirx.setValue(1, 0, 0)
191 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
192 norm.setValue(0, 0, 1)
193 aCircleSketchFeature.selection("External").selectSubShape("face", "Extrusion_1/To_Face_1")
194 aSession.startOperation()
195 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
196 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
197 aCircleRadius = aSketchCircle.real("CircleRadius")
198 anCircleCentr.setValue(0, 0)
199 aCircleRadius.setValue(10)
200 aSession.finishOperation()
201 aSession.finishOperation()
202 aSession.startOperation()
203 aCircleSketchFeature.execute() # execute for sketch should be called here, because it is not set as current feature, so it is disabled.
204 anRevolutionFuseFt.selectionList("base").append(aCircleSketchFeature.firstResult(), None)
205 anRevolutionFuseFt.selection("axis_object").setValue(aLineSketchResult, aLineEdge)
206 anRevolutionFuseFt.string("CreationMethod").setValue("ByPlanesAndOffsets")
207 anRevolutionFuseFt.real("from_angle").setValue(0) #TODO: remove
208 anRevolutionFuseFt.real("to_angle").setValue(0) #TODO: remove
209 anRevolutionFuseFt.selection("to_object").setValue(aToResult, None)
210 anRevolutionFuseFt.real("to_offset").setValue(0)
211 anRevolutionFuseFt.selection("from_object").setValue(None, None)
212 anRevolutionFuseFt.real("from_offset").setValue(0)
213 anRevolutionFuseFt.selectionList("main_objects").append(modelAPI_ResultCompSolid(anExtrusionResult).subResult(1), None)
214 aSession.finishOperation()
215 aSession.finishOperation()
216
217 #=========================================================================
218 # Test results
219 #=========================================================================
220 aFactory = ModelAPI_Session.get().validators()
221 assert (aFactory.validate(anRevolutionFuseFt))
222 assert (len(anRevolutionFuseFt.results()) > 0)
223 aCurrentResult = modelAPI_ResultBody(anRevolutionFuseFt.firstResult())
224 assert (aCurrentResult is not None)