如何设置vtk相机的正确变焦系数?
How to set the correct zoom-factor of vtkCamera?
我想将图像的大小增加到 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));
}
});
相关文章:
- std::具有相同基类的类的变体
- 访问者访问变体并返回不同类型时出错
- 了解 GLM- openGL 中的相机转换
- 我应该使用什么来代替void作为变体中的替代类型之一
- 将shared_ptr移动到<StructA>shared_ptr<变体<结构A、结构 B>>
- 如何比较自定义类的std::变体
- 通过网络、跨平台传递std::变体是否安全
- OpenGL相机和相机空间转型的困惑
- 有可能使shared_ptr协变吗
- 对于循环变体比较
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- 当无法使用模板和宏时,生成类型变体C++代码的最简单方法是什么?
- 为什么导入Mixed native/CLR lib.dll的本机C++应用程序没有在Mixed lib.dll中的外部变
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 标准::变体的赋值运算符
- 使用变量值作为 PlaySound 中的路径
- 如何设置vtk相机的正确变焦系数?
- 我想知道变焦和轨道在哪里出了问题
- OpenGL 正交相机变焦无法正常工作
- 沿枪实现变焦