Пример #1
0
 def paintmap(self, surface):
     ww = surface.window().width()
     wh = surface.window().height()
     self.vb.setMaximum(self.qimg.height() - (wh // self.line.height))
     self.line.x_map = ww - 32
     r = QRect(self.line.x_map, 2, 32, wh - 4)
     surface.drawImage(r, self.qimg)
     factor = wh / self.qimg.height()
     pen = surface.pen()
     p = QPen(Qt.white)
     p.setCapStyle(Qt.RoundCap)
     p.setWidth(2)
     surface.setPen(p)
     l0 = self.vb.value() * factor
     l1 = l0 + (wh // self.line.height) * factor
     pad = 4
     p1 = QPointF(self.line.x_map - pad, l0)
     p2 = QPointF(self.line.x_map - pad, l1)
     if l1 - l0 > 4:
         p.setWidth(2)
         surface.drawLine(p1, p2)
         surface.drawLine(p1, QPointF(self.line.x_map, l0))
         surface.drawLine(p2, QPointF(self.line.x_map, l1))
     else:
         p.setWidth(4)
         surface.drawLine(p1, p2)
     surface.setPen(pen)
Пример #2
0
 def from_p1(self, p1: QPointF = QPointF(0.0, 0.0), tmax: float = 1.0):
     self.idx: int = 0
     self.time: float = 0.0
     self.easing = QEasingCurve.Type.Linear
     self.time_max: None | float = tmax
     self.pos = QPointF(p1)
     self.frames: List[QPointF] = [p1]
 def input_to_graphics_item(input_stream: QDataStream, item: QGraphicsItem):
     # Type
     pos = QPointF()
     scale: float
     rotation: float
     transform = QTransform()
     transform_op = QPointF()
     flags = QGraphicsItem.GraphicsItemFlags()
     is_enabled: bool
     is_selected: bool
     z_value: float
     # Read
     input_stream >> pos
     scale = input_stream.readFloat()
     rotation = input_stream.readFloat()
     input_stream >> transform
     input_stream >> transform_op
     input_stream >> flags
     is_enabled = input_stream.readBool()
     is_selected = input_stream.readBool()
     z_value = input_stream.readFloat()
     # Set
     item.setPos(pos)
     item.setScale(scale)
     item.setRotation(rotation)
     item.setTransform(transform)
     item.setTransformOriginPoint(transform_op)
     item.setFlags(flags)
     item.setEnabled(is_enabled)
     item.setSelected(is_selected)
     item.setZValue(z_value)
     print(type(item), z_value)
Пример #4
0
    def __init__(self):
        QMainWindow.__init__(self)

        self.series = QtCharts.QLineSeries()
        self.series.append(0, 6)
        self.series.append(2, 4)
        self.series.append(3, 8)
        self.series.append(7, 4)
        self.series.append(10, 5)
        self.series.append(QPointF(11, 1))
        self.series.append(QPointF(13, 3))
        self.series.append(QPointF(17, 6))
        self.series.append(QPointF(18, 3))
        self.series.append(QPointF(20, 2))

        self.chart = QtCharts.QChart()
        self.chart.legend().hide()
        self.chart.addSeries(self.series)
        self.chart.createDefaultAxes()
        self.chart.setTitle("Simple line chart example")

        self.chartView = QtCharts.QChartView(self.chart)
        self.chartView.setRenderHint(QPainter.Antialiasing)

        self.setCentralWidget(self.chartView)
    def __init__(self, parent=None):
        QOpenGLWidget.__init__(self, parent)
        QOpenGLFunctions.__init__(self)

        self.core = "--coreprofile" in QCoreApplication.arguments()
        self.xRot = 0
        self.yRot = 0
        self.zRot = 0
        self.lastPos = QPointF()
        self.logo = Logo()
        self.vao = QOpenGLVertexArrayObject()
        self.logoVbo = QOpenGLBuffer()
        self.program = QOpenGLShaderProgram()
        self.projMatrixLoc = 0
        self.mvMatrixLoc = 0
        self.normalMatrixLoc = 0
        self.lightPosLoc = 0
        self.proj = QMatrix4x4()
        self.camera = QMatrix4x4()
        self.world = QMatrix4x4()
        self.transparent = "--transparent" in QCoreApplication.arguments()
        if self.transparent:
            fmt = self.format()
            fmt.setAlphaBufferSize(8)
            self.setFormat(fmt)
Пример #6
0
    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)

        center = QPointF(self.width() / 2, self.height() / 2)
        radius = self.radius()
        ellipse_line_width = self.radius() * 60 / 512

        # big ellipse
        pen = QPen()
        pen.setWidth(ellipse_line_width)
        pen.setColor(self.color)
        painter.setPen(pen)
        painter.drawEllipse(center, radius - pen.width() / 2,
                            radius - pen.width() / 2)

        # dots
        pen = QPen()
        pen.setColor(QColor(0, 0, 0, 0))
        painter.setPen(pen)
        brush = QBrush()
        brush.setStyle(Qt.SolidPattern)
        dot_size = radius * 200 / 1024
        color = copy.copy(self.color)

        self._change_color(painter, brush, color, 0)
        painter.drawEllipse(
            QPointF((self.width() - radius - ellipse_line_width / 2) / 2,
                    self.height() / 2), dot_size, dot_size)
        self._change_color(painter, brush, color, 15)
        painter.drawEllipse(center, dot_size, dot_size)
        self._change_color(painter, brush, color, 30)
        painter.drawEllipse(
            QPointF((self.width() + radius + ellipse_line_width / 2) / 2,
                    self.height() / 2), dot_size, dot_size)
Пример #7
0
    def create_areachart(self):
        chart = QtCharts.QChart()
        chart.setTitle("Area Chart")

        # The lower series initialized to zero values
        lower_series = None
        name = "Series "
        for i in range(len(self.data_table)):
            upper_series = QtCharts.QLineSeries(chart)
            for j in range(len(self.data_table[i])):
                data = self.data_table[i][j]
                if lower_series:
                    points = lower_series.pointsVector()
                    y_value = points[i].y() + data[0].y()
                    upper_series.append(QPointF(j, y_value))
                else:
                    upper_series.append(QPointF(j, data[0].y()))
            area = QtCharts.QAreaSeries(upper_series, lower_series)
            area.setName("{}{}".format(name, i))
            chart.addSeries(area)
            lower_series = upper_series

        chart.createDefaultAxes()
        chart.axisX().setRange(0, self.value_count - 1)
        chart.axisY().setRange(0, self.value_max)
        # Add space to label to add space between labels and axis
        chart.axisY().setLabelFormat("%.1f  ")

        return chart
Пример #8
0
 def __init__(self, chart):
     QGraphicsItem.__init__(self, chart)
     self._chart = chart
     self._text = ""
     self._textRect = QRectF()
     self._anchor = QPointF()
     self._font = QFont()
     self._rect = QRectF()
Пример #9
0
    def mouseReleaseEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.pixmapOffset += event.position() - self.lastDragPos
            self.lastDragPos = QPointF()

            deltaX = (self.width() - self.pixmap.width()) / 2 - self.pixmapOffset.x()
            deltaY = (self.height() - self.pixmap.height()) / 2 - self.pixmapOffset.y()
            self.scroll(deltaX, deltaY)
Пример #10
0
 def default(self) -> None:
     self.path = QLineF(QPointF(0.0, 0.0), QPointF(0.0, 0.0))
     self.pos = self.path.p2()
     self.res = QSize(1920, 1080)
     self.fps = 24.0
     self.easing = QEasingCurve.Type.Linear
     self.time_max = 1.0
     self.frames = [self.p1, self.p2]
Пример #11
0
    def load_model(self, mdl_id: int, parent=None):
        if not self._valid_model_id(mdl_id): raise ProjectFileAppError(msg="", code=ProjectFileAppError.MDL_ID_INVALID)

        from PySide6.QtCore import QPointF
        from project.model_editor import ModelWorkspace
        from model_view.node import FasterNode
        from model_view.connection import Connection
        from model_view.components import InteractiveComponent
        from node_graph.nodes import NodeExec, node_class_ref

        print(f"loading model <{mdl_id}:{self.dat['mdl_ids'][mdl_id]}>")

        model_wkrspc = ModelWorkspace(self.dat["mdl_ids"][mdl_id], parent=parent)
        exec_node_dt = []

        dto = self.models[mdl_id].copy()
        cids = list(self.models[mdl_id].keys())
        cids.reverse()

        # converts connection and interactive components concrete data into python objects
        for cid in cids:
            compn = dto[cid]
            if "connection" in compn:  # connection
                dto[cid] = Connection(QPointF(0, 0), QPointF(0, 0))
                model_wkrspc.qscene.addItem(dto[cid])
            elif "ctag" in compn:  # interactive components
                dto[cid] = compn["cdat"]

        # converts node data into python objects, and modify them from connector, connection, and interactive-compn info
        for cid in cids:
            compn = dto[cid]
            if not isinstance(compn, dict):
                continue
            if "tag" in compn:  # node
                node: NodeExec = node_class_ref[compn["tag"]]()
                exec_node_dt.append(node)
                wx_node: FasterNode = node.interface(model_wkrspc.qscene, (0,0))
                wx_node.setPos(QPointF(compn["pos"][0], compn["pos"][1]))

                # and then we add the connections to each of the connectors
                for i in range(0, len(wx_node.fd_input)):
                    wx_node.connectors[i].prim_connc = [dto[c] for c in dto[compn["connc"][i]]["pc"]]
                    wx_node.connectors[i].scnd_connc = [dto[c] for c in dto[compn["connc"][i]]["sc"]]
                for i in range(len(wx_node.fd_input), len(wx_node.fd_input) + len(wx_node.fd_output)):
                    wx_node.connectors[i].prim_connc = [dto[c] for c in dto[compn["connc"][i]]["pc"]]
                    wx_node.connectors[i].scnd_connc = [dto[c] for c in dto[compn["connc"][i]]["sc"]]

                # update the state of constant fields
                c: InteractiveComponent
                for ind, c in enumerate(wx_node.fd_wx_consts):
                    c.deserialize(dto[compn["const"][ind]])

                model_wkrspc.qscene.addItem(wx_node)
                wx_node.update_connc()
                wx_node.add_const_wx(model_wkrspc.qscene)

        return model_wkrspc
Пример #12
0
    def updatePixmap(self, image, scaleFactor):
        if not self.lastDragPos.isNull():
            return

        self.pixmap = QPixmap.fromImage(image)
        self.pixmapOffset = QPointF()
        self.lastDragPosition = QPointF()
        self.pixmapScale = scaleFactor
        self.update()
Пример #13
0
 def __init__(
             self, 
             p1=QPointF(0.0, 0.0),
             p2=QPointF(0.0, 0.0),
             res=QSize(1920, 1080),
             fps=24.0,
             ease=QEasingCurve.Type.Linear,
             tmax: None | float = 1.0,
             ) -> None:
     self.from_line(QLineF(p1, p2), res, fps, ease, tmax)
Пример #14
0
 def _ShowImg(self, data):
     self.scaleCnt = 0
     self.pixMap = QPixmap()
     self.pixMap.loadFromData(data)
     self.show()
     self.graphicsItem.setPixmap(self.pixMap)
     self.graphicsView.setSceneRect(QRectF(QPointF(0, 0), QPointF(self.pixMap.width(), self.pixMap.height())))
     size = ToolUtil.GetDownloadSize(len(data))
     self.sizeLabel.setText(size)
     weight, height = ToolUtil.GetPictureSize(data)
     self.resolutionLabel.setText(str(weight) + "x" + str(height))
     self.ScalePicture()
Пример #15
0
    def rebuildDataBrushIfNeeded(self):
        if not self.m_rebuildBrush or not self.m_gradientData or self.m_barStyle == self.BarStyle.LINE:
            return

        self.m_rebuildBrush = False
        p = self.palette()

        if self.m_barStyle == self.BarStyle.EXPAND:
            dataBrush = QRadialGradient(0.5, 0.5, 0.5, 0.5, 0.5)
            dataBrush.setCoordinateMode(QGradient.StretchToDeviceMode)

            for i in range(0, len(self.m_gradientData)):
                dataBrush.setColorAt(self.m_gradientData[i][0],
                                     self.m_gradientData[i][1])

            p.setBrush(QPalette.Highlight, dataBrush)
        else:
            dataBrush = QConicalGradient(QPointF(0.5, 0.5),
                                         self.m_nullPosition)
            dataBrush.setCoordinateMode(QGradient.StretchToDeviceMode)

            for i in range(0, len(self.m_gradientData)):
                dataBrush.setColorAt(1 - self.m_gradientData[i][0],
                                     self.m_gradientData[i][1])

            p.setBrush(QPalette.Highlight, dataBrush)

        self.setPalette(p)
Пример #16
0
        def from_sect(self, 
                      s: Section,
                      fps=24.0,
                      tmax: float|None = 1.0, 
                      ease=QEasingCurve.Type.Linear
                      ):
            self.frames = []
            step_n = len(s.steps)
            for i, step in enumerate(s.steps):
                if i == 0: 
                    self.frames.append(QPointF(step.mouse_x, step.mouse_y))
                    self.frames.append(QPointF(step.mouse_x, step.mouse_y))
                else:
                    self.from_pts(step.pos, s.steps[i-1].pos, s.res, fps, tmax)

            self.from_pts(sect.p1, sect.p2, sect.res, fps, tmax, ease)
Пример #17
0
    def __init__(self, parent: QGraphicsView, settings: Settings):
        super(VideoScene, self).__init__(parent)
        self.settings = settings
        self.setting_helper = SettingWidgetHelper(settings)
        self.mode = OperationMode.MOVE
        # 视频帧base64字典 {帧数: base64}
        self._frame_base64_dict = {}
        # 粒子数据字典 {帧数: ParticleData}
        self._particle_data = {}
        # 粒子+标签 Item
        self.particle_group_items = {}
        # 轨迹Item
        self.trajectory_items = {}
        # 已更新轨迹的帧
        self.updated_frame_index = set()
        # 当前帧图像对象
        self.current_frame_item = QGraphicsPixmapItem(None)
        # 当前帧索引
        self.current_frame_index = 0
        self.config_changed = False
        self.addItem(self.current_frame_item)
        self.mouse_press_pos = QPointF()

        # np.ndarray 用于缓存导出图像
        self.export_frame_dict = {}
Пример #18
0
    def __init__(self, path: Path):
        self.position = QPointF()
        self.path = path

        self.size = QSize()

        self.InitializeSize()
Пример #19
0
    def __init__(self, valve: Valve):
        super().__init__()

        AppGlobals.Instance().onChipModified.connect(self.CheckForValve)

        self._valve = valve

        self.valveToggleButton = QToolButton()
        self.valveNumberLabel = QLabel("Number")
        self.valveNumberDial = QSpinBox()
        self.valveNumberDial.setMinimum(0)
        self.valveNumberDial.setValue(self._valve.solenoidNumber)
        self.valveNumberDial.setMaximum(9999)
        self.valveNumberDial.valueChanged.connect(self.UpdateValve)

        self.valveNameLabel = QLabel("Name")
        self.valveNameField = QLineEdit(self._valve.name)
        self.valveNameField.textChanged.connect(self.UpdateValve)

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(self.valveToggleButton, alignment=Qt.AlignCenter)

        layout = QGridLayout()
        layout.addWidget(self.valveNameLabel, 0, 0)
        layout.addWidget(self.valveNameField, 0, 1)
        layout.addWidget(self.valveNumberLabel, 1, 0)
        layout.addWidget(self.valveNumberDial, 1, 1)

        mainLayout.addLayout(layout)
        self.containerWidget.setLayout(mainLayout)
        self.valveToggleButton.clicked.connect(self.Toggle)

        self.Update()
        self.Move(QPointF())
Пример #20
0
        def move_hover_line(new_value: QPointF) -> None:
            x = new_value.x()

            plot_area = chart.plotArea()
            x_min = plot_area.left()
            x_max = plot_area.right()
            result.setVisible(x_min <= x <= x_max)
            result.setLine(x, plot_area.bottom(), x, plot_area.top())
Пример #21
0
 def AddItem(self, item: ChipItem):
     if item not in self._sceneItems:
         self._sceneItems.add(item)
         item.Move(QPointF())
         item.onRemoved.connect(self.RemoveItem)
         self.scene().addItem(item.GraphicsObject())
     item.SetEditDisplay(self._editing)
     return item
Пример #22
0
    def __init__(self, parent=None):
        super(MandelbrotWidget, self).__init__(parent)

        self.thread = RenderThread()
        self.pixmap = QPixmap()
        self.pixmapOffset = QPointF()
        self.lastDragPos = QPointF()

        self.centerX = DefaultCenterX
        self.centerY = DefaultCenterY
        self.pixmapScale = DefaultScale
        self.curScale = DefaultScale

        self.thread.renderedImage.connect(self.updatePixmap)

        self.setWindowTitle("Mandelbrot")
        self.setCursor(Qt.CrossCursor)
        self.resize(550, 400)
Пример #23
0
 def paint(self, painter, option, widget=None):
     qgp = self.getqgp()
     pen = QPen()
     pen.setWidth(2)
     qgp.setPen(pen)
     qgp.setBrush(QBrush(Qt.NoBrush))
     painter.setClipRect(option.exposedRect)
     qgp.paint(painter, option, widget)
     lastp = self.points[-1]
     angle = radians(qgp.path().angleAtPercent(1.0))
     angle = angle + pi
     p = lastp + QPointF(
         cos(angle - pi / 6.0) * 10, -sin(angle - pi / 6.0) * 10)
     q = lastp + QPointF(
         cos(angle + pi / 6.0) * 10, -sin(angle + pi / 6.0) * 10)
     painter.setBrush(QBrush(QColor("black")))
     self.head = QPolygonF([lastp, p, q])
     painter.drawPolygon(self.head)
Пример #24
0
    def Duplicate(self) -> 'ChipItem':
        newValve = Valve()
        newValve.position = QPointF(self._valve.position)
        newValve.name = self._valve.name
        newValve.solenoidNumber = AppGlobals.Chip().NextSolenoidNumber()

        AppGlobals.Chip().valves.append(newValve)
        AppGlobals.Instance().onChipModified.emit()
        return ValveChipItem(newValve)
Пример #25
0
    def Duplicate(self) -> 'ChipItem':
        newPreset = ProgramPreset(self._preset.instance.program)
        newPreset.instance = self._preset.instance.Clone()
        newPreset.position = QPointF(self._preset.position)
        newPreset.name = self._preset.name

        AppGlobals.Chip().programPresets.append(newPreset)
        AppGlobals.Instance().onChipModified.emit()
        return ProgramPresetItem(newPreset)
Пример #26
0
    def update_connc(self):
        delta = QPointF(self.prev_pos.x() - self.x(),
                        self.prev_pos.y() - self.y())

        for c in self.connectors:
            c.setPos(QPointF(c.x() - delta.x(), c.y() - delta.y()))
            pconnc: Connection
            for pconnc in c.prim_connc:
                pconnc.a = QPointF(c.x() + c.cpos[0] + Connector.SIZE / 2,
                                   c.y() + c.cpos[1] + Connector.SIZE / 2)
            sconnc: Connection
            for sconnc in c.scnd_connc:
                sconnc.b = QPointF(c.x() + c.cpos[0] + Connector.SIZE / 2,
                                   c.y() + c.cpos[1] + Connector.SIZE / 2)
        c: InteractiveComponent
        for c in self.fd_wx_consts:
            c.setPos(QPointF(c.x() - delta.x(), c.y() - delta.y()))

        self.prev_pos = self.pos()
Пример #27
0
    def game_loc_to_qt_local(self, pos: Union[NodeLocation,
                                              list[float]]) -> QPointF:
        if isinstance(pos, NodeLocation):
            x = pos.x
            y = pos.y
        else:
            x, y = pos[0], pos[1]

        return QPointF(self.scale * (x - self.area_bounds.min_x),
                       self.scale * (self.area_bounds.max_y - y))
Пример #28
0
 def resizeEvent(self, event):
     if self.scene():
         self.scene().setSceneRect(QRectF(QPointF(0, 0), event.size()))
         self._chart.resize(event.size())
         self._coordX.setPos(self._chart.size().width() / 2 - 50,
                             self._chart.size().height() - 20)
         self._coordY.setPos(self._chart.size().width() / 2 + 50,
                             self._chart.size().height() - 20)
         for callout in self._callouts:
             callout.updateGeometry()
     QGraphicsView.resizeEvent(self, event)
Пример #29
0
 def DuplicateSelected(self):
     newItems = []
     for item in self.GetSelectedItems():
         if item.CanDuplicate():
             newItem = item.Duplicate()
             newItem.Move(QPointF(50, 50))
             self.AddItem(newItem)
             newItems.append(newItem)
     if newItems:
         self.DeselectAll()
         [self.SelectItem(item) for item in newItems]
         self.selectionChanged.emit(self.GetSelectedItems())
Пример #30
0
    def paint(self, painter: QPainter):

        brush = QBrush(QColor("#007430"))

        painter.setBrush(brush)
        painter.setPen(Qt.NoPen)
        painter.setRenderHint(QPainter.Antialiasing)

        itemSize = self.size()

        painter.drawRoundedRect(0, 0, itemSize.width(), itemSize.height() - 10, 10, 10)

        if self.rightAligned:
            points = [
                QPointF(itemSize.width() - 10.0, itemSize.height() - 10.0),
                QPointF(itemSize.width() - 20.0, itemSize.height()),
                QPointF(itemSize.width() - 30.0, itemSize.height() - 10.0),
            ]
        else:
            points = [
                QPointF(10.0, itemSize.height() - 10.0),
                QPointF(20.0, itemSize.height()),
                QPointF(30.0, itemSize.height() - 10.0),
            ]
        painter.drawConvexPolygon(points)