FIX: error speed while flush to infill
Jira: 10094 Signed-off-by: qing.zhang <qing.zhang@bambulab.com> Change-Id: I335d664fd28355cfeadd42be52f8c646f249eab0
This commit is contained in:
parent
faec4160d5
commit
c0a2982c79
|
@ -169,8 +169,12 @@ public:
|
|||
virtual CustomizeFlag get_customize_flag() const { return m_customize_flag; };
|
||||
virtual void set_customize_flag(CustomizeFlag flag) { m_customize_flag = flag; };
|
||||
|
||||
virtual int get_cooling_node() const { return m_cooling_node; };
|
||||
virtual void set_cooling_node(int id) { m_cooling_node = id; };
|
||||
|
||||
protected:
|
||||
CustomizeFlag m_customize_flag{CustomizeFlag::cfNone};
|
||||
int m_cooling_node{ -1 };
|
||||
};
|
||||
|
||||
typedef std::vector<ExtrusionEntity*> ExtrusionEntitiesPtr;
|
||||
|
|
|
@ -3956,15 +3956,6 @@ GCode::LayerResult GCode::process_layer(
|
|||
if (islands[island_idx].by_region.empty())
|
||||
islands[island_idx].by_region.assign(print.num_print_regions(), ObjectByExtruder::Island::Region());
|
||||
islands[island_idx].by_region[region.print_region_id()].append(entity_type, extrusions, entity_overrides);
|
||||
int start = extrusions->loop_node_range.first;
|
||||
int end = extrusions->loop_node_range.second;
|
||||
//BBS: add merged node infor
|
||||
if (!is_infill) {
|
||||
for (; start < end; ++start) {
|
||||
const LoopNode *node = &layer.loop_nodes[start];
|
||||
islands[island_idx].by_region[region.print_region_id()].merged_node.emplace_back(node);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -4826,12 +4817,12 @@ std::string GCode::extrude_perimeters(const Print &print, const std::vector<Obje
|
|||
|
||||
// BBS: output merged node id
|
||||
int curr_node=0;
|
||||
|
||||
int cooling_node = -1;
|
||||
for (size_t perimeter_idx = 0; perimeter_idx < region.perimeters.size(); ++perimeter_idx) {
|
||||
const ExtrusionEntity *ee = region.perimeters[perimeter_idx];
|
||||
if (curr_node < region.merged_node.size() && perimeter_idx == region.merged_node[curr_node]->loop_id) {
|
||||
gcode += "; COOLING_NODE: " + std::to_string(region.merged_node[curr_node]->merged_id) + "\n";
|
||||
curr_node++;
|
||||
int ee_node_id = ee->get_cooling_node();
|
||||
if (ee_node_id != cooling_node) {
|
||||
gcode += "; COOLING_NODE: " + std::to_string(ee_node_id) + "\n";
|
||||
}
|
||||
|
||||
gcode += this->extrude_entity(*ee, "perimeter", -1.);
|
||||
|
|
|
@ -413,7 +413,6 @@ private:
|
|||
ExtrusionEntitiesPtr perimeters;
|
||||
// Non-owned references to LayerRegion::fills::entities
|
||||
ExtrusionEntitiesPtr infills;
|
||||
std::vector<const LoopNode*> merged_node;
|
||||
std::vector<const WipingExtrusions::ExtruderPerCopy*> infills_overrides;
|
||||
std::vector<const WipingExtrusions::ExtruderPerCopy*> perimeters_overrides;
|
||||
|
||||
|
|
|
@ -385,6 +385,32 @@ void Layer::calculate_perimeter_continuity(std::vector<LoopNode> &prev_nodes) {
|
|||
|
||||
}
|
||||
|
||||
void Layer::recrod_cooling_node_for_each_extrusion() {
|
||||
for (LayerRegion *region : this->regions()) {
|
||||
for (int extrusion_idx = 0; extrusion_idx < region->perimeters.entities.size(); extrusion_idx++) {
|
||||
const auto *extrusions = static_cast<const ExtrusionEntityCollection *>(region->perimeters.entities[extrusion_idx]);
|
||||
int start = extrusions->loop_node_range.first;
|
||||
int end = extrusions->loop_node_range.second;
|
||||
if (start >= end)
|
||||
continue;
|
||||
|
||||
int cooling_node = this->loop_nodes[start].merged_id;
|
||||
int pos = this->loop_nodes[start].loop_id;
|
||||
int next_pos = start + 1 < end ? this->loop_nodes[start + 1].loop_id : -1;
|
||||
for (int idx = 0; idx < extrusions->entities.size(); idx++) {
|
||||
if (idx == next_pos && next_pos > 0) {
|
||||
start++;
|
||||
cooling_node = this->loop_nodes[start].merged_id;
|
||||
next_pos = start + 1 < end ? this->loop_nodes[start + 1].loop_id : -1;
|
||||
}
|
||||
|
||||
extrusions->entities[idx]->set_cooling_node(cooling_node);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Layer::export_region_slices_to_svg(const char *path) const
|
||||
{
|
||||
BoundingBox bbox;
|
||||
|
|
|
@ -185,7 +185,7 @@ public:
|
|||
void make_perimeters(const AutoContourHolesCompensationParams &auto_contour_holes_compensation_params);
|
||||
//BBS
|
||||
void calculate_perimeter_continuity(std::vector<LoopNode> &prev_nodes);
|
||||
|
||||
void recrod_cooling_node_for_each_extrusion();
|
||||
// Phony version of make_fills() without parameters for Perl integration only.
|
||||
void make_fills() { this->make_fills(nullptr, nullptr); }
|
||||
void make_fills(FillAdaptive::Octree* adaptive_fill_octree, FillAdaptive::Octree* support_fill_octree, FillLightning::Generator* lightning_generator = nullptr);
|
||||
|
|
|
@ -459,6 +459,22 @@ void PrintObject::make_perimeters(const AutoContourHolesCompensationParams &auto
|
|||
}
|
||||
m_print->throw_if_canceled();
|
||||
BOOST_LOG_TRIVIAL(debug) << "Calculating cooling nodes - end";
|
||||
|
||||
|
||||
//write merged node to each perimeter
|
||||
BOOST_LOG_TRIVIAL(debug) << "Recrod cooling_node id for each extrusion in parallel - start";
|
||||
tbb::parallel_for(tbb::blocked_range<size_t>(0, m_layers.size()), [this](const tbb::blocked_range<size_t> &range) {
|
||||
for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) {
|
||||
m_print->throw_if_canceled();
|
||||
if (layer_idx > 1) {
|
||||
Layer &prev_layer = *m_layers[layer_idx - 1];
|
||||
m_layers[layer_idx]->recrod_cooling_node_for_each_extrusion();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
m_print->throw_if_canceled();
|
||||
BOOST_LOG_TRIVIAL(debug) << "Recrod cooling_node id for each extrusion in parallel - end";
|
||||
}
|
||||
this->set_done(posPerimeters);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue