Exemplo n.º 1
0
void QGraphicsVolumeView::updatePixmaps() {
    for (int i = 0; i < _volumeDisplays.size(); i++) {
        const int w = _volumeDisplays[i].Width();
        const int h = _volumeDisplays[i].Height();
        const int s = _volumeDisplays[i].Count();

        for (int j = 0; j < s; j++) {
            AIRVolumeDisplay& display = _volumeDisplays[i];
            QGraphicsRectItem* item = display.GetSliceData<QGraphicsRectItem>(j);
            if (item != NULL) {
                QList<QGraphicsItem*> childItems = item->childItems();
                if (childItems.size() > 0) {
                    QGraphicsPixmapItem* pixmapItem = (QGraphicsPixmapItem*) childItems[0];
                    QTransform pixmapTransform;
                    if (_xFlipped && !_yFlipped) {
                        pixmapTransform.setMatrix(-1, 0, 0, 0, 1, 0, w, 0, 1);
                        pixmapItem->setTransform(pixmapTransform);
                    } else if (!_xFlipped && _yFlipped) {
                        pixmapTransform.setMatrix(1, 0, 0, 0, -1, 0, 0, h, 1);
                        pixmapItem->setTransform(pixmapTransform);
                    } else if (_xFlipped && _yFlipped) {
                        pixmapTransform.setMatrix(-1, 0, 0, 0, -1, 0, w, h, 1);
                        pixmapItem->setTransform(pixmapTransform);
                    } else {
                        pixmapItem->resetTransform();
                    }

                }
            }
        }
    }
}
Exemplo n.º 2
0
void QGraphicsVolumeView::updateDisplay(int volumeId) {
    if (this->isHidden()) {
        return;
    }
    
    if (_airImages == NULL) {
        return;
    }

    _currentSliceMarker = NULL;

    QFont sliceIndexFont("Courier", 20);

    int showingVolumeCount = _showAll ? _airImages->Count() : 1;
    for (int id = 0; id < showingVolumeCount; id++) {
        AIRImageDisplay src = _airImages->at(id);
        if (_volumeDisplays.size() <= id) {
            _volumeDisplays.push_back(AIRVolumeDisplay());
        }
        if (!_volumeDisplays[id].Has(src)) {
            _volumeDisplays[id].SetDisplay(src);
        }
        if (_volumeDisplays[id].UpdateSlice(_directionCache, _useNavigationImage)) {
            const int w = _volumeDisplays[id].Width();
            const int h = _volumeDisplays[id].Height();
            const int s = _volumeDisplays[id].Count();

            for (int i = 0; i < s; i++) {
                int realSliceIdx = i;
                int colPos = i * w;
                int rowPos = id * h;

                QGraphicsRectItem* item = _volumeDisplays[id].GetSliceData<QGraphicsRectItem>(i);
                QGraphicsPixmapItem* pixmapItem = NULL;
                uchar* colorPointer = _volumeDisplays[id].GetColorImageBuffer(i);

                QPixmap pixmap = QPixmap::fromImage(QImage(colorPointer, w, h, QImage::Format_ARGB32));
                if (item == NULL) {
                    item = new QGraphicsRectItem(QRect(0, 0, w, h));
                    item->setPen(Qt::NoPen);
                    item->setBrush(Qt::NoBrush);
                    item->setPos(colPos, rowPos);
                    item->setData(SliceIndex, QVariant(i));
                    item->setData(AnnotationType, QVariant(SliceImage));
                    item->setData(RealSliceIndex, QVariant(realSliceIdx));

                    pixmapItem = new QGraphicsPixmapItem(QPixmap::fromImage(QImage(_volumeDisplays[id].GetColorImageBuffer(i), w, h, QImage::Format_ARGB32)), item);
                    pixmapItem->setZValue(1);

                    QGraphicsTextItem* text = new QGraphicsTextItem(QString("#%1.%2").arg(id).arg(realSliceIdx), item);
                    text->setFont(sliceIndexFont);
                    text->setPos(3, 3);
                    text->setZValue(2);
                    text->setDefaultTextColor(Qt::yellow);

                    _volumeDisplays[id].SetSliceData(i, item);
                    scene()->addItem(item);
                } else {
                    QGraphicsPixmapItem* pixmapItem = (QGraphicsPixmapItem*) item->childItems()[0];
                    pixmapItem->setPixmap(pixmap);
                }

                if (_workingSet.contains(i)) {
                    addWorkingSetItem(item);
                }
            }
        }
    }
    updatePixmaps();
}