【FastCAE源码阅读7】视图方向切换按钮实现原理

在FastCAE工具栏上有视图切换按钮,如下图所示:【FastCAE源码阅读7】视图方向切换按钮实现原理_第1张图片
本文介绍如何实现。

FastCAE集成了Python解析器,当单击按钮时,中间用Python执行的,最后调用MainWindow.dll库接口实现的。

具体的Python代码在Python模块的py文件夹下的MainWindow.py文件中。这几个按钮都是调用的setView方法,只是入参不同而已。
【FastCAE源码阅读7】视图方向切换按钮实现原理_第2张图片

MainWindow.dll库对外的接口在MainWindowPy.h文件中定义。这里调用的是setView接口。
【FastCAE源码阅读7】视图方向切换按钮实现原理_第3张图片
继续跟踪代码,发现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轴、位置及焦点实现的。

你可能感兴趣的:(FastCAE源码阅读,c++)