Esempio n. 1
0
def simple_cut(cutter: Rect, line: QLine):
    t1, t2 = count_T(line.p1(), cutter), count_T(line.p2(), cutter)

    flag = 1

    r1, r2 = copy.deepcopy(line.p1()), copy.deepcopy(line.p2())

    # отрезок полностью видимый
    if t1 | t2 == 0:
        return step_31(flag, r1, r2)

    pl = t1 & t2

    # отрезок лежит по одну из сторон окна (невидимый)- тривиальная невидимость
    if pl != 0:
        flag = -1
        return step_31(flag)

    # отрезок частично видимый
    if t1 == 0:
        r1 = copy.deepcopy(line.p1())
        q = copy.deepcopy(line.p2())
        i = 2
        return step_15(flag, i, q, line, r1, r2, cutter)

    if t2 == 0:
        r1 = copy.deepcopy(line.p2())
        q = copy.deepcopy(line.p1())
        i = 2
        return step_15(flag, i, q, line, r1, r2, cutter)

    # внутри окна нет концов отрезка
    i = 0
    return step_12(flag, i, line, r1, r2, cutter)
Esempio n. 2
0
class CameraTri(QGraphicsItem):
    """A triangle showing a level of the camera"""

    def __init__(self, start, end, pos, parent=None):
        super().__init__(parent)
        self.start, self.end = start, end
        self.pos = pos
        self.line = QLine(0, 0, 100, 0)

    def updatePos(self, pos):
        self.pos = pos
        self.update()

    def getPoint(self):
        if self.pos < self.start:
            return self.line.p1()
        elif self.pos > self.end:
            return self.line.p2()
        else:
            c = (self.pos - self.start) / (self.end - self.start)
            return self.line.p1() * (1 - c) + self.line.p2() * c

    def paint(self, painter: QPainter, option, widget=None):
        rect = getRect(widget)
        delta = QPoint(5, 0)
        self.line = QLine(rect.bottomRight() + delta * 2,
                          rect.topRight() + delta * 2)
        point = self.getPoint()

        painter.setPen(QPen(Qt.black, 0))
        painter.setBrush(Qt.black)
        offset_h = QPointF(10, 0)
        offset_v = QPointF(0, 10)
        points = QPolygonF((
            QPointF(point),
            QPointF(point + offset_h - offset_v),
            QPointF(point + offset_h + offset_v),
            QPointF(point)
        ))
        painter.drawPolygon(points, 4)

    def boundingRect(self):
        offset = QPointF(20, 0)
        return QRectF(self.line.p1() - offset, self.line.p2() + offset)
Esempio n. 3
0
def step_12(flag: int, i: int, line: QLine, r1: QPoint, r2: QPoint,
            cutter: Rect):
    # внутри окна нет концов отрезков

    i += 1
    if i > 2:
        return step_31(flag, r1, r2)

    q = line.p1() if i == 1 else line.p2()

    return step_15(flag, i, q, line, r1, r2, cutter)
Esempio n. 4
0
class NGL_Line(NGL_Base):
    """
    NGL_Line(NGL_Base)
    Provides a embedded NGL library line widget.
    """

    # Signal used to indicate changes to the status of the widget.
    valueChanged = pyqtSignal(QLine)

    def __init__(self, parent=None):
        """ Constructor for ngl widget """
        super(NGL_Line, self).__init__(parent)

        self._line = QLine(0, 0, 150, 150)
        self._static = True
        self.update()

    def paintEvent(self, event):
        """ Paint ngl widget event """
        p = QPainter()
        p.begin(self)
        p.drawLine(self._line)
        p.end()

    def sizeHint(self):
        """ Return Qt sizeHint """
        return self._size()

    def _size(self):
        width = abs(self._line.x2() - self._line.x1()) + 1
        height = abs(self._line.y2() - self._line.y1()) + 1
        return QSize(width, height)

    def update(self):
        self._size_update()
        super(NGL_Line, self).update()

    def _size_update(self):
        """ Size update for widget """
        w = self._size().width()
        h = self._size().height()

        self.setMinimumSize(w, h)
        self.setMaximumSize(w, h)

    # # Provide getter and setter methods for the property.
    @pyqtProperty(QPoint)
    def P1(self):
        return self._line.p1()

    @P1.setter
    def P1(self, point):
        self._line.setP1(point)
        self.update()

    # Provide getter and setter methods for the property.
    @pyqtProperty(QPoint)
    def P2(self):
        return self._line.p2()

    @P2.setter
    def P2(self, point):
        self._line.setP2(point)
        self.update()

    def doNGLCode(self, **kwargs):
        template = 'NGL_GP_DrawLine({x0}, {y0}, {x1}, {y1}, {color});'

        # convert coordinates
        g = self._ngl_geometry()

        y1 = self._ngl_y(self.P1.y(), g.height() - 1)
        y2 = self._ngl_y(self.P2.y(), g.height() - 1)

        return template.format(
            x0 = g.x(),
            y0 = g.y() + y1,
            x1 = g.x() + g.width() - 1,
            y1 = g.y() + y2,
            color = self._ngl_color('color: rgb'))