# 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; 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; 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
Model Model::read_from_file(const std::string& filename) {
}
数据结构关系
使用示例
创建简单模型
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);
}
性能注意事项
- 大模型处理:使用
raw_mesh()
获取未变换网格提升计算效率 - 内存优化:共享
TriangleMesh
指针减少内存复制 - 批量操作:优先使用
transform_mesh()
替代逐顶点计算 - 缓存机制:利用
bounding_box_valid
标志避免重复计算 - 多线程安全:避免同时修改同一对象的几何属性