Example #1
0
 def paint(self, painter, option, index):
     super().paint(painter, option, index)
     selected = option.state & QStyle.State_Selected
     if index.column() == 0:
         s_data = index.data(ValueRole)
         if s_data == 0:
             color = QColor(123, 123, 123)
         elif s_data == 1:
             color = QColor(224, 0, 0)
         elif s_data == 2:
             color = QColor(40, 140, 40)
         painter.save()
         painter.setRenderHint(QPainter.Antialiasing)
         pen = painter.pen()
         pen.setStyle(Qt.NoPen)
         painter.setPen(pen)
         painter.setBrush(color)
         rect_1 = QRect(option.rect)
         rect_1.adjust(2, 2, -3, -2)
         painter.drawRoundedRect(rect_1, 2, 2)
         painter.restore()
     if selected:
         gradient = QLinearGradient(0, 0, 66, 0)
         gradient.setColorAt(0, QColor(0, 0, 0, 255))
         gradient.setColorAt(1, QColor(0, 0, 0, 0))
         painter.setPen(QPen(gradient, 1))
         rect_2 = QRect(option.rect)
         painter.drawLine(rect_2.topLeft(), rect_2.topRight())
         painter.drawLine(rect_2.bottomLeft(), rect_2.bottomRight())
    def  __init__(self):
        QDialog.__init__(self)
        self.resize(400, 300)
        self.setWindowTitle('Connection Dialog')

        self.label = QLabel(self)
        self.label.setGeometry(QRect(140, 150, 81, 20))
        self.label.setText('username')
        self.label2 = QLabel(self)
        self.label2.setGeometry(QRect(140, 190, 81, 20))
        self.label2.setText('password')
        self.label3 = QLabel(self)
        self.label3.setGeometry(QRect(40, 32, 151, 20))
        self.label3.setText('Name of the Shogun Client')
        self.label4 = QLabel(self)
        self.label4.setGeometry(QRect(40, 82, 151, 20))
        self.label4.setText('URL:')

        self.nameIn = QLineEdit(self)
        self.nameIn.setGeometry(QRect(200, 30, 180, 27))
        self.nameIn.setText('Default Shogun Client')
        self.urlIn = QLineEdit(self)
        self.urlIn.setGeometry(QRect(122, 80, 258, 27))
        self.urlIn.setPlaceholderText('i. e.: http(s)://.../shogun2-webapp')
        self.userIn = QLineEdit(self)
        self.userIn.setGeometry(QRect(230, 150, 150, 27))
        self.passwordIn = QLineEdit(self)
        self.passwordIn.setGeometry(QRect(230, 190, 150, 27))
        self.passwordIn.setEchoMode(QLineEdit.Password)
        self.okButton = QPushButton(self)
        self.okButton.setGeometry(QRect(270, 240, 85, 27))
        self.okButton.setText('OK')
        self.cancelButton = QPushButton(self)
        self.cancelButton.setGeometry(QRect(180, 240, 85, 27))
        self.cancelButton.setText('Cancel')
Example #3
0
    def set_thumbnail(self):
        """
        Sets thumbnail to the document widget by
        cropping if necessary.
        :return: None
        :rtype: NoneType
        """
        extension = self._displayName[self._displayName.rfind('.'):]

        QApplication.processEvents()
        doc_path = '{}/{}/{}/{}/{}{}'.format(
            source_document_location(),
            str(self.curr_profile.name),
            str(self._source_entity),
            str(self.doc_type_value()).replace(' ', '_'),
            str(self.fileUUID),
            str(extension)
        ).lower()

        ph_image = QImage(doc_path)
        ph_pixmap = QPixmap.fromImage(ph_image)
        # If width is larger than height, use height as width and height
        if ph_pixmap.width() > ph_pixmap.height():
            rectangle = QRect(0, 0, ph_pixmap.height(), ph_pixmap.height())
            ph_pixmap = ph_pixmap.copy(rectangle)
        # If height is larger than width, use width as width and height
        elif ph_pixmap.height() > ph_pixmap.width():
            rectangle = QRect(0, 0, ph_pixmap.width(), ph_pixmap.width())
            ph_pixmap = ph_pixmap.copy(rectangle)

        self.lblThumbnail.setPixmap(ph_pixmap)
        self.lblThumbnail.setScaledContents(True)
    def __init__(self, canvas):
        QgsMapTool.__init__(self, canvas)

        self.canvas = canvas
        self.extent = None
        self.dragging = False
        self.rubber_band = None
        self.select_rect = QRect()
    def __init__(self, icon_path, text, toolbar, action_group):
        """ Class constructor """

        super().__init__(icon_path, text, toolbar, action_group)

        self.dragging = False

        # Select rectangle
        self.select_rect = QRect()
Example #6
0
    def __init__(self, canvas, snapradius=2):
        super(InfoTool, self).__init__(canvas)
        self.canvas = canvas
        self.radius = snapradius

        self.selectband = QgsRubberBand(self.canvas,
                                        QgsWkbTypes.PolygonGeometry)
        self.selectrect = QRect()
        self.dragging = False
        self.selectionlayers = {}
    def __init__(self, iface, settings, action, index_action):
        """ Class constructor """

        # Call ParentMapTool constructor
        super(ConnecMapTool, self).__init__(iface, settings, action,
                                            index_action)

        self.dragging = False

        # Select rectangle
        self.select_rect = QRect()
    def initGui(self):
        # Create Graphical User Interface
        icon = QIcon()
        icon.addPixmap(QPixmap(os.path.dirname(__file__) + "/icon.png"),
                       QIcon.Normal, QIcon.Off)
        self.setWindowIcon(icon)
        self.setWindowModality(Qt.WindowModal)
        self.setWindowFlags(Qt.Window
                            | Qt.WindowSystemMenuHint
                            | Qt.WindowMinimizeButtonHint
                            | Qt.WindowMaximizeButtonHint
                            | Qt.WindowCloseButtonHint)

        self.resize(520, 520)

        self.label = QLabel(self)
        self.label.setGeometry(QRect(10, 20, 500, 20))
        font = QFont()
        font.setPointSize(14)
        font.setUnderline(True)
        self.label.setFont(font)
        self.label.setAlignment(Qt.AlignCenter)
        self.label_2 = QLabel(self)
        self.label_2.setGeometry(QRect(10, 70, 500, 16))
        self.label_3 = QLabel(self)
        self.label_3.setGeometry(QRect(10, 90, 500, 16))
        self.label_4 = QLabel(self)
        self.label_4.setGeometry(QRect(10, 110, 500, 16))
        self.pushButton = QPushButton(self)
        self.pushButton.setGeometry(QRect(50, 150, 121, 24))
        self.comboBox = QComboBox(self)
        self.comboBox.setGeometry(QRect(240, 150, 121, 24))
        self.comboBox.addItem("Paso Malla 25m")
        self.comboBox.addItem("Paso Malla 200m")
        self.comboBox.addItem("Paso Malla 500m")
        self.comboBox.addItem("Paso Malla 1.000m")
        self.bt_view_map = QPushButton(self)
        self.bt_view_map.setGeometry(QRect(370, 150, 121, 24))
        self.profile_jpg = QLabel(self)
        self.profile_jpg.setGeometry(QRect(20, 200, 480, 180))

        self.message_box = QTextEdit(self)
        self.message_box.setGeometry(QRect(10, 400, 500, 111))
        self.label.setText("KML / GPX TO 3D")
        self.label_2.setText(
            "Convert a GPX file without elevation, in a GPX and KML with elevation. It's only for Spain."
        )
        self.label_3.setText(
            "Convierte un GPX sin elevación, en un GPX y KML con elevación.")
        self.label_4.setText(
            "Es solo para España ya que utiliza el servicio WCS del Instituto Geografico Nacional"
        )
        self.pushButton.setText("File / Fichero")
        self.bt_view_map.setText("Map / Mapa")

        self.pushButton.clicked.connect(self.select_file)
        self.bt_view_map.clicked.connect(
            lambda: see_map(self.Output_KML_File).exec_())
    def __init__(self, icon_path, text, toolbar, action_group, iface, settings,
                 controller, plugin_dir):
        """ Class constructor """

        # Call ParentMapTool constructor
        super().__init__(icon_path, text, toolbar, action_group, iface,
                         settings, controller, plugin_dir)

        self.dragging = False

        # Select rectangle
        self.select_rect = QRect()
Example #10
0
    def canvasMoveEvent(self, event):
        if event.buttons() != Qt.LeftButton:
            return

        r = QRect()
        if not self.selectionActive:
            self.selectionActive = True
            rect = QRect(event.pos(), event.pos())
        else:
            rect = QRect(event.pos(), self.dragStart)

        if self.rubberBand is not None:
            self.rubberBand.setToCanvasRectangle(rect)
Example #11
0
 def makeRectBy(self, point):
     rectSize = self.calcRectSize()
     width = rectSize[0]
     height = rectSize[1]
     rect = QRect(point.x() - width / 2,
                  point.y() - height / 2, width, height)
     return rect
 def noPermissionAccess(self):
     self.usertabel.setHidden(True)
     self.groupstabel.setHidden(True)
     self.noPermissionAccessLabel = QtGui.QLabel(self.tabs[3])
     self.noPermissionAccessLabel.setGeometry(QRect(50, 50, 420, 50))
     self.noPermissionAccessLabel.setText('Could not access application '
         'permissions. User permission is not high enough')
    def setupUi(self):
        self.resize(815, 250)
        self.verticalLayout = QVBoxLayout(self)

        self.groupBox_2 = QGroupBox(self)
        self.groupBox_2.setObjectName("groupBox_2")
        self.database_combo = QComboBox(self.groupBox_2)
        self.database_combo.setGeometry(QRect(10, 30, 481, 34))

        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.database_combo.sizePolicy().hasHeightForWidth())
        self.database_combo.setSizePolicy(sizePolicy)
        self.database_combo.setObjectName("database_combo")
        self.verticalLayout.addWidget(self.groupBox_2)

        self.groupBox = QGroupBox(self)
        self.verticalLayoutBox = QVBoxLayout(self.groupBox)

        self.buttonBox = QDialogButtonBox(self)
        self.buttonBox.setOrientation(Qt.Horizontal)
        self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel
                                          | QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.verticalLayout.addWidget(self.buttonBox)

        self.retranslateUi()
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)
        QMetaObject.connectSlotsByName(self)
    def set_text_image(self, text, color=Qt.gray):
        """
        Set the item picture based on an SVG file created from the given text.
        :param text: Text to be rendered as SVG.
        :type text: str
        :param color: Font color
        :type color: QColor
        """
        w, h = 200, 50
        svg_path = self._gen_svg_path()
        svg_gen = QSvgGenerator()
        svg_gen.setFileName(svg_path)
        svg_gen.setTitle('QrBarCodeLayoutItem')
        svg_gen.setDescription('Image generated by QrBarCodeLayoutItem plugin')
        svg_gen.setSize(QSize(w, h))
        svg_gen.setViewBox(QRect(0, 0, w, h))

        # Paint text
        font = QFont('Arial', 14, QFont.Bold)
        p = QPainter()
        p.begin(svg_gen)
        p.setFont(font)
        p.setPen(color)
        p.drawText(QPointF(10, 20), text)
        p.end()

        # Set picture path
        self.setPicturePath(svg_path)
Example #15
0
    def paintEvent(self, event):
        self.updatePosition()
        painter = QPainter(self)
        painter.fillRect(self.rect(), Qt.transparent)
        painter.setRenderHint(QPainter.Antialiasing, True)
        if self.mCurrentCounter > self.mNumberOfLines:
            self.mCurrentCounter = 0
        painter.setPen(Qt.NoPen)

        for i in range(self.mNumberOfLines):
            painter.save()
            painter.translate(self.mInnerRadius + self.mLineLength,
                              self.mInnerRadius + self.mLineLength)
            rotateAngle = 360.0 * i / self.mNumberOfLines
            painter.rotate(rotateAngle)
            painter.translate(self.mInnerRadius, 0)
            distance = self.lineCountDistanceFromPrimary(
                i, self.mCurrentCounter, self.mNumberOfLines)
            color = self.currentLineColor(distance, self.mNumberOfLines,
                                          self.mTrailFadePercentage,
                                          self.mMinimumTrailOpacity,
                                          self.mColor)
            painter.setBrush(color)
            painter.drawRoundedRect(
                QRect(0, -self.mLineWidth // 2, self.mLineLength,
                      self.mLineLength), self.mRoundness, Qt.RelativeSize)
            painter.restore()
Example #16
0
    def doLayout(self, rect, testOnly):
        x = rect.x()
        y = rect.y()
        lineHeight = 0
        self.posicions = {
        }  #Desarem les posicions dels elements del layout en un diccionari, on la clau serà el widget i el valor serà una tupla amb les posicions
        self.elements = [[]]
        i, j = 0, 0
        for item in self.itemList:
            wid = item.widget()
            spaceX = self.spacing() + wid.style().layoutSpacing(
                QSizePolicy.PushButton, QSizePolicy.PushButton, Qt.Horizontal)
            spaceY = self.spacing() + wid.style().layoutSpacing(
                QSizePolicy.PushButton, QSizePolicy.PushButton, Qt.Vertical)
            nextX = x + item.sizeHint().width() + spaceX
            if nextX - spaceX > rect.right() and lineHeight > 0:
                x = rect.x()
                y = y + lineHeight + spaceY
                nextX = x + item.sizeHint().width() + spaceX
                lineHeight = 0
                #Passem a la línia següent
                i += 1
                j = 0
                self.elements.append([])

            if not testOnly:
                item.setGeometry(QRect(QPoint(x, y), item.sizeHint()))
                self.posicions[wid] = (i, j)
                self.elements[i].append(wid)

            x = nextX
            lineHeight = max(lineHeight, item.sizeHint().height())
            j += 1  #Següent posició

        return y + lineHeight - rect.y()
Example #17
0
    def paint(self, painter, option, index):
        if index.column() != 1:
            QStyledItemDelegate.paint(self, painter, option, index)
            return
        model: Any[PlanetSearchResultsModel | QAbstractItemModel] = \
            index.model()
        node = model.get_node(index)
        if node.node_type() in [NodeT.LOADING, NodeT.LOAD_MORE]:
            QStyledItemDelegate.paint(self, painter, option, index)
            return
        rect = option.rect

        painter.save()

        btn = QStyleOptionButton()
        btn.icon = COG_ICON
        btn.iconSize = QSize(18, 18)
        btn.features = QStyleOptionButton.Flat
        # btn.features |= QStyleOptionButton.HasMenu

        if option.state & QStyle.State_Selected:
            painter.fillRect(option.rect, option.palette.highlight())

        btn.state = QStyle.State_Enabled

        btn.rect = QRect(rect.left() + rect.width() - 26,
                         rect.top(), 26, rect.height())

        QApplication.style().drawControl(
            QStyle.CE_PushButton, btn, painter)

        painter.restore()
 def deactivateHoverEditing(self):
     self.hoverBox.setHidden(True)
     self.hoverEdit.setHidden(True)
     self.hoverAddButton.setHidden(True)
     self.infoEdit = QtGui.QLineEdit(self.tabs[0])
     self.infoEdit.setEnabled(False)
     self.infoEdit.setText('only available for vector layers')
     self.infoEdit.setGeometry(QRect(180, 143, 200 ,27))
 def newAppCreation(self):
     self.usertabel.setHidden(True)
     self.groupstabel.setHidden(True)
     self.noPermissionAccessLabel = QtGui.QLabel(self.tabs[4])
     self.noPermissionAccessLabel.setGeometry(QRect(50, 50, 420, 100))
     self.noPermissionAccessLabel.setText(
         'You have to save and upload the '
         'new application once\nfirst, then you can edit it\'s permissions')
Example #20
0
    def __init__(self):
        QDockWidget.__init__(self)
        self.setWindowTitle('Shogun Editor')
        self.setContextMenuPolicy(Qt.DefaultContextMenu)
        self.setLayoutDirection(Qt.LeftToRight)
        self.setAllowedAreas(Qt.LeftDockWidgetArea | Qt.RightDockWidgetArea)
        self.setFloating(False)

        self.dockWidgetContents = QWidget(self)
        self.dockWidgetContents.setGeometry(QRect(20, 30, 320, 700))
        self.newConnectionButton = QPushButton(self.dockWidgetContents)
        self.newConnectionButton.setGeometry(QRect(10, 0, 141, 27))
        self.newConnectionButton.setText('New Connection')
        self.treeWidget = QTreeWidget(self.dockWidgetContents)
        self.treeWidget.setGeometry(QRect(10, 40, 300, 650))
        self.treeWidget.setContextMenuPolicy(Qt.CustomContextMenu)
        self.treeWidget.setHeaderHidden(True)
        self.treeWidget.setColumnCount(1)
    def mk_prj_edit_button(self) -> QToolButton:
        """Returns a tool button for the project edition.

        :return: button
        :rtype: QToolButton
        """
        edit_button = QToolButton(self.tableWidget)
        edit_button.setGeometry(QRect(0, 0, 20, 20))
        edit_button.setIcon(QIcon(str(DIR_PLUGIN_ROOT / "resources/edit.svg")))
        edit_button.setToolTip(self.tr("Edit this project"))

        return edit_button
