コード例 #1
0
ファイル: graphicsview.py プロジェクト: keenfoong/zoocore
    def _drawMainAxis(self, painter, rect):

        painter.setPen(self.config.overlayAxisPen)

        xLine, yLine = QtCore.QLineF(), QtCore.QLineF()
        if rect.y() < 0 < (rect.height() - rect.y()):
            xLine = QtCore.QLineF(rect.x(), 0, rect.width() + rect.x(), 0)

        if rect.x() < 0 < (rect.height() - rect.x()):
            yLine = QtCore.QLineF(0, rect.y(), 0, rect.height() + rect.y())

        painter.drawLines([xLine, yLine])
コード例 #2
0
ファイル: plugwidget.py プロジェクト: keenfoong/vortexUI
 def __init__(self, parent=None):
     super(CrossSquare, self).__init__(parent)
     size = QtCore.QSizeF(Plug._diameter, Plug._diameter)
     self.expanded = False
     self.isElement = False
     self.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Fixed))
     self.setPreferredSize(size)
     self.setWindowFrameMargins(0, 0, 0, 0)
     self.hide()
     self.lines = [QtCore.QLineF(QtCore.QPoint(Plug._diameter * 0.5, 3.0),
                                 QtCore.QPoint(Plug._diameter * 0.5, Plug._diameter - 3.0)),
                   QtCore.QLineF(QtCore.QPoint(3.0, Plug._diameter * 0.5),
                                 QtCore.QPoint(Plug._diameter - 3.0, Plug._diameter * 0.5))
                   ]
コード例 #3
0
ファイル: gdalqt4.py プロジェクト: whigg/PySOL
    def _levelOfDetailFromTransform(worldTransform):
        # @COMPATIBILITY: since Qt v. 4.6.0 the levelOfDetail attribute of
        # QStyleOptionGraphicsItem is deprecated
        # @SEEALSO: ItemUsesExtendedStyleOption item at
        # http://doc.qt.nokia.com/4.6/qgraphicsitem.html#GraphicsItemFlag-enum
        #
        # From qt/src/gui/styles/qstyleoption.cpp:5130
        if worldTransform.type() <= QtGui.QTransform.TxTranslate:
            return 1  # Translation only? The LOD is 1.

        # Two unit vectors.
        v1 = QtCore.QLineF(0, 0, 1, 0)
        v2 = QtCore.QLineF(0, 0, 0, 1)
        # LOD is the transformed area of a 1x1 rectangle.
        return np.sqrt(
            worldTransform.map(v1).length() * worldTransform.map(v2).length())
コード例 #4
0
ファイル: plugwidget.py プロジェクト: keenfoong/vortexUI
    def paint(self, painter, options, widget=None):
        painter.setPen(QtGui.QPen(QtGui.QColor(255, 255, 255, 1.0), 0.25))
        # draw the square

        if self.isElement:
            parentHeight = self.parentObject().size().height()
            lines = [QtCore.QLineF(QtCore.QPoint(Plug._diameter*0.5, Plug._diameter*0.5),
                                   QtCore.QPoint(Plug._diameter*0.5, -(parentHeight -Plug._diameter))),
                     QtCore.QLineF(QtCore.QPoint(Plug._diameter * 0.5, Plug._diameter * 0.5),
                                   QtCore.QPoint(Plug._diameter, Plug._diameter * 0.5))]
            painter.drawLines(lines)
        # draw the center cross
        else:
            painter.drawRect(0, 0, Plug._diameter, Plug._diameter)
            if self.expanded:
                # if we have expanded just draw the horizontal line
                painter.drawLines(self.lines[1:])
            else:
                painter.drawLines(self.lines)
コード例 #5
0
ファイル: graphicsview.py プロジェクト: keenfoong/zoocore
    def _drawSubdivisionGrid(self, painter, rect):
        left = int(rect.left()) - (int(rect.left()) % self.config.gridSize)
        top = int(rect.top()) - (int(rect.top()) % self.config.gridSize)
        # Draw horizontal fine lines
        gridLines = []
        painter.setPen(self.config.gridColor)
        y = float(top)
        while y < float(rect.bottom()):
            gridLines.append(QtCore.QLineF(rect.left(), y, rect.right(), y))
            y += self.config.gridSize
        painter.drawLines(gridLines)

        # Draw vertical fine lines
        gridLines = []
        painter.setPen(self.config.gridColor)
        x = float(left)
        while x < float(rect.right()):
            gridLines.append(QtCore.QLineF(x, rect.top(), x, rect.bottom()))
            x += self.config.gridSize
        painter.drawLines(gridLines)
