在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轴、位置及焦点实现的。