Exemple #1
0
 def updateConnector(self, pos):
     if self.text == "P":
         self.line = QLine(pos.x() + 20, pos.y() - 10, pos.x() + 20, pos.y())
         self.setRect(pos.x() + 10, pos.y() - 30, 20, 20)
     else:
         self.line = QLine(pos.x() + 20, pos.y() + 40, pos.x() + 20, pos.y() + 50)
         self.setRect(pos.x() + 10, pos.y() + 50, 20, 20)
Exemple #2
0
    def paint(self, painter, option, widget):
        painter.setPen( QPen(Qt.green, 1, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin) )
        painter.drawLine(  QLine( QPoint(0,0), QPoint(0,100) )  )
        #painter.drawLine(  QLineF( QPointF(100,0), QPointF(100,100) )  )

        painter.setPen( QPen(Qt.red, 1, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin) )
        painter.drawLine(  QLine( QPoint(0,0), QPoint(100,0) )  )
Exemple #3
0
    def drawBackground(self, painter, rect):
        super().drawBackground(painter, rect)

        # here we create our grid
        left = int(math.floor(rect.left()))
        right = int(math.ceil(rect.right()))
        top = int(math.floor(rect.top()))
        bottom = int(math.ceil(rect.bottom()))

        first_left = left - (left % self.gridSize)
        first_top = top - (top % self.gridSize)

        # compute all lines to be drawn
        lines_light, lines_dark = [], []
        for x in range(first_left, right, self.gridSize):
            if (x % (self.gridSize * self.gridSquares) != 0):
                lines_light.append(QLine(x, top, x, bottom))
            else:
                lines_dark.append(QLine(x, top, x, bottom))

        for y in range(first_top, bottom, self.gridSize):
            if (y % (self.gridSize * self.gridSquares) != 0):
                lines_light.append(QLine(left, y, right, y))
            else:
                lines_dark.append(QLine(left, y, right, y))

        # draw the lines
        painter.setPen(self._pen_light)
        painter.drawLines(*lines_light)

        painter.setPen(self._pen_dark)
        painter.drawLines(*lines_dark)
Exemple #4
0
    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()
Exemple #5
0
    def drawBackground(self, painter, rect):
        super().drawBackground(painter, rect)

        left = int(math.floor(rect.left()))
        right = int(math.ceil(rect.right()))
        top = int(math.floor(rect.top()))
        bottom = int(math.ceil(rect.bottom()))

        first_left = left - (left % self.grid_size)
        first_top = top - (top % self.grid_size)

        lines_light, lines_dark = [], []
        for x in range(first_left, right, self.grid_size):
            if x % (self.grid_size * self.grid_squares) != 0:
                lines_light.append(QLine(x, top, x, bottom))
            else:
                lines_dark.append(QLine(x, top, x, bottom))

        for y in range(first_top, bottom, self.grid_size):
            if y % (self.grid_size * self.grid_squares) != 0:
                lines_light.append(QLine(left, y, right, y))
            else:
                lines_dark.append(QLine(left, y, right, y))

        # draw the lines
        painter.setPen(self._pen_light)
        if lines_light:
            painter.drawLines(*lines_light)

        painter.setPen(self._pen_dark)
        if lines_dark:
            painter.drawLines(*lines_dark)
Exemple #6
0
    def drawBackground(self, painter, rect):
        super().drawBackground(painter, rect)

        # draw grid

        # > compute all lines to be drawn
        lines_light, lines_dark = [], []
        left = int(math.floor(rect.left()))
        right = int(math.ceil(rect.right()))
        top = int(math.floor(rect.top()))
        bottom = int(math.ceil(rect.bottom()))

        first_left = left - left % self._grid_size
        first_top = top - top % self._grid_size

        for x in range(first_left, right, self._grid_size):
            if x % self._grid_squares == 0:
                lines_dark.append(QLine(x, top, x, bottom))
            else:
                lines_light.append(QLine(x, top, x, bottom))

        for y in range(first_top, bottom, self._grid_size):
            if y % self._grid_squares == 0:
                lines_dark.append(QLine(left, y, right, y))
            else:
                lines_light.append(QLine(left, y, right, y))

        # > use pen to draw lines
        painter.setPen(self._grid_pen)
        painter.drawLines(*lines_light)
        painter.setPen(self._grid_pen_dark)
        painter.drawLines(*lines_dark)
    def drawHangmanBody(self, painter):
        """
        Create and draw body parts for hangman.
        """
        if "head" in self.empty_list:
            head = QRect((self.width / 2) + 42, 40, 40, 40)
            painter.setPen(QPen(QColor("#000000"), 3))
            painter.setBrush(QBrush(QColor("#FFFFFF")))
            painter.drawEllipse(head)
        if "body" in self.empty_list:
            body = QRect((self.width / 2) + 60, 80, 2, 55)
            painter.setBrush(QBrush(QColor("#000000")))
            painter.drawRect(body)
        if "right_arm" in self.empty_list:
            right_arm = QLine((self.width / 2) + 60, 85, (self.width / 2) + 50,
                              (self.height / 2) + 30)
            pen = QPen(Qt.black, 3, Qt.SolidLine)
            painter.setPen(pen)
            painter.drawLine(right_arm)
        if "left_arm" in self.empty_list:
            left_arm = QLine((self.width / 2) + 62, 85, (self.width / 2) + 72,
                             (self.height / 2) + 30)
            painter.drawLine(left_arm)
        if "right_leg" in self.empty_list:
            right_leg = QLine((self.width / 2) + 60, 135,
                              (self.width / 2) + 50, (self.height / 2) + 75)
            painter.drawLine(right_leg)
        if "left_leg" in self.empty_list:
            left_leg = QLine((self.width / 2) + 62, 135, (self.width / 2) + 72,
                             (self.height / 2) + 75)
            painter.drawLine(left_leg)

        # Reset variable
        self.incorrect_letter = False
Exemple #8
0
 def _paintEvent(self, painter):
     if not self._lEnabled:
         return
     pen = QPen(self.lineColor)
     pen.setWidth(self.borderWidth)
     painter.setPen(pen)
     cx, setp = self.width() / 2, self.width() / self._lSp
     if self.hasFocus():
         if self._lInDraw:
             painter.drawLines(
                 QLine(cx, self.height(), cx + setp * self._lSetp,
                       self.height()),
                 QLine(cx, self.height(), cx - setp * self._lSetp,
                       self.height()),
             )
         else:
             painter.drawLine(0, self.height(), self.width(), self.height())
     else:
         if self._lOutDraw:
             painter.drawLines(
                 QLine(cx + setp * (self._lSp - self._lSetp), self.height(),
                       cx, self.height()),
                 QLine(cx - setp * (self._lSp - self._lSetp), self.height(),
                       cx, self.height()),
             )
Exemple #9
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)
Exemple #10
0
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(300, 300))
        self.setMouseTracking(True)

        pybutton = QPushButton('button', self)
        pybutton.clicked.connect(self.draw_line)
        pybutton.resize(100, 100)
        pybutton.move(100, 100)
        self.line = QLine()
Exemple #11
0
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(1000, 500))
        self.setWindowTitle("Yellow Circle")

        button = QPushButton('Draw', self)
        button.clicked.connect(self.draw)
        button.resize(100, 50)
        button.move(450, 400)
        self.line = QLine()
Exemple #12
0
    def paintEvent(self, ev):

        pixmap = QPixmap()
        pixmap.convertFromImage(self.plot_background)

        self.painter.begin(pixmap)
        self.painter.setPen(self.ytick_pen)

        temp = self.scale_y(
            np.array(
                list(self.buf[self.buffer_current_index:]) +
                list(self.buf[:self.buffer_current_index])))

        for yt in self.yticks:
            self.painter.drawLine(
                QLine(0, self.scale_y(yt), self.buffer_length * self.xscale,
                      self.scale_y(yt)))

        self.painter.setPen(self.hline_pen)
        for hline in self.hlines:
            self.painter.drawLine(
                QLine(0, self.scale_y(hline), self.buffer_length * self.xscale,
                      self.scale_y(hline)))

        self.painter.setPen(self.pen)

        for idx in range(self.buffer_length - 1):
            x1 = (idx) * self.xscale
            x2 = (idx + 1) * self.xscale

            y1 = temp[idx]
            y2 = temp[idx + 1]

            self.painter.drawLine(QLine(x1, y1, x2, y2))

            interval = self.buffer_length // 10
            interval = ccfg.plot_xtick_interval

            if idx % interval == 0:
                self.painter.setPen(self.xtick_pen)
                self.painter.drawLine(
                    QLine((x1 - self.buffer_current_index * self.xscale) %
                          (self.buffer_length * self.xscale), self.xtick0,
                          (x1 - self.buffer_current_index * self.xscale) %
                          (self.buffer_length * self.xscale), self.xtick1))
                self.painter.setPen(self.pen)

            #if True:#20<self.buffer_current_index<80:
            #    painter.drawEllipse(x1,y1,x2,y2)

        self.painter.end()
        self.plot.setPixmap(pixmap)
