Skip to content

Commit

Permalink
Image viewer masking UI fixes (dials#2731)
Browse files Browse the repository at this point in the history
- Fix glitches in dials.image_viewer masking tool (dials#1824, dials#1964)
- Allow panning and zoom change while polygons are drawn (dials#1824)
- Make sure polygon vertices are within a single panel since polygons
over multiple panels are not (yet) supported (dials#2712)
- Clear the current rectangle and exit the rectangle mode when failed
- Make masking errors visible as a dialog box (dials#2260)
  • Loading branch information
biochem-fan committed Sep 6, 2024
1 parent e637db3 commit 9d30a86
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 13 deletions.
1 change: 1 addition & 0 deletions newsfragments/2731.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
``dials.image_viewer``: Fix UI glitches in masking tools.
49 changes: 36 additions & 13 deletions src/dials/util/image_viewer/mask_frame.py
Original file line number Diff line number Diff line change
Expand Up @@ -685,8 +685,31 @@ def OnLeftDown(self, event):
self._circle_radius = None
return
elif self._mode_polygon:
self._mode_polygon_points.append(click_posn)
xgeo, ygeo = self._pyslip.ConvertView2Geo(click_posn)
xc, yc = self._pyslip.tiles.map_relative_to_picture_fast_slow(
xgeo, ygeo
)
p1, p0, p_id = self._pyslip.tiles.flex_image.picture_to_readout(yc, xc)

if p_id < 0:
return

# polygon must be within a single panel
if len(self._mode_polygon_points) > 0:
xgeo0, ygeo0 = self._mode_polygon_points[0]
xc0, yc0 = self._pyslip.tiles.map_relative_to_picture_fast_slow(
xgeo0, ygeo0
)
_, _, p_id0 = self._pyslip.tiles.flex_image.picture_to_readout(
yc0, xc0
)

if p_id0 != p_id:
return

self._mode_polygon_points.append((xgeo, ygeo))
self.DrawPolygon(self._mode_polygon_points)

event.Skip()

def OnLeftUp(self, event):
Expand All @@ -697,12 +720,16 @@ def OnLeftUp(self, event):
self._rectangle_x1y1 = click_posn
x0, y0 = self._rectangle_x0y0
x1, y1 = self._rectangle_x1y1
self.AddUntrustedRectangle(x0, y0, x1, y1)
self._pyslip.DeleteLayer(self._mode_rectangle_layer)
self._mode_rectangle_layer = None
self.mode_rectangle_button.SetValue(False)
self.OnUpdate(event)
return
try:
self.AddUntrustedRectangle(x0, y0, x1, y1)
except Exception as e:
wx.MessageBox(str(e))
finally:
self._pyslip.DeleteLayer(self._mode_rectangle_layer)
self._mode_rectangle_layer = None
self.mode_rectangle_button.SetValue(False)
self.OnUpdate(event)
return

elif self._mode_circle and self._circle_xy is not None:
xc, yc = self._circle_xy
Expand All @@ -711,7 +738,7 @@ def OnLeftUp(self, event):
try:
self.AddUntrustedCircle(xc, yc, xedge, yedge)
except Exception as e:
print(e)
wx.MessageBox(str(e))
finally:
self._pyslip.DeleteLayer(self._mode_circle_layer)
self._mode_circle_layer = None
Expand Down Expand Up @@ -806,10 +833,7 @@ def DrawPolygon(self, vertices):
for i in range(len(vertices) - 1):
polygon_data.append(
(
(
self._pyslip.ConvertView2Geo(vertices[i]),
self._pyslip.ConvertView2Geo(vertices[i + 1]),
),
(vertices[i], vertices[i + 1]),
d,
)
)
Expand All @@ -828,7 +852,6 @@ def AddUntrustedPolygon(self, vertices):
if len(vertices) < 4:
return
vertices.append(vertices[0])
vertices = [self._pyslip.ConvertView2Geo(v) for v in vertices]
vertices = [
self._pyslip.tiles.map_relative_to_picture_fast_slow(*v) for v in vertices
]
Expand Down

0 comments on commit 9d30a86

Please sign in to comment.