@@ -55,6 +55,19 @@ def test_rectangle_selector():
55
55
check_rectangle (props = dict (fill = True ))
56
56
57
57
58
+ def _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new ,
59
+ use_key = None ):
60
+ do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
61
+ if use_key is not None :
62
+ do_event (tool , 'on_key_press' , key = use_key )
63
+ do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
64
+ if use_key is not None :
65
+ do_event (tool , 'on_key_release' , key = use_key )
66
+ do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
67
+
68
+ return tool
69
+
70
+
58
71
@pytest .mark .parametrize ('drag_from_anywhere, new_center' ,
59
72
[[True , (60 , 75 )],
60
73
[False , (30 , 20 )]])
@@ -126,46 +139,36 @@ def onselect(epress, erelease):
126
139
127
140
tool = widgets .RectangleSelector (ax , onselect , interactive = True )
128
141
# Create rectangle
129
- do_event (tool , 'press' , xdata = 0 , ydata = 10 , button = 1 )
130
- do_event (tool , 'onmove' , xdata = 100 , ydata = 120 , button = 1 )
131
- do_event (tool , 'release' , xdata = 100 , ydata = 120 , button = 1 )
142
+ _resize_rectangle (tool , 0 , 10 , 100 , 120 )
132
143
assert tool .extents == (0.0 , 100.0 , 10.0 , 120.0 )
133
144
134
145
# resize NE handle
135
146
extents = tool .extents
136
147
xdata , ydata = extents [1 ], extents [3 ]
137
148
xdata_new , ydata_new = xdata + 10 , ydata + 5
138
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
139
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
140
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
141
- assert tool .extents == (0.0 , xdata_new , 10.0 , ydata_new )
149
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
150
+ assert tool .extents == (extents [0 ], xdata_new , extents [2 ], ydata_new )
142
151
143
152
# resize E handle
144
153
extents = tool .extents
145
154
xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
146
155
xdata_new , ydata_new = xdata + 10 , ydata
147
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
148
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
149
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
150
- assert tool .extents == (0.0 , xdata_new , 10.0 , 125.0 )
156
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
157
+ assert tool .extents == (extents [0 ], xdata_new , extents [2 ], extents [3 ])
151
158
152
159
# resize W handle
153
160
extents = tool .extents
154
161
xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
155
162
xdata_new , ydata_new = xdata + 15 , ydata
156
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
157
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
158
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
159
- assert tool .extents == (xdata_new , 120.0 , 10.0 , 125.0 )
163
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
164
+ assert tool .extents == (xdata_new , extents [1 ], extents [2 ], extents [3 ])
160
165
161
166
# resize SW handle
162
167
extents = tool .extents
163
168
xdata , ydata = extents [0 ], extents [2 ]
164
169
xdata_new , ydata_new = xdata + 20 , ydata + 25
165
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
166
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
167
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
168
- assert tool .extents == (xdata_new , 120.0 , ydata_new , 125.0 )
170
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
171
+ assert tool .extents == (xdata_new , extents [1 ], ydata_new , extents [3 ])
169
172
170
173
171
174
@pytest .mark .parametrize ('use_default_state' , [True , False ])
@@ -177,97 +180,209 @@ def onselect(epress, erelease):
177
180
178
181
tool = widgets .RectangleSelector (ax , onselect , interactive = True )
179
182
# Create rectangle
180
- do_event (tool , 'press' , xdata = 70 , ydata = 65 , button = 1 )
181
- do_event (tool , 'onmove' , xdata = 125 , ydata = 130 , button = 1 )
182
- do_event (tool , 'release' , xdata = 125 , ydata = 130 , button = 1 )
183
+ _resize_rectangle (tool , 70 , 65 , 125 , 130 )
183
184
assert tool .extents == (70.0 , 125.0 , 65.0 , 130.0 )
184
185
185
186
if use_default_state :
186
187
tool ._default_state .add ('center' )
188
+ use_key = None
189
+ else :
190
+ use_key = 'control'
187
191
188
192
# resize NE handle
189
193
extents = tool .extents
190
194
xdata , ydata = extents [1 ], extents [3 ]
191
195
xdiff , ydiff = 10 , 5
192
196
xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
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
- if not use_default_state :
198
- do_event (tool , 'on_key_release' , key = 'control' )
199
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
200
- assert tool .extents == (70.0 - xdiff , xdata_new , 65.0 - ydiff , ydata_new )
197
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
198
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
199
+ extents [2 ] - ydiff , ydata_new )
201
200
202
201
# resize E handle
203
202
extents = tool .extents
204
203
xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
205
204
xdiff = 10
206
205
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 == (60.0 - xdiff , xdata_new , 60.0 , 135.0 )
206
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
207
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
208
+ extents [2 ], extents [3 ])
215
209
216
210
# resize E handle negative diff
217
211
extents = tool .extents
218
212
xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
219
213
xdiff = - 20
220
214
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 == (50.0 - xdiff , xdata_new , 60.0 , 135.0 )
215
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
216
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
217
+ extents [2 ], extents [3 ])
229
218
230
219
# resize W handle
231
220
extents = tool .extents
232
221
xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
233
222
xdiff = 15
234
223
xdata_new , ydata_new = xdata + xdiff , ydata
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 , 125.0 - xdiff , 60.0 , 135.0 )
224
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
225
+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
226
+ extents [2 ], extents [3 ])
227
+
228
+ # resize W handle negative diff
229
+ extents = tool .extents
230
+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
231
+ xdiff = - 25
232
+ xdata_new , ydata_new = xdata + xdiff , ydata
233
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
234
+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
235
+ extents [2 ], extents [3 ])
236
+
237
+ # resize SW handle
238
+ extents = tool .extents
239
+ xdata , ydata = extents [0 ], extents [2 ]
240
+ xdiff , ydiff = 20 , 25
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 == (xdata_new , extents [1 ] - xdiff ,
244
+ ydata_new , extents [3 ] - ydiff )
245
+
246
+
247
+ @pytest .mark .parametrize ('use_default_state' , [True , False ])
248
+ def test_rectangle_resize_square (use_default_state ):
249
+ ax = get_ax ()
250
+
251
+ def onselect (epress , erelease ):
252
+ pass
253
+
254
+ tool = widgets .RectangleSelector (ax , onselect , interactive = True )
255
+ # Create rectangle
256
+ _resize_rectangle (tool , 70 , 65 , 120 , 115 )
257
+ assert tool .extents == (70.0 , 120.0 , 65.0 , 115.0 )
258
+
259
+ if use_default_state :
260
+ tool ._default_state .add ('square' )
261
+ use_key = None
262
+ else :
263
+ use_key = 'shift'
264
+
265
+ # resize NE handle
266
+ extents = tool .extents
267
+ xdata , ydata = extents [1 ], extents [3 ]
268
+ xdiff , ydiff = 10 , 5
269
+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
270
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
271
+ assert tool .extents == (extents [0 ], xdata_new ,
272
+ extents [2 ], extents [3 ] + xdiff )
273
+
274
+ # resize E handle
275
+ extents = tool .extents
276
+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
277
+ xdiff = 10
278
+ xdata_new , ydata_new = xdata + xdiff , ydata
279
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
280
+ assert tool .extents == (extents [0 ], xdata_new ,
281
+ extents [2 ], extents [3 ] + xdiff )
282
+
283
+ # resize E handle negative diff
284
+ extents = tool .extents
285
+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
286
+ xdiff = - 20
287
+ xdata_new , ydata_new = xdata + xdiff , ydata
288
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
289
+ assert tool .extents == (extents [0 ], xdata_new ,
290
+ extents [2 ], extents [3 ] + xdiff )
243
291
244
292
# resize W handle
245
293
extents = tool .extents
246
294
xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
295
+ xdiff = 15
296
+ xdata_new , ydata_new = xdata + xdiff , ydata
297
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
298
+ assert tool .extents == (xdata_new , extents [1 ],
299
+ extents [2 ], extents [3 ] - xdiff )
300
+
301
+ # resize W handle negative diff
302
+ extents = tool .extents
303
+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
247
304
xdiff = - 25
248
305
xdata_new , ydata_new = xdata + xdiff , ydata
249
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
250
- if not use_default_state :
251
- do_event (tool , 'on_key_press' , key = 'control' )
252
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
253
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
254
- if not use_default_state :
255
- do_event (tool , 'on_key_release' , key = 'control' )
256
- assert tool .extents == (xdata_new , 110.0 - xdiff , 60.0 , 135.0 )
306
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
307
+ assert tool .extents == (xdata_new , extents [1 ],
308
+ extents [2 ], extents [3 ] - xdiff )
257
309
258
310
# resize SW handle
259
311
extents = tool .extents
260
312
xdata , ydata = extents [0 ], extents [2 ]
261
313
xdiff , ydiff = 20 , 25
262
314
xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
263
- do_event (tool , 'press' , xdata = xdata , ydata = ydata , button = 1 )
264
- if not use_default_state :
265
- do_event (tool , 'on_key_press' , key = 'control' )
266
- do_event (tool , 'onmove' , xdata = xdata_new , ydata = ydata_new , button = 1 )
267
- do_event (tool , 'release' , xdata = xdata_new , ydata = ydata_new , button = 1 )
268
- if not use_default_state :
269
- do_event (tool , 'on_key_release' , key = 'control' )
270
- assert tool .extents == (xdata_new , 135.0 - xdiff , ydata_new , 135.0 - ydiff )
315
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new , use_key )
316
+ assert tool .extents == (extents [0 ] + ydiff , extents [1 ],
317
+ ydata_new , extents [3 ])
318
+
319
+
320
+ def test_rectangle_resize_square_center ():
321
+ ax = get_ax ()
322
+
323
+ def onselect (epress , erelease ):
324
+ pass
325
+
326
+ tool = widgets .RectangleSelector (ax , onselect , interactive = True )
327
+ # Create rectangle
328
+ _resize_rectangle (tool , 70 , 65 , 120 , 115 )
329
+ tool ._default_state .add ('square' )
330
+ tool ._default_state .add ('center' )
331
+ assert tool .extents == (70.0 , 120.0 , 65.0 , 115.0 )
332
+
333
+ # resize NE handle
334
+ extents = tool .extents
335
+ xdata , ydata = extents [1 ], extents [3 ]
336
+ xdiff , ydiff = 10 , 5
337
+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
338
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
339
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
340
+ extents [2 ] - xdiff , extents [3 ] + xdiff )
341
+
342
+ # resize E handle
343
+ extents = tool .extents
344
+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
345
+ xdiff = 10
346
+ xdata_new , ydata_new = xdata + xdiff , ydata
347
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
348
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
349
+ extents [2 ] - xdiff , extents [3 ] + xdiff )
350
+
351
+ # resize E handle negative diff
352
+ extents = tool .extents
353
+ xdata , ydata = extents [1 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
354
+ xdiff = - 20
355
+ xdata_new , ydata_new = xdata + xdiff , ydata
356
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
357
+ assert tool .extents == (extents [0 ] - xdiff , xdata_new ,
358
+ extents [2 ] - xdiff , extents [3 ] + xdiff )
359
+
360
+ # resize W handle
361
+ extents = tool .extents
362
+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
363
+ xdiff = 5
364
+ xdata_new , ydata_new = xdata + xdiff , ydata
365
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
366
+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
367
+ extents [2 ] + xdiff , extents [3 ] - xdiff )
368
+
369
+ # resize W handle negative diff
370
+ extents = tool .extents
371
+ xdata , ydata = extents [0 ], extents [2 ] + (extents [3 ] - extents [2 ]) / 2
372
+ xdiff = - 25
373
+ xdata_new , ydata_new = xdata + xdiff , ydata
374
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
375
+ assert tool .extents == (xdata_new , extents [1 ] - xdiff ,
376
+ extents [2 ] + xdiff , extents [3 ] - xdiff )
377
+
378
+ # resize SW handle
379
+ extents = tool .extents
380
+ xdata , ydata = extents [0 ], extents [2 ]
381
+ xdiff , ydiff = 20 , 25
382
+ xdata_new , ydata_new = xdata + xdiff , ydata + ydiff
383
+ _resize_rectangle (tool , xdata , ydata , xdata_new , ydata_new )
384
+ assert tool .extents == (extents [0 ] + ydiff , extents [1 ] - ydiff ,
385
+ ydata_new , extents [3 ] - ydiff )
271
386
272
387
273
388
def test_ellipse ():
0 commit comments