示例#1
0
    def drawPolygonOnVideo(values, painter, surface, gt):
        ''' Draw Polygons on Video '''
        poly = []
        for pt in values:
            if hasElevationModel():
                pt = GetLine3DIntersectionWithPlane(
                    GetSensor(), pt, GetFrameCenter()[2])
            scr_x, scr_y = vut.GetInverseMatrix(
                pt[1], pt[0], gt, surface)
            center = QPoint(scr_x, scr_y)
            poly.append(center)

        poly.append(poly[0])

        radius = 3
        polygon = QPolygonF(poly)
        pen = QPen()
        pen.setColor(Qt.green)
        pen.setWidth(radius)
        pen.setCapStyle(Qt.RoundCap)
        pen.setJoinStyle(Qt.RoundJoin)

        brush = QBrush()
        brush.setColor(QColor(176, 255, 128, 28))
        brush.setStyle(Qt.SolidPattern)

        path = QPainterPath()
        path.addPolygon(polygon)

        painter.setPen(pen)
        painter.drawPolygon(polygon)
        painter.fillPath(path, brush)
        return
示例#2
0
    def drawSnakeAndFood(self, event, painter):
        """ Draws the snake and food"""

        pen = QPen()
        pen.setWidth(1)
        pen.setBrush(Qt.white)
        pen.setCapStyle(Qt.SquareCap)
        pen.setJoinStyle(Qt.MiterJoin)

        brush = QBrush(Qt.white)

        painter.setPen(pen)
        painter.setBrush(brush)

        # Draw each individual square of snake
        for bodySquare in self.snake.bodyPositions:

            x = bodySquare[0] * self.squareSize
            y = bodySquare[1] * self.squareSize

            painter.drawRect(x, y, self.squareSize, self.squareSize)

        # Draw food
        x = self.foodPosition[0] * self.squareSize
        y = self.foodPosition[1] * self.squareSize

        painter.drawRect(x, y, self.squareSize, self.squareSize)
示例#3
0
 def dessin(self, point1, point2, pointpiste1, pointpiste2, nb):
     #dessin de ligne de carrés entre point1 et point2
     Deltax, Deltay = (point1.x - point2.x), (point1.y - point2.y)
     deltax, deltay = pointpiste1.x - pointpiste2.x, pointpiste1.y - pointpiste2.y
     v = math.sqrt(deltax**2 + deltay**2)
     V2 = LARGEUR / 10
     pen = QPen(QtGui.QColor('white'), V2)
     pen.setCapStyle(Qt.SquareCap)
     pen.setJoinStyle(Qt.RoundJoin)
     if v != 0:
         deltax, deltay = deltax / v, deltay / v
     if nb == 1:
         for i in range(1, 5):
             P1 = piste.Point(point1.x - i * Deltax / 5,
                              point1.y - i * Deltay / 5)
             P2 = piste.Point(point1.x - i * Deltax / 5 + V2 * deltax * 0.5,
                              point1.y - i * Deltay / 5 + V2 * deltay * 0.5)
             self.scene.addLine(P1.x, P1.y, P2.x, P2.y, pen)
     else:
         for i in range(5):
             P1 = piste.Point(point1.x - (2 * i + 1) * Deltax / 10,
                              point1.y - (2 * i + 1) * Deltay / 10)
             P2 = piste.Point(
                 point1.x - (2 * i + 1) * Deltax / 10 + V2 * deltax * 0.5,
                 point1.y - (2 * i + 1) * Deltay / 10 + V2 * deltay * 0.5)
             self.scene.addLine(P1.x, P1.y, P2.x, P2.y, pen)
示例#4
0
    def paint(self, QPainter, QStyleOptionGraphicsItem, QWidget_widget=None):

        # setPen
        pen = QPen()
        pen.setWidth(2)
        pen.setJoinStyle(Qt.MiterJoin)
        QPainter.setPen(pen)

        # setBrush
        brush = QBrush()
        brush.setColor(Qt.black)
        brush.setStyle(Qt.SolidPattern)
        QPainter.setBrush(brush)

        v = self.line.unitVector()
        v.setLength(10)
        v.translate(QPointF(self.line.dx(), self.line.dy()))

        n = v.normalVector()
        n.setLength(n.length() * 0.5)
        n2 = n.normalVector().normalVector()

        p1 = v.p2()
        p2 = n.p2()
        p3 = n2.p2()

        QPainter.drawLine(self.line)
        QPainter.drawPolygon(p1, p2, p3)
示例#5
0
def draw_trigger_port(painter, rect, info):
    painter.save()

    size = int(rect.height() / 2)
    triangle = QPolygonF()
    triangle.append(QPointF(-size, -size))
    triangle.append(QPointF(size, 0))
    triangle.append(QPointF(-size, size))

    transform = QTransform()
    transform.translate(rect.center().x(), rect.center().y())
    port_poly = transform.map(triangle)

    if info["hovered"]:
        color = QColor(17, 43, 82)
        border_color = QColor(136, 255, 35)
    elif info["connected"]:
        color = QColor(14, 45, 59)
        border_color = QColor(107, 166, 193)
    else:
        color = QColor(*info["color"])
        border_color = QColor(*info["border_color"])

    pen = QPen(border_color, 1.8)
    pen.setJoinStyle(Qt.MiterJoin)

    painter.setPen(pen)
    painter.setBrush(color)
    painter.drawPolygon(port_poly)

    painter.restore()
示例#6
0
    def paintEvent(self, event):
        """Paint event for the overlay

        :param event:   QPaintEvent event
        :type event:    QPaintEvent
        """
        super().paintEvent(event)
        painter = QPainter(self)
        pen = QPen(Qt.black)
        pen.setWidth(1)
        painter.setPen(pen)
        painter.setBrush(Qt.NoBrush)
        painter.drawRect(0, 0, 16 * 25 - 1, self.height * 25 - 1)
        lines = []
        for longitude in range(16):
            line = QLineF(longitude * 25, 0, longitude * 25, self.height * 25)
            lines.append(line)
        for latitude in range(self.height):
            line = QLineF(0, latitude * 25, 16 * 25, latitude * 25)
            lines.append(line)
        painter.drawLines(lines)
        s_root, s_width, s_height = self.selected
        x = s_root % 16
        y = math.floor(s_root / 16)
        pen.setColor(Qt.red)
        pen.setWidth(3)
        pen.setJoinStyle(Qt.MiterJoin)
        painter.setPen(pen)
        painter.drawRect(x * 25, y * 25, s_width * 25, s_height * 25)
