Text2Human / Text2Human /ui /mouse_event.py
yumingj's picture
update
bde71cb
# -*- 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()