FIX:fix obj import crash

jira: github 6333
Change-Id: I3df9edce95b24751f39bcdcbe75e7050fede68a1
(cherry picked from commit 46678882ed2630f3e4593fa4176cec64e8e5ed13)
This commit is contained in:
zhou.xu 2025-03-31 19:18:42 +08:00 committed by lane.wei
parent a52a466e80
commit cb5ac14fd3
2 changed files with 24 additions and 8 deletions

View File

@ -49,8 +49,9 @@
namespace Slic3r {
const std::vector<std::string> CONST_FILAMENTS = {
"", "4", "8", "0C", "1C", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "AC", "BC", "CC", "DC",
}; // 5 10 15 16
"", "4", "8", "0C", "1C", "2C", "3C", "4C", "5C", "6C", "7C", "8C", "9C", "AC", "BC", "CC","DC",//16
"EC", "0FC", "1FC", "2FC", "3FC", "4FC", "5FC", "6FC", "7FC", "8FC", "9FC", "AFC", "BFC", "CFC", "DFC", "EFC",//32
}; // 1 5 10 15 16
// BBS initialization of static variables
std::map<size_t, ExtruderParams> Model::extruderParamsMap = { {0,{"",0,0}}};
GlobalSpeedMap Model::printSpeedMap{};
@ -3629,6 +3630,7 @@ static void get_real_filament_id(const unsigned char &id, std::string &result) {
if (id < CONST_FILAMENTS.size()) {
result = CONST_FILAMENTS[id];
} else {
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "check error:CONST_FILAMENTS out of array ";
result = "";//error
}
};

View File

@ -1680,9 +1680,9 @@ std::pair<std::vector<std::pair<int, int>>, std::vector<bool>> TriangleSelector:
if (n >= 3) {
data.second.insert(data.second.end(), {true, true});
n -= 3;
while (n >= 16) {
while (n >= 15) {
data.second.insert(data.second.end(), {true, true, true, true});
n -= 16;
n -= 15;
}
for (size_t bit_idx = 0; bit_idx < 4; ++bit_idx)
@ -1771,7 +1771,7 @@ void TriangleSelector::deserialize(const std::pair<std::vector<std::pair<int, in
num++;
next_code = next_nibble();
}
state = EnforcerBlockerType(next_code + 16 * num + (code >> 2));
state = EnforcerBlockerType(next_code + 15 * num + 3);//old:next_nibble() + 3;
}
else {
state = EnforcerBlockerType(code >> 2);
@ -1871,9 +1871,23 @@ bool TriangleSelector::has_facets(const std::pair<std::vector<std::pair<int, int
auto num_children_or_state = [&next_nibble]() -> int {
int code = next_nibble();
int num_of_split_sides = code & 0b11;
return num_of_split_sides == 0 ?
((code & 0b1100) == 0b1100 ? next_nibble() + 3 : code >> 2) :
- num_of_split_sides - 1;
if (num_of_split_sides == 0) {
int state = 0;
if ((code & 0b1100) == 0b1100) {
int next_code = next_nibble();
int num = 0;
while (next_code == 0b1111) {
num++;
next_code = next_nibble();
}
state = next_code + 15 * num + 3; // old:next_nibble() + 3;
} else {
state = code >> 2;
}
return state;
} else {
return -num_of_split_sides - 1;// < 0 -> negative of a number of children
}
};
int state = num_children_or_state();