Raw File
# -*- coding: utf-8 -*-

from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import numpy as np
import cv2
import _thread as thread
import time

class OutputGraphicsScene(QGraphicsScene):
    def __init__(self, parent=None):
        QGraphicsScene.__init__(self, parent)
        # self.modes = mode_list
        self.mouse_clicked = False
        self.prev_pt = None
        self.setSceneRect(0,0,self.width(),self.height())
        # self.masked_image = None

        self.selectMode = 0

        # save the history of edit
        self.history = []

        self.ori_img = np.ones((512, 512, 3),dtype=np.uint8)*255

        self.mask_put = 1 # 1 marks use brush while 0 user erase
        self.convert = False
        # self.setPos(0 ,0)
        self.firstDisplay = True
        self.convert_on = False
        
    def reset(self):

        self.convert = False
        self.ori_img = np.ones((512, 512, 3),dtype=np.uint8)*255
        self.updatePixmap(True)

        self.prev_pt = None

    def setSketchImag(self, sketch_mat, mouse_up=False):

        self.ori_img = sketch_mat.copy()

        self.image_list = []
        self.image_list.append( self.ori_img.copy() )

    def mousePressEvent(self, event):
        if not self.mask_put or self.selectMode == 1:
            self.mouse_clicked = True
            self.prev_pt = None
        else:
            self.make_sketch(event.scenePos())

    def make_sketch_Eraser(self, pts):
        if len(pts)>0:
            for pt in pts:
                cv2.line(self.color_img,pt['prev'],pt['curr'],self.paint_color,self.paint_size )
                cv2.line(self.mask_img,pt['prev'],pt['curr'],(0,0,0),self.paint_size )

        self.updatePixmap()

    def modify_sketch(self, pts):
        if len(pts)>0:
            for pt in pts:
                cv2.line(self.ori_img,pt['prev'],pt['curr'],self.paint_color,self.paint_size )
        self.updatePixmap()


    def get_stk_color(self, color):
        self.stk_color = color

    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.image_list)>1:

            num = len(self.image_list)-2
            self.ori_img = self.image_list[num].copy()
            self.image_list.pop(num+1)

        self.updatePixmap(True)

    def getImage(self):
        return self.ori_img*(1-self.mask_img)  + self.color_img*self.mask_img


    def updatePixmap(self,mouse_up=False):

        sketch = self.ori_img
        qim = QImage(sketch.data, sketch.shape[1], sketch.shape[0], QImage.Format_RGB888)

        if self.firstDisplay :
            self.reset_items()
            self.imItem = self.addPixmap(QPixmap.fromImage(qim))
            self.firstDispla = False
        else:
            self.imItem.setPixmap(QPixmap.fromImage(qim))

    def fresh_board(self):
        print('======================================================')
        while(True):
            if(self.convert_on):
                print('======================================================')
                time.sleep(100)
                iter_start_time = time.time()
                self.updatePixmap()
                print('Time Sketch:',time.time() - iter_start_time)
back to top