提交 642d93e7 编写于 作者: K Kentaro Wada

Add create point mode

上级 2e039e8d
......@@ -285,6 +285,14 @@ class MainWindow(QtWidgets.QMainWindow, WindowMixin):
'Start drawing lines',
enabled=True,
)
createPointMode = action(
'Create Point',
lambda: self.toggleDrawMode(False, createMode='point'),
shortcuts['create_point'],
'objects',
'Start drawing points',
enabled=True,
)
editMode = action('Edit Polygons', self.setEditMode,
shortcuts['edit_polygon'], 'edit',
'Move and edit polygons', enabled=True)
......@@ -387,6 +395,7 @@ class MainWindow(QtWidgets.QMainWindow, WindowMixin):
createMode=createMode, editMode=editMode,
createRectangleMode=createRectangleMode,
createLineMode=createLineMode,
createPointMode=createPointMode,
shapeLineColor=shapeLineColor, shapeFillColor=shapeFillColor,
zoom=zoom, zoomIn=zoomIn, zoomOut=zoomOut, zoomOrg=zoomOrg,
fitWindow=fitWindow, fitWidth=fitWidth,
......@@ -397,16 +406,26 @@ class MainWindow(QtWidgets.QMainWindow, WindowMixin):
None, color1, color2),
# menu shown at right click
menu=(
createMode, createRectangleMode, createLineMode,
editMode, edit, copy,
delete, shapeLineColor, shapeFillColor,
undo, undoLastPoint, addPoint,
createMode,
createRectangleMode,
createLineMode,
createPointMode,
editMode,
edit,
copy,
delete,
shapeLineColor,
shapeFillColor,
undo,
undoLastPoint,
addPoint,
),
onLoadActive=(
close,
createMode,
createRectangleMode,
createLineMode,
createPointMode,
editMode,
),
onShapesPresent=(saveAs, hideAll, showAll),
......@@ -540,6 +559,7 @@ class MainWindow(QtWidgets.QMainWindow, WindowMixin):
self.actions.createMode,
self.actions.createRectangleMode,
self.actions.createLineMode,
self.actions.createPointMode,
self.actions.editMode,
)
addActions(self.menus.edit, actions + self.actions.editMenu)
......@@ -563,6 +583,7 @@ class MainWindow(QtWidgets.QMainWindow, WindowMixin):
self.actions.createMode.setEnabled(True)
self.actions.createRectangleMode.setEnabled(True)
self.actions.createLineMode.setEnabled(True)
self.actions.createPointMode.setEnabled(True)
title = __appname__
if self.filename is not None:
title = '{} - {}'.format(title, self.filename)
......@@ -635,16 +656,24 @@ class MainWindow(QtWidgets.QMainWindow, WindowMixin):
self.actions.createMode.setEnabled(edit)
self.actions.createRectangleMode.setEnabled(not edit)
self.actions.createLineMode.setEnabled(not edit)
self.actions.createPointMode.setEnabled(not edit)
elif createMode == 'rectangle':
self.actions.createMode.setEnabled(not edit)
self.actions.createRectangleMode.setEnabled(edit)
self.actions.createLineMode.setEnabled(not edit)
self.actions.createPointMode.setEnabled(not edit)
elif createMode == 'line':
self.actions.createMode.setEnabled(not edit)
self.actions.createRectangleMode.setEnabled(not edit)
self.actions.createLineMode.setEnabled(edit)
self.actions.createPointMode.setEnabled(not edit)
elif createMode == 'point':
self.actions.createMode.setEnabled(not edit)
self.actions.createRectangleMode.setEnabled(not edit)
self.actions.createLineMode.setEnabled(not edit)
self.actions.createPointMode.setEnabled(edit)
else:
raise ValueError
raise ValueError('Unsupported createMode: %s' % createMode)
self.actions.editMode.setEnabled(not edit)
def setEditMode(self):
......
......@@ -30,7 +30,7 @@ class Canvas(QtWidgets.QWidget):
CREATE, EDIT = 0, 1
# polygon, rectangle, or line
# polygon, rectangle, line, or point
_createMode = 'polygon'
def __init__(self, *args, **kwargs):
......@@ -48,6 +48,7 @@ class Canvas(QtWidgets.QWidget):
# - createMode == 'polygon': edge from last point to current
# - createMode == 'rectangle': diagonal line of the rectangle
# - createMode == 'line': the line
# - createMode == 'point': the point
self.line = Shape(line_color=self.lineColor)
self.prevPoint = QtCore.QPoint()
self.prevMovePoint = QtCore.QPoint()
......@@ -75,7 +76,7 @@ class Canvas(QtWidgets.QWidget):
@createMode.setter
def createMode(self, value):
if value not in ['polygon', 'rectangle', 'line']:
if value not in ['polygon', 'rectangle', 'line', 'point']:
raise ValueError('Unsupported createMode: %s' % value)
self._createMode = value
......@@ -174,6 +175,9 @@ class Canvas(QtWidgets.QWidget):
elif self.createMode == 'line':
self.line.points = [self.current[0], pos]
self.line.close()
elif self.createMode == 'point':
self.line.points = [self.current[0]]
self.line.close()
self.line.line_color = color
self.repaint()
self.current.highlightClear()
......@@ -288,10 +292,13 @@ class Canvas(QtWidgets.QWidget):
# Create new shape.
self.current = Shape()
self.current.addPoint(pos)
self.line.points = [pos, pos]
self.setHiding()
self.drawingPolygon.emit(True)
self.update()
if self.createMode == 'point':
self.finalise()
else:
self.line.points = [pos, pos]
self.setHiding()
self.drawingPolygon.emit(True)
self.update()
else:
self.selectShapePoint(pos)
self.prevPoint = pos
......@@ -627,6 +634,8 @@ class Canvas(QtWidgets.QWidget):
self.line.points = [self.current[-1], self.current[0]]
elif self.createMode in ['rectangle', 'line']:
self.current.points = self.current.points[0:1]
elif self.createMode == 'point':
self.current = None
self.drawingPolygon.emit(True)
def undoLastPoint(self):
......
......@@ -31,6 +31,7 @@ shortcuts:
create_polygon: Ctrl+N
create_rectangle: Ctrl+R
create_line: null
create_point: null
edit_polygon: Ctrl+J
delete_polygon: Delete
duplicate_polygon: Ctrl+D
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册