ENH: sync some change in gcode viewer
Improve the loading speed of gcode preview Signed-off-by: salt.wei <salt.wei@bambulab.com> Change-Id: I9cf4b32f10753e1bc1d9b109557b995d5f3fd549
This commit is contained in:
parent
3291a452da
commit
3d48e2dc55
|
@ -2451,14 +2451,14 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result, const
|
||||||
std::vector<float> options_zs;
|
std::vector<float> options_zs;
|
||||||
|
|
||||||
size_t seams_count = 0;
|
size_t seams_count = 0;
|
||||||
std::vector<size_t> seams_ids;
|
std::vector<size_t> biased_seams_ids;
|
||||||
|
|
||||||
// toolpaths data -> extract vertices from result
|
// toolpaths data -> extract vertices from result
|
||||||
for (size_t i = 0; i < m_moves_count; ++i) {
|
for (size_t i = 0; i < m_moves_count; ++i) {
|
||||||
const GCodeProcessorResult::MoveVertex& curr = gcode_result.moves[i];
|
const GCodeProcessorResult::MoveVertex& curr = gcode_result.moves[i];
|
||||||
if (curr.type == EMoveType::Seam) {
|
if (curr.type == EMoveType::Seam) {
|
||||||
++seams_count;
|
++seams_count;
|
||||||
seams_ids.push_back(i);
|
biased_seams_ids.push_back(i - biased_seams_ids.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t move_id = i - seams_count;
|
size_t move_id = i - seams_count;
|
||||||
|
@ -2548,17 +2548,23 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result, const
|
||||||
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(":b=%1%, vertex buffer count %2%\n")
|
BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(":b=%1%, vertex buffer count %2%\n")
|
||||||
%b %v_multibuffer.size();
|
%b %v_multibuffer.size();
|
||||||
}*/
|
}*/
|
||||||
auto extract_move_id = [&seams_ids](size_t id) {
|
auto extract_move_id = [&biased_seams_ids](size_t id) {
|
||||||
for (int i = seams_ids.size() - 1; i >= 0; --i) {
|
size_t new_id = size_t(-1);
|
||||||
if (seams_ids[i] < id + i + 1)
|
auto it = std::lower_bound(biased_seams_ids.begin(), biased_seams_ids.end(), id);
|
||||||
return id + (size_t)i + 1;
|
if (it == biased_seams_ids.end())
|
||||||
}
|
new_id = id + biased_seams_ids.size();
|
||||||
return id;
|
else {
|
||||||
|
if (it == biased_seams_ids.begin() && *it < id)
|
||||||
|
new_id = id;
|
||||||
|
else if (it != biased_seams_ids.begin())
|
||||||
|
new_id = id + std::distance(biased_seams_ids.begin(), it);
|
||||||
|
}
|
||||||
|
return (new_id == size_t(-1)) ? id : new_id;
|
||||||
};
|
};
|
||||||
//BBS: generate map from ssid to move id in advance to reduce computation
|
//BBS: generate map from ssid to move id in advance to reduce computation
|
||||||
m_ssid_to_moveid_map.clear();
|
m_ssid_to_moveid_map.clear();
|
||||||
m_ssid_to_moveid_map.reserve( m_moves_count - seams_ids.size());
|
m_ssid_to_moveid_map.reserve( m_moves_count - biased_seams_ids.size());
|
||||||
for (size_t i = 0; i < m_moves_count - seams_ids.size(); i++)
|
for (size_t i = 0; i < m_moves_count - biased_seams_ids.size(); i++)
|
||||||
m_ssid_to_moveid_map.push_back(extract_move_id(i));
|
m_ssid_to_moveid_map.push_back(extract_move_id(i));
|
||||||
|
|
||||||
//BBS: smooth toolpaths corners for the given TBuffer using triangles
|
//BBS: smooth toolpaths corners for the given TBuffer using triangles
|
||||||
|
@ -2760,7 +2766,7 @@ void GCodeViewer::load_toolpaths(const GCodeProcessorResult& gcode_result, const
|
||||||
}
|
}
|
||||||
|
|
||||||
// dismiss, no more needed
|
// dismiss, no more needed
|
||||||
std::vector<size_t>().swap(seams_ids);
|
std::vector<size_t>().swap(biased_seams_ids);
|
||||||
|
|
||||||
for (MultiVertexBuffer& v_multibuffer : vertices) {
|
for (MultiVertexBuffer& v_multibuffer : vertices) {
|
||||||
for (VertexBuffer& v_buffer : v_multibuffer) {
|
for (VertexBuffer& v_buffer : v_multibuffer) {
|
||||||
|
@ -4828,10 +4834,8 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv
|
||||||
PartialTimes items;
|
PartialTimes items;
|
||||||
|
|
||||||
std::vector<CustomGCode::Item> custom_gcode_per_print_z = wxGetApp().is_editor() ? wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes : m_custom_gcode_per_print_z;
|
std::vector<CustomGCode::Item> custom_gcode_per_print_z = wxGetApp().is_editor() ? wxGetApp().plater()->model().custom_gcode_per_print_z.gcodes : m_custom_gcode_per_print_z;
|
||||||
// BBS
|
std::vector<Color> last_color(m_extruders_count);
|
||||||
int extruders_count = wxGetApp().filaments_cnt();
|
for (size_t i = 0; i < m_extruders_count; ++i) {
|
||||||
std::vector<Color> last_color(extruders_count);
|
|
||||||
for (int i = 0; i < extruders_count; ++i) {
|
|
||||||
last_color[i] = m_tools.m_tool_colors[i];
|
last_color[i] = m_tools.m_tool_colors[i];
|
||||||
}
|
}
|
||||||
int last_extruder_id = 1;
|
int last_extruder_id = 1;
|
||||||
|
|
|
@ -466,9 +466,8 @@ class GCodeViewer
|
||||||
size_t first{ 0 };
|
size_t first{ 0 };
|
||||||
size_t last{ 0 };
|
size_t last{ 0 };
|
||||||
|
|
||||||
bool operator == (const Endpoints& other) const {
|
bool operator == (const Endpoints& other) const { return first == other.first && last == other.last; }
|
||||||
return first == other.first && last == other.last;
|
bool operator != (const Endpoints& other) const { return !operator==(other); }
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -497,9 +496,8 @@ class GCodeViewer
|
||||||
bool operator != (const Layers& other) const {
|
bool operator != (const Layers& other) const {
|
||||||
if (m_zs != other.m_zs)
|
if (m_zs != other.m_zs)
|
||||||
return true;
|
return true;
|
||||||
if (!(m_endpoints == other.m_endpoints))
|
if (m_endpoints != other.m_endpoints)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue