Salome HOME
#1329 arc tangent arc mode problem
[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/TopFace_1")
117 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
118 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
119 aCircleRadius = aSketchCircle.real("CircleRadius")
120 anCircleCentr.setValue(0, 0)
121 aCircleRadius.setValue(10)
122 aSession.finishOperation()
123 aSession.startOperation()
124 anExtrusionCutFt.string("CreationMethod").setValue("ByPlanesAndOffsets")
125 anExtrusionCutFt.real("to_size").setValue(0)
126 anExtrusionCutFt.real("from_size").setValue(0)
127 aToResult = aToPlaneFeature.firstResult()
128 aToShape = modelAPI_ResultConstruction(aToResult).shape()
129 anExtrusionCutFt.selection("to_object").setValue(aToResult, aToShape)
130 anExtrusionCutFt.real("to_offset").setValue(0)
131 aFromResult = aFromPlaneFeature.firstResult()
132 aFromShape = modelAPI_ResultConstruction(aFromResult).shape()
133 anExtrusionCutFt.selection("from_object").setValue(aFromResult, aFromShape)
134 anExtrusionCutFt.real("from_offset").setValue(0)
135 anExtrusionCutFt.selectionList("boolean_objects").append(modelAPI_ResultCompSolid(anExtrusionResult).subResult(1), None)
136 anExtrusionCutFt.execute()
137 aSession.finishOperation()
138 aSession.finishOperation()
139
140 #=========================================================================
141 # Test results
142 #=========================================================================
143 aFactory = ModelAPI_Session.get().validators()
144 assert (aFactory.validate(anExtrusionCutFt))
145 assert (len(anExtrusionCutFt.results()) > 0)
146 aCurrentResult = modelAPI_ResultBody(anExtrusionCutFt.firstResult())
147 assert (aCurrentResult is not None)
148 aSession.undo()
149
150 #=========================================================================
151 # Create a sketch line to revol
152 #=========================================================================
153 aSession.startOperation()
154 aLineSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
155 origin = geomDataAPI_Point(aLineSketchFeature.attribute("Origin"))
156 origin.setValue(0, 0, 0)
157 dirx = geomDataAPI_Dir(aLineSketchFeature.attribute("DirX"))
158 dirx.setValue(1, 0, 0)
159 norm = geomDataAPI_Dir(aLineSketchFeature.attribute("Norm"))
160 norm.setValue(0, 0, 1)
161
162 aSketchLine = aLineSketchFeature.addFeature("SketchLine")
163 aLineStartPoint = geomDataAPI_Point2D(aSketchLine.attribute("StartPoint"))
164 aLineEndPoint = geomDataAPI_Point2D(aSketchLine.attribute("EndPoint"))
165 aLineStartPoint.setValue(-50., 50.)
166 aLineEndPoint.setValue(-50., -50.)
167 aSession.finishOperation()
168
169 # Build shape from sketcher results
170 aLineSketchResult = aLineSketchFeature.firstResult()
171 aLineSketchShape = modelAPI_ResultConstruction(aLineSketchResult).shape()
172 aShapeExplorer = GeomAPI_ShapeExplorer(aLineSketchShape, GeomAPI_Shape.EDGE)
173 aLineEdge = aShapeExplorer.current()
174
175 #=========================================================================
176 # Make revolution fuse
177 #=========================================================================
178 aSession.startOperation()
179 anRevolutionFuseFt = featureToCompositeFeature(aPart.addFeature("RevolutionFuse"))
180 assert (anRevolutionFuseFt.getKind() == "RevolutionFuse")
181 # selection type FACE=4
182 aSession.startOperation()
183 aCircleSketchFeature = featureToCompositeFeature(anRevolutionFuseFt.addFeature("Sketch"))
184 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
185 origin.setValue(0, 0, 50)
186 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
187 dirx.setValue(1, 0, 0)
188 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
189 norm.setValue(0, 0, 1)
190 aCircleSketchFeature.selection("External").selectSubShape("face", "Extrusion_1/TopFace_1")
191 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
192 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
193 aCircleRadius = aSketchCircle.real("CircleRadius")
194 anCircleCentr.setValue(0, 0)
195 aCircleRadius.setValue(10)
196 aSession.finishOperation()
197 aSession.startOperation()
198 anRevolutionFuseFt.selection("axis_object").setValue(aLineSketchResult, aLineEdge)
199 anRevolutionFuseFt.string("CreationMethod").setValue("ByPlanesAndOffsets")
200 anRevolutionFuseFt.real("from_angle").setValue(0) #TODO: remove
201 anRevolutionFuseFt.real("to_angle").setValue(0) #TODO: remove
202 anRevolutionFuseFt.selection("to_object").setValue(aToResult, None)
203 anRevolutionFuseFt.real("to_offset").setValue(0)
204 anRevolutionFuseFt.selection("from_object").setValue(None, None)
205 anRevolutionFuseFt.real("from_offset").setValue(0)
206 anRevolutionFuseFt.selectionList("boolean_objects").append(modelAPI_ResultCompSolid(anExtrusionResult).subResult(1), None)
207 anRevolutionFuseFt.execute()
208 aSession.finishOperation()
209 aSession.finishOperation()
210
211 #=========================================================================
212 # Test results
213 #=========================================================================
214 aFactory = ModelAPI_Session.get().validators()
215 assert (aFactory.validate(anRevolutionFuseFt))
216 assert (len(anRevolutionFuseFt.results()) > 0)
217 aCurrentResult = modelAPI_ResultBody(anRevolutionFuseFt.firstResult())
218 assert (aCurrentResult is not None)
219