Как правильно установить коэффициент масштабирования vtkCamera? - PullRequest
0 голосов
/ 12 сентября 2018

Я хочу увеличить размер изображения, равный 50%, 100%, 200%, 400% и 800%. Для увеличения изображения DICOM. Для этого я возьму QComboBox внутри моего средства просмотра и его индекс (50 100 200 400 800).

Из выпадающего списка я получаю индекс того, какой процент мне нужно увеличить. (пример- индекс (0) -50%, индекс (1) -100% .... и т. д.).

Я использую «vtk (getActiveCamera ())» для увеличения размера изображения в соответствии с выбранным индексом.

Я сталкиваюсь с проблемой, что, когда я устанавливаю размер до 200%, он будет установлен правильно. Но когда я увеличу размер до 400%, он будет установлен на 200% + 400% = 600%. Очевидно, я хочу установить размер только 400%.

Вот мой код:

    void ViewerManager::vtkZoomCaller(int index)
    {
        int i;
        switch (index)
        {
        case 0:
            //qDebug() << "hello50";
            for (i = 0; i < NumberOfViewers; i++) {
                    viewerDerived[i]->GetRenderer()->GetActiveCamera()->Zoom(0.5);
                }
            break;
        case 1:
            //qDebug() << "hello100";
            for (i = 0; i < NumberOfViewers; i++) {
                viewerDerived[i]->GetRenderer()->GetActiveCamera()->Zoom(1);

            }
 break;
        case 2:
            //qDebug() << "hello200";
            for (i = 0; i < NumberOfViewers; i++) {
                viewerDerived[i]->GetRenderer()->GetActiveCamera()->Zoom(2);
                }

            break;
        case 3:
            //qDebug() << "hello400";
            for (i = 0; i < NumberOfViewers; i++) {
                viewerDerived[i]->GetRenderer()->GetActiveCamera()->Zoom(4);
                }
break;
        case 4:
            //qDebug() << "hello800";
            for (i = 0; i < NumberOfViewers; i++) {
                viewerDerived[i]->GetRenderer()->GetActiveCamera()->Zoom(8);
                }
            break;
        default:
            break;
        }
    }

Когда я хочу выбрать 100% после 200% и выше любого процента, это не уменьшит размер. Любая помощь очень полезна для меня. Заранее спасибо

1 Ответ

0 голосов
/ 12 сентября 2018

Из того, что вы поделились, я вижу две проблемы:

  • vtkCamera::Zoom принимает double в качестве аргумента.

  • Эта избыточность в коде не обязательна. На самом деле есть более элегантный способ сделать это, используя QHash .

Принимая это во внимание, я подготовил и пример, который вы можете попробовать:

QHash<int, double> hash;
auto *comboZoom = new QComboBox(this);

hash.insert(0, 0.5);
hash.insert(1, 1.0);
hash.insert(2, 2.0);
hash.insert(3, 4.0);
hash.insert(4, 8.0);

comboZoom->addItems(QStringList{"50%", "100%", "200%", "400%", "800%"});

connect(comboZoom, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [hash](int index){
    for (int n = 0; n < numberOfViewers; n++) {
        viewerDerived[n]->GetRenderer()->GetActiveCamera()->Zoom(hash.value(index));
    }
});
...