Salome HOME
Fixes for Boolean operations;
[modules/shaper.git] / src / FeaturesPlugin / Test / TestRevolutionCut.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 # Create a part for extrusion
15 aSession.startOperation()
16 aPartFeature = aDocument.addFeature("Part")
17 aSession.finishOperation()
18 assert (len(aPartFeature.results()) == 1)
19 # Another way is:
20 # aPart = aSession.activeDocument()
21 aPartResult = modelAPI_ResultPart(aPartFeature.firstResult())
22 aPart = aPartResult.partDoc()
23 #=========================================================================
24 # Create a sketch circle to extrude
25 #=========================================================================
26 aSession.startOperation()
27 aCircleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
28 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
29 origin.setValue(0, 0, 0)
30 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
31 dirx.setValue(1, 0, 0)
32 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
33 norm.setValue(0, 0, 1)
34 # Create circle
35 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
36 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
37 aCircleRadius = aSketchCircle.real("CircleRadius")
38 anCircleCentr.setValue(0, 0)
39 aCircleRadius.setValue(20)
40 aSession.finishOperation()
41 #=========================================================================
42 # Make extrusion on circle
43 #=========================================================================
44 # Build shape from sketcher results
45 aCircleSketchResult = aCircleSketchFeature.firstResult()
46 aCircleSketchEdges = modelAPI_ResultConstruction(aCircleSketchResult).shape()
47 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin")).pnt()
48 dirX = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX")).dir()
49 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm")).dir()
50 aCircleSketchFaces = ShapeList()
51 GeomAlgoAPI_SketchBuilder.createFaces(
52     origin, dirX, norm, aCircleSketchEdges, aCircleSketchFaces)
53 assert (len(aCircleSketchFaces) > 0)
54 assert (aCircleSketchFaces[0] is not None)
55 # Create extrusion
56 aSession.startOperation()
57 anExtrusionFt = aPart.addFeature("Extrusion")
58 assert (anExtrusionFt.getKind() == "Extrusion")
59 # selection type FACE=4
60 anExtrusionFt.selectionList("base").append(
61     aCircleSketchResult, aCircleSketchFaces[0])
62 anExtrusionFt.string("CreationMethod").setValue("BySizes")
63 anExtrusionFt.real("to_size").setValue(50)
64 anExtrusionFt.real("from_size").setValue(0)
65 anExtrusionFt.real("to_offset").setValue(0) #TODO: remove
66 anExtrusionFt.real("from_offset").setValue(0) #TODO: remove
67 anExtrusionFt.execute()
68 aSession.finishOperation()
69 assert (anExtrusionFt.real("to_size").value() == 50.0)
70
71 # Check extrusion results
72 assert (len(anExtrusionFt.results()) > 0)
73 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
74 assert (anExtrusionResult is not None)
75
76 #=========================================================================
77 # Create a sketch line to revol
78 #=========================================================================
79 aSession.startOperation()
80 aLineSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
81 origin = geomDataAPI_Point(aLineSketchFeature.attribute("Origin"))
82 origin.setValue(0, 0, 50)
83 dirx = geomDataAPI_Dir(aLineSketchFeature.attribute("DirX"))
84 dirx.setValue(1, 0, 0)
85 norm = geomDataAPI_Dir(aLineSketchFeature.attribute("Norm"))
86 norm.setValue(0, 0, 1)
87 aLineSketchFeature.selection("External").selectSubShape("face", "Extrusion_1/TopFace_1")
88
89 aSketchLine = aLineSketchFeature.addFeature("SketchLine")
90 aLineStartPoint = geomDataAPI_Point2D(aSketchLine.attribute("StartPoint"))
91 aLineEndPoint = geomDataAPI_Point2D(aSketchLine.attribute("EndPoint"))
92 aLineStartPoint.setValue(-20, -20)
93 aLineEndPoint.setValue(20, -20)
94 aSession.finishOperation()
95
96 # Build shape from sketcher results
97 aLineSketchResult = aLineSketchFeature.firstResult()
98 aLineSketchShape = modelAPI_ResultConstruction(aLineSketchResult).shape()
99 aShapeExplorer = GeomAPI_ShapeExplorer(aLineSketchShape, GeomAPI_Shape.EDGE)
100 aLineEdge = aShapeExplorer.current()
101
102 #=========================================================================
103 # Make revolution cut
104 #=========================================================================
105 aSession.startOperation()
106 anRevolutionCutFt = featureToCompositeFeature(aPart.addFeature("RevolutionCut"))
107 assert (anRevolutionCutFt.getKind() == "RevolutionCut")
108 # selection type FACE=4
109 aSession.startOperation()
110 aCircleSketchFeature = featureToCompositeFeature(anRevolutionCutFt.addFeature("Sketch"))
111 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
112 origin.setValue(0, 0, 50)
113 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
114 dirx.setValue(1, 0, 0)
115 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
116 norm.setValue(0, 0, 1)
117 aCircleSketchFeature.selection("External").selectSubShape("face", "Extrusion_1/To_Face_1")
118 aSession.startOperation()
119 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
120 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
121 aCircleRadius = aSketchCircle.real("CircleRadius")
122 anCircleCentr.setValue(0, 0)
123 aCircleRadius.setValue(10)
124 aSession.finishOperation()
125 aSession.finishOperation()
126 aSession.startOperation()
127 aCircleSketchFeature.execute() # execute for sketch should be called here, because it is not set as current feature, so it is disabled.
128 anRevolutionCutFt.selectionList("base").append(aCircleSketchFeature.firstResult(), None)
129 anRevolutionCutFt.selection("axis_object").setValue(aLineSketchResult, aLineEdge)
130 anRevolutionCutFt.string("CreationMethod").setValue("ByAngles")
131 anRevolutionCutFt.real("to_angle").setValue(50)
132 anRevolutionCutFt.real("from_angle").setValue(50)
133 anRevolutionCutFt.real("to_offset").setValue(0) #TODO: remove
134 anRevolutionCutFt.real("from_offset").setValue(0) #TODO: remove
135 anRevolutionCutFt.selectionList("main_objects").append(anExtrusionResult, anExtrusionResult.shape())
136 aSession.finishOperation()
137 aSession.finishOperation()
138
139 #=========================================================================
140 # Test results
141 #=========================================================================
142 aFactory = ModelAPI_Session.get().validators()
143 assert (aFactory.validate(anRevolutionCutFt))
144 assert (len(anRevolutionCutFt.results()) > 0)
145 aCurrentResult = modelAPI_ResultBody(anRevolutionCutFt.firstResult())
146 assert (aCurrentResult is not None)