# SlicingAdaptive.hpp 头文件解析
## 功能概述
本头文件实现自适应层高调整算法,根据模型几何特征动态优化层高分布,平衡打印质量与效率。核心功能包括模型面数据预处理、层高动态计算和水平面距离检测。
## 核心类结构
### SlicingAdaptive 类
```cpp
class SlicingAdaptive {
public:
void clear(); // 重置内部状态
void set_slicing_parameters(SlicingParameters params); // 设置基础切片参数
void prepare(const ModelObject &object); // 预处理模型几何数据
float next_layer_height(float print_z, float quality, size_t ¤t_facet); // 计算下一层高度
float horizontal_facet_distance(float z); // 检测最近水平面距离
protected:
SlicingParameters m_slicing_params; // 层高限制参数
std::vector<FaceZ> m_faces; // 模型面几何数据
};
FaceZ 结构体
struct FaceZ {
std::pair<float, float> z_span; // 面在Z轴的[min, max]范围
float n_cos; // 法向量与Z轴夹角的余弦值
float n_sin; // 法向量与Z轴夹角的正弦值
};
关键算法流程
自适应层高计算流程
核心方法详解
prepare 预处理
- 遍历模型面片:提取每个三角面片的几何数据
- 计算Z范围:记录每个面在Z轴的最小/最大值
- 法向量分析:
n_cos = normal.z(); // 法向量Z分量即cosθ n_sin = sqrt(1 - n_cos*n_cos); // sinθ计算
next_layer_height 动态计算
参数 | 作用 |
---|---|
print_z | 当前打印高度 |
quality | 质量系数(0-1) 0=高精度 |
current_facet | 当前处理面索引 |
计算步骤:
- 根据quality参数在层高范围内插值
target_height = min + (max - min) * quality
- 检测当前高度区域的面倾斜程度
- 调整层高:
- 陡峭面(n_sin大)→ 减小层高
- 平坦面(n_sin小)→ 增大层高
horizontal_facet_distance 水平检测
- 功能:寻找z位置上方最近的水平面
- 应用场景:防止跨越重要水平特征
性能优化策略
数据结构优化
- 空间索引:按Z轴排序面数据,加速范围查询
- 缓存机制:存储最近访问面索引(current_facet)
计算加速
// 示例代码片段:快速跳过无关面片
for (; current_facet < m_faces.size(); ++current_facet) {
if (m_faces[current_facet].z_span.second > z)
break;
}
质量参数影响曲线
{
"$schema": "https://vega.github.io/schema/vega-lite/v5.json",
"description": "层高质量参数影响曲线",
"data": {
"values": [
{"quality": 0, "height": 0.05},
{"quality": 0.5, "height": 0.15},
{"quality": 1, "height": 0.3}
]
},
"mark": "line",
"encoding": {
"x": {"field": "quality", "type": "quantitative"},
"y": {"field": "height", "type": "quantitative"}
}
}
应用场景
典型工作流程
- 用户导入3D模型
- 设置基础层高参数(0.1-0.3mm)
- 选择质量偏好(滑块调节)
- 引擎生成自适应层高曲线
- 实时预览层高分布
设计亮点
动态权衡机制
• 质量系数:将用户输入转化为数学参数
• 几何敏感度:法向量分析精准捕捉表面特征
高效处理
• 预处理优化:模型数据仅解析一次
• 增量计算:利用current_facet保持遍历状态
本模块通过智能几何分析实现层高动态优化,在保证打印精度的同时最大化打印效率,是复杂模型高质量快速打印的核心算法支撑。