示例#1
0
文件: cell.py 项目: arne-cl/Dimscape
 def boundingRect(self):
     # For now, do not take the highlight pen into account
     #pw = self.pen().widthF()/2
     pw = 0
     children = self.childrenBoundingRect()
     m = self.margin
     return QRectF(
         children.topLeft() - QPointF(pw + m, pw + m),
         QSizeF(children.width() + pw + m + m,
                children.height() + pw + m + m))
示例#2
0
    def beginDrawing(self, pos, sliceRect):
        '''

        pos -- QPointF-like
        '''
        self.sliceRect = sliceRect
        self.scene.clear()
        self.bb = QRect()
        self.pos = QPointF(pos.x(), pos.y())
        self._hasMoved = False
示例#3
0
 def _addAlgorithm(self, alg, pos=None):
     dlg = alg.getCustomModelerParametersDialog(self.alg)
     if not dlg:
         dlg = ModelerParametersDialog(alg, self.alg)
     dlg.exec_()
     if dlg.alg is not None:
         if pos is None:
             dlg.alg.pos = self.getPositionForAlgorithmItem()
         else:
             dlg.alg.pos = pos
         if isinstance(dlg.alg.pos, QPoint):
             dlg.alg.pos = QPointF(pos)
         from processing.modeler.ModelerGraphicItem import ModelerGraphicItem
         for i, out in enumerate(dlg.alg.outputs):
             dlg.alg.outputs[out].pos = dlg.alg.pos + QPointF(ModelerGraphicItem.BOX_WIDTH, (i + 1.5)
                                                              * ModelerGraphicItem.BOX_HEIGHT)
         self.alg.addAlgorithm(dlg.alg)
         self.repaintModel()
         self.hasChanged = True
示例#4
0
    def __init__(self, sourceNode, destNode, state=1, text=""):
        super(Edge, self).__init__()

        self.arrowSize = 15.0
        self.sourcePoint = QPointF()
        self.destPoint = QPointF()

        self.setAcceptedMouseButtons(Qt.NoButton)
        self.source = sourceNode
        self.dest = destNode
        self.source.addEdge(self)
        self.dest.addEdge(self)
        self.adjust()

        self.state = state
        self.text = text

        line = QLineF(sourceNode.pos(), destNode.pos())
        self.weight = line.length()
    def onMouseMove_draw(self, imageview, event):
        self._navIntr.onMouseMove_default(imageview, event)

        o = imageview.scene().data2scene.map(
            QPointF(imageview.oldX, imageview.oldY))
        n = imageview.scene().data2scene.map(QPointF(imageview.x, imageview.y))

        # Draw temporary line for the brush stroke so the user gets feedback before the data is really updated.
        pen = QPen(QBrush(self._brushingCtrl._brushingModel.drawColor),
                   self._brushingCtrl._brushingModel.brushSize, Qt.SolidLine,
                   Qt.RoundCap, Qt.RoundJoin)
        line = QGraphicsLineItem(o.x(), o.y(), n.x(), n.y())
        line.setPen(pen)

        imageview.scene().addItem(line)
        line.setParentItem(imageview.scene().dataRectItem)

        self._lineItems.append(line)
        self._brushingCtrl._brushingModel.moveTo(imageview.mousePos)
示例#6
0
    def updateCursorPosition(self, imageview, event):
        """Update the position model's cursor position according to the given event position."""
        imageview.mousePos = mousePos = imageview.mapMouseCoordinates2Data(
            event.pos())
        imageview.oldX, imageview.oldY = imageview.x, imageview.y
        dataX = imageview.x = mousePos.x()
        dataY = imageview.y = mousePos.y()

        self._navCtrl.positionDataCursor(QPointF(dataX, dataY),
                                         self._navCtrl._views.index(imageview))
示例#7
0
 def drawBackground(self, painter, rect):
     painter.fillRect(rect, QBrush(QColor(0, 0, 0)))
     if self.background_image:
         #bm = self.back_matrix
         #log_debug("m = [%g %g ; %g %g ]" % (bm.m11(), bm.m12(), bm.m21(), bm.m22()))
         painter.setWorldTransform(self.back_matrix, True)
         #real_rect = self.invert_back_matrix.mapRect(rect)
         #rect = self.back_matrix.mapRect(real_rect)
         #painter.drawImage(rect,self.background_image, real_rect)
         painter.drawImage(QPointF(0, 0), self.background_image)
示例#8
0
 def foldInput(self, folded):
     self.element.paramsFolded = folded
     self.prepareGeometryChange()
     if self.element.algorithm.outputs:
         pt = self.getLinkPointForOutput(-1)
         pt = QPointF(0, pt.y())
         self.outButton.position = pt
     for arrow in self.arrows:
         arrow.updatePath()
     self.update()
示例#9
0
    def updateAlgorithm(self, alg):
        alg.pos = self.algs[alg.name].pos
        self.algs[alg.name] = alg

        from processing.modeler.ModelerGraphicItem import ModelerGraphicItem
        for i, out in enumerate(alg.outputs):
            alg.outputs[out].pos = (
                alg.outputs[out].pos or
                alg.pos + QPointF(ModelerGraphicItem.BOX_WIDTH,
                                  (i + 1.5) * ModelerGraphicItem.BOX_HEIGHT))
示例#10
0
 def getPositionForParameterItem(self):
     MARGIN = 20
     BOX_WIDTH = 200
     BOX_HEIGHT = 80
     if self.alg.inputs:
         maxX = max([i.pos.x() for i in self.alg.inputs.values()])
         newX = min(MARGIN + BOX_WIDTH + maxX, self.CANVAS_SIZE - BOX_WIDTH)
     else:
         newX = MARGIN + BOX_WIDTH / 2
     return QPointF(newX, MARGIN + BOX_HEIGHT / 2)
示例#11
0
    def create_polygon_pie(self, outer_radius, inner_raduis, start, lenght):
        polygon_pie = QPolygonF()
        # start = self.scale_angle_start_value
        # start = 0
        # lenght = self.scale_angle_size
        # lenght = 180
        # inner_raduis = self.width()/4
        # print(start)
        n = 360  # angle steps size for full circle
        # changing n value will causes drawing issues
        w = 360 / n  # angle per step
        # create outer circle line from "start"-angle to "start + lenght"-angle
        x = 0
        y = 0

        # todo enable/disable bar graf here
        if not self.enable_barGraph:
            # float_value = ((lenght / (self.value_max - self.value_min)) * (self.value - self.value_min))
            lenght = int(
                round((lenght / (self.value_max - self.value_min)) *
                      (self.value - self.value_min)))
            # print("f: %s, l: %s" %(float_value, lenght))
            pass

        # mymax = 0

        for i in range(lenght + 1):  # add the points of polygon
            t = w * i + start - self.angle_offset
            x = outer_radius * math.cos(math.radians(t))
            y = outer_radius * math.sin(math.radians(t))
            polygon_pie.append(QPointF(x, y))
        # create inner circle line from "start + lenght"-angle to "start"-angle
        for i in range(lenght + 1):  # add the points of polygon
            # print("2 " + str(i))
            t = w * (lenght - i) + start - self.angle_offset
            x = inner_raduis * math.cos(math.radians(t))
            y = inner_raduis * math.sin(math.radians(t))
            polygon_pie.append(QPointF(x, y))

        # close outer line
        polygon_pie.append(QPointF(x, y))
        return polygon_pie
示例#12
0
文件: io.py 项目: etrushkin/sconcho
def read_patternRepeats_API_1_2(stream, numRepeats):
    """ Read all patternRepeats from our output stream 
    
    NOTE: This is a legacy reader for pattern repeats
    written with API versions 1 and 2. 
    """

    patternRepeats = []
    for count in range(numRepeats):

        # read all lines
        lines = []
        numPoints = stream.readInt32()
        for pointCount in range(0, numPoints, 2):

            point1 = QPointF()
            stream >> point1

            point2 = QPointF()
            stream >> point2

            lines.append(QLineF(point1, point2))

        # read width and color
        position = QPointF()
        stream >> position
        legendID = stream.readUInt16()
        width = stream.readInt16()
        color = QColor()
        stream >> color

        newItem = {
            "lines": lines,
            "position": position,
            "width": width,
            "color": color,
            "legendID": legendID
        }

        patternRepeats.append(newItem)

    return patternRepeats
