Fix reload step modifiers/parts (#8083)

* FIX: reload step file not work

JIRA:STUDIO-7282

GITHUB:#4247

fix commit ed34eaa

Change-Id: Ib73654052d8f0b6b917f86a910b4f91a0198f2d4
(cherry picked from commit 387ff008c85588f8ab378ffa283f428b2ff2ec8c)
(cherry picked from commit 539dea08854673045db779332fd1c2a0d994beda)

* FIX:reload stl from disk,transformation is error

jira: STUDIO-8391
Change-Id: Ic006973fe0f2b0c0208c391d064ab373fd15a772
(cherry picked from commit b5d18d4ae7a5b1c40e728ac93a96d36dabe83d42)

---------

Co-authored-by: Mack <yongfang.bian@bambulab.com>
Co-authored-by: zhou.xu <zhou.xu@bambulab.com>
This commit is contained in:
Noisyfox 2025-01-22 10:03:32 +08:00 committed by GitHub
parent cef15842bb
commit 6cdede8e10
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -5974,6 +5974,11 @@ void Plater::priv::reload_from_disk()
}
}
if (found) break;
// BBS: step model,object loaded as a volume. GUI_ObfectList.cpp load_modifier()
if (obj->name == old_volume->name) {
new_object_idx = (int) o;
break;
}
}
}
@ -5982,22 +5987,30 @@ void Plater::priv::reload_from_disk()
continue;
}
ModelObject *new_model_object = new_model.objects[new_object_idx];
if (new_volume_idx < 0 || int(new_model_object->volumes.size()) <= new_volume_idx) {
if (int(new_model_object->volumes.size()) <= new_volume_idx) {
fail_list.push_back(from_u8(has_source ? old_volume->source.input_file : old_volume->name));
continue;
}
old_model_object->add_volume(*new_model_object->volumes[new_volume_idx]);
ModelVolume *new_volume = old_model_object->volumes.back();
ModelVolume *new_volume = nullptr;
// BBS: step model
if (new_volume_idx < 0 && new_object_idx >= 0) {
TriangleMesh mesh = new_model_object->mesh();
new_volume = old_model_object->add_volume(std::move(mesh));
new_volume->name = new_model_object->name;
new_volume->source.input_file = new_model_object->input_file;
}else {
new_volume = old_model_object->add_volume(*new_model_object->volumes[new_volume_idx]);
// new_volume = old_model_object->volumes.back();
}
new_volume->set_new_unique_id();
new_volume->config.apply(old_volume->config);
new_volume->set_type(old_volume->type());
new_volume->set_material_id(old_volume->material_id());
Transform3d transform = Transform3d::Identity();
transform.translate(new_volume->source.mesh_offset - old_volume->source.mesh_offset);
new_volume->set_transformation(old_volume->get_transformation().get_matrix() * old_volume->source.transform.get_matrix_no_offset() *
transform * new_volume->source.transform.get_matrix_no_offset().inverse());
new_volume->source.mesh_offset = old_volume->source.mesh_offset;
new_volume->set_transformation(old_volume->get_transformation());
new_volume->source.object_idx = old_volume->source.object_idx;
new_volume->source.volume_idx = old_volume->source.volume_idx;