Exemple #13
0
 def __init__(self):
     super(bullsEye, self).__init__()
     global imageWidth
     global imageHeight
     global BEx
     global BEy
     global BEd
     global lineColorR
     global lineColorG
     global lineColorB
     global lineWidth
     self.line1 = QLine(BEx, BEy - BEd / 2, BEx, BEy + BEd / 2)
     self.line2 = QLine(BEx - BEd / 2, BEy, BEx + BEd / 2, BEy)
Exemple #14
0
 def paint(self, painter, option, widget):
     pen = QPen(Qt.SolidLine)
     pen.setColor(QColor(lineColorR, lineColorG, lineColorB))
     pen.setWidth(lineWidth)
     painter.setPen(pen)
     for i in range(1, 1 + lineCount):
         painter.drawLine(
             QLine(int(i * imageWidth / (lineCount + 1)), 0,
                   int(i * imageWidth / (lineCount + 1)), imageHeight))
         painter.drawLine(
             QLine(0, int(i * imageHeight / (lineCount + 1)), imageWidth,
                   int(i * imageHeight / (lineCount + 1))))
     self.update()
Exemple #15
0
 def draw_line(self):
     self.line = QLine(self.width() / 1.7,
                       self.height() / 1.25,
                       self.width() / 6.26,
                       self.height() / 4.5)
     self.line2 = QLine(self.width() / 1.7,
                        self.height() / 4.5,
                        self.width() / 6.26,
                        self.height() / 1.25)
     # self.line = QLine(QPoint(self.width() / 1.7, self.height() / 1.25),
     #                   QPoint(self.width() / 6.26, self.height() / 4.5))
     # self.line2 = QLine(QPoint(self.width() / 1.7, self.height() / 4.5),
     #                    QPoint(self.width() / 6.26, self.height() / 1.25))
     self.update()
Exemple #16
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)
Exemple #17
0
class LineDrawCanvas(QWidget):
    def __init__(self, parent=None):
        super(LineDrawCanvas, self).__init__(parent)
        self.setMinimumSize(200, 200)
        self.linePen = QPen(Qt.SolidLine)
        self.linePen.setColor(Qt.magenta)
        self.linePen.setWidth(6)
        self.drawingPen = QPen(Qt.DashLine)
        self.drawingPen.setColor(Qt.cyan)
        self.drawingPen.setWidth(3)
        self.currentLine = None
        self.lines = []

    def reset(self):
        self.lines = []
        self.update()

    def paintEvent(self, event):
        qp = QPainter(self)
        qp.setPen(QPen(Qt.black))
        qp.setBrush(QBrush(Qt.white))
        bounds = self.rect()
        qp.drawRect(0, 0,
                    bounds.width() - 1,
                    bounds.height() - 1)  # draw an outline around the graph

        qp.setPen(self.linePen)
        for line in self.lines:
            qp.drawLine(line)

        if self.currentLine != None:
            qp.setPen(self.drawingPen)
            qp.drawLine(self.currentLine)

    def mousePressEvent(self, event):
        self.currentLine = QLine(event.pos(), event.pos())  # start a new line

    def mouseMoveEvent(self, event):
        if self.currentLine != None:
            self.currentLine.setP2(
                event.pos())  # update the second point of the line
            self.update()  # redraw the widget to show the updated line

    def mouseReleaseEvent(self, event):
        if self.currentLine != None:
            # Turn the currentLine into a permanent line
            self.lines.append(self.currentLine)
            self.currentLine = None
            self.update()
Exemple #18
0
    def __init__(self, inherit, pos):
        self.text = ""
        self.line = None
        self.connectedEnds = []
        self.selected = True

        QRect.__init__(self)
        if inherit == "parent":
            self.text = "P"
            self.line = QLine(pos.x() + 20, pos.y() - 10, pos.x() + 20, pos.y())
            self.setRect(pos.x() + 10, pos.y() - 30, 20, 20)
        else:
            self.text = "C"
            self.line = QLine(pos.x() + 20, pos.y() + 40, pos.x() + 20, pos.y() + 50)
            self.setRect(pos.x() + 10, pos.y() + 50, 20, 20)
Exemple #19
0
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(1000, 500))
        self.setWindowTitle("Yellow Circle")

        button = QPushButton('Draw', self)
        button.clicked.connect(self.draw)
        button.resize(100, 50)
        button.move(450, 400)
        self.line = QLine()

    def draw(self):
        button = self.sender()
        self.line = QLine(QPoint(), button.pos())
        self.update()

    def paintEvent(self, event):
        QMainWindow.paintEvent(self, event)
        if not self.line.isNull():
            painter = QPainter(self)
            pen = QPen(Qt.yellow, 3)
            painter.setPen(pen)
            painter.setBrush(QBrush(Qt.yellow, Qt.SolidPattern))
            x, y = randint(0, 400), randint(0, 400)
            painter.drawEllipse(x, x, y, y)
Exemple #20
0
    def __init__(self, mwindow):
        self.mwindow = mwindow
        self.ctrl_flag = True
        self.state = 0
        self.label = ""
        self.lbl_pos = None
        self.current_conn = None
        self.lines = {}
        self.move_line = QLine()

        QFrame.__init__(self)
        self.setObjectName("treeF")
        self.setMouseTracking(True)

        self.menu = QMenu(self)

        clearA = QAction('Clear Connectors', self)
        clearA.triggered.connect(self.removeAll)
        self.menu.addAction(clearA)

        clearallA = QAction('Clear Frame', self)
        clearallA.triggered.connect(self.clearAll)
        self.menu.addAction(clearallA)

        self.show()
Exemple #21
0
 def __init__(self, parent=None):
     super(Dialog, self).__init__(parent)
     self.isFinished = False
     self.isDragging = False
     self.line = QLine()
     self.roiRect = QRect()
     self.initialize()
Exemple #22
0
 def draw(self,pixmap,downsample=1,active=None):
     if active is None:
         active=self.active
         
     d = float(downsample)
     if not self.visible:
         return
     if self.mode=='lines':
         painter = QPainter()
         painter.begin(pixmap)
         painter.setPen(self.pen)
         for index,(x1,x2,y1,y2) in enumerate(self.coords):
             if active[index]:
                 painter.drawLine(QLine(x1/d,y1/d,x2/d,y2/d))
         painter.end()
     elif self.mode=='rects':
         painter = QPainter()
         painter.begin(pixmap)
         painter.setPen(self.pen)
         for index,(x1,x2,y1,y2) in enumerate(self.coords):
             if not active[index]:
                 painter.setPen(self.err_pen)
             else:
                 painter.setPen(self.pen)
             width = x2-x1
             height = y2-y1
             painter.drawRect(x1/d,y1/d,width/d,height/d)
         painter.end()
Exemple #23
0
    def _arrange_data(self):

        self.rect = QRect()

        for i in range(len(self.pattern.coordinates)):

            coordinates = self.pattern.coordinates[i]
            color_item = self.colorModel.item(i)

            lines = []
            xb, yb = [], []
            mx, my = 0, 0

            for op, x, y in coordinates:
                xb.append(x)
                yb.append(y)
                if op == "move":
                    mx, my = x, y
                elif op == "stitch":
                    line = QLine(mx, -my, x, -y)
                    lines.append(line)
                    mx, my = x, y

            xb = [min(xb), max(xb)]
            yb = [min(yb), max(yb)]
            rect = QRect(min(xb), -max(yb),
                         max(xb) - min(xb),
                         max(yb) - min(yb))
            self.rect = self.rect.united(rect)

            zone = Zone(rect, color_item)
            zone.lines = lines
            self._partition_data(zone)
            self.zones.append(zone)