示例#13
0
    def paintArc(self, painter, option, widget):
        assert self.source is self.dest
        node = self.source
        def best_angle():
            """...is the one furthest away from all other angles"""
            angles = [QLineF(node.pos(), other.pos()).angle()
                      for other in chain((edge.source for edge in node.edges
                                          if edge.dest == node and edge.source != node),
                                         (edge.dest for edge in node.edges
                                          if edge.dest != node and edge.source == node))]
            angles.sort()
            if not angles:  # If this self-constraint is the only edge
                return 225
            deltas = np.array(angles[1:] + [360 + angles[0]]) - angles
            return (angles[deltas.argmax()] + deltas.max()/2) % 360

        angle = best_angle()
        inf = QPointF(-1e20, -1e20)  # Doesn't work with real -np.inf!
        line0 = QLineF(node.pos(), inf)
        line1 = QLineF(node.pos(), inf)
        line2 = QLineF(node.pos(), inf)
        line0.setAngle(angle)
        line1.setAngle(angle - 13)
        line2.setAngle(angle + 13)

        p0 = shape_line_intersection(node.shape(), node.pos(), line0)
        p1 = shape_line_intersection(node.shape(), node.pos(), line1)
        p2 = shape_line_intersection(node.shape(), node.pos(), line2)
        path = QtGui.QPainterPath()
        path.moveTo(p1)
        line = QLineF(node.pos(), p0)
        line.setLength(3*line.length())
        pt = line.p2()
        path.quadTo(pt, p2)

        line = QLineF(node.pos(), pt)
        self.setLine(line)  # This invalidates DeviceCoordinateCache
        painter.drawPath(path)

        # Draw arrow head
        line = QLineF(pt, p2)
        self.arrowHead.clear()
        for point in self._arrowhead_points(line):
            self.arrowHead.append(point)
        painter.setBrush(self.pen().color())
        painter.drawPolygon(self.arrowHead)

        # Update label position
        self.label.setPos(path.pointAtPercent(.5))
        if 90 < angle < 270:  # Right-align the label
            pos = self.label.pos()
            x, y = pos.x(), pos.y()
            self.label.setPos(x - self.label.boundingRect().width(), y)
        self.squares.placeBelow(self.label)
示例#14
0
 def paint(self, painter, option, widget=None):
     pt = QPointF(-self.WIDTH / 2, -self.HEIGHT / 2) + self.position
     rect = QRectF(pt.x(), pt.y(), self.WIDTH, self.HEIGHT)
     if self.isIn:
         painter.setPen(QPen(Qt.transparent, 1))
         painter.setBrush(QBrush(Qt.lightGray, Qt.SolidPattern))
     else:
         painter.setPen(QPen(Qt.transparent, 1))
         painter.setBrush(QBrush(Qt.transparent, Qt.SolidPattern))
     painter.drawRect(rect)
     painter.drawPixmap(pt.x(), pt.y(), self.pixmap)
示例#15
0
 def __init__(self,
              m={
                  'center': QPointF(0.0, 0.0),
                  'radius': 0.5,
                  'start': 0.0,
                  'span': 90.0
              }):
     r = m.get('radius', None)
     if r is not None and r <= 0.0:
         raise ArcException("radius must be > 0.0")
     self.m = copy(m)
示例#16
0
    def drawSkel(self, worm_img, worm_qimg, row_data, roi_corner=(0, 0)):
        if not self.skel_file or not isinstance(self.trajectories_data,
                                                pd.DataFrame):
            return

        c_ratio_y = worm_qimg.width() / worm_img.shape[1]
        c_ratio_x = worm_qimg.height() / worm_img.shape[0]

        skel_id = int(row_data['skeleton_id'])

        qPlg = {}

        with tables.File(self.skel_file, 'r') as ske_file_id:
            for tt in ['skeleton', 'contour_side1', 'contour_side2']:
                dat = ske_file_id.get_node('/' + tt)[skel_id]
                dat[:, 0] = (dat[:, 0] - roi_corner[0]) * c_ratio_x
                dat[:, 1] = (dat[:, 1] - roi_corner[1]) * c_ratio_y

                qPlg[tt] = QPolygonF()
                for p in dat:
                    qPlg[tt].append(QPointF(*p))

        if 'is_good_skel' in row_data and row_data['is_good_skel'] == 0:
            self.skel_colors = {
                'skeleton': (102, 0, 0),
                'contour_side1': (102, 0, 0),
                'contour_side2': (102, 0, 0)
            }
        else:
            self.skel_colors = {
                'skeleton': (27, 158, 119),
                'contour_side1': (217, 95, 2),
                'contour_side2': (231, 41, 138)
            }

        pen = QPen()
        pen.setWidth(2)

        painter = QPainter()
        painter.begin(worm_qimg)

        for tt, color in self.skel_colors.items():
            pen.setColor(QColor(*color))
            painter.setPen(pen)
            painter.drawPolyline(qPlg[tt])

        pen.setColor(Qt.black)
        painter.setBrush(Qt.white)
        painter.setPen(pen)

        radius = 3
        painter.drawEllipse(qPlg['skeleton'][0], radius, radius)

        painter.end()