Example #22
0
    def setupUi(self, checks):
        self.resize(515, 450)
        self.verticalLayout = QVBoxLayout(self)

        self.groupBox_2 = QGroupBox(self)
        self.groupBox_2.setObjectName("groupBox_2")
        self.database_combo = QComboBox(self.groupBox_2)
        self.database_combo.setGeometry(QRect(10, 30, 481, 34))

        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.database_combo.sizePolicy().hasHeightForWidth())
        self.database_combo.setSizePolicy(sizePolicy)
        self.database_combo.setObjectName("database_combo")
        self.verticalLayout.addWidget(self.groupBox_2)

        self.groupBox = QGroupBox(self)
        self.verticalLayoutBox = QVBoxLayout(self.groupBox)

        self.check_pipe_friction = QCheckBox(self.groupBox)
        self.check_pipe_friction.setChecked(True)
        self.verticalLayoutBox.addWidget(self.check_pipe_friction)

        self.check_manhole_indicator = QCheckBox(self.groupBox)
        self.check_manhole_indicator.setChecked(True)
        self.verticalLayoutBox.addWidget(self.check_manhole_indicator)

        self.check_manhole_area = QCheckBox(self.groupBox)
        self.check_manhole_area.setChecked(True)
        self.verticalLayoutBox.addWidget(self.check_manhole_area)

        self.verticalLayout.addWidget(self.groupBox)

        self.check_only_empty_fields = QCheckBox(self)
        self.check_only_empty_fields.setChecked(True)
        self.verticalLayout.addWidget(self.check_only_empty_fields)

        self.buttonBox = QDialogButtonBox(self)
        self.buttonBox.setOrientation(Qt.Horizontal)
        self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel
                                          | QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.verticalLayout.addWidget(self.buttonBox)

        self.retranslateUi()
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)
        QMetaObject.connectSlotsByName(self)
    def setupUi(self):
        self.resize(400, 400)
        self.setWindowTitle('Upload layer to Shogun')

        title = QtGui.QLabel(self)
        title.setGeometry(50,30,300,70)
        title.setText('Please select the layer you wish to upload to the \n Shogun Server')

        self.layerBox = QgsMapLayerComboBox(self)
        self.layerBox.setGeometry(QRect(50, 100, 300, 30))

        self.uploadButton = QtGui.QPushButton(self)
        self.uploadButton.setGeometry(QRect(250, 160, 100, 35))
        self.uploadButton.setText('Upload Layer')

        self.cancelButton = QtGui.QPushButton(self)
        self.cancelButton.setGeometry(QRect(140, 160, 100, 35))
        self.cancelButton.setText('Cancel')
        self.cancelButton.clicked.connect(self.hide)

        self.logWindow = QtGui.QTextEdit(self)
        self.logWindow.setGeometry(QRect(50, 200, 300, 180))
        self.logWindow.setReadOnly(True)
        self.logWindow.setText('Upload Log:')
Example #24
0
 def makeRectCursor(self):
     rectSize = self.calcRectSize()
     width = rectSize[0]
     height = rectSize[1]
     #make invisible rectangle when rectSize is too large
     if width > 2000:
         width = 0
     if height > 2000:
         height = 0
     image = QImage(QSize(width, height), QImage.Format_ARGB32)
     #fill with a invisible color
     image.fill(0)
     p = QPainter()
     p.begin(image)
     p.drawRect(QRect(0, 0, width - 1, height - 1))
     p.end()
     return QPixmap.fromImage(image)