Exemple #24
0
    def mouseMoveEvent(self, event):
            # MAKESHIFT code that "fixes" the coder issue.
        if (event.buttons() & Qt.LeftButton) & self.drawing:
            self.line = QLine(self.lastPoint, event.pos())
            painterTemp = QPainter(self.imageAbove)
            painterTemp.setPen(QPen(self.brushColor, self.brushSize, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
            if (self.strokeCount == 0):
                painterTemp.setCompositionMode(QPainter.CompositionMode_SourceOver)
                painterTemp.drawLine(self.line)
                self.strokeCount = 1
            else:
                self.painterSim.setPen(QPen(self.brushColor, self.brushSize, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
                self.painterSim.setCompositionMode(QPainter.CompositionMode_SourceOver)
                self.painterSim.drawLine(self.line)
                self.painterSim.setPen(QPen(Qt.transparent, self.brushSize, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
                self.painterSim.setCompositionMode(QPainter.CompositionMode_Source)
                self.painterSim.drawPoint(event.pos())

            self.brushColor = Qt.transparent
            self.painter.setCompositionMode(QPainter.CompositionMode_SourceOver)
            painterTemp.end()
            empty = QPoint(0,0)
            self.painter.drawImage(empty, self.imageTemp)
            self.imageTemp.fill(Qt.transparent)
            self.lastPoint = event.pos()
            self.update()
Exemple #25
0
    def mousePressEvent(self, event):
        global index
        global flag
        global flag_del
        global l_pontos

        if len(Dados["imagens"][clean_f_list[index]]["pontos"]) < 1:
            flag = True
            self.x0 = event.x()
            self.y0 = event.y()
            l_pontos.append((self.x0, self.y0))

            if len(l_pontos) == 3:
                l_pontos.sort()
                l_pontos[1], l_pontos[2] = l_pontos[2], l_pontos[1]
                Dados["imagens"][clean_f_list[index]]["pontos"].append(
                    l_pontos.copy())
                l_pontos.clear()

            line1 = QLine(self.x0 - 5, self.y0 - 5, self.x0 + 5, self.y0 + 5)
            line2 = QLine(self.x0 + 5, self.y0 - 5, self.x0 - 5, self.y0 + 5)
            lines.append((line1, line2))
            self.update()

        if flag_del:
            flag = True
            l_pontos = Dados["imagens"][
                clean_f_list[index]]["pontos"][0].copy()
            self.x0 = event.x()
            self.y0 = event.y()
            l_pontos.append((self.x0, self.y0))

            for i in l_pontos:
                x, y = i
                line1 = QLine(x - 5, y - 5, x + 5, y + 5)
                line2 = QLine(x + 5, y - 5, x - 5, y + 5)
                lines.append((line1, line2))

            if len(l_pontos) == 3:
                l_pontos.sort()
                l_pontos[1], l_pontos[2] = l_pontos[2], l_pontos[1]
                Dados["imagens"][
                    clean_f_list[index]]["pontos"][0] = l_pontos.copy()
                l_pontos.clear()
            self.update()
            flag_del = False
Exemple #26
0
 def draw_vertical(self):
     height = self.height()
     p1 = QPoint(self.margin, self.margin)
     p2 = QPoint(self.margin, height - self.margin)
     axis_line = QLine(p1, p2)
     self.painter.save()
     self.painter.setPen(self.axis_pen)
     self.painter.drawLine(axis_line)
     self.painter.restore()
Exemple #27
0
    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 paintEvent(self,event):
     painter = QPainter()
     painter.begin(self)
     painter.setRenderHint(QPainter.Antialiasing)        
     for case in switch(self.selected_option):
         if case('Direction'):
             painter.setPen(QPen(QBrush(Qt.red), 1, Qt.DashLine))
             painter.drawLine(QLine(self.pos_start,self.pos_end))
             break
         if case('Forbidden'):
             painter.setPen(QPen(QBrush(Qt.green), 1, Qt.DashLine))
             painter.drawRect(self.roiRect)
             break
         if case('RedLine'):
             painter.setPen(QPen(QBrush(Qt.yellow), 1, Qt.DashLine))
             painter.drawLine(QLine(self.pos_start,self.pos_end))
             break
     painter.end()
Exemple #29
0
 def draw_needle(self, qp, event, w):
     w *= 0.6
     center = event.rect().center()
     angle = ((self.value * 270.0) / self._max_value) - 225
     rad = w / 2
     x = int(rad * math.cos(math.radians(angle)) + center.x())
     y = int(rad * math.sin(math.radians(angle)) + center.y())
     line = QLine(center.x(), center.y(), x, y)
     qp.setPen(QPen(Qt.red, 4))
     qp.drawLine(line)
Exemple #30
0
 def draw_horizon(self):
     width = self.width()
     height = self.height()
     p1 = QPoint(self.margin, height - self.margin)
     p2 = QPoint(width - self.margin, height - self.margin)
     axis_line = QLine(p1, p2)
     self.painter.save()
     self.painter.setPen(self.axis_pen)
     self.painter.drawLine(axis_line)
     self.painter.restore()
Exemple #31
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'))