示例#17
0
文件: cell.py 项目: arne-cl/Dimscape
 def paint(self, painter, options, widget):
     pw = self.pen().widthF() / 2
     children = self.childrenBoundingRect()
     m = self.margin
     painter.setPen(self.pen())
     painter.setBrush(self.brush())
     painter.drawRect(
         QRectF(
             children.topLeft() - QPointF(pw + m, pw + m),
             QSizeF(children.width() + pw + m + m,
                    children.height() + pw + m + m)))
示例#18
0
def makeStarShaped(pts, pts2coords):
    if len(pts) > 2:
        coords = [pts2coords[pt_id] for pt_id in pts]
        center = sum(coords, QPointF())/len(coords)
        ref = coords[0] - center
        angles = [angle(ref, p-center) for p in coords]
        to_sort = list(range(len(angles)))
        to_sort.sort(key=lambda k: angles[k])
        return [pts[i] for i in to_sort]
    else:
        return pts
示例#19
0
 def __init__(self, parent=None):
     super(Particle, self).__init__(parent)
     self.effect = QGraphicsBlurEffect()
     self.blur_radius = random.uniform(0.8, 1.6)
     self.effect.setBlurRadius(self.blur_radius)
     self.setGraphicsEffect(self.effect)
     self.height = random.uniform(1, 6)
     self.width = random.uniform(1, 6)
     self.depth = 1
     self.setZValue(self.depth)
     self.newPos = QPointF()
     self.animation_timer = QTimer()
     self.animation_timer.setInterval(1000 / 25)
     self.animation_timer.timeout.connect(self.advance)
     self.animation_timer.start()
     self.speed = 1
     self.next_pos = QPointF(0, 0)
     self.animated = True
     self.max_speed = 3.0
     self.color = QColor(0, 0, 0, 50)
示例#20
0
    def __init__(self, parent=None, text=""):
        super(QGraphicsPathItem, self).__init__(parent)
        self.setAcceptHoverEvents(True)
        self.setPen(QPen(Qt.NoPen))

        self.text = QGraphicsTextItem(self)
        layout = self.text.document().documentLayout()
        layout.documentSizeChanged.connect(self._onLayoutChanged)

        self._text = ""
        self._anchor = QPointF()
示例#21
0
 def panSlicingViews(self, point3d, axes):
     """
     For each of the given axes, pan the slicing view to the ordinate-abscissa point in point3d,
     but DON'T change the slicing plane.
     """
     for axis, view in enumerate(self._views):
         if axis in axes:
             pos2d = posView2D(point3d, axis)
             dataPoint = QPointF( *pos2d )
             scenePoint = view.scene().data2scene.map(dataPoint)
             view.centerOn( scenePoint )
    def paint(self, painter, option, widget=None):
        """
        Paint a single line of the slice intersection marker.
        """
        width = self._parent._width
        height = self._parent._height
        thickness = self._parent.PEN_THICKNESS

        # Our pen thickness is consistent across zoom levels because the pen is "cosmetic"
        # However, that doesn't ensure a consistent-size dash pattern.
        # Determine the inverse scaling factor from scene to view to set a consistent dash pattern at all scales.
        view = self.scene().views()[0]
        inverted_transform, has_inverse = view.transform().inverted()
        dash_length = 4 / inverted_transform.m11()
        dash_length = max(0.5, dash_length)

        # Draw the line with two pens to get a black-and-white dashed line.
        #pen_white = QPen( Qt.white, thickness )
        pen_white = QPen(self._parent._cropColor, thickness)
        pen_white.setDashPattern([dash_length, dash_length])
        pen_white.setCosmetic(True)

        pen_black = QPen(Qt.black, thickness)
        pen_black.setDashPattern([dash_length, dash_length])
        pen_black.setCosmetic(True)
        pen_black.setDashOffset(dash_length)

        with painter_context(painter):
            t = painter.transform()
            painter.setTransform(self.scene().data2scene * t)

            # Draw the line with two pens to get a black-and-white dashed line.
            for pen in [pen_white, pen_black]:
                painter.setPen(pen)

                if self._direction == 'horizontal':
                    painter.drawLine(QPointF(0.0, self.position),
                                     QPointF(width, self.position))
                else:
                    painter.drawLine(QPointF(self.position, 0.0),
                                     QPointF(self.position, height))
