主要观点:BMesh 是一种非流形边界表示,旨在替代当前有限的 EditMesh 结构,解决其设计限制和维护问题,与 Radial Edge Structure 类似。
关键信息:
- 结构组成:BMesh 在四个主要元素结构中存储拓扑,包括面(Faces)、环(Loops)、边(Edges)、顶点(Verts),各元素存储不同信息且相互关联。
- 连接循环:有磁盘循环(Disk Cycle)、环循环(Loop Cycle)、径向循环(Radial Cycle),通过循环维持拓扑实体间的关系,可快速推导全连接信息,函数用于处理各循环。
- 编辑 API:分为低、中、高层,低层次提供遍历循环和局部编辑的 API,高层次可直接影响用户可见属性。
- 未来工作:原设计中 BMesh 能处理单面色的多个边界即面中的洞,现暂不作为第一版 BMesh 功能合并目标。
重要细节: - 磁盘循环:每个边包含两个磁盘链接结构,用于跟踪边在顶点磁盘循环中的成员关系,
bmesh_disk_*
函数用于导航磁盘循环, wire 边可完全集成到拓扑数据库,且不受面的非流形条件影响。 - 环循环:每个面由
BMFace
和BMLoop
结构表示,BMFace
通过l_first
指针指向面的环循环中的第一个BMLoop
,BMLoop
结构类似半边缘,顶点指针与面相关。 - 径向循环:类似径向边缘数据结构,每个边存储一个指向其
BMLoop
的指针作为基,通过遍历BMLoop
的next
和prev
指针可访问与边相关的面。 - 编辑 API 低层:提供遍历循环和局部编辑的函数,如
bmesh_split_edge_make_vert
等欧拉算子,可组合实现各种非流形建模操作,且每个算子利用持久邻接信息修改局部拓扑。 - 编辑 API 中层:BMesh 运算符基于低层 API,提供基本的网格编辑功能,可嵌套调用,通过操作符槽接收输入和返回输出,有整数、浮点数、指针、元素缓冲区、映射等槽类型。
- 编辑 API 高层:网格编辑工具连接网格编辑器和 Blender 界面,可直接由用户运行或被脚本调用,是唯一能修改头标志(如可见性、选择等)的部分。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。