Exemple #1
0
 def paint(self,
           painter: QPainter,
           option: QStyleOptionGraphicsItem,
           widget: Optional[QWidget] = ...) -> None:
     if self.item_type == 'line':
         item_pixels = alg.draw_line(self.p_list, self.algorithm)
         painter.setPen(self.color)
         for p in item_pixels:
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'polygon':
         item_pixels = alg.draw_polygon(self.p_list, self.algorithm)
         painter.setPen(self.color)
         for p in item_pixels:
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'ellipse':
         item_pixels = alg.draw_ellipse(self.p_list)
         painter.setPen(self.color)
         for p in item_pixels:
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'curve':
         item_pixels = alg.draw_curve(self.p_list, self.algorithm)
         cont_pixels = alg.draw_polygon(self.p_list, 'Bresenham')
         painter.setPen(self.color)
         for p in item_pixels:
             painter.drawPoint(*p)
         painter.setPen(QColor(0, 0, 255))
         for p in cont_pixels:
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'freedom':
         item_pixels = []
         for i in range(len(self.p_list) - 1):
             item_pixels.extend(
                 alg.draw_line([self.p_list[i], self.p_list[i + 1]],
                               'Bresenham'))
         painter.setPen(self.color)
         for p in item_pixels:
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
Exemple #2
0
 def paint(self, painter: QPainter, option: QStyleOptionGraphicsItem, widget: Optional[QWidget] = ...) -> None:
     if self.item_type == 'line':
         item_pixels = alg.draw_line(self.p_list, self.algorithm)
         for p in item_pixels:
             painter.setPen(self.color)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'polygon':
         item_pixels = alg.draw_polygon(self.p_list, self.algorithm)
         for p in item_pixels:
             painter.setPen(self.color)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'ellipse':
         item_pixels = alg.draw_ellipse(self.p_list)
         for p in item_pixels:
             painter.setPen(self.color)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'curve':
         item_pixels = alg.draw_curve(self.p_list, self.algorithm)
         for p in item_pixels:
             painter.setPen(self.color)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
Exemple #3
0
 def paint(self,
           painter: QPainter,
           option: QStyleOptionGraphicsItem,
           widget: Optional[QWidget] = ...) -> None:  # mark
     item_pixels = []
     if self.item_type == 'line' and self.p_list:
         item_pixels = alg.draw_line(self.p_list, self.algorithm)
     elif self.item_type == 'polygon':
         if self.end == 1:
             item_pixels = alg.draw_polygon(self.p_list, self.algorithm)
         else:
             item_pixels = alg.draw_polyline(self.p_list, self.algorithm)
     elif self.item_type == 'ellipse':
         item_pixels = alg.draw_ellipse(self.p_list)
     elif self.item_type == 'curve':
         item_pixels = alg.draw_curve(self.p_list, self.algorithm)
     elif self.item_type == 'polyline':
         item_pixels = alg.draw_polyline(self.p_list, self.algorithm)
     elif self.item_type == 'pencil':
         item_pixels = alg.draw_polyline(self.p_list, 'Bresenham')
     elif self.item_type == 'clip':  # 画一个矩形而已
         x_min, y_min, x_max, y_max = self.p_list[0][0], self.p_list[0][
             1], self.p_list[1][0], self.p_list[1][1]
         item_pixels = alg.draw_polygon([[x_min, y_min], [x_min, y_max],
                                         [x_max, y_max], [x_max, y_min]],
                                        'Bresenham')
     for p in item_pixels:
         # painter.setPen(self.item_color)
         pen = QPen(self.item_color, self.pen_width, Qt.SolidLine)
         painter.setPen(pen)
         painter.drawPoint(*p)
     if self.selected:
         painter.setPen(QColor(255, 0, 0))
         if self.p_list:
             painter.drawRect(self.boundingRect())
Exemple #4
0
 def get_draw_pixels(self, p_list, algorithm):
     # draw figure
     result = []
     if self.item_type == 'line':
         result = alg.draw_line(p_list, algorithm)
     elif self.item_type == 'dot_line':
         result = alg.draw_dotted_line(p_list)
     elif self.item_type == 'polygon':
         # 画边
         for i in range(0,len(p_list)-1):
             result.extend(alg.draw_line([p_list[i],\
                         p_list[i+1]], algorithm))
     elif self.item_type == 'ellipse':
         result = alg.draw_ellipse(p_list)
     elif self.item_type == 'curve':
         result = alg.draw_curve(p_list, algorithm)  
     return result
