Salome HOME
Update all attributes of circle when changing any (issue #1316)
[modules/shaper.git] / src / SketchPlugin / Test / TestSketchArcCircle.py
1 """
2     TestSketchArcCircle.py
3     
4     static const std::string MY_SKETCH_ARC_ID("SketchArc");
5     static const std::string MY_CENTER_ID = "ArcCenter";
6     static const std::string MY_START_ID = "ArcStartPoint";
7     static const std::string MY_END_ID = "ArcEndPoint";
8     data()->addAttribute(SketchPlugin_Arc::CENTER_ID(), GeomDataAPI_Point2D::typeId());
9     data()->addAttribute(SketchPlugin_Arc::START_ID(),  GeomDataAPI_Point2D::typeId());
10     data()->addAttribute(SketchPlugin_Arc::END_ID(),    GeomDataAPI_Point2D::typeId());
11     
12     static const std::string MY_CIRCLE_ID("SketchCircle");
13     static const std::string MY_CIRCLE_CENTER_ID("CircleCenter");
14     static const std::string MY_CIRCLE_RADIUS_ID("CircleRadius");
15     data()->addAttribute(SketchPlugin_Circle::CENTER_ID(), GeomDataAPI_Point2D::typeId());
16     data()->addAttribute(SketchPlugin_Circle::RADIUS_ID(), ModelAPI_AttributeDouble::typeId());
17 """
18
19 #=========================================================================
20 # Initialization of the test
21 #=========================================================================
22 from GeomDataAPI import *
23 from ModelAPI import *
24
25 __updated__ = "2014-10-28"
26
27 aSession = ModelAPI_Session.get()
28 aDocument = aSession.moduleDocument()
29 #=========================================================================
30 # Creation of a sketch
31 #=========================================================================
32 aSession.startOperation()
33 #aSketchFeature = aDocument.addFeature("Sketch")
34 aSketchCommonFeature = aDocument.addFeature("Sketch")
35 aSketchFeature = featureToCompositeFeature(aSketchCommonFeature)
36 origin = geomDataAPI_Point(aSketchFeature.attribute("Origin"))
37 origin.setValue(0, 0, 0)
38 dirx = geomDataAPI_Dir(aSketchFeature.attribute("DirX"))
39 dirx.setValue(1, 0, 0)
40 norm = geomDataAPI_Dir(aSketchFeature.attribute("Norm"))
41 norm.setValue(0, 0, 1)
42 aSession.finishOperation()
43 #=========================================================================
44 # Creation of an arc
45 # 1. Test SketchPlugin_Arc attributes
46 # 2.
47 #=========================================================================
48 aSession.startOperation()
49 aSketchReflist = aSketchFeature.reflist("Features")
50 assert (not aSketchReflist.isInitialized())
51 assert (aSketchReflist.size() == 0)
52 assert (len(aSketchReflist.list()) == 0)
53 aSketchArc = aSketchFeature.addFeature("SketchArc")
54 assert (aSketchArc.getKind() == "SketchArc")
55 anArcCentr = geomDataAPI_Point2D(aSketchArc.attribute("ArcCenter"))
56 assert (anArcCentr.x() == 0)
57 assert (anArcCentr.y() == 0)
58 assert (not anArcCentr.isInitialized())
59 anArcCentr.setValue(10., 10.)
60 anArcStartPoint = geomDataAPI_Point2D(
61     aSketchArc.attribute("ArcStartPoint"))
62 assert (anArcStartPoint.x() == 0)
63 assert (anArcStartPoint.y() == 0)
64 assert (not anArcStartPoint.isInitialized())
65 anArcStartPoint.setValue(0., 50.)
66 anArcEndPoint = geomDataAPI_Point2D(aSketchArc.attribute("ArcEndPoint"))
67 assert (anArcEndPoint.x() == 0)
68 assert (anArcEndPoint.y() == 0)
69 assert (not anArcEndPoint.isInitialized())
70 anArcEndPoint.setValue(50., 0.)
71 aSession.finishOperation()
72 # check that values have been changed
73 aSketchReflist = aSketchFeature.reflist("Features")
74 assert (aSketchReflist.size() == 1)
75 assert (len(aSketchReflist.list()) == 1)
76 assert (anArcCentr.x() == 10.0)
77 assert (anArcCentr.y() == 10.0)
78 assert (anArcStartPoint.x() == 0.0)
79 assert (anArcStartPoint.y() == 50.0)
80 assert (anArcEndPoint.x() == 50.0)
81 assert (anArcEndPoint.y() == 0.0)
82 #=========================================================================
83 # Edit the arc:
84 # 1. Move whole arc
85 # 2. Change the start point
86 #=========================================================================
87
88 # MPV: movement now is done little bit in different way, just move points causes changing them
89 #  back t okeep the radius unchanged (projection back to the initial circle)
90 #aSession.startOperation()
91 #deltaX, deltaY = 5., 10.
92 #anArcCentr.setValue(anArcCentr.x() + deltaX, anArcCentr.y() + deltaY)
93 #anArcStartPoint.setValue(
94 #    anArcStartPoint.x() + deltaX, anArcStartPoint.y() + deltaY)
95 #anArcEndPoint.setValue(anArcEndPoint.x() + deltaX, anArcEndPoint.y() + deltaY)
96 #aSession.finishOperation()
97 #assert (anArcCentr.y() == 20)
98 #assert (anArcStartPoint.x() == 5)
99 #assert (anArcStartPoint.y() == 60)
100 #assert (anArcEndPoint.x() == 55)
101 #assert (anArcEndPoint.y() == 10)
102 ## Change the start point
103 #aSession.startOperation()
104 #anArcStartPoint.setValue(anArcStartPoint.x() + deltaX, anArcStartPoint.y())
105 #aPrevEndPointX = anArcEndPoint.x()
106 #aPrevEndPointY = anArcEndPoint.y()
107 #aSession.finishOperation()
108 #assert (anArcCentr.x() == 15)
109 #assert (anArcCentr.y() == 20)
110 #assert (anArcStartPoint.x() == 10)
111 #assert (anArcStartPoint.y() == 60)
112 #assert (anArcEndPoint.x() != aPrevEndPointX)
113 #assert (anArcEndPoint.y() != aPrevEndPointY)
114 #=========================================================================
115 # Check results of the Arc
116 #=========================================================================
117 aResult = aSketchArc.firstResult()
118 aResultConstruction = modelAPI_ResultConstruction(aResult)
119 aShape = aResultConstruction.shape()
120 assert (aShape is not None)
121 assert (not aShape.isNull())
122 #=========================================================================
123 # Create a circle
124 # 1. Test SketchPlugin_Circle.h attributes
125 # 2. ModelAPI_AttributeDouble attribute
126 #=========================================================================
127 aSession.startOperation()
128 aSketchReflist = aSketchFeature.reflist("Features")
129 # Arc is already added
130 assert (aSketchReflist.size() == 1)
131 assert (len(aSketchReflist.list()) == 1)
132 aSketchCircle = aSketchFeature.addFeature("SketchCircle")
133 assert (aSketchCircle.getKind() == "SketchCircle")
134 anCircleCentr = geomDataAPI_Point2D(aSketchCircle.attribute("CircleCenter"))
135 assert (anCircleCentr.x() == 0)
136 assert (anCircleCentr.y() == 0)
137 assert (not anCircleCentr.isInitialized())
138 aCircleRadius = aSketchCircle.real("CircleRadius")
139 assert (type(aCircleRadius) == ModelAPI_AttributeDouble)
140 # ModelAPI_AttributeDouble.typeId() is checked in ModelAPI_TestConstants
141 assert (aCircleRadius.attributeType() == ModelAPI_AttributeDouble.typeId())
142 assert (aCircleRadius.value() == 0)
143 anCircleCentr.setValue(-25., -25)
144 aCircleRadius.setValue(25.)
145 assert (anCircleCentr.x() == -25)
146 assert (anCircleCentr.y() == -25)
147 assert (aCircleRadius.value() == 25)
148 aSession.finishOperation()
149 #=========================================================================
150 # Edit the Cricle
151 # 1. Check that changing the centr of a circle does not affects radius
152 # 2. and vise versa; also check that int is acceptable as well as a real
153 #=========================================================================
154 aSession.startOperation()
155 anCircleCentr.setValue(10, 60)
156 aSession.finishOperation()
157 assert (anCircleCentr.x() == 10)
158 assert (anCircleCentr.y() == 60)
159 assert (aCircleRadius.value() == 25)
160 aSession.startOperation()
161 aCircleRadius.setValue(int(20))
162 aSession.finishOperation()
163 assert (anCircleCentr.x() == 10)
164 assert (anCircleCentr.y() == 60)
165 assert (aCircleRadius.value() == 20)
166 #=========================================================================
167 # End of test
168 #=========================================================================