当前位置: 首页 > news >正文

BambuStudio学习笔记:Model

# Model.hpp 核心模型结构说明

## 文件概述
该头文件定义了3D打印数据处理的核心数据结构,包含模型对象、体积、实例、材料等关键类。主要功能包括:
- 三维模型数据存储与管理
- 模型变换操作(平移/旋转/缩放)
- 打印参数配置
- 多材料支持
- 支撑结构处理

## 核心类结构

### Model (顶层模型容器)
```cpp
class Model : public ObjectBase {
    ModelMaterialMap materials;     // 材料集合
    ModelObjectPtrs objects;       // 模型对象集合
    ModelWipeTower wipe_tower;     // 擦料塔配置
    // ... 其他成员
};

ModelObject (可打印对象)

class ModelObject : public ObjectBase {
    std::string name;              // 对象名称
    ModelVolumePtrs volumes;       // 体积组件集合
    ModelInstancePtrs instances;   // 实例集合
    ModelConfigObject config;      // 对象级配置
    // ... 变换操作方法
};

ModelVolume (体积组件)

class ModelVolume : public ObjectBase {
    enum class ModelVolumeType {
        MODEL_PART,         // 主体模型
        NEGATIVE_VOLUME,    // 负空间
        SUPPORT_ENFORCER,    // 强制支撑
        SUPPORT_BLOCKER     // 支撑阻挡
    };
    
    TriangleMesh mesh;        // 三角网格数据
    ModelVolumeType type;     // 体积类型
    // ... 几何变换方法
};

ModelInstance (对象实例)

class ModelInstance : public ObjectBase {
    Geometry::Transformation transform;  // 几何变换
    ModelObject* object;                 // 所属对象
    // ... 实例操作方法
};

关键功能详解

几何变换系统

// 通用变换参数结构
struct Transformation {
    Vec3d offset;       // 位移 (mm)
    Vec3d rotation;     // 旋转角度 (弧度)
    Vec3d scaling;      // 缩放系数
    Vec3d mirror;       // 镜像轴
};

// 应用变换矩阵示例
void ModelVolume::transform_mesh(TriangleMesh* mesh) {
    // 应用当前变换到指定网格
}

支撑结构处理

// 支撑点数据结构
struct SupportPoint {
    Vec3f position;     // 坐标位置
    float head_diameter; // 支撑头直径
};

// 支撑点处理流程
void ModelObject::process_supports() {
    // 生成支撑结构网格
    // 应用支撑参数配置
}

打印参数配置

// 分层配置结构
class LayerConfig {
    double layer_height;    // 层高 (mm)
    int extruder_id;        // 使用喷头编号
    double temperature;     // 打印温度
};

// 对象级配置继承关系
ModelConfigObject -> ModelConfig -> DynamicPrintConfig

重要枚举类型

体积类型

enum ModelVolumeType {
    MODEL_PART,         // 主体模型部分
    NEGATIVE_VOLUME,    // 负空间体积
    PARAMETER_MODIFIER, // 参数修改器
    SUPPORT_ENFORCER,   // 强制支撑区域
    SUPPORT_BLOCKER     // 支撑阻挡区域
};

实例打印状态

enum ModelInstanceEPrintVolumeState {
    INSIDE,         // 完全在打印床内
    PARTLY_OUTSIDE, // 部分超出
    FULLY_OUTSIDE   // 完全超出
};

核心方法速查

模型操作

方法功能
Model::add_object()创建新模型对象
ModelObject::add_volume()添加体积组件
ModelInstance::apply_transform()应用变换矩阵

几何计算

方法描述
bounding_box()计算对象包围盒
convex_hull_2d()生成2D投影凸包
mesh()获取三角网格数据

文件IO

// 3MF文件读写
Model Model::read_from_file(const std::string& filename) {
    // 解析3MF文件结构
    // 加载网格数据
    // 重建对象层次
}

数据结构关系

Model
ModelObject
ModelVolume
ModelInstance
ModelMaterial
TriangleMesh
Transformation

使用示例

创建简单模型

// 初始化模型容器
Model model;

// 创建新对象
ModelObject* obj = model.add_object();
obj->name = "Cube";

// 添加立方体体积
ModelVolume* vol = obj->add_volume(TriangleMesh::make_cube(10,10,10));
vol->set_type(ModelVolumeType::MODEL_PART);

// 添加实例并设置位置
ModelInstance* inst = obj->add_instance();
inst->set_offset(Vec3d(20, 20, 0));

执行模型切割

// 定义切割平面
std::array<Vec3d, 4> plane_points = {...};

// 执行切割操作
ModelObjectPtrs cut_objects = original_obj->cut(0, plane_points);
for (auto* obj : cut_objects) {
    model.add_object(obj);
}

性能注意事项

  1. 大模型处理:使用raw_mesh()获取未变换网格提升计算效率
  2. 内存优化:共享TriangleMesh指针减少内存复制
  3. 批量操作:优先使用transform_mesh()替代逐顶点计算
  4. 缓存机制:利用bounding_box_valid标志避免重复计算
  5. 多线程安全:避免同时修改同一对象的几何属性

相关文章:

  • postgresql 15.2 用pgbackup搭建备库后,主从复制一直无法启动
  • 从0到1入门Docker
  • word毕业论文“et al.”替换为“等”——宏
  • 爱迪斯通科技携手北京晨光溢海参展2025年北京教育装备展
  • MySQL:MySQL库和表的基本操作
  • Vue Amazing UI插件推荐
  • 【二分算法】-- x的平⽅根(easy)
  • @ComponentScan和@SpringBootApplication的scanBasePackages 同时使用
  • 面试模拟舱Pro:AI赋能的求职训练革命
  • DICOM Query/Retrieve(QR)详解与实现
  • 【Java】反射与动态代理篇
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_03可调整列宽的固定表头表格
  • 机器学习与深度学习算法及工具在图像分类中的应用总结
  • 移动Android和IOS自动化中常见问题
  • NPM安装与配置全流程详解(2025最新版)
  • Nginx的流式响应配置详解
  • 【每日学点HarmonyOS Next知识】状态变量、动画UI残留、Tab控件显示、ob前缀问题、文字背景拉伸
  • 【网络编程】HTTP网络编程
  • 前后端+数据库的项目实战--学生信息管理系统-易
  • Cesium 入门教程(基于 vue3)
  • 博物馆日|为一个展奔赴一座城!上海171家博物馆等你来
  • 上海一保租房社区亮相,首批546套房源可拎包入住
  • 我使馆就中国公民和企业遭不公正待遇向菲方持续提出严正交涉
  • 上海国际碳中和博览会下月举办,首次打造民营经济专区
  • 美国务卿会见叙利亚外长,沙特等国表示将支持叙利亚重建
  • 竞彩湃|欧联杯决赛前,曼联、热刺继续划水?