Exemple #5
0
 def paint(self,
           painter: QPainter,
           option: QStyleOptionGraphicsItem,
           widget: Optional[QWidget] = ...) -> None:
     if self.item_type == 'line':
         item_pixels = alg.draw_line(self.p_list, self.algorithm)
         for p in item_pixels:
             painter.setPen(self.col)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'polygon':
         if (self.finish_draw == True):
             item_pixels = alg.draw_polygon(self.p_list, self.algorithm)
         else:
             item_pixels = alg.draw_part_polygon(self.p_list,
                                                 self.algorithm)
         for p in item_pixels:
             painter.setPen(self.col)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'fill_polygon':
         if (self.finish_draw == True):
             item_pixels = alg.polygon_fill(self.p_list)
         else:
             item_pixels = alg.draw_part_polygon(self.p_list,
                                                 self.algorithm)
         for p in item_pixels:
             painter.setPen(self.col)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'ellipse':
         item_pixels = alg.draw_ellipse(self.p_list)
         for p in item_pixels:
             painter.setPen(self.col)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'curve':
         if (len(self.p_list) <= 3 and self.algorithm == 'B-spline'):
             item_pixels = alg.draw_part_polygon(self.p_list, 'Bresenham')
         else:
             item_pixels = alg.draw_curve(self.p_list, self.algorithm)
         for p in item_pixels:
             painter.setPen(self.col)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
Exemple #6
0
    def paint(self, painter: QPainter, option: QStyleOptionGraphicsItem, widget: Optional[QWidget] = ...) -> None:
        painter.setPen(self.pen)
        if self.item_type == 'line':
            item_pixels = alg.draw_line(self.p_list, self.algorithm)
            for p in item_pixels:
                painter.drawPoint(*p)

        elif self.item_type == 'polygon':
            if len(self.p_list) > 1:
                print('start')
                item_pixels = alg.draw_polygon(self.p_list, self.algorithm)
                print('end')
                for p in item_pixels:
                    painter.drawPoint(*p)

        elif self.item_type == 'ellipse':
            x0, y0 = self.p_list[0]
            x1, y1 = self.p_list[1]

            item_pixels = alg.draw_ellipse([[min(x0, x1), max(y0, y1)], [max(x0, x1), min(y0, y1)]])
            for p in item_pixels:
                painter.drawPoint(*p)

        elif self.item_type == 'curve':
            item_pixels = alg.draw_curve(self.p_list, self.algorithm)
            for p in item_pixels:
                painter.drawPoint(*p)
            for p in self.p_list:
                painter.drawPoint(*p)

        elif self.item_type == 'rect':
            painter.drawRect(self.boundingRect())

        if self.selected:
            painter.setPen(QColor(255, 0, 0))
            painter.drawRect(self.boundingRect())
