CLI: Fixed a cut function

This commit is contained in:
YuSanka 2025-01-06 23:08:46 +01:00 committed by Lukas Matena
parent 1f55b1ad79
commit c264a216c0

View File

@ -159,17 +159,22 @@ bool process_transform(Data& cli, const DynamicPrintConfig& print_config, std::v
if (transform.has("cut")) { if (transform.has("cut")) {
std::vector<Model> new_models; std::vector<Model> new_models;
const Vec3d plane_center = transform.opt_float("cut") * Vec3d::UnitZ();
for (auto& model : models) { for (auto& model : models) {
Model new_model;
model.translate(0, 0, -model.bounding_box_exact().min.z()); // align to z = 0 model.translate(0, 0, -model.bounding_box_exact().min.z()); // align to z = 0
size_t num_objects = model.objects.size(); size_t num_objects = model.objects.size();
for (size_t i = 0; i < num_objects; ++i) { for (size_t i = 0; i < num_objects; ++i) {
Cut cut(model.objects.front(), 0, Geometry::translation_transform(transform.opt_float("cut") * Vec3d::UnitZ()), ModelObject* mo = model.objects.front();
const Vec3d cut_center_offset = plane_center - mo->instances[0]->get_offset();
Cut cut(mo, 0, Geometry::translation_transform(cut_center_offset),
ModelObjectCutAttribute::KeepLower | ModelObjectCutAttribute::KeepUpper | ModelObjectCutAttribute::PlaceOnCutUpper); ModelObjectCutAttribute::KeepLower | ModelObjectCutAttribute::KeepUpper | ModelObjectCutAttribute::PlaceOnCutUpper);
auto cut_objects = cut.perform_with_plane(); auto cut_objects = cut.perform_with_plane();
for (ModelObject* obj : cut_objects) for (ModelObject* obj : cut_objects)
model.add_object(*obj); new_model.add_object(*obj);
model.delete_object(size_t(0)); model.delete_object(size_t(0));
} }
new_models.push_back(new_model);
} }
// TODO: copy less stuff around using pointers // TODO: copy less stuff around using pointers