作为一款开源的CAx(CAD/CAE/CAM)软件集成平台,为了实现各个Module支持不同的数据显示与交互方案,出于扩展性的考虑,SALOME引入了View Model,用以支持OpenGL、OCC、VTK、ParaView、Qwt等数据显示与交互实现。
本文将以OCCViewer、SVTK为例,来阐述SALOME中的View Model相关内容。
注1:限于研究水平,分析难免不当,欢迎批评指正。
注2:文章内容会不定期更新。
一、整体流程
以LightApp_Application为例,当SALOME启动之后,每当激活某个Module时,最终会触发函数LightApp_Application::activateModule( const QString&),
/*!Activate module by \a modName*/
bool LightApp_Application::activateModule( const QString& modName )
{
// ... ...
updateWindows();
updateViewManagers();
// ... ...
}
/*!
Updates view managers
*/
void LightApp_Application::updateViewManagers()
{
QStringList lst;
currentViewManagers( lst );
for ( QStringList::const_iterator it = lst.begin(); it != lst.end(); ++it )
getViewManager( *it, true );
}
可以看到,在SALOME中,每个module是依据ViewManager/ViewModel的类型名字来获取对应的ViewManager/ViewModel。
目前,SALOME提供了对OpenGL、OCC、VTK、ParaView、Qwt等显示方式的支持。
1 | GLViewer_Viewer | QGLWidget | |
2 | Plot2d_Viewer SPlot2d_Viewer | QwtPlot | |
3 | QxScene_Viewer GraphicsView_Viewer | QGraphicsView | |
4 | PVViewer_Viewer PV3DViewer_ViewModel SPV3D_ViewModel | pqTabbedMultiViewWidget | |
5 | PyViewer_Viewer | PyEditor | |
6 | OCCViewer_Viewer | V3d_View | OCCViewer_ViewFrame,OCCViewer_ViewPort3d |
SOCC_Viewer | SOCC_ViewWindow,OCCViewer_ViewPort3d,SOCC_Prs | ||
7 | VTKViewer_Viewer | vtkRenderWindow | VTKViewer_ViewWindow,VTKViewer_RenderWindow |
SVTK_Viewer | SVTK_ViewWindow,SVTK_RenderWindowInteractor,SVTK_Prs |
二、OCCViewer
2.1 相关组件
2.2 关键流程
三、SVTK
3.1 相关组件
3.2 关键流程
四、扩展与演练:ACISE集成SALOME OCCViewer/SVTK
参考资料
-
Erich Gamma. Design Patterns:elements of reusable object-oriented software. Addison Wesley, 1994.
-
Joseph Ingeno. Software Architect's Handbook. Packt Publishing, 2018.