如何设置vtk相机的正确变焦系数?

How to set the correct zoom-factor of vtkCamera?

本文关键字:变焦 相机 何设置 设置 vtk      更新时间:2023-10-16

我想将图像的大小增加到 50%、100%、200%、400% 和 800%。为此,我将在我的查看器中获取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% 及高于任何百分比时,它不会减小大小。 任何帮助对我来说都非常有用。 提前致谢

从您分享的内容中,我看到了两个问题:

  • 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));
}
});