1. src 源码目录
-
common: 项目和插件常用到的功能函数和classes
-
external: 依赖的第三方库的源码,例如:
-
lib3ds
Autodesk 3D Studio文件C语言库.
-
muparser
Fast mathematical expressions parser library.
-
OpenCTM
Library for compression of 3D triangle meshes.
-
bzip2
File compression program that uses the Burrows–Wheeler algorithm.
-
jhead
Extract and manipulate JPEG EXIFinformation of photos.
-
levmar
The Levenberg-Marquardt algorithm is an iterative technique that finds a local minimum ofa function that is expressed as the sum of squares of nonlinear functions.通用的非线性最小二乘算法库.
-
glew
The OpenGL Extension Wrangler Library.
-
qhull
Qhullcomputes the convex hull, Delaunay triangulation, Voronoi diagram, halfspaceintersection about a point, furthest-site Delaunay triangulation, andfurthest-site Voronoi diagram. It runs in 2-d, 3-d, 4-d, and higher dimensions.研究解决凸包问题.
-
-
meshlab: 核心功能和GUI实现
- 程序入口(MainWindow的实现,分别在mainwindow_RunTime和mainwindow_Init文件中)
- 各种Actions(Render部分的生成,在rendermodeactions文件中)
- Menus、Toolbars、Dialog等
-
meshlabserver: 运行在cmd的meshlab工具,常用于批量处理。
-
meshlabplugins: 插件集合
meshlab中插件的加载有二种方式:
- 一种是遍历插件目录中的dll文件,进行加载。
- 另一种是遍历插件目录中的xml文件(例如:filter_measure.xml),通过判断是否存在与xml文件同名的dll文件和xml文件中是否包含javascript,进行不同方式的加载。
其中,插件中的对话框等UI部分,都是通过MeshlabStdDialog和MeshLabXMLStdDialog二个类生成的。
MeshLab对其功能的扩展是通过插件来实现的,通过实现不同的接口,可以将插件放在不同的菜单下或工具栏上。例如:MeshFilterInterface接口,用于实现Filter菜单下的插件。
常见插件例如:
-
filter_meshing
Mesh网格处理:缩放、移动、旋转,细分面,删除重复顶点等。
-
filter_select
提供多种选择和删除方式。
-
filter_layer
Mesh层操作。例如:删除/复制/重命名Mesh层、合并Mesh层等。
-
io_base
导入/导出一些3D文件。例如:STL,PLY, OBJ等。
-
decorate_base
绘制坐标轴、顶点、边角、边框、网格、标签、特征柱状图等。
-
edit_manipulators
鼠标和键盘键进行操作:缩放、平移和旋转。
-
edit_align
Mesh拼接。
-
edit_hole
Mesh补洞。
-
edit_measure
测量Mesh中选定距离。
-
render_gdp
着色器:遍历加载与处理.gdp文件。
-
render_rfx
着色器:遍历加载与处理.rfx文件。
-
sampleplugins
扩展插件示例源码的目录。
-
use_cpu_opengl: 仅用于Windows平台,用于非GPU加速的OpenGL调用
-
vcglib: 核心功能库(项目子模块)
vcglib采用标准C++开发,封装了IO,OpenGL等功能。核心功能如下:
- 提供 Mesh(triangular mesh,tetrahedral mesh,三角网格或四面体网格)数据结构的定义,该数据结构支持对 Mesh数据的快速访问(拓扑信息、空间查询等)以及高效执行网格上算法;
- 在 Mesh数据结构基础上,实现大量高效的网格算法,如网格修补、平滑、变形、曲率计算、细分、泊松盘采样、等值面计算等;
- IO支持,读写 PLY、OBJ、STL、3DS、OFF、DXF 等格式网格文件;
- UI 支持,如 OpenGL网格显示,Trackball交互等。
目录结构:
-
vcg
整个库的核心,定义了所有的算法和数据结构。
-
wrap
包含一些针对特定需求/上下文/库的VCG概念的封装。例如:很多格式的网格数据的导入和导出,用OpenGL渲染三角形网格的代码等。
-
eigenLib
线性代数库,VCGLib中的高级矩阵操作基于这个库。
插件类图(继承关系)