370 for (
int i = 0; i < node->
children.length(); i++) {
371 if (childrenToVisit.contains(i)) {
525 if (levelsLeft > 1) {
531 node->
children = {
nullptr,
nullptr,
nullptr,
nullptr};
532 for (
int i = 0; i < node->
children.length(); i++) {
562 int width = size.width();
563 int height = size.height();
565 int marginX = int(gridRect.left())%pixelPrecision;
566 marginX = marginX == 0 ? 0 : pixelPrecision - marginX;
567 int marginY = int(gridRect.top())%pixelPrecision;
568 marginY = marginY == 0 ? 0 : pixelPrecision - marginY;
572 QPoint topLeftDividableCeiling = QPoint((qCeil(gridRect.left()/(qreal)pixelPrecision))*pixelPrecision, (qCeil(gridRect.top()/(qreal)pixelPrecision))*pixelPrecision);
573 QPoint topLeftDividableFloor = QPoint((qFloor(gridRect.left()/(qreal)pixelPrecision))*pixelPrecision, (qFloor(gridRect.top()/(qreal)pixelPrecision))*pixelPrecision);
580 for (
int i = 0; i < width; i++) {
581 for (
int j = 0; j < height; j++) {
583 int pointIndex = (startRow + j)*columnCount + (startColumn + i);
585 QPointF nextPoint = QPointF(topLeftDividableFloor.x() + i * pixelPrecision, topLeftDividableFloor.y() + j * pixelPrecision);
587 nextPoint.setX(gridRect.x());
590 nextPoint.setY(gridRect.y());
594 if (nextPoint.x() > gridRect.right() - 1) {
595 nextPoint.setX(gridRect.right() - 1);
597 if (nextPoint.y() > gridRect.bottom() - 1) {
598 nextPoint.setY(gridRect.bottom() - 1);
612 QPoint bottomRightDividable = QPoint((qFloor(gridRect.right()/(qreal)pixelPrecision))*pixelPrecision, (qFloor(gridRect.bottom()/(qreal)pixelPrecision))*pixelPrecision);
613 QPoint topLeftDividable = topLeftDividableCeiling;
615 QPoint sizeDividable = QPoint(bottomRightDividable - topLeftDividable);
616 int xLeftDividable = (sizeDividable.x()) / pixelPrecision / 2;
617 int yTopDividable = (sizeDividable.y()) / pixelPrecision / 2;
619 qreal xLeftCenter = topLeftDividable.x() + xLeftDividable*pixelPrecision;
620 qreal yTopCenter = topLeftDividable.y() + yTopDividable*pixelPrecision;
622 qreal xRightCenter = topLeftDividable.x() + (xLeftDividable + 1)*pixelPrecision;
623 qreal yBottomCenter = topLeftDividable.y() + (yTopDividable + 1)*pixelPrecision;
629 if (bottomRightDividable.x() <= topLeftDividable.x()) {
631 xLeftCenter = gridRect.left() + xLeft*pixelPrecision;
632 xRightCenter = gridRect.left() + (xLeft + 1)*pixelPrecision;
635 if (bottomRightDividable.y() <= topLeftDividable.y()) {
636 yTopCenter = gridRect.top() + yTop*pixelPrecision;
637 yBottomCenter = gridRect.top() + (yTop + 1)*pixelPrecision;
641 node->
xPartition = (xLeftCenter + xRightCenter)/2;
642 node->
yPartition = (yTopCenter + yBottomCenter)/2;
644 node->
children = {
nullptr,
nullptr,
nullptr,
nullptr};
645 for (
int i = 0; i < node->
children.count(); i++) {
654 initializeWithGridPointsRec(QRectF(gridRect.topLeft(), QPointF(xLeftCenter + 1, yTopCenter + 1)), pixelPrecision, node->
children[topLeftChild], startRow, startColumn, columnCount);
656 int rightStartColumn = startColumn + xLeftDividable + 1 + (topLeftDividableCeiling.x() > gridRect.left() ? 1 : 0);
657 int bottomStartRow = startRow + yTopDividable + 1 + (topLeftDividableCeiling.y() > gridRect.top() ? 1 : 0);
660 initializeWithGridPointsRec(QRectF(QPointF(xRightCenter, gridRect.top()), QPointF(gridRect.right(), yTopCenter + 1)), pixelPrecision,
661 node->
children[topRightChild], startRow, rightStartColumn, columnCount);
664 initializeWithGridPointsRec(QRectF(QPointF(gridRect.left(), yBottomCenter), QPointF(xLeftCenter + 1, gridRect.bottom())), pixelPrecision,
665 node->
children[bottomLeftChild], bottomStartRow, startColumn, columnCount);
668 initializeWithGridPointsRec(QRectF(QPointF(xRightCenter, yBottomCenter), QPointF(gridRect.right(), gridRect.bottom())), pixelPrecision,
669 node->
children[bottomRightChild], bottomStartRow, rightStartColumn, columnCount);