FIX:add error deal:mtl file lost some material

jira: github 5687
Change-Id: I2394d27b027cfe34ac3cb260735aceaee65ff6d9
(cherry picked from commit 58f9c7d0b2800c4b8b67991f5d3e43d57a6cd1eb)
This commit is contained in:
zhou.xu
2025-01-06 10:19:20 +08:00
committed by Noisyfox
parent e36e7089eb
commit 3e9a8b8b3a
7 changed files with 88 additions and 30 deletions

View File

@@ -170,6 +170,11 @@ bool load_obj(const char *path, TriangleMesh *meshptr, ObjInfo& obj_info, std::s
}
obj_info.face_colors.emplace_back(face_color);
}
else {
if (obj_info.lost_material_name.empty()) {
obj_info.lost_material_name = mtl_name;
}
}
};
auto set_face_color_by_mtl = [&data, &set_face_color](int face_index) {
if (data.usemtls.size() == 1) {

View File

@@ -12,6 +12,7 @@ struct ObjInfo {
std::vector<RGBA> vertex_colors;
std::vector<RGBA> face_colors;
bool is_single_mtl{false};
std::string lost_material_name{""};
std::vector<std::array<Vec2f,3>> uvs;
std::string obj_dircetory;
std::map<std::string,bool> pngs;
@@ -28,6 +29,7 @@ struct ObjDialogInOut
unsigned char first_extruder_id;
bool deal_vertex_color;
Model * model{nullptr};
std::string lost_material_name{""};
};
typedef std::function<void(ObjDialogInOut &in_out)> ObjImportColorFn;
extern bool load_obj(const char *path, TriangleMesh *mesh, ObjInfo &vertex_colors, std::string &message);

View File

@@ -272,6 +272,7 @@ Model Model::read_from_file(const std::string&
if (result){
ObjDialogInOut in_out;
in_out.model = &model;
in_out.lost_material_name = obj_info.lost_material_name;
if (obj_info.vertex_colors.size() > 0) {
if (objFn) { // 1.result is ok and pop up a dialog
in_out.input_colors = std::move(obj_info.vertex_colors);
@@ -3091,7 +3092,9 @@ bool Model::obj_import_face_color_deal(const std::vector<unsigned char> &face_fi
auto face_count = volume->mesh().its.indices.size();
volume->mmu_segmentation_facets.reset();
volume->mmu_segmentation_facets.reserve(face_count);
if (volume->mesh().its.indices.size() != face_filament_ids.size()) { return false; }
if (volume->mesh().its.indices.size() != face_filament_ids.size()) {
return false;
}
for (size_t i = 0; i < volume->mesh().its.indices.size(); i++) {
auto face = volume->mesh().its.indices[i];
auto filament_id = face_filament_ids[i];