def testSelection(self, data): """ Given a Parameters ---------- data : (N, 2) array Point coordinates """ if len(data) == 0: return numpy.zeros(0, dtype=bool) def contained(a, left, top, right, bottom): assert left <= right and bottom <= top x, y = a.T return (x >= left) & (x <= right) & (y <= top) & (y >= bottom) data = numpy.asarray(data) selected = numpy.zeros(len(data), dtype=bool) for p1, p2 in self.selection: r = QRectF(p1, p2).normalized() # Note the inverted top/bottom (Qt coordinate system) selected |= contained(data, r.left(), r.bottom(), r.right(), r.top()) return selected
def qrectf_to_inscribed_rect(rect: QRectF) -> QRect: """ Return the largest integer QRect such that it is completely contained in `rect`. """ xmin = int(math.ceil(rect.x())) xmax = int(math.floor(rect.right())) ymin = int(math.ceil(rect.top())) ymax = int(math.floor(rect.bottom())) return QRect(xmin, ymin, max(xmax - xmin, 0), max(ymax - ymin, 0))
def qrect_aligned_to( rect_a: QRectF, rect_b: QRectF, alignment: Qt.Alignment) -> QRectF: res = QRectF(rect_a) valign = alignment & Qt.AlignVertical_Mask halign = alignment & Qt.AlignHorizontal_Mask if valign == Qt.AlignTop: res.moveTop(rect_b.top()) if valign == Qt.AlignVCenter: res.moveCenter(QPointF(res.center().x(), rect_b.center().y())) if valign == Qt.AlignBottom: res.moveBottom(rect_b.bottom()) if halign == Qt.AlignLeft: res.moveLeft(rect_b.left()) if halign == Qt.AlignHCenter: res.moveCenter(QPointF(rect_b.center().x(), res.center().y())) if halign == Qt.AlignRight: res.moveRight(rect_b.right()) return res