Example #25
0
    def setupUi(self, checks):

        self.resize(815, 266)
        self.verticalLayout = QVBoxLayout(self)

        self.groupBox_2 = QGroupBox(self)
        self.groupBox_2.setObjectName("groupBox_2")
        self.database_combo = QComboBox(self.groupBox_2)
        self.database_combo.setGeometry(QRect(10, 30, 481, 34))
        sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(
            self.database_combo.sizePolicy().hasHeightForWidth())
        self.database_combo.setSizePolicy(sizePolicy)
        self.database_combo.setObjectName("database_combo")
        self.verticalLayout.addWidget(self.groupBox_2)

        self.groupBox = QGroupBox(self)
        self.verticalLayoutBox = QVBoxLayout(self.groupBox)

        self.check_all_rasters = QCheckBox(self.groupBox)
        self.check_all_rasters.setChecked(True)
        self.check_all_rasters.setDisabled(True)
        self.verticalLayoutBox.addWidget(self.check_all_rasters)

        # TODO: write improve function first
        # self.improve_when_necessary = QCheckBox(self.groupBox)
        # self.improve_when_necessary.setChecked(False)
        # self.improve_when_necessary.setDisabled(True)
        # self.verticalLayoutBox.addWidget(self.improve_when_necessary)

        self.verticalLayout.addWidget(self.groupBox)

        self.buttonBox = QDialogButtonBox(self)
        self.buttonBox.setOrientation(Qt.Horizontal)
        self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel
                                          | QDialogButtonBox.Ok)
        self.buttonBox.setObjectName("buttonBox")
        self.verticalLayout.addWidget(self.buttonBox)

        self.retranslateUi()
        self.buttonBox.accepted.connect(self.accept)
        self.buttonBox.rejected.connect(self.reject)
        QMetaObject.connectSlotsByName(self)
Example #26
0
    def paintEvent(self, ev):
        sz = self.size()
        l = 0.5 * min(sz.width(), sz.height())

        painter = QPainter(self)
        painter.setPen(Qt.NoPen)
        painter.setRenderHint(QPainter.Antialiasing, True)
        for i in range(0, self.ticks):
            painter.save()
            painter.translate(0.5 * sz.width(), 0.5 * sz.height())
            painter.rotate((360. * i) / self.ticks)
            painter.translate(0.4 * l, 0)
            k = float(self.ticks +
                      (i - self.counter)) % self.ticks / self.ticks
            painter.setBrush(QColor(0, 0, 0, 255 * (0.9 * k + 0.1)))
            painter.drawRoundedRect(QRect(0, -0.1 * l, 0.6 * l, 0.2 * l),
                                    0.15 * l, 0.1 * l)
            painter.restore()
Example #27
0
    def _get_composer_svg_image(self, width, height, dpi):
        # from qgscomposer.cpp, QgsComposer::on_mActionExportAsSVG_triggered,
        # near end of function
        svgpath = getTempfilePath('svg')
        temp_size = os.path.getsize(svgpath)

        svg_g = QSvgGenerator()
        # noinspection PyArgumentList
        svg_g.setTitle(QgsProject.instance().title())
        svg_g.setFileName(svgpath)
        svg_g.setSize(QSize(width, height))
        svg_g.setViewBox(QRect(0, 0, width, height))
        svg_g.setResolution(dpi)

        sp = QPainter(svg_g)
        self._c.renderPage(sp, 0)
        sp.end()

        if temp_size == os.path.getsize(svgpath):
            return False, ''

        image = QImage(width, height,
                       self._TestMapSettings.outputImageFormat())
        image.fill(QColor(152, 219, 249).rgb())
        image.setDotsPerMeterX(dpi / 25.4 * 1000)
        image.setDotsPerMeterY(dpi / 25.4 * 1000)

        svgr = QSvgRenderer(svgpath)
        p = QPainter(image)
        p.setRenderHint(
            QPainter.Antialiasing,
            self._TestMapSettings.testFlag(QgsMapSettings.Antialiasing))
        p.setRenderHint(QPainter.TextAntialiasing)
        svgr.render(p)
        p.end()

        filepath = getTempfilePath('png')
        res = image.save(filepath, 'png')
        if not res:
            os.unlink(filepath)
            filepath = ''
        # TODO: remove .svg file as well?

        return res, filepath
Example #28
0
    def genIcon(self):
        TECName = self.profile['TECName']
        svgName = os.path.join(os.path.dirname(__file__),
                               TECName + '_' + self.name + '.svg')
        pix = QSvgGenerator()
        pix.setFileName(svgName)
        pix.setSize(QSize(200, 100))
        painter = QPainter()
        painter.begin(pix)
        painter.setPen(Qt.NoPen)
        # Paint the background before draw the legend line.(Essential!!)
        painter.fillRect(QRect(0, 0, 200, 100), Qt.white)
        painter.setPen(QPen(self.color, self.width * 3, self.lineStyle))
        # Draw icon
        painter.drawLine(QLine(0, 50, 200, 50))
        painter.end()

        pixmap = QPixmap(svgName)
        icon = QIcon(pixmap)
        self.icoName = svgName

        self.setIcon(icon)
Example #29
0
    def image(self):
        width = (self.xmax - self.xmin + 1) * self.TILE_SIZE
        height = (self.ymax - self.ymin + 1) * self.TILE_SIZE

        image = QImage(width, height, QImage.Format_ARGB32_Premultiplied)
        image.fill(Qt.transparent)
        p = QPainter(image)

        for tile in self.tiles.values():
            if not tile.data:
                continue

            x = tile.x - self.xmin
            y = tile.y - self.ymin
            rect = QRect(x * self.TILE_SIZE, y * self.TILE_SIZE,
                         self.TILE_SIZE, self.TILE_SIZE)

            timg = QImage()
            res = timg.loadFromData(tile.data)
            if res:
                p.drawImage(rect, timg)

            if debug_mode:
                p.setPen(Qt.black)
                p.drawText(
                    rect,
                    Qt.AlignBottom | Qt.AlignRight,
                    # "x: %s, y:%s\nz: %s, data: %s" % (x, y, tile.zoom, tile.data.size())
                    "z: %s, data: %s" % (tile.zoom, tile.data.size()))
                if not res:
                    p.setPen(Qt.darkRed)
                    p.drawText(rect, Qt.AlignCenter, "Bad tile")

                p.setPen(Qt.black)
                p.drawRect(rect)

        return image