コード例 #6
0
def singleGeometryToGraphicsItem(geom, transform=None):
    '''Convert a single OGR geometry into a Qt4 graphics item.

    A "single geometry" is an OGR gemetry that don't include other
    geometries (GetGeometryCount() == 0).

    If the *transform* callable is provided then each point in the
    geometry is converted using the `transform(x, y, z)` call before
    genereting the graphics item path.

    .. note: for 2.5D geometries the *z* value is ignored.

    :param geom:
        a single OGR geometry
    :param transform:
        callable object for arbitrary coordinate conversion
    :returns:
        a Qt4 graphics item representing the geometry

    .. seealso:: :func:`geometryToGraphicsItem`

    '''

    assert geom.GetGeometryCount() == 0

    gtype = geom.GetGeometryType()
    if gtype in (ogr.wkbPoint, ogr.wkbPoint25D):

        # @TODO: check
        RADIUS = 3

        point = geom.GetPoint()
        if transform:
            point = transform(*point)
        qitem = qt4draw.GraphicsPointItem(point[0], point[1], RADIUS)

        # @TODO: style options should be set in a more general way.
        #        Probably it is better to set them in an external function.
        # Red point
        pen = qitem.pen()
        pen.setColor(QtCore.Qt.red)
        #pen.setWidth(15)
        qitem.setPen(pen)

        brush = qitem.brush()
        brush.setColor(QtCore.Qt.red)
        #brush.setStyle(QtCore.Qt.SolidPattern)
        qitem.setBrush(brush)

    elif (gtype in (ogr.wkbLineString, ogr.wkbLineString25D)
          and geom.GetPointCount() == 2):
        p0 = geom.GetPoint(0)
        p1 = geom.GetPoint(1)
        if transform:
            p0 = transform(*p0)
            p1 = transform(*p1)
        qline = QtCore.QLineF(p0[0], p0[1], p1[0], p1[1])
        qitem = QtGui.QGraphicsLineItem(qline)

    elif gtype in (ogr.wkbLinearRing, ogr.wkbPolygon, ogr.wkbPolygon25D,
                   ogr.wkbLineString, ogr.wkbLineString25D):

        # @NOTE: use only if geometry is a ring
        if geom.IsRing():
            qpoly = QtGui.QPolygonF(geom.GetPointCount())
            for index in range(geom.GetPointCount()):
                point = geom.GetPoint(index)
                if transform:
                    point = transform(*point)
                qpoly[index] = QtCore.QPointF(point[0], point[1])
            qitem = QtGui.QGraphicsPolygonItem(qpoly)
            #qitem.setFillRule(QtCore.Qt.WindingFill)    # @TODO: check
        else:
            qpath = QtGui.QPainterPath()
            #qpath.setFillRule(QtCore.Qt.WindingFill)    # @TODO: check
            point = geom.GetPoint(0)
            if transform:
                point = transform(*point)
            qpath.moveTo(point[0], point[1])
            for index in range(1, geom.GetPointCount()):
                point = geom.GetPoint(index)
                if transform:
                    point = transform(*point)
                qpath.lineTo(point[0], point[1])
            qitem = QtGui.QGraphicsPathItem(qpath)

    elif gtype in (ogr.wkbMultiPoint, ogr.wkbMultiPoint25D,
                   ogr.wkbMultiLineString, ogr.wkbMultiLineString25D,
                   ogr.wkbMultiPolygon, ogr.wkbMultiPolygon25D,
                   ogr.wkbGeometryCollection, ogr.wkbGeometryCollection25D):

        raise ValueError('should not happen.')

    elif gtype in (ogr.wkbUnknown, ogr.wkbNone):
        raise ValueError('invalid geopetry type: '
                         '"%s"' % geom.GetGeometryName())

    else:
        raise ValueError('invalid geopetry type: "%d"' % gtype)

    return qitem