FIX: fix color painting bugs
1. fix a crash when loading a 3mf painting with color idx larger than 15 2. fix the facets not display issue if painted with color 15 Signed-off-by: yifan.wu <yifan.wu@bambulab.com> Change-Id: Idb53b6bb2d3665412815222ab9a1d47948afed56
This commit is contained in:
parent
ad311a66d6
commit
4f44ca4117
|
@ -1427,7 +1427,7 @@ void TriangleSelector::get_facets(std::vector<indexed_triangle_set>& facets_per_
|
||||||
{
|
{
|
||||||
facets_per_type.clear();
|
facets_per_type.clear();
|
||||||
|
|
||||||
for (int type = (int)EnforcerBlockerType::NONE; type < (int)EnforcerBlockerType::Extruder15; type++) {
|
for (int type = (int)EnforcerBlockerType::NONE; type <= (int)EnforcerBlockerType::ExtruderMax; type++) {
|
||||||
facets_per_type.emplace_back();
|
facets_per_type.emplace_back();
|
||||||
indexed_triangle_set& its = facets_per_type.back();
|
indexed_triangle_set& its = facets_per_type.back();
|
||||||
std::vector<int> vertex_map(m_vertices.size(), -1);
|
std::vector<int> vertex_map(m_vertices.size(), -1);
|
||||||
|
|
|
@ -7,12 +7,10 @@
|
||||||
#include <cfloat>
|
#include <cfloat>
|
||||||
#include "Point.hpp"
|
#include "Point.hpp"
|
||||||
#include "TriangleMesh.hpp"
|
#include "TriangleMesh.hpp"
|
||||||
|
#include "libslic3r/Model.hpp"
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
|
|
||||||
enum class EnforcerBlockerType : int8_t;
|
|
||||||
|
|
||||||
|
|
||||||
// Following class holds information about selected triangles. It also has power
|
// Following class holds information about selected triangles. It also has power
|
||||||
// to recursively subdivide the triangles and make the selection finer.
|
// to recursively subdivide the triangles and make the selection finer.
|
||||||
class TriangleSelector
|
class TriangleSelector
|
||||||
|
@ -275,7 +273,7 @@ public:
|
||||||
std::pair<std::vector<std::pair<int, int>>, std::vector<bool>> serialize() const;
|
std::pair<std::vector<std::pair<int, int>>, std::vector<bool>> serialize() const;
|
||||||
|
|
||||||
// Load serialized data. Assumes that correct mesh is loaded.
|
// Load serialized data. Assumes that correct mesh is loaded.
|
||||||
void deserialize(const std::pair<std::vector<std::pair<int, int>>, std::vector<bool>>& data, bool needs_reset = true, EnforcerBlockerType max_ebt = (EnforcerBlockerType)std::numeric_limits<int8_t>::max());
|
void deserialize(const std::pair<std::vector<std::pair<int, int>>, std::vector<bool>>& data, bool needs_reset = true, EnforcerBlockerType max_ebt = EnforcerBlockerType::ExtruderMax);
|
||||||
|
|
||||||
// For all triangles, remove the flag indicating that the triangle was selected by seed fill.
|
// For all triangles, remove the flag indicating that the triangle was selected by seed fill.
|
||||||
void seed_fill_unselect_all_triangles();
|
void seed_fill_unselect_all_triangles();
|
||||||
|
|
|
@ -690,7 +690,8 @@ void GLGizmoMmuSegmentation::init_model_triangle_selectors()
|
||||||
const TriangleMesh* mesh = &mv->mesh();
|
const TriangleMesh* mesh = &mv->mesh();
|
||||||
m_triangle_selectors.emplace_back(std::make_unique<TriangleSelectorPatch>(*mesh, ebt_colors, 0.2));
|
m_triangle_selectors.emplace_back(std::make_unique<TriangleSelectorPatch>(*mesh, ebt_colors, 0.2));
|
||||||
// Reset of TriangleSelector is done inside TriangleSelectorMmGUI's constructor, so we don't need it to perform it again in deserialize().
|
// Reset of TriangleSelector is done inside TriangleSelectorMmGUI's constructor, so we don't need it to perform it again in deserialize().
|
||||||
m_triangle_selectors.back()->deserialize(mv->mmu_segmentation_facets.get_data(), false, (EnforcerBlockerType)m_extruders_colors.size());
|
EnforcerBlockerType max_ebt = (EnforcerBlockerType)std::min(m_extruders_colors.size(), (size_t)EnforcerBlockerType::ExtruderMax);
|
||||||
|
m_triangle_selectors.back()->deserialize(mv->mmu_segmentation_facets.get_data(), false, max_ebt);
|
||||||
m_triangle_selectors.back()->request_update_render_data();
|
m_triangle_selectors.back()->request_update_render_data();
|
||||||
m_volumes_extruder_idxs.push_back(mv->extruder_id());
|
m_volumes_extruder_idxs.push_back(mv->extruder_id());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue