def input_to_polygon_item(self, input_stream: QDataStream, item: QGraphicsPolygonItem): self.input_to_shape_item(input_stream, item) # Type fill_rule = Qt.FillRule() polygon = QPolygonF() # Read input_stream >> fill_rule input_stream >> polygon # Set item.setFillRule(fill_rule) item.setPolygon(polygon)
def __init__(self, shape, item_type, pixmap): self.shape: QGraphicsItem = shape self.name: str = "undefined" if item_type == QGraphicsRectItem.type(QGraphicsRectItem()): self.name: str = "rectangle" elif item_type == QGraphicsEllipseItem.type(QGraphicsEllipseItem()): self.name: str = "ellipse" elif item_type == QGraphicsPolygonItem.type(QGraphicsPolygonItem()): if shape.polygon().size() == 3: self.name: str = "triangle" else: self.name: str = "polygon" elif item_type == QGraphicsLineItem.type(QGraphicsLineItem()): self.name: str = "line" self.pixmap: QPixmap = pixmap
def shape_to_pixelmap(item_type, pen, brush, shape) -> QPixmap: pixmap = QPixmap(50, 50) pixmap.fill(Qt.transparent) painter = QPainter(pixmap) painter.setRenderHint(QPainter.Antialiasing) painter.setPen(pen) painter.setBrush(brush) if item_type == QGraphicsRectItem.type(QGraphicsRectItem()): painter.drawRect(QRect(10, 15, 30, 20)) elif item_type == QGraphicsEllipseItem.type(QGraphicsEllipseItem()): painter.drawEllipse(QRect(10, 10, 30, 30)) elif item_type == QGraphicsPolygonItem.type(QGraphicsPolygonItem()): if shape.polygon().size() == 3: painter.drawPolygon(QPolygon([QPoint(10, 40), QPoint(40, 40), QPoint(25, 10)])) else: painter.drawPolygon(QPolygon([QPoint(12, 40), QPoint(23, 36), QPoint(37, 24), QPoint(23, 12), QPoint(7, 16)])) elif item_type == QGraphicsLineItem.type(QGraphicsLineItem()): painter.drawLine(QLine(10, 40, 40, 10)) return pixmap
def draw_polygon(view: QGraphicsView, polygon_list: list[QPointF]): item = QGraphicsPolygonItem(QPolygonF(polygon_list)) item.setPen(view.actual_pen) item.setBrush(view.actual_brush) items = view.scene().items() for i in range(len(polygon_list)): view.scene().removeItem(items[i]) DrawTools.set_item_flags(item) view.scene().addItem(item) view.gim.append_shape(item, item.type(), view.actual_pen, view.actual_brush)
def draw_simple_shape_to_scene(view: QGraphicsView, p_prev: QPointF, p_act: QPointF, to_gim: bool = True) -> None: if view.actual_selection.value in [2, 4]: width = math.fabs(p_prev.x() - p_act.x()) height = math.fabs(p_prev.y() - p_act.y()) xmin = min(p_prev.x(), p_act.x()) ymin = min(p_prev.y(), p_act.y()) item: QAbstractGraphicsShapeItem if view.actual_selection.value == 2: item = QGraphicsRectItem(0, 0, width, height) else: item = QGraphicsEllipseItem(0, 0, width, height) item.setPos(QPointF(xmin, ymin)) item.setPen(view.actual_pen) item.setBrush(view.actual_brush) DrawTools.set_item_flags(item) view.scene().addItem(item) view.gim.append_shape(item, item.type(), view.actual_pen, view.actual_brush) elif view.actual_selection.value in [3, 5, 6]: x = p_act.x() - p_prev.x() y = p_act.y() - p_prev.y() item: QGraphicsItem if view.actual_selection.value == 3: item = QGraphicsPolygonItem( QPolygonF( [QPointF(0, 0), QPointF(0 + x, 0), QPointF(x / 2, y)])) item.setBrush(view.actual_brush) else: item = QGraphicsLineItem(QLineF(0, 0, x, y)) item.setPos(p_prev) item.setPen(view.actual_pen) DrawTools.set_item_flags(item) view.scene().addItem(item) if to_gim: view.gim.append_shape(item, item.type(), view.actual_pen, view.actual_brush)
def load_items(self, file_name: str, gim): input_file = QFile(file_name) if input_file.open(QIODevice.ReadOnly): input_stream = QDataStream(input_file) while not input_stream.atEnd(): item_type = input_stream.readInt8() item_name = input_stream.readString() if item_type == QGraphicsRectItem.type(QGraphicsRectItem()): rect = QGraphicsRectItem() self.input_to_rect_item(input_stream, rect) self.scene.addItem(rect) gim.append_shape(rect, rect.type(), rect.pen(), rect.brush()) print("Rectangle loaded") elif item_type == QGraphicsEllipseItem.type( QGraphicsEllipseItem()): ellipse = QGraphicsEllipseItem() self.input_to_rect_item(input_stream, ellipse) self.scene.addItem(ellipse) gim.append_shape(ellipse, ellipse.type(), ellipse.pen(), ellipse.brush()) print("Ellipse loaded") elif item_type == QGraphicsPolygonItem.type( QGraphicsPolygonItem()): polygon = QGraphicsPolygonItem() self.input_to_polygon_item(input_stream, polygon) self.scene.addItem(polygon) gim.append_shape(polygon, polygon.type(), polygon.pen(), polygon.brush()) print("l polygon") elif item_type == QGraphicsLineItem.type(QGraphicsLineItem()): line = QGraphicsLineItem() self.input_to_line_item(input_stream, line) self.scene.addItem(line) gim.append_shape(line, line.type(), line.pen(), QBrush(Qt.black)) print("Line loaded") gim.return_shapes()[-1].name = item_name ItemsInputOutput.set_item_flags(self.scene) input_file.close()
def output_from_polygon_item(self, output_stream: QDataStream, item: QGraphicsPolygonItem): self.output_from_shape_item(output_stream, item) # Output output_stream << item.fillRule() output_stream << item.polygon()