示例#23
0
 def rebuildDataBrushIfNeeded(self):
     if not self.m_rebuildBrush or not self.m_gradientData:
         return
     self.m_rebuildBrush = False
     p = self.palette()
     dataBrush = QConicalGradient(QPointF(0.5, 0.5), self.m_nullPosition)
     dataBrush.setCoordinateMode(QGradient.StretchToDeviceMode)
     for i in range(0, len(self.m_gradientData)):
         dataBrush.setColorAt(1 - self.m_gradientData[i][0],
                              self.m_gradientData[i][1])
         p.setBrush(QPalette.Highlight, dataBrush)
     self.setPalette(p)
示例#24
0
文件: eedge.py 项目: raiscui/edd
    def update(self):

        QGraphicsObject.prepareGeometryChange(self)

        self.__headPoint = self.mapFromItem(
            self.__head[ENode.kGuiAttributeParent],
            self.__head[ENode.kGuiAttributePlug])

        self.__tailPoint = self.mapFromItem(
            self.__tail[ENode.kGuiAttributeParent],
            self.__tail[ENode.kGuiAttributePlug])

        self.__headOffsetLine = QLineF(
            self.__headPoint,
            QPointF(self.__headPoint.x() + 15, self.__headPoint.y()))
        self.__tailOffsetLine = QLineF(
            self.__tailPoint,
            QPointF(self.__tailPoint.x() - 15, self.__tailPoint.y()))

        line = QLineF(self.__headPoint, self.__tailPoint)
        self.__line = line
示例#25
0
 def setRect(self, fm=None):
     if fm is None:
         font = self.font()
         if font is None:
             return
         fm = QFontMetrics(font)
     lineHeight = fm.height()
     height = lineHeight * self._dataLen() * 1.1
     width = max(fm.width(data) for data in self._iterData()) + 10
     if height != self._rect.height() or width != self._rect.width():
         self.prepareGeometryChange()
         self._rect.setBottomRight(QPointF(width, height))
示例#26
0
 def calculate_polygon_points(self):
     # QPolygonF nesnesi oluşturup tüm köşe noktalarının
     # x ve y değerlerini hesaplıyoruz. Sonrasında x,y
     # değerleriyle QPointF nesnesi oluşturup QPolygon'a
     # bu noktaları ekliyoruz.
     p = QPolygonF()
     angle = self.calculate_angle()
     for i in range(self.edge_count):
         x = cos(angle * i) * self.radius
         y = sin(angle * i) * self.radius
         p.append(QPointF(x, y))
     return p
示例#27
0
def centroid_qt(polygon):
    from PyQt4.QtCore import QPointF
    """Determine the centroid of a QPolygon"""
    x = 0.
    y = 0.
    n = polygon.count()
    for i in range(n):
        x += polygon.at(i).x()
        y += polygon.at(i).y()
    x /= n
    y /= n
    return QPointF(x, y)
示例#28
0
 def load_window_geometry(self):
     """Load from QSettings the window size of Ninja IDE"""
     qsettings = QSettings(resources.SETTINGS_PATH, QSettings.IniFormat)
     if qsettings.value("window/maximized", True, type=bool):
         self.setWindowState(Qt.WindowMaximized)
     else:
         self.resize(qsettings.value(
             "window/size",
             QSizeF(800, 600).toSize(), type='QSize'))
         self.move(qsettings.value(
             "window/pos",
             QPointF(100, 100).toPoint(), type='QPoint'))
示例#29
0
    def load_window_geometry(self):
        """Load from QSettings the window size of de Ninja IDE"""
        qsettings = QSettings()
        if qsettings.value("window/maximized", 'true') == 'true':
            self.setWindowState(Qt.WindowMaximized)
        else:
            print dir(QSizeF)

            self.resize(
                qsettings.value("window/size", QSizeF(800, 600)).toSize())
            self.move(
                qsettings.value("window/pos", QPointF(100, 100)).toPoint())
示例#30
0
 def test_distance_to_caliper(self):
     x_from = 0
     x_to = 10
     y1 = 0
     y2 = 20
     pos = QPointF(7, 15)
     d_center, d_y2, d_x2, d_y1, d_x1 = compute_dist_caliper(x_from, x_to, y1, y2, pos)
     self.assertAlmostEqual(d_center, 5.385, places=2)
     self.assertEqual(d_x1, 7)
     self.assertEqual(d_x2, 3)
     self.assertEqual(d_y1, 15)
     self.assertEqual(d_y2, 5)