Salome HOME
fceb782ff3c7ad881e575e1e6883a8523470927b
[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("creation_method").setValue("by_general_equation")
85 aFromPlaneFeature.string("by_other_plane_option").setValue("by_distance_from_other") # TODO: remove
86 aFromPlaneFeature.real("A").setValue(0.)
87 aFromPlaneFeature.real("B").setValue(0.)
88 aFromPlaneFeature.real("C").setValue(1.)
89 aFromPlaneFeature.real("D").setValue(-25.)
90 aSession.finishOperation()
91
92 # Create to plane
93 aSession.startOperation()
94 aToPlaneFeature = aPart.addFeature("Plane")
95 aToPlaneFeature.string("creation_method").setValue("by_general_equation")
96 aToPlaneFeature.string("by_other_plane_option").setValue("by_distance_from_other") # TODO: remove
97 aToPlaneFeature.real("A").setValue(0.)
98 aToPlaneFeature.real("B").setValue(0.)
99 aToPlaneFeature.real("C").setValue(1.)
100 aToPlaneFeature.real("D").setValue(-60.)
101 aSession.finishOperation()
102
103 #=========================================================================
104 # Make extrusion cut
105 #=========================================================================
106 aSession.startOperation()
107 anExtrusionCutFt = featureToCompositeFeature(aPart.addFeature("ExtrusionCut"))
108 assert (anExtrusionCutFt.getKind() == "ExtrusionCut")
109 # selection type FACE=4
110 aSession.startOperation()
111 aCircleSketchFeature = featureToCompositeFeature(anExtrusionCutFt.addFeature("Sketch"))
112 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
113 origin.setValue(0, 0, 50)
114 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
115 dirx.setValue(1, 0, 0)
116 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
117 norm.setValue(0, 0, 1)
118 aCircleSketchFeature.selection("External").selectSubShape("face", "Extrusion_1/To_Face_1")
119 aSession.startOperation()
120 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
121 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
122 aCircleRadius = aSketchCircle.real("CircleRadius")
123 anCircleCentr.setValue(0, 0)
124 aCircleRadius.setValue(10)
125 aSession.finishOperation()
126 aSession.finishOperation()
127 aSession.startOperation()
128 aCircleSketchFeature.execute() # execute for sketch should be called here, because it is not set as current feature, so it is disabled.
129 anExtrusionCutFt.selectionList("base").append(aCircleSketchFeature.firstResult(), None)
130 anExtrusionCutFt.string("CreationMethod").setValue("ByPlanesAndOffsets")
131 anExtrusionCutFt.real("to_size").setValue(0)
132 anExtrusionCutFt.real("from_size").setValue(0)
133 aToResult = aToPlaneFeature.firstResult()
134 aToShape = modelAPI_ResultConstruction(aToResult).shape()
135 anExtrusionCutFt.selection("to_object").setValue(aToResult, aToShape)
136 anExtrusionCutFt.real("to_offset").setValue(0)
137 aFromResult = aFromPlaneFeature.firstResult()
138 aFromShape = modelAPI_ResultConstruction(aFromResult).shape()
139 anExtrusionCutFt.selection("from_object").setValue(aFromResult, aFromShape)
140 anExtrusionCutFt.real("from_offset").setValue(0)
141 anExtrusionCutFt.selectionList("main_objects").append(modelAPI_ResultCompSolid(anExtrusionResult).subResult(1), None)
142 aSession.finishOperation()
143 aSession.finishOperation()
144
145 #=========================================================================
146 # Test results
147 #=========================================================================
148 aFactory = ModelAPI_Session.get().validators()
149 assert (aFactory.validate(anExtrusionCutFt))
150 assert (len(anExtrusionCutFt.results()) > 0)
151 aCurrentResult = modelAPI_ResultBody(anExtrusionCutFt.firstResult())
152 assert (aCurrentResult is not None)
153 aSession.undo()
154
155 #=========================================================================
156 # Create a sketch line to revol
157 #=========================================================================
158 aSession.startOperation()
159 aLineSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
160 origin = geomDataAPI_Point(aLineSketchFeature.attribute("Origin"))
161 origin.setValue(0, 0, 0)
162 dirx = geomDataAPI_Dir(aLineSketchFeature.attribute("DirX"))
163 dirx.setValue(1, 0, 0)
164 norm = geomDataAPI_Dir(aLineSketchFeature.attribute("Norm"))
165 norm.setValue(0, 0, 1)
166
167 aSketchLine = aLineSketchFeature.addFeature("SketchLine")
168 aLineStartPoint = geomDataAPI_Point2D(aSketchLine.attribute("StartPoint"))
169 aLineEndPoint = geomDataAPI_Point2D(aSketchLine.attribute("EndPoint"))
170 aLineStartPoint.setValue(-50., 50.)
171 aLineEndPoint.setValue(-50., -50.)
172 aSession.finishOperation()
173
174 # Build shape from sketcher results
175 aLineSketchResult = aLineSketchFeature.firstResult()
176 aLineSketchShape = modelAPI_ResultConstruction(aLineSketchResult).shape()
177 aShapeExplorer = GeomAPI_ShapeExplorer(aLineSketchShape, GeomAPI_Shape.EDGE)
178 aLineEdge = aShapeExplorer.current()
179
180 #=========================================================================
181 # Make revolution fuse
182 #=========================================================================
183 aSession.startOperation()
184 anRevolutionFuseFt = featureToCompositeFeature(aPart.addFeature("RevolutionFuse"))
185 assert (anRevolutionFuseFt.getKind() == "RevolutionFuse")
186 # selection type FACE=4
187 aSession.startOperation()
188 aCircleSketchFeature = featureToCompositeFeature(anRevolutionFuseFt.addFeature("Sketch"))
189 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
190 origin.setValue(0, 0, 50)
191 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
192 dirx.setValue(1, 0, 0)
193 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
194 norm.setValue(0, 0, 1)
195 aCircleSketchFeature.selection("External").selectSubShape("face", "Extrusion_1/To_Face_1")
196 aSession.startOperation()
197 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
198 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
199 aCircleRadius = aSketchCircle.real("CircleRadius")
200 anCircleCentr.setValue(0, 0)
201 aCircleRadius.setValue(10)
202 aSession.finishOperation()
203 aSession.finishOperation()
204 aSession.startOperation()
205 aCircleSketchFeature.execute() # execute for sketch should be called here, because it is not set as current feature, so it is disabled.
206 anRevolutionFuseFt.selectionList("base").append(aCircleSketchFeature.firstResult(), None)
207 anRevolutionFuseFt.selection("axis_object").setValue(aLineSketchResult, aLineEdge)
208 anRevolutionFuseFt.string("CreationMethod").setValue("ByPlanesAndOffsets")
209 anRevolutionFuseFt.real("from_angle").setValue(0) #TODO: remove
210 anRevolutionFuseFt.real("to_angle").setValue(0) #TODO: remove
211 anRevolutionFuseFt.selection("to_object").setValue(aToResult, None)
212 anRevolutionFuseFt.real("to_offset").setValue(0)
213 anRevolutionFuseFt.selection("from_object").setValue(None, None)
214 anRevolutionFuseFt.real("from_offset").setValue(0)
215 anRevolutionFuseFt.selectionList("main_objects").append(modelAPI_ResultCompSolid(anExtrusionResult).subResult(1), None)
216 aSession.finishOperation()
217 aSession.finishOperation()
218
219 #=========================================================================
220 # Test results
221 #=========================================================================
222 aFactory = ModelAPI_Session.get().validators()
223 assert (aFactory.validate(anRevolutionFuseFt))
224 assert (len(anRevolutionFuseFt.results()) > 0)
225 aCurrentResult = modelAPI_ResultBody(anRevolutionFuseFt.firstResult())
226 assert (aCurrentResult is not None)
227
228 from salome.shaper import model
229 assert(model.checkPythonDump())