Meshlab架构解析

1. src 源码目录

csdn: Meshlab源码初探

  • 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中插件的加载有二种方式:

    1. 一种是遍历插件目录中的dll文件,进行加载。
    2. 另一种是遍历插件目录中的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中的高级矩阵操作基于这个库。

插件类图(继承关系)

posted @ 2021-01-08 14:18  brt2  阅读(1359)  评论(0编辑  收藏  举报