示例#7
0
 def draw(self, painter: QPainter):
     pen = QPen(Layer.color(LayerType.annotate))
     pen.setCapStyle(Qt.RoundCap)
     pen.setJoinStyle(Qt.RoundJoin)
     pen.setWidth(0)
     painter.setPen(pen)
     painter.drawLine(self.pt1, self.pt2)
示例#8
0
 def show_select_area_at_default_position(self):
     trimming_data = Project.latest_trimming_data()
     if trimming_data.position:
         self.start_position = QPoint(trimming_data.position[0],
                                      trimming_data.position[1])
         rect = QRectF(trimming_data.position[0], trimming_data.position[1],
                       self.width, self.height)
     else:
         self.start_position = QPoint((self.w - self.width) // 2,
                                      (self.h - self.height) // 2)
         rect = QRectF((self.w - self.width) // 2,
                       (self.h - self.height) // 2, self.width, self.height)
     self.select_area = QGraphicsRectItem(rect)
     self.select_area.setZValue(1)
     pen = QPen(QColor('#ffa00e'))
     pen.setWidth(4)
     pen.setJoinStyle(Qt.RoundJoin)
     self.select_area.setPen(pen)
     self.select_area.setFlag(QGraphicsItem.ItemIsMovable, True)
     self.original_image_scene.addItem(self.select_area)
     self.select_area_label_proxy = QGraphicsProxyWidget(self.select_area)
     self.select_area_label = SelectAreaLabel()
     self.select_area_label.set_label()
     self.select_area_label_proxy.setWidget(self.select_area_label)
     self.select_area_label_proxy.setPos(
         self.select_area.boundingRect().left() + 2,
         self.select_area.boundingRect().bottom() -
         self.select_area_label.height() - 2)
示例#9
0
    def paintEvent(self, pe):
        super().paintEvent(pe)
        if (self.mRedrawMapImage):
            self.renderMapToImage()
            self.mRedrawMapImage = False

        if (self.mMapImage.isNull() or self.mImageRect.isEmpty()):
            return
        p = QPainter(self)
        p.setRenderHints(QPainter.SmoothPixmapTransform)
        backgroundColor = QColor(Qt.darkGray)
        if (self.mMapDocument
                and self.mMapDocument.map().backgroundColor().isValid()):
            backgroundColor = self.mMapDocument.map().backgroundColor()
        p.setBrush(backgroundColor)
        p.setPen(Qt.NoPen)
        p.drawRect(self.contentsRect())
        p.drawImage(self.mImageRect, self.mMapImage)
        viewRect = self.viewportRect()
        p.setBrush(Qt.NoBrush)
        p.setPen(QColor(0, 0, 0, 128))
        p.translate(1, 1)
        p.drawRect(viewRect)
        outLinePen = QPen(QColor(255, 0, 0), 2)
        outLinePen.setJoinStyle(Qt.MiterJoin)
        p.translate(-1, -1)
        p.setPen(outLinePen)
        p.drawRect(viewRect)
        p.end()
示例#10
0
 def initPainter(self):
     pen = QPen()
     pen.setWidth(1)
     pen.setJoinStyle(Qt.RoundJoin)
     pen.setCapStyle(Qt.RoundCap)
     pen.setCosmetic(True)
     self.setPen(pen)
示例#11
0
    def paintEvent(self, event):
        """Preview paint event to draw regular and transparent color selections

        :param event:   Paint event
        :type event:    QPaintEvent
        """
        super().paintEvent(event)
        painter = QPainter(self)
        rect_pen = QPen(Qt.black)
        trans_pen = QPen(Qt.red)
        rect_pen.setWidth(3)
        trans_pen.setWidth(3)
        rect_pen.setJoinStyle(Qt.MiterJoin)
        trans_pen.setCapStyle(Qt.RoundCap)
        sec_brush = QBrush(self.secondary_color)
        prim_brush = QBrush(self.primary_color)
        painter.setPen(rect_pen)
        painter.setBrush(sec_brush)
        painter.drawRect(27, 27, 61, 61)
        if self.source is Source.SPRITE:
            if self.secondary_index == 0:
                painter.setPen(trans_pen)
                painter.drawLine(30, 30, 61 + 25, 61 + 25)
        painter.setPen(rect_pen)
        painter.setBrush(prim_brush)
        painter.drawRect(1, 1, 61, 61)
        if self.source is Source.SPRITE:
            if self.primary_index == 0:
                painter.setPen(trans_pen)
                painter.drawLine(4, 4, 61 - 1, 61 - 1)
示例#12
0
    def test_paint(self, event):
        #QPainter
        # 练习画图的例子
        p1 = QPoint()
        point_list = []

        w = self.width()  # 绘图区的宽度
        h = self.height()  # 绘图区的高度

        rect = QRect(w / 4, h / 4, w / 2, h / 2)  # 中间区域矩形框

        # 设置画笔
        pen = QPen()
        pen.setWidth(3)  # 线宽
        pen.setColor(Qt.red)  # 划线颜色
        pen.setStyle(Qt.SolidLine)  # 线的样式
        pen.setCapStyle(Qt.FlatCap)  # 线端点式样
        pen.setJoinStyle(Qt.BevelJoin)  # 线的连接点样式
        # 设置画刷
        brush = QBrush()
        brush.setColor(Qt.yellow)
        brush.setStyle(Qt.SolidPattern)
        painter = QPainter()

        painter.begin(self)
        painter.setPen(pen)
        painter.setBrush(brush)
        painter.drawRect(rect)

        painter.end()

        pass
示例#13
0
    def paintEvent(self, pe):
        super().paintEvent(pe)
        if (self.mRedrawMapImage):
            self.renderMapToImage()
            self.mRedrawMapImage = False

        if (self.mMapImage.isNull() or self.mImageRect.isEmpty()):
            return
        p = QPainter(self)
        p.setRenderHints(QPainter.SmoothPixmapTransform)
        backgroundColor = QColor(Qt.darkGray)
        if (self.mMapDocument and self.mMapDocument.map().backgroundColor().isValid()):
            backgroundColor = self.mMapDocument.map().backgroundColor()
        p.setBrush(backgroundColor)
        p.setPen(Qt.NoPen)
        p.drawRect(self.contentsRect())
        p.drawImage(self.mImageRect, self.mMapImage)
        viewRect = self.viewportRect()
        p.setBrush(Qt.NoBrush)
        p.setPen(QColor(0, 0, 0, 128))
        p.translate(1, 1)
        p.drawRect(viewRect)
        outLinePen = QPen(QColor(255, 0, 0), 2)
        outLinePen.setJoinStyle(Qt.MiterJoin)
        p.translate(-1, -1)
        p.setPen(outLinePen)
        p.drawRect(viewRect)
        p.end()
示例#14
0
文件: ui.py 项目: xmye/games
        def paintEvent(self, paintEvent: QPaintEvent):
            painter = QPainter(self)
            painter.setBackgroundMode(Qt.TransparentMode)
            painter.setRenderHint(QPainter.Antialiasing)
            brush = QBrush()
            brush.setStyle(Qt.SolidPattern)
            pen = QPen()
            pen.setJoinStyle(Qt.RoundJoin)
            pen.setCapStyle(Qt.RoundCap)

            center = QPoint(self.width() // 2, self.height() // 2)
            radius = 0.45 * min(self.width(), self.height())

            pen.setColor(self.palette().color(self.color[0]))
            brush.setColor(self.palette().color(self.color[1]))
            if self.highlight is True:
                pen.setColor(self.palette().color(QPalette.Highlight))
            pen.setWidth(round(0.15 * radius))
            painter.setBrush(brush)
            painter.setPen(pen)
            painter.drawEllipse(center, radius, radius)

            if self.checked is True:
                brush.setColor(self.palette().color(QPalette.Background))
                pen.setColor(self.palette().color(QPalette.Background))
                painter.setPen(pen)
                painter.setBrush(brush)
                painter.drawEllipse(center, 0.40 * radius, 0.40 * radius)
            del painter, brush, pen
示例#15
0
    def paint(self, painter, option, widget=None):
        # Draw header
        rect = QRectF(0, 0, 20, 20)

        if self.stage:
            brush = QBrush(self.on_color_1)
        else:
            brush = QBrush(self.off_color_1)

        pen = QPen()
        pen.setStyle(LINE_SOLID)
        pen.setWidthF(1)
        pen.setWidth(2)
        pen.setCapStyle(ROUND_CAP)
        pen.setJoinStyle(ROUND_JOIN)
        painter.setBrush(brush)
        painter.setPen(pen)
        painter.drawEllipse(-5, -5, 10, 10)

        if self.stage:
            brush = QBrush(self.on_color_2)
        else:
            brush = QBrush(self.off_color_2)
        painter.setBrush(brush)
        painter.setPen(pen)
        painter.drawEllipse(-7, -7, 14, 14)
示例#16
0
 def paintEvent(self, event):
     painter = QPainter(self)
     pen = QPen(QColor("orange"))
     pen.setWidth(5)
     pen.setCapStyle(Qt.RoundCap)
     pen.setJoinStyle(Qt.RoundJoin)
     painter.setPen(pen)
     painter.drawPath(self.painter)
示例#17
0
 def _default_pen():
     pen = QPen(QColor('white'))
     pen.setStyle(Qt.SolidLine)
     pen.setWidth(3)
     pen.setCapStyle(Qt.RoundCap)
     pen.setJoinStyle(Qt.RoundJoin)
     pen.setCosmetic(True)
     return pen
示例#18
0
 def draw(self, painter):
     pen = QPen(Layer.color(LayerType.annotate))
     pen.setCapStyle(Qt.RoundCap)
     pen.setJoinStyle(Qt.RoundJoin)
     pen.setWidth(0)
     painter.setPen(pen)
     if self._firstPt is not None:
         painter.drawLine(self._firstPt, self._pos)
示例#19
0
def get_fold_qpen():
    pen = QPen()
    pen.setWidth(0.1)
    pen.setStyle(QtCore.Qt.SolidLine)
    pen.setColor(QColor(51, 204, 255))
    pen.setCapStyle(QtCore.Qt.SquareCap)
    pen.setJoinStyle(QtCore.Qt.RoundJoin)
    return pen
示例#20
0
def get_all_qpen():
    pen = QPen()
    pen.setWidth(0.5)
    pen.setStyle(QtCore.Qt.SolidLine)
    pen.setColor(QColor(252, 3, 3))
    pen.setCapStyle(QtCore.Qt.SquareCap)
    pen.setJoinStyle(QtCore.Qt.RoundJoin)
    return pen
示例#21
0
def draw_circular_bar(
        painter: QPainter,
        radius: int,
        angle: int,
        span: int,
        width: int,
        fill_brush: QBrush,
        line_brush: QBrush,
        line_width: int
):
    """
    Draw a circular bar using the QPainter handler given by the outer caller.
    :param painter: Painter handler
    :param radius:  Circular radius
    :param angle:   Starting angle
    :param span:    Span angle
    :param width:   Width between circular
    :param fill_brush:  Color pattern used to fill the path
    :param line_brush:  Color pattern used to draw lines
    :param line_width:  Line width
    """
    painter.save()
    path = QPainterPath()
    path.moveTo(
        QPointF(
            (radius - width / 2) * cos(radians(angle)) + radius,
            -(radius - width / 2) * sin(radians(angle)) + radius
        )
    )
    path.lineTo(
        QPointF(
            radius * cos(radians(angle)) + radius,
            -radius * sin(radians(angle)) + radius
        )
    )
    path.arcTo(QRectF(0, 0, radius * 2, radius * 2), angle, span)
    path.lineTo(
        QPointF(
            (radius - width / 2) * cos(radians(angle + span)) + radius,
            -(radius - width / 2) * sin(radians(angle + span)) + radius
        )
    )
    path.arcTo(
        QRectF(
            width // 2, width // 2,
            radius * 2 - width, radius * 2 - width
        ),
        angle + span,
        -span
    )

    pen = QPen(line_brush, line_width)
    pen.setJoinStyle(Qt.RoundJoin)

    painter.setPen(pen)
    painter.fillPath(path, fill_brush)
    painter.drawPath(path)
    painter.restore()
示例#22
0
 def draw(self, painter):
     pen = QPen(Layer.color(LayerType.selection))
     pen.setCapStyle(Qt.RoundCap)
     pen.setJoinStyle(Qt.RoundJoin)
     pen.setWidth(0)
     painter.setPen(pen)
     for h in self._handles:
         h.draw(painter)
     painter.drawLine(self._obj.pt1, self._obj.pt2)
示例#23
0
    def paintEvent(self, event):  ##在窗口上绘图
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing)
        painter.setRenderHint(QPainter.TextAntialiasing)

        rect = QRect(0, 0, self.width(), self.height())  #viewport矩形区
        painter.setViewport(rect)  #设置Viewport
        painter.setWindow(0, 0, 120, 50)  #设置窗口大小,逻辑坐标

        ##绘制电池边框
        pen = QPen()
        pen.setWidth(2)  #线宽
        pen.setColor(self.colorBorder)  #划线颜色
        pen.setStyle(Qt.SolidLine)  #线的类型,实线、虚线等
        pen.setCapStyle(Qt.FlatCap)  #线端点样式
        pen.setJoinStyle(Qt.BevelJoin)  #线的连接点样式
        painter.setPen(pen)

        brush = QBrush()  #设置画刷
        brush.setColor(self.colorBack)  #画刷颜色
        brush.setStyle(Qt.SolidPattern)  #画刷填充样式
        painter.setBrush(brush)

        rect.setRect(1, 1, 109, 48)
        painter.drawRect(rect)  #绘制电池边框

        brush.setColor(self.colorBorder)  #画刷颜色
        painter.setBrush(brush)
        rect.setRect(110, 15, 10, 20)
        painter.drawRect(rect)  #画电池正极头

        ##画电池柱
        if self.__powerLevel > self.__warnLevel:  #正常颜色电量柱
            brush.setColor(self.colorPower)  #画刷颜色
            pen.setColor(self.colorPower)  #划线颜色
        else:  ##电量低电量柱
            brush.setColor(self.colorWarning)  #画刷颜色
            pen.setColor(self.colorWarning)  #划线颜色

        painter.setBrush(brush)
        painter.setPen(pen)

        if self.__powerLevel > 0:
            rect.setRect(5, 5, self.__powerLevel, 40)
            painter.drawRect(rect)  #画电池柱

##绘制电量百分比文字
        textSize = QFontMetrics(self.font())
        powStr = "%d%%" % self.__powerLevel
        textRect = QRect(textSize.boundingRect(powStr))  #得到字符串的rect

        painter.setFont(self.font())
        pen.setColor(self.colorBorder)  #划线颜色
        painter.setPen(pen)

        painter.drawText(55 - textRect.width() / 2, 23 + textRect.height() / 2,
                         powStr)
示例#24
0
 def pen(self):
     """create and return default pen"""
     pen = QPen()
     pen.setStyle(DefaultDrawParams.pen_style)
     pen.setWidth(DefaultDrawParams.pen_thickness)
     pen.setBrush(self.border_color)
     pen.setCapStyle(DefaultDrawParams.pen_cap_style)
     pen.setJoinStyle(DefaultDrawParams.pen_join_style)
     return pen
示例#25
0
    def paint(self, QPainter, QStyleOptionGraphicsItem, QWidget_widget=None):
        # setPen
        pen = QPen()
        pen.setWidth(1)
        pen.setJoinStyle(Qt.MiterJoin)  #让箭头变尖
        QPainter.setPen(pen)

        # draw line
        QPainter.drawLine(self.line)
        ptextx = (self.line.x1() + self.line.x2()) / 2
        ptexty = (self.line.y1() + self.line.y2()) / 2
        ptexty -= 5
        ptextx -= len(self.boxName) * 3

        #QPainter.drawText(QPointF(ptextx, ptexty+20), self.direction)
        # setBrush
        brush = QBrush()
        brush.setColor(Qt.black)
        brush.setStyle(Qt.SolidPattern)
        QPainter.setBrush(brush)

        v = self.line.unitVector()
        v.setLength(5)
        v.translate(QPointF(self.line.dx(), self.line.dy()))

        n = v.normalVector()
        n.setLength(n.length() * 0.5)
        n2 = n.normalVector().normalVector()

        p1 = v.p2()
        p2 = n.p2()
        p3 = n2.p2()

        # 方法1
        QPainter.drawLine(self.line)
        QPainter.drawPolygon(p1, p2, p3)

        if self.fromLocation is not None and self.toLocation is not None:
            if self.fromLocation.boxName == self.toLocation.boxName:
                QPainter.drawArc(self.arcx1, self.arcy1, 80, 80,
                                 self.minAngle * 16, self.spanAngle * 16)
                ptextx = self.arcTextx
                ptexty = self.arcTexty
                #QPainter.drawArc(self.arcx1, self.arcy1+100, 50, 50, 270*16, 89*16)

                #QPainter.drawArc(self.arcx1, self.arcy1+200, 50, 50, 0*16, 89*16)

                #QPainter.drawArc(self.arcx1, self.arcy1+300, 50, 50, 270*16, 180*16)

                #QPainter.drawArc(self.arcx1, self.arcy1+400, 50, 50, 270*16, 270*16)
                #QPainter.drawArc(self.arcx1, self.arcy1+500, 50, 50, 180*16, 89*16)

        QPainter.drawText(QPointF(ptextx, ptexty), self.boxName)

        #QPainter.drawRect(self.arcx1, self.arcy1, 50, 50)
        self.scene.update()
示例#26
0
    def paint(self, QPainter, QStyleOptionGraphicsItem, QWidget_widget=None):
        # setPen
        pen = QPen()
        pen.setWidth(1)
        pen.setJoinStyle(Qt.MiterJoin)  #让箭头变尖
        QPainter.setPen(pen)

        # draw line
        QPainter.drawLine(self.line)
        ptextx = (self.line.x1() + self.line.x2()) / 2
        ptexty = (self.line.y1() + self.line.y2()) / 2
        ptexty -= 5
        ptextx -= len(self.boxName) * 3
        QPainter.drawText(QPointF(ptextx, ptexty), self.boxName)

        #Painter.drawText(QPointF(ptextx, ptexty+20), self.direction)
        # setBrush
        brush = QBrush()
        brush.setColor(Qt.black)
        brush.setStyle(Qt.SolidPattern)
        QPainter.setBrush(brush)

        v = self.line.unitVector()
        v.setLength(5)
        v.translate(QPointF(self.line.dx(), self.line.dy()))

        n = v.normalVector()
        n.setLength(n.length() * 0.5)
        n2 = n.normalVector().normalVector()

        p1 = v.p2()
        p2 = n.p2()
        p3 = n2.p2()

        # 方法1
        QPainter.drawLine(self.line)
        QPainter.drawPolygon(p1, p2, p3)

        QPainter.drawArc(10, 10, 50, 50, 0, 180 * 16)

        v = self.line.unitVector()
        v.setLength(5)
        v.translate(QPointF(10, 60))

        n = v.normalVector()
        n.setLength(n.length() * 0.5)
        n2 = n.normalVector().normalVector()

        p1 = v.p2()
        p2 = n.p2()
        p3 = n2.p2()

        # 方法1
        #QPainter.drawLine(self.line)
        QPainter.drawPolygon(p1, p2, p3)
        self.scene.update()
示例#27
0
 def _plot_baseline(self):
     if not self.baseline_plot:
         self.baseline_plot = self.parent.image_view.plot_item.plot()
     pen = QPen(QColor('red'))
     pen.setStyle(Qt.DashDotLine)
     pen.setWidth(4)
     pen.setCapStyle(Qt.RoundCap)
     pen.setJoinStyle(Qt.RoundJoin)
     pen.setCosmetic(True)
     self.baseline_plot.setData(self._x_axis, self._baseline, pen=pen)
示例#28
0
 def set_pen(self, width: int = 3, color: str or QColor = 'white'):
     if isinstance(color, str):
         color = QColor(color)
     pen = QPen(color)
     pen.setStyle(Qt.SolidLine)
     pen.setWidth(width)
     pen.setCapStyle(Qt.RoundCap)
     pen.setJoinStyle(Qt.RoundJoin)
     pen.setCosmetic(True)
     self.plot.setPen(pen)
示例#29
0
 def addBorder(self):
     width, ok = QInputDialog.getInt(self, 'Add Border', 'Enter Border Width :', 2, 1)
     if ok:
         painter = QPainter(self.image.pic)
         pen = QPen(Qt.black)
         pen.setWidth(width)
         pen.setJoinStyle(Qt.MiterJoin);
         painter.setPen(pen)
         painter.drawRect(width/2, width/2, self.image.pic.width()-width, self.image.pic.height()-width)
         self.image.showScaled()
示例#30
0
    def paintEvent(self, paintEvent: QPaintEvent):
        pen = QPen()
        pen.setJoinStyle(Qt.RoundJoin)
        pen.setCapStyle(Qt.RoundCap)
        painter = QPainter(self)
        painter.translate(self.paintOffset)
        painter.setBackgroundMode(Qt.TransparentMode)
        painter.setRenderHint(QPainter.Antialiasing)

        if self.nodes is not None:
            painted = set()

            def paintNode(node):
                nonlocal painter, painted
                if node in painted:
                    return
                painted.add(node)
                for link in node.links:
                    if link not in painted:
                        painter.drawLine(node.point, link.point)
                        paintNode(link)

            color = self.palette().color(QPalette.Dark)
            pen.setColor(color)
            pen.setWidth(0.50 * self.paintStep)
            painter.setPen(pen)
            for node in self.nodes.values():
                if paintEvent.region().contains(node.point):
                    paintNode(node)

        if self.startNode is not None:
            color = self.palette().color(QPalette.Dark)
            pen.setColor(color)
            pen.setWidth(0.75 * self.paintStep)
            painter.setPen(pen)
            if paintEvent.region().contains(self.startNode.point):
                painter.drawPoint(self.startNode.point)

        if self.finishNode is not None and paintEvent.region().contains(
                self.finishNode.point):
            color = self.palette().color(QPalette.Dark).darker(120)
            pen.setColor(color)
            pen.setWidth(0.75 * self.paintStep)
            painter.setPen(pen)
            painter.drawPoint(self.finishNode.point)

        if self.player is not None:
            color = self.palette().color(QPalette.Highlight)
            color.setAlpha(196)
            pen.setColor(color)
            pen.setWidth(0.90 * self.paintStep)
            painter.setPen(pen)
            painter.drawPoint(self.player)

        del painter, pen
示例#31
0
    def paintEvent(self, e):

        p = QPainter(self)

        cell_rect = QRect()

        ramp_count = len(self._ramps)

        col_count = self._ramps[0].color_count

        index = 0
        ramp_index = 0

        for ramp in self._ramps:

            for i in range(0, col_count):
                cell_rect.setRect(i * (self._cellSize + 1),
                                  (index // ramp_count) * (self._cellSize + 1),
                                  self._cellSize, self._cellSize)
                p.fillRect(cell_rect, ramp.color_at(col_count - 1 - i))

                index += 1

            ramp_index += 1

        pen = QPen()

        pen.setWidth(self._cellIndicatorSize)
        pen.setJoinStyle(Qt.MiterJoin)

        border_adjust = self._cellIndicatorSize / 2

        # PAINT SELECTED CELL A

        pen.setColor(self._primaryIndicatorColor)
        p.setPen(pen)

        cell_rect = self._cell_rect(self._selectedCellA2.index)

        p.drawRect(cell_rect.adjusted(border_adjust,
                                      border_adjust,
                                      -border_adjust,
                                      -border_adjust))

        # PAINT SELECTED CELL B

        pen.setColor(self._secondaryIndicatorColor)
        p.setPen(pen)

        cell_rect = self._cell_rect(self._selectedCellB2.index)

        p.drawRect(cell_rect.adjusted(border_adjust,
                                      border_adjust,
                                      -border_adjust,
                                      -border_adjust))
示例#32
0
def _rounded_qimage(qimg, radius):
	r_image = QImage(qimg.width(), qimg.height(), QImage.Format_ARGB32)
	r_image.fill(Qt.transparent)
	p = QPainter()
	pen = QPen(Qt.darkGray)
	pen.setJoinStyle(Qt.RoundJoin)
	p.begin(r_image)
	p.setRenderHint(p.Antialiasing)
	p.setPen(Qt.NoPen)
	p.setBrush(QBrush(qimg))
	p.drawRoundedRect(0, 0, r_image.width(), r_image.height(), radius, radius)
	p.end()
	return r_image
示例#33
0
 def paintEvent(self, event):
     painter = QPainter(self)
     # erase background
     painter.setBackground(QBrush(Layer.color(LayerType.background)))
     painter.setClipping(True)
     painter.eraseRect(self.rect())
     # draw document
     if self._ctrl is not None:
         # draw grid
         painter.setRenderHint(QPainter.Antialiasing, False)
         pen = QPen(Layer.color(LayerType.grid))
         pen.setCapStyle(Qt.RoundCap)
         pen.setJoinStyle(Qt.RoundJoin)
         pen.setWidth(0)
         painter.setTransform(self._transform)
         painter.setPen(pen)
         self._drawGrid(painter)
         # draw drawables
         # painter.setRenderHint(QPainter.Antialiasing)
         for d in self._ctrl.getDrawables():
             d.draw(painter)
     painter.end()
示例#34
0
def getPenObj(hex_string: str,
            stroke_width: int,
            alpha: int = None,
            lighter: int=None,
            penstyle: Qt.PenStyle = None,
            capstyle: Qt.PenCapStyle = None,
            joinstyle: Qt.PenJoinStyle = None) -> QPen:
    """If the specified :class:`QPen` is cached, return it.
    Otherwise, cache and return a new :class:`QPen`.

    Args:
        hex_string (str): hexadecimal color code in the form: #RRGGBB
        stroke_width (int)
        alpha (int): 0–255
        lighter (int): see `QColor.lighter <http://doc.qt.io/qt-5/qcolor.html#lighter>`_.
        penstyle: see `QPen.pen-style <http://doc.qt.io/qt-5/qt.html#PenStyle-enum>`_.
        capstyle: see `QPen.cap-style <http://doc.qt.io/qt-5/qt.html#PenCapStyle-enum>`_.
        joinstyle: see `QPen.join-style <http://doc.qt.io/qt-5/qt.html#PenJoinStyle-enum>`_.

    Returns:
        :class:`QPen` object
    """
    global pen_cache
    if alpha is not None:
        hex_string = '#%0.2x%s' % (alpha, hex_string[1:])
    # print(hex_string)
    key = (hex_string, stroke_width, lighter, capstyle, joinstyle, penstyle)
    pen = pen_cache.get(key)
    if pen is None:
        color = getColorObj(hex_string, lighter=lighter)
        pen = QPen(color, stroke_width)
        if penstyle is not None:
            pen.setStyle(penstyle)
        if capstyle is not None:
            pen.setCapStyle(capstyle)
        if joinstyle is not None:
            pen.setJoinStyle(joinstyle)
        pen_cache[key] = pen
    return pen
示例#35
0
    def overlay_marks(self, img, is_cseed=False, calibration_sheet=False):
        border_color = Qt.white
        base_img = QImage(self.f_size.width(),self.f_size.height(), QImage.Format_ARGB32)
        base_img.fill(border_color)
        img = QImage(img)

        painter = QPainter()
        painter.begin(base_img)

        total_distance_h = round(base_img.width() / self.abstand_v)
        dist_v = round(total_distance_h) / 2
        dist_h = round(total_distance_h) / 2

        img = img.scaledToWidth(base_img.width() - (2 * (total_distance_h)))
        painter.drawImage(total_distance_h,
                          total_distance_h,
                          img)

        #frame around image
        pen = QPen(Qt.black, 2)
        painter.setPen(pen)

        #horz
        painter.drawLine(0, total_distance_h, base_img.width(), total_distance_h)
        painter.drawLine(0, base_img.height()-(total_distance_h), base_img.width(), base_img.height()-(total_distance_h))
        #vert
        painter.drawLine(total_distance_h, 0,  total_distance_h, base_img.height())
        painter.drawLine(base_img.width()-(total_distance_h), 0,  base_img.width()-(total_distance_h), base_img.height())

        #border around img
        border_thick = 6
        Rpath = QPainterPath()
        Rpath.addRect(QRectF((total_distance_h)+(border_thick/2),
                             (total_distance_h)+(border_thick/2),
                             base_img.width()-((total_distance_h)*2)-((border_thick)-1),
                             (base_img.height()-((total_distance_h))*2)-((border_thick)-1)))
        pen = QPen(Qt.black, border_thick)
        pen.setJoinStyle (Qt.MiterJoin)

        painter.setPen(pen)
        painter.drawPath(Rpath)

        Bpath = QPainterPath()
        Bpath.addRect(QRectF((total_distance_h), (total_distance_h),
                             base_img.width()-((total_distance_h)*2), (base_img.height()-((total_distance_h))*2)))
        pen = QPen(Qt.black, 1)
        painter.setPen(pen)
        painter.drawPath(Bpath)

        pen = QPen(Qt.black, 1)
        painter.setPen(pen)
        painter.drawLine(0, base_img.height()/2, total_distance_h, base_img.height()/2)
        painter.drawLine(base_img.width()/2, 0, base_img.width()/2, total_distance_h)

        painter.drawLine(base_img.width()-total_distance_h, base_img.height()/2, base_img.width(), base_img.height()/2)
        painter.drawLine(base_img.width()/2, base_img.height(), base_img.width()/2, base_img.height() - total_distance_h)

        #print code
        f_size = 37
        QFontDatabase.addApplicationFont(os.path.join(os.path.dirname(__file__), 'DejaVuSansMono-Bold.ttf'))
        font = QFont("DejaVu Sans Mono", f_size-11, QFont.Bold)
        font.setPixelSize(35)
        painter.setFont(font)

        if not calibration_sheet:
            if is_cseed: #its a secret
                painter.setPen(QPen(Qt.black, 1, Qt.DashDotDotLine))
                painter.drawLine(0, dist_v, base_img.width(), dist_v)
                painter.drawLine(dist_h, 0,  dist_h, base_img.height())
                painter.drawLine(0, base_img.height()-dist_v, base_img.width(), base_img.height()-(dist_v))
                painter.drawLine(base_img.width()-(dist_h), 0,  base_img.width()-(dist_h), base_img.height())

                painter.drawImage(((total_distance_h))+11, ((total_distance_h))+11,
                                  QImage(icon_path('electrumb.png')).scaledToWidth(2.1*(total_distance_h), Qt.SmoothTransformation))

                painter.setPen(QPen(Qt.white, border_thick*8))
                painter.drawLine(base_img.width()-((total_distance_h))-(border_thick*8)/2-(border_thick/2)-2,
                                (base_img.height()-((total_distance_h)))-((border_thick*8)/2)-(border_thick/2)-2,
                                base_img.width()-((total_distance_h))-(border_thick*8)/2-(border_thick/2)-2 - 77,
                                (base_img.height()-((total_distance_h)))-((border_thick*8)/2)-(border_thick/2)-2)
                painter.setPen(QColor(0,0,0,255))
                painter.drawText(QRect(0, base_img.height()-107, base_img.width()-total_distance_h - border_thick - 11,
                                       base_img.height()-total_distance_h - border_thick), Qt.AlignRight,
                                 self.versioned_seed.version + '_'+self.versioned_seed.checksum)
                painter.end()

            else: # revealer

                painter.setPen(QPen(border_color, 17))
                painter.drawLine(0, dist_v, base_img.width(), dist_v)
                painter.drawLine(dist_h, 0,  dist_h, base_img.height())
                painter.drawLine(0, base_img.height()-dist_v, base_img.width(), base_img.height()-(dist_v))
                painter.drawLine(base_img.width()-(dist_h), 0,  base_img.width()-(dist_h), base_img.height())

                painter.setPen(QPen(Qt.black, 2))
                painter.drawLine(0, dist_v, base_img.width(), dist_v)
                painter.drawLine(dist_h, 0,  dist_h, base_img.height())
                painter.drawLine(0, base_img.height()-dist_v, base_img.width(), base_img.height()-(dist_v))
                painter.drawLine(base_img.width()-(dist_h), 0,  base_img.width()-(dist_h), base_img.height())
                logo = QImage(icon_path('revealer_c.png')).scaledToWidth(1.3*(total_distance_h))
                painter.drawImage((total_distance_h)+ (border_thick), ((total_distance_h))+ (border_thick), logo, Qt.SmoothTransformation)

                #frame around logo
                painter.setPen(QPen(Qt.black, border_thick))
                painter.drawLine(total_distance_h+border_thick, total_distance_h+logo.height()+3*(border_thick/2),
                                 total_distance_h+logo.width()+border_thick, total_distance_h+logo.height()+3*(border_thick/2))
                painter.drawLine(logo.width()+total_distance_h+3*(border_thick/2), total_distance_h+(border_thick),
                                 total_distance_h+logo.width()+3*(border_thick/2), total_distance_h+logo.height()+(border_thick))

                #frame around code/qr
                qr_size = 179

                painter.drawLine((base_img.width()-((total_distance_h))-(border_thick/2)-2)-qr_size,
                                (base_img.height()-((total_distance_h)))-((border_thick*8))-(border_thick/2)-2,
                                 (base_img.width()/2+(total_distance_h/2)-border_thick-(border_thick*8)/2)-qr_size,
                                (base_img.height()-((total_distance_h)))-((border_thick*8))-(border_thick/2)-2)

                painter.drawLine((base_img.width()/2+(total_distance_h/2)-border_thick-(border_thick*8)/2)-qr_size,
                                (base_img.height()-((total_distance_h)))-((border_thick*8))-(border_thick/2)-2,
                                 base_img.width()/2 + (total_distance_h/2)-border_thick-(border_thick*8)/2-qr_size,
                                 ((base_img.height()-((total_distance_h)))-(border_thick/2)-2))

                painter.setPen(QPen(Qt.white, border_thick * 8))
                painter.drawLine(
                    base_img.width() - ((total_distance_h)) - (border_thick * 8) / 2 - (border_thick / 2) - 2,
                    (base_img.height() - ((total_distance_h))) - ((border_thick * 8) / 2) - (border_thick / 2) - 2,
                    base_img.width() / 2 + (total_distance_h / 2) - border_thick - qr_size,
                    (base_img.height() - ((total_distance_h))) - ((border_thick * 8) / 2) - (border_thick / 2) - 2)

                painter.setPen(QColor(0,0,0,255))
                painter.drawText(QRect(((base_img.width()/2) +21)-qr_size, base_img.height()-107,
                                       base_img.width()-total_distance_h - border_thick -93,
                                       base_img.height()-total_distance_h - border_thick), Qt.AlignLeft, self.versioned_seed.get_ui_string_version_plus_seed())
                painter.drawText(QRect(0, base_img.height()-107, base_img.width()-total_distance_h - border_thick -3 -qr_size,
                                       base_img.height()-total_distance_h - border_thick), Qt.AlignRight, self.versioned_seed.checksum)

                # draw qr code
                qr_qt = self.paintQR(self.versioned_seed.get_ui_string_version_plus_seed()
                                     + self.versioned_seed.checksum)
                target = QRectF(base_img.width()-65-qr_size,
                                base_img.height()-65-qr_size,
                                qr_size, qr_size )
                painter.drawImage(target, qr_qt)
                painter.setPen(QPen(Qt.black, 4))
                painter.drawLine(base_img.width()-65-qr_size,
                                base_img.height()-65-qr_size,
                                 base_img.width() - 65 - qr_size,
                                (base_img.height() - ((total_distance_h))) - ((border_thick * 8)) - (border_thick / 2) - 4
                                 )
                painter.drawLine(base_img.width()-65-qr_size,
                                base_img.height()-65-qr_size,
                                 base_img.width() - 65,
                                base_img.height()-65-qr_size
                                 )
                painter.end()

        else: # calibration only
            painter.end()
            cal_img = QImage(self.f_size.width() + 100, self.f_size.height() + 100,
                              QImage.Format_ARGB32)
            cal_img.fill(Qt.white)

            cal_painter = QPainter()
            cal_painter.begin(cal_img)
            cal_painter.drawImage(0,0, base_img)

            #black lines in the middle of border top left only
            cal_painter.setPen(QPen(Qt.black, 1, Qt.DashDotDotLine))
            cal_painter.drawLine(0, dist_v, base_img.width(), dist_v)
            cal_painter.drawLine(dist_h, 0,  dist_h, base_img.height())

            pen = QPen(Qt.black, 2, Qt.DashDotDotLine)
            cal_painter.setPen(pen)
            n=15

            cal_painter.setFont(QFont("DejaVu Sans Mono", 21, QFont.Bold))
            for x in range(-n,n):
                #lines on bottom (vertical calibration)
                cal_painter.drawLine((((base_img.width())/(n*2)) *(x))+ (base_img.width()/2)-13,
                                 x+2+base_img.height()-(dist_v),
                                 (((base_img.width())/(n*2)) *(x))+ (base_img.width()/2)+13,
                                 x+2+base_img.height()-(dist_v))

                num_pos = 9
                if x > 9 : num_pos = 17
                if x < 0 : num_pos = 20
                if x < -9: num_pos = 27

                cal_painter.drawText((((base_img.width())/(n*2)) *(x))+ (base_img.width()/2)-num_pos,
                                 50+base_img.height()-(dist_v),
                                  str(x))

                #lines on the right (horizontal calibrations)

                cal_painter.drawLine(x+2+(base_img.width()-(dist_h)),
                                 ((base_img.height()/(2*n)) *(x))+ (base_img.height()/n)+(base_img.height()/2)-13,
                                 x+2+(base_img.width()-(dist_h)),
                                 ((base_img.height()/(2*n)) *(x))+ (base_img.height()/n)+(base_img.height()/2)+13)


                cal_painter.drawText(30+(base_img.width()-(dist_h)),
                                ((base_img.height()/(2*n)) *(x))+ (base_img.height()/2)+13, str(x))

            cal_painter.end()
            base_img = cal_img

        return base_img
示例#36
0
    def drawMapObject(self, painter, object, color):
        painter.save()
        pen = QPen(Qt.black)
        pen.setCosmetic(True)
        cell = object.cell()
        if (not cell.isEmpty()):
            tile = cell.tile
            imgSize = tile.size()
            pos = self.pixelToScreenCoords_(object.position())
            tileOffset = tile.offset()
            CellRenderer(painter).render(cell, pos, object.size(), CellRenderer.BottomCenter)
            if (self.testFlag(RenderFlag.ShowTileObjectOutlines)):
                rect = QRectF(QPointF(pos.x() - imgSize.width() / 2 + tileOffset.x(),
                                    pos.y() - imgSize.height() + tileOffset.y()),
                            QSizeF(imgSize))
                pen.setStyle(Qt.SolidLine)
                painter.setPen(pen)
                painter.drawRect(rect)
                pen.setStyle(Qt.DotLine)
                pen.setColor(color)
                painter.setPen(pen)
                painter.drawRect(rect)
        else:
            lineWidth = self.objectLineWidth()
            scale = self.painterScale()
            x = 1
            if lineWidth != 0:
                x = lineWidth
            shadowOffset = x / scale
            brushColor = QColor(color)
            brushColor.setAlpha(50)
            brush = QBrush(brushColor)
            pen.setJoinStyle(Qt.RoundJoin)
            pen.setCapStyle(Qt.RoundCap)
            pen.setWidth(lineWidth)
            
            colorPen = QPen(pen)
            colorPen.setColor(color)
        
            painter.setPen(pen)
            painter.setRenderHint(QPainter.Antialiasing)
            # TODO: Do something sensible to make null-sized objects usable
            x = object.shape()
            if x==MapObject.Ellipse:
                polygon = self.pixelRectToScreenPolygon(object.bounds())
                tw = self.map().tileWidth()
                th = self.map().tileHeight()
                transformScale = QPointF(1, 1)
                if (tw > th):
                    transformScale = QPointF(1, th/tw)
                else:
                    transformScale = QPointF(tw/th, 1)
                l1 = polygon.at(1) - polygon.at(0)
                l2 = polygon.at(3) - polygon.at(0)
                trans = QTransform()
                trans.scale(transformScale.x(), transformScale.y())
                trans.rotate(45)
                iTrans, ok = trans.inverted()
                l1x = iTrans.map(l1)
                l2x = iTrans.map(l2)
                ellipseSize = QSizeF(l1x.manhattanLength(), l2x.manhattanLength())
                if (ellipseSize.width() > 0 and ellipseSize.height() > 0):
                    painter.save()
                    painter.setPen(pen)
                    painter.translate(polygon.at(0))
                    painter.scale(transformScale.x(), transformScale.y())
                    painter.rotate(45)
                    painter.drawEllipse(QRectF(QPointF(0, 0), ellipseSize))
                    painter.restore()

                painter.setBrush(Qt.NoBrush)
                painter.drawPolygon(polygon)
                
                painter.setPen(colorPen)
                painter.setBrush(Qt.NoBrush)
                painter.translate(QPointF(0, -shadowOffset))
                painter.drawPolygon(polygon)
                painter.setBrush(brush)
                if (ellipseSize.width() > 0 and ellipseSize.height() > 0):
                    painter.save()
                    painter.translate(polygon.at(0))
                    painter.scale(transformScale.x(), transformScale.y())
                    painter.rotate(45)
                    painter.drawEllipse(QRectF(QPointF(0, 0), ellipseSize))
                    painter.restore()
            elif x==MapObject.Rectangle:
                polygon = self.pixelRectToScreenPolygon(object.bounds())
                painter.drawPolygon(polygon)
                painter.setPen(colorPen)
                painter.setBrush(brush)
                polygon.translate(0, -shadowOffset)
                painter.drawPolygon(polygon)
            elif x==MapObject.Polygon:
                pos = object.position()
                polygon = object.polygon().translated(pos)
                screenPolygon = self.pixelToScreenCoords_(polygon)
                thickPen = QPen(pen)
                thickColorPen = QPen(colorPen)
                thickPen.setWidthF(thickPen.widthF() * 4)
                thickColorPen.setWidthF(thickColorPen.widthF() * 4)
            
                painter.drawPolygon(screenPolygon)
                
                painter.setPen(thickPen)
                painter.drawPoint(screenPolygon.first())

                painter.setPen(colorPen)
                painter.setBrush(brush)
                screenPolygon.translate(0, -shadowOffset)
                painter.drawPolygon(screenPolygon)
                painter.setPen(thickColorPen)
                painter.drawPoint(screenPolygon.first())
                
            elif x==MapObject.Polyline:
                pos = object.position()
                polygon = object.polygon().translated(pos)
                screenPolygon = self.pixelToScreenCoords_(polygon)
                thickPen = QPen(pen)
                thickColorPen = QPen(colorPen)
                thickPen.setWidthF(thickPen.widthF() * 4)
                thickColorPen.setWidthF(thickColorPen.widthF() * 4)
                
                painter.drawPolyline(screenPolygon)
                painter.setPen(thickPen)
                painter.drawPoint(screenPolygon.first())
                
                painter.setPen(colorPen)
                screenPolygon.translate(0, -shadowOffset)
                painter.drawPolyline(screenPolygon)
                
                painter.setPen(thickColorPen)
                painter.drawPoint(screenPolygon.first())

        painter.restore()
示例#37
0
_PATH_CENTER = QPointF(styles.PATH_BASE_WIDTH / 2,\
                          styles.PATH_BASE_WIDTH / 2)
_PATH_U_CENTER = QPointF(styles.PATH_BASE_WIDTH / 2, 0)
_PATH_D_CENTER = QPointF(styles.PATH_BASE_WIDTH / 2, styles.PATH_BASE_WIDTH)
_PPATH_LU = QPainterPath()
_hashMarkGen(_PPATH_LU, _PP_RECT.bottomLeft(), _PATH_D_CENTER, _PATH_CENTER)
_PPATH_RU = QPainterPath()
_hashMarkGen(_PPATH_RU, _PP_RECT.bottomRight(), _PATH_D_CENTER, _PATH_CENTER)
_PPATH_RD = QPainterPath()
_hashMarkGen(_PPATH_RD, _PP_RECT.topRight(), _PATH_U_CENTER, _PATH_CENTER)
_PPATH_LD = QPainterPath()
_hashMarkGen(_PPATH_LD, _PP_RECT.topLeft(), _PATH_U_CENTER, _PATH_CENTER)

_SCAF_PEN = QPen(styles.PXI_SCAF_STROKE, styles.PATH_STRAND_STROKE_WIDTH)
_SCAF_PEN.setCapStyle(Qt.FlatCap)  # or Qt.RoundCap
_SCAF_PEN.setJoinStyle(Qt.RoundJoin)
_STAP_PEN = QPen(styles.PXI_STAP_STROKE, styles.PATH_STRAND_STROKE_WIDTH)
_STAP_PEN.setCapStyle(Qt.FlatCap)  # or Qt.RoundCap
_STAP_PEN.setJoinStyle(Qt.RoundJoin)
_DISAB_PEN = QPen(styles.PXI_DISAB_STROKE, styles.PATH_STRAND_STROKE_WIDTH)
_DISAB_PEN.setCapStyle(Qt.FlatCap)
_DISAB_PEN.setJoinStyle(Qt.RoundJoin)
_DISAB_BRUSH = QBrush(styles.PXI_DISAB_STROKE)  # For the helix number label
_ENAB_BRUSH = QBrush(Qt.SolidPattern)  # Also for the helix number label
_BASE_WIDTH = styles.PATH_BASE_WIDTH
_RECT = QRectF(0, 0, styles.PATH_BASE_WIDTH, 1.2*styles.PATH_BASE_WIDTH)
_TO_HELIX_NUM_FONT = styles.XOVER_LABEL_FONT
# precalculate the height of a number font.  Assumes a fixed font
# and that only numbers will be used for labels
_FM = QFontMetrics(_TO_HELIX_NUM_FONT)