Salome HOME
Merge branch 'master' into cgt/devCEA
[modules/shaper.git] / src / FeaturesPlugin / Test / TestTranslation.py
1 """
2       TestMovement.py
3       Unit test of FeaturesPlugin_Movement class
4
5       class FeaturesPlugin_Movement : public ModelAPI_Feature
6         static const std::string MY_MOVEMENT_ID("Translation");
7         static const std::string MY_OBJECTS_LIST_ID("main_objects");
8         static const std::string MY_AXIS_OBJECT_ID("axis_object");
9         static const std::string MY_DISTANCE_ID("distance");
10
11         data()->addAttribute(OBJECTS_LIST_ID(), ModelAPI_AttributeSelectionList::typeId());
12         data()->addAttribute(AXIS_OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
13         data()->addAttribute(DISTANCE_ID(), ModelAPI_AttributeDouble::typeId());
14 """
15 #=========================================================================
16 # Initialization of the test
17 #=========================================================================
18 from ModelAPI import *
19 from GeomDataAPI import *
20 from GeomAlgoAPI import *
21 from GeomAPI import *
22 import math
23
24 aSession = ModelAPI_Session.get()
25 aDocument = aSession.moduleDocument()
26 # Create a part for movement
27 aSession.startOperation()
28 aPartFeature = aDocument.addFeature("Part")
29 aSession.finishOperation()
30 assert (len(aPartFeature.results()) == 1)
31 # Another way is:
32 # aPart = aSession.activeDocument()
33 aPartResult = modelAPI_ResultPart(aPartFeature.firstResult())
34 aPart = aPartResult.partDoc()
35
36 #=========================================================================
37 # Create a sketch circle to extrude
38 #=========================================================================
39 aSession.startOperation()
40 aCircleSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
41 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin"))
42 origin.setValue(0, 0, 0)
43 dirx = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX"))
44 dirx.setValue(1, 0, 0)
45 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm"))
46 norm.setValue(0, 0, 1)
47 # Create circle
48 aSketchCircle = aCircleSketchFeature.addFeature("SketchCircle")
49 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
50 aCircleRadius = aSketchCircle.real("CircleRadius")
51 anCircleCentr.setValue(50, 50)
52 aCircleRadius.setValue(20)
53 aSession.finishOperation()
54 #=========================================================================
55 # Make extrusion on circle
56 #=========================================================================
57 # Build shape from sketcher results
58 aCircleSketchResult = aCircleSketchFeature.firstResult()
59 aCircleSketchEdges = modelAPI_ResultConstruction(aCircleSketchResult).shape()
60 origin = geomDataAPI_Point(aCircleSketchFeature.attribute("Origin")).pnt()
61 dirX = geomDataAPI_Dir(aCircleSketchFeature.attribute("DirX")).dir()
62 norm = geomDataAPI_Dir(aCircleSketchFeature.attribute("Norm")).dir()
63 aCircleSketchFaces = ShapeList()
64 GeomAlgoAPI_SketchBuilder.createFaces(
65     origin, dirX, norm, aCircleSketchEdges, aCircleSketchFaces)
66 assert (len(aCircleSketchFaces) > 0)
67 assert (aCircleSketchFaces[0] is not None)
68 # Create extrusion
69 aSession.startOperation()
70 anExtrusionFt = aPart.addFeature("Extrusion")
71 assert (anExtrusionFt.getKind() == "Extrusion")
72 # selection type FACE=4
73 anExtrusionFt.selectionList("base").append(
74     aCircleSketchResult, aCircleSketchFaces[0])
75 anExtrusionFt.string("CreationMethod").setValue("BySizes")
76 anExtrusionFt.real("to_size").setValue(50)
77 anExtrusionFt.real("from_size").setValue(0)
78 anExtrusionFt.real("to_offset").setValue(0) #TODO: remove
79 anExtrusionFt.real("from_offset").setValue(0) #TODO: remove
80 anExtrusionFt.execute()
81 aSession.finishOperation()
82 assert (anExtrusionFt.real("to_size").value() == 50)
83
84 # Check extrusion results
85 assert (len(anExtrusionFt.results()) > 0)
86 anExtrusionResult = modelAPI_ResultBody(anExtrusionFt.firstResult())
87 assert (anExtrusionResult is not None)
88
89 #=========================================================================
90 # Create a sketch line to movement
91 #=========================================================================
92 aSession.startOperation()
93 aLineSketchFeature = featureToCompositeFeature(aPart.addFeature("Sketch"))
94 origin = geomDataAPI_Point(aLineSketchFeature.attribute("Origin"))
95 origin.setValue(0, 0, 0)
96 dirx = geomDataAPI_Dir(aLineSketchFeature.attribute("DirX"))
97 dirx.setValue(1, 0, 0)
98 norm = geomDataAPI_Dir(aLineSketchFeature.attribute("Norm"))
99 norm.setValue(0, 0, 1)
100
101 aSketchLine = aLineSketchFeature.addFeature("SketchLine")
102 aLineStartPoint = geomDataAPI_Point2D(aSketchLine.attribute("StartPoint"))
103 aLineEndPoint = geomDataAPI_Point2D(aSketchLine.attribute("EndPoint"))
104 aLineStartPoint.setValue(-100, -100)
105 aLineEndPoint.setValue(100, -100)
106 aSession.finishOperation()
107
108 # Build shape from sketcher results
109 aLineSketchResult = aLineSketchFeature.firstResult()
110 aLineSketchShape = modelAPI_ResultConstruction(aLineSketchResult).shape()
111 aShapeExplorer = GeomAPI_ShapeExplorer(aLineSketchShape, GeomAPI_Shape.EDGE)
112 aLineEdge = aShapeExplorer.current()
113
114 #=========================================================================
115 # Test movement
116 #=========================================================================
117 aSession.startOperation()
118 aMoveFt = aPart.addFeature("Translation")
119 assert (aMoveFt.getKind() == "Translation")
120 aMoveFt.selectionList("main_objects").append(
121     anExtrusionResult, anExtrusionResult.shape())
122 aMoveFt.string("CreationMethod").setValue("ByAxisAndDistance")
123 aMoveFt.selection("axis_object").setValue(aLineSketchResult, aLineEdge)
124 aMoveFt.real("distance").setValue(100)
125 aMoveFt.execute()
126 aSession.finishOperation()
127 assert (aMoveFt.real("distance").value() == 100)
128
129 # Check movement results
130 aFactory = ModelAPI_Session.get().validators()
131 assert (aFactory.validate(aMoveFt))
132 assert (len(aMoveFt.results()) > 0)
133 aMoveResult = modelAPI_ResultBody(aMoveFt.firstResult())
134 assert (aMoveResult is not None)
135
136 #import model
137 #assert(model.checkPythonDump())