在FastCAE工具栏上有视图切换按钮,如下图所示:
本文介绍如何实现。
FastCAE集成了Python解析器,当单击按钮时,中间用Python执行的,最后调用MainWindow.dll库接口实现的。
具体的Python代码在Python模块的py文件夹下的MainWindow.py文件中。这几个按钮都是调用的setView方法,只是入参不同而已。
MainWindow.dll库对外的接口在MainWindowPy.h文件中定义。这里调用的是setView接口。
继续跟踪代码,发现setView具体实现在graphWindowBase.cpp文件中。具体代码如下:
void GraphWindowBase::setView(QString view)
{if (view.toLower() == "fit")fitView();else if (view.toLower() == "xplus")setViewXPlus();else if (view.toLower() == "xminus")setViewXMiuns();else if (view.toLower() == "yplus")setViewYPlus();else if (view.toLower() == "yminus")setViewYMiuns();else if (view.toLower() == "zplus")setViewZPlus();else if (view.toLower() == "zminus")setViewZMiuns();
}
其具体实现只是根据入参不同调用不同的方法。适应窗口(Fit window)调用的是fitView方法,我们来看其实现:
void Graph3DWindow::fitView()
{resetCamera();
}void Graph3DWindow::resetCamera()
{_render->ResetCamera();_renderWindow->Render();this->mouseWheelMove();
}void Graph3DWindow::setViewXPlus()
{vtkCamera *camera = _render->GetActiveCamera();camera->SetViewUp(0, 0, 1);camera->SetPosition(5000, 0, 0);camera->SetFocalPoint(0, 0, 0);resetCamera();
}
发现最后调用vtkRenderer的ResetCamera()方法就实现了适应窗口。其他视图调整是直接操作摄像机,指定其Up轴、位置及焦点实现的。