BambuStudio学习笔记:FlushVolCalculator类
# FlushVolCalculator 类说明
## 概述
`FlushVolCalculator` 是用于计算3D打印过程中材料切换时冲洗体积的工具类。该工具通过分析颜色变化(RGBA值)来计算所需的冲洗材料量,支持自定义最小/最大冲洗量范围和乘数调整。
## 常量说明
以下全局常量定义在 `Slic3r` 命名空间中:
| 常量名称 | 类型 | 说明 |
|----------|------|------|
| `g_min_flush_volume_from_support` | `int` | 从支撑结构切换时的最小冲洗体积 |
| `g_flush_volume_to_support` | `int` | 切换到支撑结构时的默认冲洗体积 |
| `g_max_flush_volume` | `int` | 允许的最大冲洗体积上限 |
## 类定义
```cpp
class FlushVolCalculator {
public:
    // 构造函数
    FlushVolCalculator(int min, int max, float multiplier = 1.0f);
    
    // 析构函数(默认实现)
    ~FlushVolCalculator();
    
    // 核心计算方法
    int calc_flush_vol(
        unsigned char src_a, unsigned char src_r, unsigned char src_g, unsigned char src_b,
        unsigned char dst_a, unsigned char dst_r, unsigned char dst_g, unsigned char dst_b
    );
private:
    int m_min_flush_vol;   // 最小冲洗体积
    int m_max_flush_vol;   // 最大冲洗体积
    float m_multiplier;    // 冲洗量调整乘数
};
方法详解
构造函数
FlushVolCalculator(int min, int max, float multiplier = 1.0f)
参数:
- min:计算允许的最小冲洗体积
- max:计算允许的最大冲洗体积
- multiplier:冲洗量调整系数(默认1.0)
作用:
 初始化冲洗体积计算器,设置冲洗量的有效范围和调整系数。
calc_flush_vol 方法
int calc_flush_vol(
    unsigned char src_a, unsigned char src_r, unsigned char src_g, unsigned char src_b,
    unsigned char dst_a, unsigned char dst_r, unsigned char dst_g, unsigned char dst_b
)
参数说明:
| 参数 | 类型 | 说明 | 
|---|---|---|
| src_* | unsigned char | 源颜色的RGBA分量(Alpha通道可能未使用) | 
| dst_* | unsigned char | 目标颜色的RGBA分量 | 
返回值:
 计算后的冲洗体积(单位未指定,通常为mm³或毫升)
算法逻辑:
- 根据源颜色与目标颜色的差异计算基础冲洗量
- 应用乘数调整计算结果
- 将结果钳制在 [m_min_flush_vol, m_max_flush_vol]范围内
实现要点
- 颜色差异计算:通过比较RGBA值的差异确定颜色变化程度
- 乘数应用:允许全局调整冲洗量(如耗材粘度补偿)
- 边界保护:确保计算结果在安全操作范围内
使用示例
// 创建计算器:最小50,最大500,乘数1.2
FlushVolCalculator calc(50, 500, 1.2f);
// 计算从红色(255,0,0)到蓝色(0,0,255)的冲洗量
int volume = calc.calc_flush_vol(
    255, 255,0,0,   // Source RGBA
    255, 0,0,255    // Destination RGBA
);
// 结果会被限制在50-500之间,并应用1.2倍乘数
注意事项
- Alpha通道(src_a,dst_a)可能未被实际使用
- 实际颜色差异算法需参考具体实现
- 建议通过实验校准最小/最大值和乘数参数
