-
Notifications
You must be signed in to change notification settings - Fork 38
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BUG: Prevent some spatial ROI from getting too small #416
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -153,7 +153,21 @@ | |||||||||||||||||||||||||||||||||||||||
x = self.interact.selected_x | ||||||||||||||||||||||||||||||||||||||||
y = self.interact.selected_y | ||||||||||||||||||||||||||||||||||||||||
theta = None if self._roi is None else self._roi.theta | ||||||||||||||||||||||||||||||||||||||||
roi = RectangularROI(xmin=min(x), xmax=max(x), ymin=min(y), ymax=max(y), theta=theta) # noqa: E501 | ||||||||||||||||||||||||||||||||||||||||
x_min = min(x) | ||||||||||||||||||||||||||||||||||||||||
x_max = max(x) | ||||||||||||||||||||||||||||||||||||||||
y_min = min(y) | ||||||||||||||||||||||||||||||||||||||||
y_max = max(y) | ||||||||||||||||||||||||||||||||||||||||
# Avoid drawing invisible shape. | ||||||||||||||||||||||||||||||||||||||||
if isinstance(self._roi, RectangularROI): | ||||||||||||||||||||||||||||||||||||||||
dx = abs(x_max - x_min) | ||||||||||||||||||||||||||||||||||||||||
dy = abs(y_max - y_min) | ||||||||||||||||||||||||||||||||||||||||
if dx < 1: | ||||||||||||||||||||||||||||||||||||||||
x_min = self._roi.xmin | ||||||||||||||||||||||||||||||||||||||||
x_max = self._roi.xmax | ||||||||||||||||||||||||||||||||||||||||
if dy < 1: | ||||||||||||||||||||||||||||||||||||||||
y_min = self._roi.ymin | ||||||||||||||||||||||||||||||||||||||||
y_max = self._roi.ymax | ||||||||||||||||||||||||||||||||||||||||
Comment on lines
+156
to
+169
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Simpler to catch too small sizes already here imo; also the later check for There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. But I want it to snap back to original size. The actual bug we encounter is explained in the original post above and repeated here:
It happens when user drags and move an existing shape, not trying to resize it. So snapping to original size is the desired behavior. If you know why the input is weird in the first place and able to fix that, even better. But I could not figure it out. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Ah, I missed that part. But if the selector is in move mode, it should never change the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I cannot consistently reproduce this bug. It showed up in Imviz like this (after many tries):
If you print the |
||||||||||||||||||||||||||||||||||||||||
roi = RectangularROI(xmin=x_min, xmax=x_max, ymin=y_min, ymax=y_max, theta=theta) | ||||||||||||||||||||||||||||||||||||||||
self._roi = roi | ||||||||||||||||||||||||||||||||||||||||
self.viewer.apply_roi(roi) | ||||||||||||||||||||||||||||||||||||||||
if self.finalize_callback is not None: | ||||||||||||||||||||||||||||||||||||||||
|
@@ -398,6 +412,17 @@ | |||||||||||||||||||||||||||||||||||||||
yc = y.mean() | ||||||||||||||||||||||||||||||||||||||||
rx = abs(x[1] - x[0])/2 | ||||||||||||||||||||||||||||||||||||||||
ry = abs(y[1] - y[0])/2 | ||||||||||||||||||||||||||||||||||||||||
# Avoid drawing invisible shape. | ||||||||||||||||||||||||||||||||||||||||
if isinstance(self._roi, CircularROI): | ||||||||||||||||||||||||||||||||||||||||
if rx < 1: | ||||||||||||||||||||||||||||||||||||||||
rx = self._roi.radius | ||||||||||||||||||||||||||||||||||||||||
if ry < 1: | ||||||||||||||||||||||||||||||||||||||||
ry = self._roi.radius | ||||||||||||||||||||||||||||||||||||||||
elif isinstance(self._roi, EllipticalROI): | ||||||||||||||||||||||||||||||||||||||||
if rx < 1: | ||||||||||||||||||||||||||||||||||||||||
rx = self._roi.radius_x | ||||||||||||||||||||||||||||||||||||||||
if ry < 1: | ||||||||||||||||||||||||||||||||||||||||
ry = self._roi.radius_y | ||||||||||||||||||||||||||||||||||||||||
Comment on lines
413
to
+425
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Same as for rectangle |
||||||||||||||||||||||||||||||||||||||||
# We use a tolerance of 1e-2 below to match the tolerance set in glue-core | ||||||||||||||||||||||||||||||||||||||||
# https://github.com/glue-viz/glue/blob/6b968b352bc5ad68b95ad5e3bb25550782a69ee8/glue/viewers/matplotlib/state.py#L198 | ||||||||||||||||||||||||||||||||||||||||
if self._strict_circle: | ||||||||||||||||||||||||||||||||||||||||
|
@@ -519,7 +544,11 @@ | |||||||||||||||||||||||||||||||||||||||
rx = abs(x[1] - x[0]) * 0.5 | ||||||||||||||||||||||||||||||||||||||||
ry = abs(y[1] - y[0]) * 0.5 | ||||||||||||||||||||||||||||||||||||||||
outer_r = float(rx + ry) * 0.5 | ||||||||||||||||||||||||||||||||||||||||
if self._roi is None: | ||||||||||||||||||||||||||||||||||||||||
# Avoid drawing invisible shape. | ||||||||||||||||||||||||||||||||||||||||
if isinstance(self._roi, CircularAnnulusROI) and outer_r < 2: | ||||||||||||||||||||||||||||||||||||||||
outer_r = self._roi.outer_radius | ||||||||||||||||||||||||||||||||||||||||
inner_r = self._roi.inner_radius | ||||||||||||||||||||||||||||||||||||||||
elif self._roi is None: | ||||||||||||||||||||||||||||||||||||||||
Comment on lines
+547
to
+551
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Should really just replace |
||||||||||||||||||||||||||||||||||||||||
inner_r = outer_r * 0.5 # Hardcoded for now, user can edit later. | ||||||||||||||||||||||||||||||||||||||||
else: | ||||||||||||||||||||||||||||||||||||||||
# Resizing only changes outer r, avoid having inner_r >= outer_r afterwards. | ||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
set below