Salome HOME
Update tests that create sketch faces by themselves and use these faces as arguments...
[modules/shaper.git] / src / FeaturesPlugin / Test / TestRevolutionFuse.py
1 ## Copyright (C) 2014-2017  CEA/DEN, EDF R&D
2 ##
3 ## This library is free software; you can redistribute it and/or
4 ## modify it under the terms of the GNU Lesser General Public
5 ## License as published by the Free Software Foundation; either
6 ## version 2.1 of the License, or (at your option) any later version.
7 ##
8 ## This library is distributed in the hope that it will be useful,
9 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
10 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 ## Lesser General Public License for more details.
12 ##
13 ## You should have received a copy of the GNU Lesser General Public
14 ## License along with this library; if not, write to the Free Software
15 ## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 ##
17 ## See http:##www.salome-platform.org/ or
18 ## email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
19 ##
20
21 """
22       TestRevolutionFuse.py
23       Unit test of FeaturesPlugin_RevolutionFuse class
24
25       class FeaturesPlugin_RevolutionFuse : public FeaturesPlugin_RevolutionBoolean
26                 static const std::string MY_REVOLUTION_ID("RevolutionFuse");
27         static const std::string MY_SKETCH_OBJECT_ID("sketch");
28         static const std::string MY_AXIS_ID("axis_object");
29         static const std::string METHOD_ATTR("CreationMethod");
30         static const std::string MY_TO_ANGLE_ID("to_angle");
31         static const std::string MY_FROM_ANGLE_ID("from_angle");
32         static const std::string MY_TO_OBJECT_ID("to_object");
33         static const std::string MY_TO_OFFSET_ID("to_offset");
34         static const std::string MY_FROM_OBJECT_ID("from_object");
35         static const std::string MY_FROM_OFFSET_ID("from_offset");
36         static const std::string MY_BOOLEAN_OBJECTS_ID("boolean_objects");
37
38         data()->addAttribute(SKETCH_OBJECT_ID(), ModelAPI_AttributeReference::typeId());
39         data()->addAttribute(AXIS_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
40                 data()->addAttribute(CREATION_METHOD(), ModelAPI_AttributeString::typeId());
41         data()->addAttribute(TO_ANGLE_ID(), ModelAPI_AttributeDouble::typeId());
42         data()->addAttribute(FROM_ANGLE_ID(), ModelAPI_AttributeDouble::typeId());
43         data()->addAttribute(TO_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
44         data()->addAttribute(TO_OFFSET_ID(), ModelAPI_AttributeDouble::typeId());
45         data()->addAttribute(FROM_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
46         data()->addAttribute(FROM_OFFSET_ID(), ModelAPI_AttributeSelection::typeId());
47         data()->addAttribute(BOOLEAN_OBJECTS_ID(), ModelAPI_AttributeSelectionList::typeId());
48 """
49 #=========================================================================
50 # Initialization of the test
51 #=========================================================================
52 from ModelAPI import *
53 from GeomDataAPI import *
54 from GeomAlgoAPI import *
55 from GeomAPI import *
56 import math
57
58 __updated__ = "2014-12-16"
59
60 aSession = ModelAPI_Session.get()
61 aDocument = aSession.moduleDocument()
62 # Create a part for extrusion
63 aSession.startOperation()
64 aPartFeature = aDocument.addFeature("Part")
65 aSession.finishOperation()
66 assert (len(aPartFeature.results()) == 1)
67 # Another way is:
68 # aPart = aSession.activeDocument()
69 aPartResult = modelAPI_ResultPart(aPartFeature.firstResult())
70 aPart = aPartResult.partDoc()
71 #=========================================================================
72 # Create a sketch circle to extrude
73 #=========================================================================
74 aSession.startOperation()
75 aCircleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
76 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
77 origin.setValue(0, 0, 0)
78 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
79 dirx.setValue(1, 0, 0)
80 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
81 norm.setValue(0, 0, 1)
82 # Create circle
83 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
84 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("circle_center"))
85 aCircleRadius = aSketchCircle.real("circle_radius")
86 anCircleCentr.setValue(0, 0)
87 aCircleRadius.setValue(20)
88 aSession.finishOperation()
89 #=========================================================================
90 # Make extrusion on circle
91 #=========================================================================
92 # Build shape from sketcher results
93 aCircleSketchResult = modelAPI_ResultConstruction(aCircleSketchFeature.firstResult())
94 assert (aCircleSketchResult.facesNum() > 0)
95 # Create extrusion
96 aSession.startOperation()
97 anExtrusionFt = aPart.addFeature("Extrusion")
98 assert (anExtrusionFt.getKind() == "Extrusion")
99 # selection type FACE=4
100 anExtrusionFt.selectionList("base").append(
101     aCircleSketchResult, aCircleSketchResult.face(0))
102 anExtrusionFt.string("CreationMethod").setValue("BySizes")
103 anExtrusionFt.real("to_size").setValue(50)
104 anExtrusionFt.real("from_size").setValue(0)
105 anExtrusionFt.real("to_offset").setValue(0) #TODO: remove
106 anExtrusionFt.real("from_offset").setValue(0) #TODO: remove
107 anExtrusionFt.execute()
108 aSession.finishOperation()
109 assert (anExtrusionFt.real("to_size").value() == 50.0)
110
111 # Check extrusion results
112 assert (len(anExtrusionFt.results()) > 0)
113 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
114 assert (anExtrusionResult is not None)
115
116 #=========================================================================
117 # Create a sketch line to revol
118 #=========================================================================
119 aSession.startOperation()
120 aLineSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
121 origin = geomDataAPI_Point(aLineSketchFeature.attribute("Origin"))
122 origin.setValue(0, 0, 50)
123 dirx = geomDataAPI_Dir(aLineSketchFeature.attribute("DirX"))
124 dirx.setValue(1, 0, 0)
125 norm = geomDataAPI_Dir(aLineSketchFeature.attribute("Norm"))
126 norm.setValue(0, 0, 1)
127 aLineSketchFeature.selection("External").selectSubShape("face", "Extrusion_1/TopFace")
128
129 aSketchLine = aLineSketchFeature.addFeature("SketchLine")
130 aLineStartPoint = geomDataAPI_Point2D(aSketchLine.attribute("StartPoint"))
131 aLineEndPoint = geomDataAPI_Point2D(aSketchLine.attribute("EndPoint"))
132 aLineStartPoint.setValue(-20, -20)
133 aLineEndPoint.setValue(20, -20)
134 aSession.finishOperation()
135
136 # Build shape from sketcher results
137 aLineSketchResult = aLineSketchFeature.firstResult()
138 aLineSketchShape = modelAPI_ResultConstruction(aLineSketchResult).shape()
139 aShapeExplorer = GeomAPI_ShapeExplorer(aLineSketchShape, GeomAPI_Shape.EDGE)
140 aLineEdge = aShapeExplorer.current()
141
142 #=========================================================================
143 # Make revolution fuse
144 #=========================================================================
145 aSession.startOperation()
146 anRevolutionFuseFt = featureToCompositeFeature(aPart.addFeature("RevolutionFuse"))
147 assert (anRevolutionFuseFt.getKind() == "RevolutionFuse")
148 # selection type FACE=4
149 aSession.startOperation()
150 aCircleSketchFeature = featureToCompositeFeature(anRevolutionFuseFt.addFeature("Sketch"))
151 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
152 origin.setValue(0, 0, 50)
153 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
154 dirx.setValue(1, 0, 0)
155 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
156 norm.setValue(0, 0, 1)
157 aCircleSketchFeature.selection("External").selectSubShape("face", "Extrusion_1/To_Face")
158 aSession.startOperation()
159 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
160 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("circle_center"))
161 aCircleRadius = aSketchCircle.real("circle_radius")
162 anCircleCentr.setValue(0, 0)
163 aCircleRadius.setValue(10)
164 aSession.finishOperation()
165 aSession.finishOperation()
166 aSession.startOperation()
167 aCircleSketchFeature.execute() # execute for sketch should be called here, because it is not set as current feature, so it is disabled.
168 anRevolutionFuseFt.selectionList("base").append(aCircleSketchFeature.firstResult(), None)
169 anRevolutionFuseFt.selection("axis_object").setValue(aLineSketchResult, aLineEdge)
170 anRevolutionFuseFt.string("CreationMethod").setValue("ByAngles")
171 anRevolutionFuseFt.real("to_angle").setValue(50)
172 anRevolutionFuseFt.real("from_angle").setValue(50)
173 anRevolutionFuseFt.real("to_offset").setValue(0) #TODO: remove
174 anRevolutionFuseFt.real("from_offset").setValue(0) #TODO: remove
175 anRevolutionFuseFt.selectionList("main_objects").append(anExtrusionResult, anExtrusionResult.shape())
176 aSession.finishOperation()
177 aSession.finishOperation()
178
179 #=========================================================================
180 # Test results
181 #=========================================================================
182 aFactory = ModelAPI_Session.get().validators()
183 assert (aFactory.validate(anRevolutionFuseFt))
184 assert (len(anRevolutionFuseFt.results()) > 0)
185 aCurrentResult = modelAPI_ResultBody(anRevolutionFuseFt.firstResult())
186 assert (aCurrentResult is not None)
187
188 from salome.shaper import model
189 assert(model.checkPythonDump())