Salome HOME
Merge remote-tracking branch 'remotes/origin/HighLevelDump'
[modules/shaper.git] / src / FeaturesPlugin / Test / TestRevolutionFuse.py
1 """
2       TestRevolutionFuse.py
3       Unit test of FeaturesPlugin_RevolutionFuse class
4
5       class FeaturesPlugin_RevolutionFuse : public FeaturesPlugin_RevolutionBoolean
6                 static const std::string MY_REVOLUTION_ID("RevolutionFuse");
7         static const std::string MY_SKETCH_OBJECT_ID("sketch");
8         static const std::string MY_AXIS_ID("axis_object");
9         static const std::string METHOD_ATTR("CreationMethod");
10         static const std::string MY_TO_ANGLE_ID("to_angle");
11         static const std::string MY_FROM_ANGLE_ID("from_angle");
12         static const std::string MY_TO_OBJECT_ID("to_object");
13         static const std::string MY_TO_OFFSET_ID("to_offset");
14         static const std::string MY_FROM_OBJECT_ID("from_object");
15         static const std::string MY_FROM_OFFSET_ID("from_offset");
16         static const std::string MY_BOOLEAN_OBJECTS_ID("boolean_objects");
17
18         data()->addAttribute(SKETCH_OBJECT_ID(), ModelAPI_AttributeReference::typeId());
19         data()->addAttribute(AXIS_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
20                 data()->addAttribute(CREATION_METHOD(), ModelAPI_AttributeString::typeId());
21         data()->addAttribute(TO_ANGLE_ID(), ModelAPI_AttributeDouble::typeId());
22         data()->addAttribute(FROM_ANGLE_ID(), ModelAPI_AttributeDouble::typeId());
23         data()->addAttribute(TO_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
24         data()->addAttribute(TO_OFFSET_ID(), ModelAPI_AttributeDouble::typeId());
25         data()->addAttribute(FROM_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
26         data()->addAttribute(FROM_OFFSET_ID(), ModelAPI_AttributeSelection::typeId());
27         data()->addAttribute(BOOLEAN_OBJECTS_ID(), ModelAPI_AttributeSelectionList::typeId());
28 """
29 #=========================================================================
30 # Initialization of the test
31 #=========================================================================
32 from ModelAPI import *
33 from GeomDataAPI import *
34 from GeomAlgoAPI import *
35 from GeomAPI import *
36 import math
37
38 __updated__ = "2014-12-16"
39
40 aSession = ModelAPI_Session.get()
41 aDocument = aSession.moduleDocument()
42 # Create a part for extrusion
43 aSession.startOperation()
44 aPartFeature = aDocument.addFeature("Part")
45 aSession.finishOperation()
46 assert (len(aPartFeature.results()) == 1)
47 # Another way is:
48 # aPart = aSession.activeDocument()
49 aPartResult = modelAPI_ResultPart(aPartFeature.firstResult())
50 aPart = aPartResult.partDoc()
51 #=========================================================================
52 # Create a sketch circle to extrude
53 #=========================================================================
54 aSession.startOperation()
55 aCircleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
56 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
57 origin.setValue(0, 0, 0)
58 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
59 dirx.setValue(1, 0, 0)
60 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
61 norm.setValue(0, 0, 1)
62 # Create circle
63 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
64 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
65 aCircleRadius = aSketchCircle.real("CircleRadius")
66 anCircleCentr.setValue(0, 0)
67 aCircleRadius.setValue(20)
68 aSession.finishOperation()
69 #=========================================================================
70 # Make extrusion on circle
71 #=========================================================================
72 # Build shape from sketcher results
73 aCircleSketchResult = aCircleSketchFeature.firstResult()
74 aCircleSketchEdges = modelAPI_ResultConstruction(aCircleSketchResult).shape()
75 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin")).pnt()
76 dirX = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX")).dir()
77 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm")).dir()
78 aCircleSketchFaces = ShapeList()
79 GeomAlgoAPI_SketchBuilder.createFaces(
80     origin, dirX, norm, aCircleSketchEdges, aCircleSketchFaces)
81 assert (len(aCircleSketchFaces) > 0)
82 assert (aCircleSketchFaces[0] is not None)
83 # Create extrusion
84 aSession.startOperation()
85 anExtrusionFt = aPart.addFeature("Extrusion")
86 assert (anExtrusionFt.getKind() == "Extrusion")
87 # selection type FACE=4
88 anExtrusionFt.selectionList("base").append(
89     aCircleSketchResult, aCircleSketchFaces[0])
90 anExtrusionFt.string("CreationMethod").setValue("BySizes")
91 anExtrusionFt.real("to_size").setValue(50)
92 anExtrusionFt.real("from_size").setValue(0)
93 anExtrusionFt.real("to_offset").setValue(0) #TODO: remove
94 anExtrusionFt.real("from_offset").setValue(0) #TODO: remove
95 anExtrusionFt.execute()
96 aSession.finishOperation()
97 assert (anExtrusionFt.real("to_size").value() == 50.0)
98
99 # Check extrusion results
100 assert (len(anExtrusionFt.results()) > 0)
101 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
102 assert (anExtrusionResult is not None)
103
104 #=========================================================================
105 # Create a sketch line to revol
106 #=========================================================================
107 aSession.startOperation()
108 aLineSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
109 origin = geomDataAPI_Point(aLineSketchFeature.attribute("Origin"))
110 origin.setValue(0, 0, 50)
111 dirx = geomDataAPI_Dir(aLineSketchFeature.attribute("DirX"))
112 dirx.setValue(1, 0, 0)
113 norm = geomDataAPI_Dir(aLineSketchFeature.attribute("Norm"))
114 norm.setValue(0, 0, 1)
115 aLineSketchFeature.selection("External").selectSubShape("face", "Extrusion_1/TopFace_1")
116
117 aSketchLine = aLineSketchFeature.addFeature("SketchLine")
118 aLineStartPoint = geomDataAPI_Point2D(aSketchLine.attribute("StartPoint"))
119 aLineEndPoint = geomDataAPI_Point2D(aSketchLine.attribute("EndPoint"))
120 aLineStartPoint.setValue(-20, -20)
121 aLineEndPoint.setValue(20, -20)
122 aSession.finishOperation()
123
124 # Build shape from sketcher results
125 aLineSketchResult = aLineSketchFeature.firstResult()
126 aLineSketchShape = modelAPI_ResultConstruction(aLineSketchResult).shape()
127 aShapeExplorer = GeomAPI_ShapeExplorer(aLineSketchShape, GeomAPI_Shape.EDGE)
128 aLineEdge = aShapeExplorer.current()
129
130 #=========================================================================
131 # Make revolution fuse
132 #=========================================================================
133 aSession.startOperation()
134 anRevolutionFuseFt = featureToCompositeFeature(aPart.addFeature("RevolutionFuse"))
135 assert (anRevolutionFuseFt.getKind() == "RevolutionFuse")
136 # selection type FACE=4
137 aSession.startOperation()
138 aCircleSketchFeature = featureToCompositeFeature(anRevolutionFuseFt.addFeature("Sketch"))
139 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
140 origin.setValue(0, 0, 50)
141 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
142 dirx.setValue(1, 0, 0)
143 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
144 norm.setValue(0, 0, 1)
145 aCircleSketchFeature.selection("External").selectSubShape("face", "Extrusion_1/To_Face_1")
146 aSession.startOperation()
147 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
148 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
149 aCircleRadius = aSketchCircle.real("CircleRadius")
150 anCircleCentr.setValue(0, 0)
151 aCircleRadius.setValue(10)
152 aSession.finishOperation()
153 aSession.finishOperation()
154 aSession.startOperation()
155 aCircleSketchFeature.execute() # execute for sketch should be called here, because it is not set as current feature, so it is disabled.
156 anRevolutionFuseFt.selectionList("base").append(aCircleSketchFeature.firstResult(), None)
157 anRevolutionFuseFt.selection("axis_object").setValue(aLineSketchResult, aLineEdge)
158 anRevolutionFuseFt.string("CreationMethod").setValue("ByAngles")
159 anRevolutionFuseFt.real("to_angle").setValue(50)
160 anRevolutionFuseFt.real("from_angle").setValue(50)
161 anRevolutionFuseFt.real("to_offset").setValue(0) #TODO: remove
162 anRevolutionFuseFt.real("from_offset").setValue(0) #TODO: remove
163 anRevolutionFuseFt.selectionList("main_objects").append(anExtrusionResult, anExtrusionResult.shape())
164 aSession.finishOperation()
165 aSession.finishOperation()
166
167 #=========================================================================
168 # Test results
169 #=========================================================================
170 aFactory = ModelAPI_Session.get().validators()
171 assert (aFactory.validate(anRevolutionFuseFt))
172 assert (len(anRevolutionFuseFt.results()) > 0)
173 aCurrentResult = modelAPI_ResultBody(anRevolutionFuseFt.firstResult())
174 assert (aCurrentResult is not None)
175
176 import model
177 assert(model.checkPythonDump())