Example #30
0
def cvt_vtr(self):
    QSWATMOD_path_dict = self.dirs_and_paths()
    selectedVector = self.dlg.comboBox_vector_lyrs.currentText()
    layer = QgsProject.instance().mapLayersByName(str(selectedVector))[0]

    # Find .dis file and read number of rows, cols, x spacing, and y spacing (not allowed to change)
    for filename in glob.glob(str(QSWATMOD_path_dict['SMfolder']) + "/*.dis"):
        with open(filename, "r") as f:
            data = []
            for line in f.readlines():
                if not line.startswith("#"):
                    data.append(line.replace('\n', '').split())
        nrow = int(data[0][1])
        ncol = int(data[0][2])
        delr = float(data[2][1])  # is the cell width along rows (y spacing)
        delc = float(
            data[3][1])  # is the cell width along columns (x spacing).

    # get extent
    ext = layer.extent()
    xmin = ext.xMinimum()
    xmax = ext.xMaximum()
    ymin = ext.yMinimum()
    ymax = ext.yMaximum()
    extent = "{a},{b},{c},{d}".format(a=xmin, b=xmax, c=ymin, d=ymax)

    fdnames = [
        field.name() for field in layer.dataProvider().fields()
        if not (field.name() == 'fid' or field.name() == 'id'
                or field.name() == 'xmin' or field.name() == 'xmax'
                or field.name() == 'ymin' or field.name() == 'ymax'
                or field.name() == 'grid_id' or field.name() == 'row'
                or field.name() == 'col' or field.name() == 'elev_mf')
    ]

    # Create swatmf_results tree inside
    root = QgsProject.instance().layerTreeRoot()
    if root.findGroup("swatmf_results"):
        swatmf_results = root.findGroup("swatmf_results")
    else:
        swatmf_results = root.insertGroup(0, "swatmf_results")

    if root.findGroup(selectedVector):
        rastergroup = root.findGroup(selectedVector)
    else:
        rastergroup = swatmf_results.insertGroup(0, selectedVector)
    per = 0
    self.dlg.progressBar_cvt_vtr.setValue(0)
    for fdnam in fdnames:
        QCoreApplication.processEvents()
        nodata = float(self.dlg.lineEdit_nodata.text())
        mincolor = self.dlg.mColorButton_min_rmap.color().name()
        maxcolor = self.dlg.mColorButton_max_rmap.color().name()
        name = fdnam
        name_ext = "{}.tif".format(name)
        output_dir = QSWATMOD_path_dict['SMshps']
        # create folder for each layer output
        rasterpath = os.path.join(output_dir, selectedVector)
        if not os.path.exists(rasterpath):
            os.makedirs(rasterpath)
        output_raster = os.path.join(rasterpath, name_ext)
        params = {
            'INPUT': layer,
            'FIELD': fdnam,
            'UNITS': 1,
            'WIDTH': delc,
            'HEIGHT': delr,
            'EXTENT': extent,
            'NODATA': nodata,
            'DATA_TYPE': 5,  #Float32
            'OUTPUT': output_raster
        }
        processing.run("gdal:rasterize", params)
        rasterlayer = QgsRasterLayer(output_raster,
                                     '{0} ({1})'.format(fdnam, selectedVector))
        QgsProject.instance().addMapLayer(rasterlayer, False)
        rastergroup.insertChildNode(0, QgsLayerTreeLayer(rasterlayer))
        stats = rasterlayer.dataProvider().bandStatistics(
            1, QgsRasterBandStats.All)
        rmin = stats.minimumValue
        rmax = stats.maximumValue
        fnc = QgsColorRampShader()
        lst = [
            QgsColorRampShader.ColorRampItem(rmin, QColor(mincolor)),
            QgsColorRampShader.ColorRampItem(rmax, QColor(maxcolor))
        ]
        fnc.setColorRampItemList(lst)
        fnc.setColorRampType(QgsColorRampShader.Interpolated)
        shader = QgsRasterShader()
        shader.setRasterShaderFunction(fnc)
        renderer = QgsSingleBandPseudoColorRenderer(rasterlayer.dataProvider(),
                                                    1, shader)
        rasterlayer.setRenderer(renderer)
        rasterlayer.triggerRepaint()

        # create image
        img = QImage(QSize(800, 800), QImage.Format_ARGB32_Premultiplied)
        # set background color
        # bcolor = QColor(255, 255, 255, 255)
        bcolor = QColor(255, 255, 255, 0)
        img.fill(bcolor.rgba())
        # create painter
        p = QPainter()
        p.begin(img)
        p.setRenderHint(QPainter.Antialiasing)
        # create map settings
        ms = QgsMapSettings()
        ms.setBackgroundColor(bcolor)

        # set layers to render
        flayer = QgsProject.instance().mapLayersByName(rasterlayer.name())
        ms.setLayers([flayer[0]])

        # set extent
        rect = QgsRectangle(ms.fullExtent())
        rect.scale(1.1)
        ms.setExtent(rect)

        # set ouptut size
        ms.setOutputSize(img.size())

        # setup qgis map renderer
        render = QgsMapRendererCustomPainterJob(ms, p)
        render.start()
        render.waitForFinished()
        # get timestamp
        p.drawImage(QPoint(), img)
        pen = QPen(Qt.red)
        pen.setWidth(2)
        p.setPen(pen)

        font = QFont()
        font.setFamily('Times')
        # font.setBold(True)
        font.setPointSize(18)
        p.setFont(font)
        # p.setBackground(QColor('sea green')) doesn't work
        p.drawText(QRect(0, 0, 800, 800), Qt.AlignRight | Qt.AlignBottom,
                   fdnam)
        p.end()

        # save the image
        img.save(os.path.join(rasterpath, '{:03d}_{}.jpg'.format(per, fdnam)))

        # Update progress bar
        per += 1
        progress = round((per / len(fdnames)) * 100)
        self.dlg.progressBar_cvt_vtr.setValue(progress)
        QCoreApplication.processEvents()
        self.dlg.raise_()

    duration = self.dlg.doubleSpinBox_ani_r_time.value()

    # filepaths
    fp_in = os.path.join(rasterpath, '*.jpg')
    fp_out = os.path.join(rasterpath, '{}.gif'.format(selectedVector))

    # https://pillow.readthedocs.io/en/stable/handbook/image-file-formats.html#gif
    fimg, *fimgs = [Image.open(f) for f in sorted(glob.glob(fp_in))]
    fimg.save(fp=fp_out,
              format='GIF',
              append_images=fimgs,
              save_all=True,
              duration=duration * 1000,
              loop=0,
              transparency=0)

    msgBox = QMessageBox()
    msgBox.setWindowIcon(QtGui.QIcon(':/QSWATMOD2/pics/sm_icon.png'))
    msgBox.setWindowTitle("Coverted!")
    msgBox.setText(
        "Fields from {} were converted successfully!".format(selectedVector))
    msgBox.exec_()

    questionBox = QMessageBox()
    questionBox.setWindowIcon(QtGui.QIcon(':/QSWATMOD2/pics/sm_icon.png'))
    reply = QMessageBox.question(questionBox, 'Open?',
                                 'Do you want to open the animated gif file?',
                                 QMessageBox.Yes, QMessageBox.No)
    if reply == QMessageBox.Yes:
        os.startfile(os.path.join(rasterpath, '{}.gif'.format(selectedVector)))