Spaces:
Runtime error
Runtime error
File size: 3,930 Bytes
24be7a2 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 |
# -*- coding: utf-8 -*-
import numpy as np
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
color_list = [
QColor(0, 0, 0),
QColor(255, 250, 250),
QColor(220, 220, 220),
QColor(250, 235, 215),
QColor(255, 250, 205),
QColor(211, 211, 211),
QColor(70, 130, 180),
QColor(127, 255, 212),
QColor(0, 100, 0),
QColor(50, 205, 50),
QColor(255, 255, 0),
QColor(245, 222, 179),
QColor(255, 140, 0),
QColor(255, 0, 0),
QColor(16, 78, 139),
QColor(144, 238, 144),
QColor(50, 205, 174),
QColor(50, 155, 250),
QColor(160, 140, 88),
QColor(213, 140, 88),
QColor(90, 140, 90),
QColor(185, 210, 205),
QColor(130, 165, 180),
QColor(225, 141, 151)
]
class GraphicsScene(QGraphicsScene):
def __init__(self, mode, size, parent=None):
QGraphicsScene.__init__(self, parent)
self.mode = mode
self.size = size
self.mouse_clicked = False
self.prev_pt = None
# self.masked_image = None
# save the points
self.mask_points = []
for i in range(len(color_list)):
self.mask_points.append([])
# save the size of points
self.size_points = []
for i in range(len(color_list)):
self.size_points.append([])
# save the history of edit
self.history = []
def reset(self):
# save the points
self.mask_points = []
for i in range(len(color_list)):
self.mask_points.append([])
# save the size of points
self.size_points = []
for i in range(len(color_list)):
self.size_points.append([])
# save the history of edit
self.history = []
self.mode = 0
self.prev_pt = None
def mousePressEvent(self, event):
self.mouse_clicked = True
def mouseReleaseEvent(self, event):
self.prev_pt = None
self.mouse_clicked = False
def mouseMoveEvent(self, event): # drawing
if self.mouse_clicked:
if self.prev_pt:
self.drawMask(self.prev_pt, event.scenePos(),
color_list[self.mode], self.size)
pts = {}
pts['prev'] = (int(self.prev_pt.x()), int(self.prev_pt.y()))
pts['curr'] = (int(event.scenePos().x()),
int(event.scenePos().y()))
self.size_points[self.mode].append(self.size)
self.mask_points[self.mode].append(pts)
self.history.append(self.mode)
self.prev_pt = event.scenePos()
else:
self.prev_pt = event.scenePos()
def drawMask(self, prev_pt, curr_pt, color, size):
lineItem = QGraphicsLineItem(QLineF(prev_pt, curr_pt))
lineItem.setPen(QPen(color, size, Qt.SolidLine)) # rect
self.addItem(lineItem)
def erase_prev_pt(self):
self.prev_pt = None
def reset_items(self):
for i in range(len(self.items())):
item = self.items()[0]
self.removeItem(item)
def undo(self):
if len(self.items()) > 1:
if len(self.items()) >= 9:
for i in range(8):
item = self.items()[0]
self.removeItem(item)
if self.history[-1] == self.mode:
self.mask_points[self.mode].pop()
self.size_points[self.mode].pop()
self.history.pop()
else:
for i in range(len(self.items()) - 1):
item = self.items()[0]
self.removeItem(item)
if self.history[-1] == self.mode:
self.mask_points[self.mode].pop()
self.size_points[self.mode].pop()
self.history.pop()
|