Exemple #7
0
    with open(input_file, 'r') as fp:
        line = fp.readline()
        while line:
            line = line.strip().split(' ')
            if line[0] == 'resetCanvas':
                width = int(line[1])
                height = int(line[2])
                item_dict = {}
            elif line[0] == 'saveCanvas':
                save_name = line[1]
                canvas = np.zeros([height, width, 3], np.uint8)
                canvas.fill(255)
                for item_type, p_list, algorithm, color in item_dict.values():
                    if item_type == 'line':
                        pixels = alg.draw_line(p_list, algorithm)
                        for x, y in pixels:
                            canvas[height - 1 - y, x] = color
                    elif item_type == 'polygon':
                        pixels = alg.draw_polygon(p_list, algorithm)
                        for x, y in pixels:
                            canvas[height - 1 - y, x] = color
                    elif item_type == 'ellipse':
                        pixels = alg.draw_ellipse(p_list)
                        for x, y in pixels:
                            canvas[height - 1 - y, x] = color
                    elif item_type == 'curve':
                        pixels = alg.draw_curve(p_list, algorithm)
                        for x, y in pixels:
                            canvas[height - 1 - y, x] = color
                Image.fromarray(canvas).save(
Exemple #8
0
 def start_export(self, length, width):
     # TODO: 区分长宽
     path = QFileDialog.getSaveFileName(
         caption='导出画布',
         filter='BMP图像 (*.bmp);;PNG图像 (*.png);;JPEG图像 (*.jpg)')
     # print(path)
     if path[0] != '':
         canvas = np.zeros([width, length, 3], np.uint8)
         canvas.fill(255)
         for item in self.canvas_widget.item_dict.values():
             if item.item_type == 'line':
                 pixels = alg.draw_line(item.p_list, item.algorithm)
                 temp_color = item.color.getRgb()
                 pen_color = np.zeros(3, np.uint8)
                 pen_color[0], pen_color[1], pen_color[2] = temp_color[
                     0], temp_color[1], temp_color[2]
                 for x, y in pixels:
                     if 0 <= x < length and 0 <= y < width:
                         canvas[y, x] = np.array(pen_color)
             elif item.item_type == 'polygon':
                 pixels = alg.draw_polygon(item.p_list, item.algorithm)
                 temp_color = item.color.getRgb()
                 pen_color = np.zeros(3, np.uint8)
                 pen_color[0], pen_color[1], pen_color[2] = temp_color[
                     0], temp_color[1], temp_color[2]
                 for x, y in pixels:
                     if 0 <= x < length and 0 <= y < width:
                         canvas[y, x] = np.array(pen_color)
             elif item.item_type == 'ellipse':
                 pixels = alg.draw_ellipse(item.p_list)
                 temp_color = item.color.getRgb()
                 pen_color = np.zeros(3, np.uint8)
                 pen_color[0], pen_color[1], pen_color[2] = temp_color[
                     0], temp_color[1], temp_color[2]
                 for x, y in pixels:
                     if 0 <= x < length and 0 <= y < width:
                         canvas[y, x] = np.array(pen_color)
             elif item.item_type == 'curve':
                 pixels = alg.draw_curve(item.p_list, item.algorithm)
                 temp_color = item.color.getRgb()
                 pen_color = np.zeros(3, np.uint8)
                 pen_color[0], pen_color[1], pen_color[2] = temp_color[
                     0], temp_color[1], temp_color[2]
                 for x, y in pixels:
                     if 0 <= x < length and 0 <= y < width:
                         canvas[y, x] = np.array(pen_color)
             elif item.item_type == 'freedom':
                 pixels = []
                 for i in range(len(item.p_list) - 1):
                     pixels.extend(
                         alg.draw_line([item.p_list[i], item.p_list[i + 1]],
                                       'Bresenham'))
                 temp_color = item.color.getRgb()
                 pen_color = np.zeros(3, np.uint8)
                 pen_color[0], pen_color[1], pen_color[2] = temp_color[
                     0], temp_color[1], temp_color[2]
                 for x, y in pixels:
                     if 0 <= x < length and 0 <= y < width:
                         canvas[y, x] = np.array(pen_color)
             if path[1] == 'BMP图像 (*.bmp)':
                 Image.fromarray(canvas).save(path[0], 'bmp')
             elif path[1] == 'PNG图像 (*.png)':
                 Image.fromarray(canvas).save(path[0], 'png')
             else:
                 Image.fromarray(canvas).save(path[0], 'jpeg', quality=95)
Exemple #9
0
    def paint(self,
              painter: QPainter,
              option: QStyleOptionGraphicsItem,
              widget: Optional[QWidget] = ...) -> None:
        painter.setPen(self.temppen)
        if self.item_type == 'line':
            item_pixels = alg.draw_line(self.p_list, self.algorithm)
            for p in item_pixels:
                painter.drawPoint(*p)
            if self.selected:
                painter.setPen(QColor(255, 0, 0))
                painter.drawRect(self.boundingRect())
        elif self.item_type == 'polygon':
            if len(self.p_list) >= 2:
                #填充
                if self.if_polygon_fill:
                    painter.setPen(self.fillpen)
                    for p in self.filled_list:
                        painter.drawPoint(*p)
                painter.setPen(self.temppen)
                item_pixels = alg.draw_polygon(self.p_list, self.algorithm)
                for p in item_pixels:
                    painter.drawPoint(*p)
            if self.selected:
                painter.setPen(QColor(255, 0, 0))
                painter.drawRect(self.boundingRect())

        elif self.item_type == 'ellipse':
            x0, y0 = self.p_list[0]
            x1, y1 = self.p_list[1]
            x_min = min(x0, x1)
            x_max = max(x0, x1)
            y_min = min(y0, y1)
            y_max = max(y0, y1)
            self.temp_list = []
            self.temp_list.append([x_min, y_max])
            self.temp_list.append([x_max, y_min])

            item_pixels = alg.draw_ellipse(self.temp_list)
            for p in item_pixels:
                painter.drawPoint(*p)
            if self.selected:
                painter.setPen(QColor(255, 0, 0))
                painter.drawRect(self.boundingRect())
        elif self.item_type == 'curve':
            if len(self.p_list) >= 2:
                item_pixels = alg.draw_curve(self.p_list, self.algorithm)
                for p in item_pixels:
                    painter.drawPoint(*p)
            if self.selected:
                painter.setPen(QColor(255, 0, 0))
                painter.drawRect(self.boundingRect())
        elif self.item_type == 'Rect':
            fake_p_list = []
            x0, y0 = self.p_list[0]
            x1, y1 = self.p_list[1]
            fake_p_list.append([x0, y0])
            fake_p_list.append([x0, y1])
            fake_p_list.append([x1, y1])
            fake_p_list.append([x1, y0])
            item_pixels = alg.draw_polygon(fake_p_list, "DDA")
            for p in item_pixels:
                painter.drawPoint(*p)
            if self.selected:
                painter.setPen(QColor(255, 0, 0))
                painter.drawRect(self.boundingRect())
        elif self.item_type == 'polygon_cut':
            if len(self.p_list) >= 4:
                length = len(self.p_list)
                xmin, ymin = self.p_list[length - 2]
                xmax, ymax = self.p_list[length - 1]
                temp_list = self.p_list[0:length - 2]
                item_pixels = alg.draw_polygon_cut(temp_list, xmin, xmax, ymin,
                                                   ymax)
                for p in item_pixels:
                    painter.drawPoint(*p)
            if self.selected:
                painter.setPen(QColor(255, 0, 0))
                painter.drawRect(self.boundingRect())
Exemple #10
0
    def paint(self,
              painter: QPainter,
              option: QStyleOptionGraphicsItem,
              widget: Optional[QWidget] = ...) -> None:
        for i in range(len(self.p_list)):
            if type(self.p_list[i][0]) != int and type(
                    self.p_list[i][1]) != int:
                # print(i)
                # print("Hit error")
                self.p_list[i] = list(self.p_list[i])
                self.p_list[i][0] = int(self.p_list[i][0])
                self.p_list[i][1] = int(self.p_list[i][1])

        if self.item_type == 'line':
            item_pixels = alg.draw_line(self.p_list, self.algorithm)
            for p in item_pixels:
                painter.setPen(self.color)
                painter.drawPoint(*p)
            if self.selected:
                painter.setPen(QColor(255, 0, 0))
                painter.drawRect(self.boundingRect())
        elif self.item_type == 'polygon':
            if self.finish_draw == True:
                item_pixels = alg.draw_polygon(self.p_list, self.algorithm)
            else:
                item_pixels = alg.draw_polygoning(self.p_list, self.algorithm)
            for p in item_pixels:
                painter.setPen(self.color)
                painter.drawPoint(*p)
            if self.selected:
                painter.setPen(QColor(255, 0, 0))
                painter.drawRect(self.boundingRect())
        elif self.item_type == 'ellipse':
            item_pixels = alg.draw_ellipse(self.p_list)
            for p in item_pixels:
                painter.setPen(self.color)
                painter.drawPoint(*p)
            if self.selected:
                painter.setPen(QColor(255, 0, 0))
                painter.drawRect(self.boundingRect())
        elif self.item_type == 'curve':
            if (len(self.p_list) <= 3 and self.algorithm == 'B-spline'):
                item_pixels = alg.draw_polygoning(self.p_list, 'DDA')
            else:
                item_pixels = alg.draw_curve(self.p_list, self.algorithm)
            for p in item_pixels:
                painter.setPen(self.color)
                painter.drawPoint(*p)
            if self.selected:
                painter.setPen(QColor(255, 0, 0))
                painter.drawRect(self.boundingRect())
            #print("Hit drawing curve")
            pass
        elif self.item_type == 'free':
            item_pixels = alg.draw_polygoning(self.p_list, 'DDA')
            #item_pixels =self.p_list
            for p in item_pixels:
                painter.setPen(self.color)
                painter.drawPoint(*p)
            if self.selected:
                painter.setPen(QColor(255, 0, 0))
                painter.drawRect(self.boundingRect())
    def paint(self,
              painter: QPainter,
              option: QStyleOptionGraphicsItem,
              widget: Optional[QWidget] = ...) -> None:
        if self.item_type == 'helperPoints':
            for point in self.p_list:
                x, y = point[0], point[1]
                painter.drawPoint(x, y)
                painter.setPen(self.pointPen)
                painter.drawLine(x - 2, y - 2, x - 2, y + 2)
                painter.drawLine(x + 2, y - 2, x + 2, y + 2)
                painter.drawLine(x - 2, y - 2, x + 2, y - 2)
                painter.drawLine(x - 2, y + 2, x + 2, y + 2)
            return
        if self.item_type == 'helperLines':
            painter.setPen(self.linePen)
            for line in self.p_list:
                painter.drawLine(line[0][0], line[0][1], line[1][0],
                                 line[1][1])
            return
        elif self.item_type == 'line':
            item_pixels = alg.draw_line(self.p_list, self.algorithm)
        elif self.item_type == 'polygon':
            item_pixels = []
            for i in range(len(self.p_list) - 1):
                line = alg.draw_line([self.p_list[i], self.p_list[i + 1]],
                                     self.algorithm)
                item_pixels += line

        elif self.item_type == 'polygonDone':
            item_pixels = alg.draw_polygon(self.p_list, self.algorithm)
            box = self.boundingRect()
            if self.fill_color != Qt.transparent:
                fill_pixels = alg.fillPolygon(self.p_list, int(box.x()),
                                              int(box.y()),
                                              int(box.x() + box.width()),
                                              int(box.y() + box.height()))
                pen2 = QPen()
                pen2.setBrush(QColor(self.fill_color))
                painter.setPen(pen2)
                for p in fill_pixels:
                    painter.drawPoint(*p)
        elif self.item_type == 'ellipse':
            item_pixels = alg.draw_ellipse(self.p_list)
            box = self.boundingRect()
            if self.fill_color != Qt.transparent:
                fill_pixels = alg.fillEllipse(item_pixels, int(box.y()),
                                              int(box.y() + box.height()))
                pen2 = QPen()
                pen2.setBrush(QColor(self.fill_color))
                painter.setPen(pen2)
                for p in fill_pixels:
                    painter.drawPoint(*p)
        elif self.item_type == 'curve':
            item_pixels = alg.draw_curve(self.p_list, self.algorithm)
        pen = QPen()
        pen.setWidth(self.width)
        pen.setBrush(self.color)
        painter.setPen(pen)

        for p in item_pixels:
            painter.drawPoint(*p)
        if self.selected:
            painter.setPen(QPen(Qt.red, 1, Qt.DashLine))
            painter.drawRect(self.boundingRect())
    def paint(self,
              painter: QPainter,
              option: QStyleOptionGraphicsItem,
              widget: Optional[QWidget] = ...) -> None:
        painter.setPen(self.color)
        if self.item_type == 'line':
            item_pixels = alg.draw_line(self.p_list, self.algorithm)
            for p in item_pixels:
                painter.drawPoint(*p)
        elif self.item_type == 'rectangle':
            x1, y1 = self.p_list[0]
            x2, y2 = self.p_list[1]
            x_min = min(x1, x2)
            x_max = max(x1, x2)
            y_min = min(y1, y2)
            y_max = max(y1, y2)
            temp_plist = [[x_min, y_min], [x_min, y_max], [x_max, y_max],
                          [x_max, y_min]]
            item_pixels = alg.draw_polygon(temp_plist,
                                           self.algorithm,
                                           label=True)
            if self.fill:
                item_pixels += alg.polygon_fill(temp_plist)
            for p in item_pixels:
                painter.drawPoint(*p)
        elif self.item_type == 'polygon':
            item_pixels = alg.draw_polygon(self.p_list,
                                           self.algorithm,
                                           label=self.finished)
            if self.fill:
                item_pixels += alg.polygon_fill(self.p_list)
            for p in item_pixels:
                painter.drawPoint(*p)
        elif self.item_type == 'ellipse':
            item_pixels = alg.draw_ellipse(self.p_list)
            for p in item_pixels:
                painter.drawPoint(*p)
        elif self.item_type == 'curve':
            item_pixels = alg.draw_curve(self.p_list, self.algorithm)
            for p in item_pixels:
                painter.drawPoint(*p)
            if not self.finished or self.selected:
                # 显示控制点
                red_pixels = []
                black_pixels = []
                for x, y in self.p_list:
                    r, b = self.highlight(x, y)
                    red_pixels += r
                    black_pixels += b
                for i in range(len(self.p_list) - 1):
                    red_pixels += alg.draw_line(
                        [self.p_list[i], self.p_list[i + 1]], 'DDA')
                painter.setPen(QColor(255, 0, 0))
                for p in red_pixels:
                    painter.drawPoint(*p)
                painter.setPen(QColor(0, 0, 0))
                for p in black_pixels:
                    painter.drawPoint(*p)
                painter.setPen(self.color)

        if self.selected:
            painter.setPen(QColor(255, 0, 0))
            painter.drawRect(self.boundingRect())
Exemple #13
0
 def paint(self,
           painter: QPainter,
           option: QStyleOptionGraphicsItem,
           widget: Optional[QWidget] = ...) -> None:
     if self.item_type == 'line':
         p_list = self.p_list
         if self.rotate_angle != 0:
             p_list = alg.rotate(self.p_list, self.rotate_center[0],
                                 self.rotate_center[1], self.rotate_angle)
         if self.scale_ratio != 0:
             p_list = alg.scale(self.p_list, self.scale_center[0],
                                self.scale_center[1], self.scale_ratio)
         item_pixels = alg.draw_line(p_list, self.algorithm)
         for p in item_pixels:
             painter.setPen(self.paintColor)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'polygon':
         p_list = self.p_list
         if self.rotate_angle != 0:
             p_list = alg.rotate(self.p_list, self.rotate_center[0],
                                 self.rotate_center[1], self.rotate_angle)
         if self.scale_ratio != 0:
             p_list = alg.scale(self.p_list, self.scale_center[0],
                                self.scale_center[1], self.scale_ratio)
         item_pixels = alg.draw_polygon(p_list, self.algorithm)
         for p in item_pixels:
             painter.setPen(self.paintColor)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'ellipse':
         p_list = self.p_list
         if self.scale_ratio != 0:
             p_list = alg.scale(self.p_list, self.scale_center[0],
                                self.scale_center[1], self.scale_ratio)
         item_pixels = alg.draw_ellipse(p_list)
         for p in item_pixels:
             painter.setPen(self.paintColor)
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'curve':
         p_list = self.p_list
         if self.rotate_angle != 0:
             p_list = alg.rotate(self.p_list, self.rotate_center[0],
                                 self.rotate_center[1], self.rotate_angle)
         if self.scale_ratio != 0:
             p_list = alg.scale(self.p_list, self.scale_center[0],
                                self.scale_center[1], self.scale_ratio)
         item_pixels = alg.draw_curve(p_list, self.algorithm)
         for p in p_list:
             painter.setPen(self.paintColor)
             painter.drawPoint(*p)
         for p in item_pixels:
             painter.drawPoint(*p)
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'select':
         x0, y0 = self.p_list[0]
         x1, y1 = self.p_list[1]
         x = min(x0, x1)
         y = min(y0, y1)
         w = max(x0, x1) - x
         h = max(y0, y1) - y
         painter.setPen(QColor(0, 0, 255))
         painter.drawRects(QRectF(x, y, w, h))
     elif self.item_type == 'rect':
         x0, y0 = self.p_list[0]
         x1, y1 = self.p_list[1]
         x = min(x0, x1)
         y = min(y0, y1)
         w = max(x0, x1) - x
         h = max(y0, y1) - y
         painter.setPen(self.paintColor)
         painter.drawRects(QRectF(x, y, w, h))
         if self.selected:
             painter.setPen(QColor(255, 0, 0))
             painter.drawRect(self.boundingRect())
     elif self.item_type == 'rotate':
         painter.drawPoint(*(self.p_list[0]))
     elif self.item_type == 'scale':
         painter.drawPoint(*(self.p_list[0]))
     elif self.item_type == 'clip':
         x0, y0 = self.p_list[0]
         x1, y1 = self.p_list[1]
         x = min(x0, x1)
         y = min(y0, y1)
         w = max(x0, x1) - x
         h = max(y0, y1) - y
         painter.setPen(QColor(0, 0, 255))
         painter.drawRects(QRectF(x, y, w, h))