@@ -90,6 +90,19 @@ def onselect(epress, erelease):
90
90
assert tool .center == (180 , 190 )
91
91
92
92
93
+ def _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new ,
94
+ use_key = None ):
95
+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
96
+ if use_key is not None :
97
+ do_event (tool , 'on_key_press' , key = use_key )
98
+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
99
+ if use_key is not None :
100
+ do_event (tool , 'on_key_release' , key = use_key )
101
+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
102
+
103
+ return tool
104
+
105
+
93
106
def test_rectangle_resize ():
94
107
ax = get_ax ()
95
108
@@ -98,46 +111,36 @@ def onselect(epress, erelease):
98
111
99
112
tool = widgets .RectangleSelector (ax , onselect , interactive = True )
100
113
# Create rectangle
101
- do_event (tool , 'press' , xdata = 0 , ydata = 10 , button = 1 )
102
- do_event (tool , 'onmove' , xdata = 100 , ydata = 120 , button = 1 )
103
- do_event (tool , 'release' , xdata = 100 , ydata = 120 , button = 1 )
114
+ _resize_rectangle (tool , 0 , 10 , 100 , 120 )
104
115
assert tool .extents == (0.0 , 100.0 , 10.0 , 120.0 )
105
116
106
117
# resize NE handle
107
118
extents = tool .extents
108
119
xdata , ydata = extents [1 ], extents [3 ]
109
120
xdata_new , ydata_new = xdata + 10 , ydata + 5
110
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
111
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
112
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
113
- assert tool .extents == (0.0 , xdata_new , 10.0 , ydata_new )
121
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
122
+ assert tool .extents == (extents [0 ], xdata_new , extents [2 ], ydata_new )
114
123
115
124
# resize E handle
116
125
extents = tool .extents
117
126
xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
118
127
xdata_new , ydata_new = xdata + 10 , ydata
119
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
120
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
121
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
122
- assert tool .extents == (0.0 , xdata_new , 10.0 , 125.0 )
128
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
129
+ assert tool .extents == (extents [0 ], xdata_new , extents [2 ], extents [3 ])
123
130
124
131
# resize W handle
125
132
extents = tool .extents
126
133
xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
127
134
xdata_new , ydata_new = xdata + 15 , ydata
128
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
129
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
130
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
131
- assert tool .extents == (xdata_new , 120.0 , 10.0 , 125.0 )
135
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
136
+ assert tool .extents == (xdata_new , extents [1 ], extents [2 ], extents [3 ])
132
137
133
138
# resize SW handle
134
139
extents = tool .extents
135
140
xdata , ydata = extents [0 ], extents [2 ]
136
141
xdata_new , ydata_new = xdata + 20 , ydata + 25
137
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
138
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
139
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
140
- assert tool .extents == (xdata_new , 120.0 , ydata_new , 125.0 )
142
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
143
+ assert tool .extents == (xdata_new , extents [1 ], ydata_new , extents [3 ])
141
144
142
145
143
146
@pytest .mark .parametrize ('use_default_state' , [True , False ])
@@ -149,97 +152,209 @@ def onselect(epress, erelease):
149
152
150
153
tool = widgets .RectangleSelector (ax , onselect , interactive = True )
151
154
# Create rectangle
152
- do_event (tool , 'press' , xdata = 70 , ydata = 65 , button = 1 )
153
- do_event (tool , 'onmove' , xdata = 125 , ydata = 130 , button = 1 )
154
- do_event (tool , 'release' , xdata = 125 , ydata = 130 , button = 1 )
155
+ _resize_rectangle (tool , 70 , 65 , 125 , 130 )
155
156
assert tool .extents == (70.0 , 125.0 , 65.0 , 130.0 )
156
157
157
158
if use_default_state :
158
159
tool ._default_state .add ('center' )
160
+ use_key = None
161
+ else :
162
+ use_key = 'control'
159
163
160
164
# resize NE handle
161
165
extents = tool .extents
162
166
xdata , ydata = extents [1 ], extents [3 ]
163
167
xdiff , ydiff = 10 , 5
164
168
xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
165
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
166
- if not use_default_state :
167
- do_event (tool , 'on_key_press' , key = 'control' )
168
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
169
- if not use_default_state :
170
- do_event (tool , 'on_key_release' , key = 'control' )
171
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
172
- assert tool .extents == (70.0 - xdiff , xdata_new , 65.0 - ydiff , ydata_new )
169
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
170
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
171
+ extents [2 ] - ydiff , ydata_new )
173
172
174
173
# resize E handle
175
174
extents = tool .extents
176
175
xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
177
176
xdiff = 10
178
177
xdata_new , ydata_new = xdata + xdiff , ydata
179
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
180
- if not use_default_state :
181
- do_event (tool , 'on_key_press' , key = 'control' )
182
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
183
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
184
- if not use_default_state :
185
- do_event (tool , 'on_key_release' , key = 'control' )
186
- assert tool .extents == (60.0 - xdiff , xdata_new , 60.0 , 135.0 )
178
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
179
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
180
+ extents [2 ], extents [3 ])
187
181
188
182
# resize E handle negative diff
189
183
extents = tool .extents
190
184
xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
191
185
xdiff = - 20
192
186
xdata_new , ydata_new = xdata + xdiff , ydata
193
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
194
- if not use_default_state :
195
- do_event (tool , 'on_key_press' , key = 'control' )
196
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
197
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
198
- if not use_default_state :
199
- do_event (tool , 'on_key_release' , key = 'control' )
200
- assert tool .extents == (50.0 - xdiff , xdata_new , 60.0 , 135.0 )
187
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
188
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
189
+ extents [2 ], extents [3 ])
201
190
202
191
# resize W handle
203
192
extents = tool .extents
204
193
xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
205
194
xdiff = 15
206
195
xdata_new , ydata_new = xdata + xdiff , ydata
207
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
208
- if not use_default_state :
209
- do_event (tool , 'on_key_press' , key = 'control' )
210
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
211
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
212
- if not use_default_state :
213
- do_event (tool , 'on_key_release' , key = 'control' )
214
- assert tool .extents == (xdata_new , 125.0 - xdiff , 60.0 , 135.0 )
196
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
197
+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
198
+ extents [2 ], extents [3 ])
199
+
200
+ # resize W handle negative diff
201
+ extents = tool .extents
202
+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
203
+ xdiff = - 25
204
+ xdata_new , ydata_new = xdata + xdiff , ydata
205
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
206
+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
207
+ extents [2 ], extents [3 ])
208
+
209
+ # resize SW handle
210
+ extents = tool .extents
211
+ xdata , ydata = extents [0 ], extents [2 ]
212
+ xdiff , ydiff = 20 , 25
213
+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
214
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
215
+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
216
+ ydata_new , extents [3 ] - ydiff )
217
+
218
+
219
+ @pytest .mark .parametrize ('use_default_state' , [True , False ])
220
+ def test_rectangle_resize_square (use_default_state ):
221
+ ax = get_ax ()
222
+
223
+ def onselect (epress , erelease ):
224
+ pass
225
+
226
+ tool = widgets .RectangleSelector (ax , onselect , interactive = True )
227
+ # Create rectangle
228
+ _resize_rectangle (tool , 70 , 65 , 120 , 115 )
229
+ assert tool .extents == (70.0 , 120.0 , 65.0 , 115.0 )
230
+
231
+ if use_default_state :
232
+ tool ._default_state .add ('square' )
233
+ use_key = None
234
+ else :
235
+ use_key = 'shift'
236
+
237
+ # resize NE handle
238
+ extents = tool .extents
239
+ xdata , ydata = extents [1 ], extents [3 ]
240
+ xdiff , ydiff = 10 , 5
241
+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
242
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
243
+ assert tool .extents == (extents [0 ], xdata_new ,
244
+ extents [2 ], extents [3 ] + xdiff )
245
+
246
+ # resize E handle
247
+ extents = tool .extents
248
+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
249
+ xdiff = 10
250
+ xdata_new , ydata_new = xdata + xdiff , ydata
251
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
252
+ assert tool .extents == (extents [0 ], xdata_new ,
253
+ extents [2 ], extents [3 ] + xdiff )
254
+
255
+ # resize E handle negative diff
256
+ extents = tool .extents
257
+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
258
+ xdiff = - 20
259
+ xdata_new , ydata_new = xdata + xdiff , ydata
260
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
261
+ assert tool .extents == (extents [0 ], xdata_new ,
262
+ extents [2 ], extents [3 ] + xdiff )
215
263
216
264
# resize W handle
217
265
extents = tool .extents
218
266
xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
267
+ xdiff = 15
268
+ xdata_new , ydata_new = xdata + xdiff , ydata
269
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
270
+ assert tool .extents == (xdata_new , extents [1 ],
271
+ extents [2 ], extents [3 ] - xdiff )
272
+
273
+ # resize W handle negative diff
274
+ extents = tool .extents
275
+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
219
276
xdiff = - 25
220
277
xdata_new , ydata_new = xdata + xdiff , ydata
221
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
222
- if not use_default_state :
223
- do_event (tool , 'on_key_press' , key = 'control' )
224
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
225
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
226
- if not use_default_state :
227
- do_event (tool , 'on_key_release' , key = 'control' )
228
- assert tool .extents == (xdata_new , 110.0 - xdiff , 60.0 , 135.0 )
278
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
279
+ assert tool .extents == (xdata_new , extents [1 ],
280
+ extents [2 ], extents [3 ] - xdiff )
229
281
230
282
# resize SW handle
231
283
extents = tool .extents
232
284
xdata , ydata = extents [0 ], extents [2 ]
233
285
xdiff , ydiff = 20 , 25
234
286
xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
235
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
236
- if not use_default_state :
237
- do_event (tool , 'on_key_press' , key = 'control' )
238
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
239
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
240
- if not use_default_state :
241
- do_event (tool , 'on_key_release' , key = 'control' )
242
- assert tool .extents == (xdata_new , 135.0 - xdiff , ydata_new , 135.0 - ydiff )
287
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
288
+ assert tool .extents == (extents [0 ] + ydiff , extents [1 ],
289
+ ydata_new , extents [3 ])
290
+
291
+
292
+ def test_rectangle_resize_square_center ():
293
+ ax = get_ax ()
294
+
295
+ def onselect (epress , erelease ):
296
+ pass
297
+
298
+ tool = widgets .RectangleSelector (ax , onselect , interactive = True )
299
+ # Create rectangle
300
+ _resize_rectangle (tool , 70 , 65 , 120 , 115 )
301
+ tool ._default_state .add ('square' )
302
+ tool ._default_state .add ('center' )
303
+ assert tool .extents == (70.0 , 120.0 , 65.0 , 115.0 )
304
+
305
+ # resize NE handle
306
+ extents = tool .extents
307
+ xdata , ydata = extents [1 ], extents [3 ]
308
+ xdiff , ydiff = 10 , 5
309
+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
310
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
311
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
312
+ extents [2 ] - xdiff , extents [3 ] + xdiff )
313
+
314
+ # resize E handle
315
+ extents = tool .extents
316
+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
317
+ xdiff = 10
318
+ xdata_new , ydata_new = xdata + xdiff , ydata
319
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
320
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
321
+ extents [2 ] - xdiff , extents [3 ] + xdiff )
322
+
323
+ # resize E handle negative diff
324
+ extents = tool .extents
325
+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
326
+ xdiff = - 20
327
+ xdata_new , ydata_new = xdata + xdiff , ydata
328
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
329
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
330
+ extents [2 ] - xdiff , extents [3 ] + xdiff )
331
+
332
+ # resize W handle
333
+ extents = tool .extents
334
+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
335
+ xdiff = 5
336
+ xdata_new , ydata_new = xdata + xdiff , ydata
337
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
338
+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
339
+ extents [2 ] + xdiff , extents [3 ] - xdiff )
340
+
341
+ # resize W handle negative diff
342
+ extents = tool .extents
343
+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
344
+ xdiff = - 25
345
+ xdata_new , ydata_new = xdata + xdiff , ydata
346
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
347
+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
348
+ extents [2 ] + xdiff , extents [3 ] - xdiff )
349
+
350
+ # resize SW handle
351
+ extents = tool .extents
352
+ xdata , ydata = extents [0 ], extents [2 ]
353
+ xdiff , ydiff = 20 , 25
354
+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
355
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
356
+ assert tool .extents == (extents [0 ] + ydiff , extents [1 ] - ydiff ,
357
+ ydata_new , extents [3 ] - ydiff )
243
358
244
359
245
360
def test_ellipse ():
0 commit comments