BambuStudio学习笔记:TriangulateWall

# TriangulateWall.hpp 头文件解析

## 概述
本头文件实现二维多边形间的三维墙面三角剖分算法,主要用于3D打印中连接不同Z高度的轮廓层,生成垂直方向的支撑结构或封闭表面。

## 核心结构解析

### 1. Ring环状索引管理器
```cpp
class Ring {
    size_t idx, nextidx, startidx, begin, end; // 当前/下一个索引,起始/终止索引
public:
    explicit Ring(size_t from, size_t to);     // 初始化索引范围
    void inc();                                // 步进到下一个索引
    bool is_finished() const;                  // 判断循环是否完成
};
  • 功能
    • 管理多边形顶点的环状遍历
    • 处理索引回绕(到达末端后回到起点)
    • 支持正向/反向遍历控制

2. Triangulator三角剖分器

template<class Sc>
class Triangulator {
    const vector<Vec3<Sc>>* pts;  // 三维顶点数据
    Ring *onring, *offring;       // 当前处理环/辅助环
    
    double calc_score();          // 计算当前边组合的质量得分
    void synchronize_rings();     // 同步双环最优起始位置
public:
    void run(vector<Vec3i>& indices); // 执行剖分生成三角形索引
};
  • 算法流程
    1. 同步双环起始位置找到最佳匹配点
    2. 循环选择得分更优的边组合
    3. 生成三角形索引并更新环状态

关键算法实现

质量评分函数

Sc trscore(const Ring& on, const Ring& off, const vector<Vec3<Sc>>& pts) {
    Sc a = 边AB长度平方;
    Sc b = 边BC长度平方;
    return (a + b)/2; // 平均边长为评分依据
}
  • 目标:最小化三角形边长方差
  • 作用:优先生成近似等边的三角形

同步双环机制

初始化辅助环
遍历所有起始点
计算当前起始点得分
记录最小得分位置
设置最优起始点

确保上下层多边形顶点最优对齐,避免扭曲三角形

主要接口函数

triangulate_wall

template<class Sc, class I>
void triangulate_wall(
    vector<Vec3<Sc>>& pts,     // 输出顶点集
    vector<Vec3<I>>& ind,      // 输出三角形索引
    const Polygon& lower,      // 下层轮廓
    const Polygon& upper,      // 上层轮廓
    double lower_z,           // 下层Z高度
    double upper_z            // 上层Z高度
);
  • 处理流程
    1. 将二维多边形点升维到指定Z高度
    2. 合并生成三维顶点数组(下层点在前,上层在后)
    3. 初始化双环管理器(下层环/上层环)
    4. 执行三角剖分生成连接两层的三角形

设计亮点

三维空间投影

  • 二维多边形点通过unscaled()转换为真实坐标
  • Z轴分层实现三维墙面构建

模板化设计

  • 支持多种数值类型(float/double)
  • 适配不同索引类型(int32_t/int64_t)

循环优化

  • 避免重复计算:预存顶点数据指针
  • 最小化内存分配:reserve预分配容器空间

应用场景

3D打印典型应用

  1. 垂直支撑生成:连接不同层的外轮廓
  2. 中空模型封顶:填补上下封闭层间的空隙
  3. 倾斜结构重建:处理非平面层间的过渡表面

使用示例

Polygon lower = ...; // 下层轮廓
Polygon upper = ...; // 上层轮廓
vector<Vec3d> vertices;
vector<Vec3i> indices;
triangulate_wall(vertices, indices, lower, upper, 10.0, 15.0);
// vertices包含所有三维点,indices为三角形面片索引

本算法通过优化的环状遍历策略和质量评分机制,在保证生成网格质量的同时,有效处理了复杂多边形的三角剖分问题,为3D打印中的垂直结构生成提供了可靠解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值