Quellcode durchsuchen

Exponential zooming and relative stickiness.

jonnedtc vor 6 Jahren
Ursprung
Commit
148892ed76
4 geänderte Dateien mit 12 neuen und 10 gelöschten Zeilen
  1. 7 6
      labelme/app.py
  2. 1 1
      labelme/config/default_config.yaml
  3. 3 2
      labelme/widgets/canvas.py
  4. 1 1
      labelme/widgets/zoom_widget.py

+ 7 - 6
labelme/app.py

@@ -346,10 +346,10 @@ class MainWindow(QtWidgets.QMainWindow):
         )
         self.zoomWidget.setEnabled(False)
 
-        zoomIn = action('Zoom &In', functools.partial(self.addZoom, 10),
+        zoomIn = action('Zoom &In', functools.partial(self.addZoom, 1.1),
                         shortcuts['zoom_in'], 'zoom-in',
                         'Increase zoom level', enabled=False)
-        zoomOut = action('&Zoom Out', functools.partial(self.addZoom, -10),
+        zoomOut = action('&Zoom Out', functools.partial(self.addZoom, 0.9),
                          shortcuts['zoom_out'], 'zoom-out',
                          'Decrease zoom level', enabled=False)
         zoomOrg = action('&Original size',
@@ -1069,13 +1069,14 @@ class MainWindow(QtWidgets.QMainWindow):
         self.zoomMode = self.MANUAL_ZOOM
         self.zoomWidget.setValue(value)
 
-    def addZoom(self, increment=10):
-        self.setZoom(self.zoomWidget.value() + increment)
+    def addZoom(self, increment=1.1):
+        self.setZoom(self.zoomWidget.value() * increment)
 
     def zoomRequest(self, delta, pos):
         canvas_width_old = self.canvas.width()
-
-        units = delta * 0.1
+        units = 1.1
+        if delta < 0:
+            units = 0.9
         self.addZoom(units)
 
         canvas_width_new = self.canvas.width()

+ 1 - 1
labelme/config/default_config.yaml

@@ -40,7 +40,7 @@ fit_to_content:
   column: true
   row: false
 
-epsilon: 11.0
+epsilon: 10.0
 
 shortcuts:
   close: Ctrl+W

+ 3 - 2
labelme/widgets/canvas.py

@@ -36,7 +36,7 @@ class Canvas(QtWidgets.QWidget):
     _fill_drawing = False
 
     def __init__(self, *args, **kwargs):
-        self.epsilon = kwargs.pop('epsilon', 11.0)
+        self.epsilon = kwargs.pop('epsilon', 10.0)
         super(Canvas, self).__init__(*args, **kwargs)
         # Initialise local state.
         self.mode = self.EDIT
@@ -542,7 +542,8 @@ class Canvas(QtWidgets.QWidget):
         # d = distance(p1 - p2)
         # m = (p1-p2).manhattanLength()
         # print "d %.2f, m %d, %.2f" % (d, m, d - m)
-        return labelme.utils.distance(p1 - p2) < self.epsilon
+        # divide by scale to allow more precision when zoomed in
+        return labelme.utils.distance(p1 - p2) < (self.epsilon / self.scale)
 
     def intersectionPoint(self, p1, p2):
         # Cycle through each image edge in clockwise fashion,

+ 1 - 1
labelme/widgets/zoom_widget.py

@@ -8,7 +8,7 @@ class ZoomWidget(QtWidgets.QSpinBox):
     def __init__(self, value=100):
         super(ZoomWidget, self).__init__()
         self.setButtonSymbols(QtWidgets.QAbstractSpinBox.NoButtons)
-        self.setRange(1, 500)
+        self.setRange(10, 1000)
         self.setSuffix(' %')
         self.setValue(value)
         self.setToolTip('Zoom Level')