mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-06-15 16:33:10 +00:00
FIX: display the minimum flush data
1. Use the minimum flush between nozzle volume and flush in datalist 2. Add a new param to decide the datalist to use github:7445 Signed-off-by: xun.zhang <xun.zhang@bambulab.com> Change-Id: Id87c98ca5069e7b328974d641d7a81dfbf9c50a0 (cherry picked from commit 2be29b784727330732170b5c2ff0ba9d5e79d82f)
This commit is contained in:
@@ -214,6 +214,8 @@ wxString WipingDialog::BuildTableObjStr()
|
||||
auto flush_multiplier = full_config.option<ConfigOptionFloats>("flush_multiplier")->values;
|
||||
int nozzle_num = full_config.option<ConfigOptionFloatsNullable>("nozzle_diameter")->values.size();
|
||||
auto raw_matrix_data = full_config.option<ConfigOptionFloats>("flush_volumes_matrix")->values;
|
||||
auto nozzle_flush_dataset = full_config.option<ConfigOptionIntsNullable>("nozzle_flush_dataset")->values;
|
||||
|
||||
std::vector<std::vector<double>> flush_matrixs;
|
||||
for (int idx = 0; idx < nozzle_num; ++idx) {
|
||||
flush_matrixs.emplace_back(get_flush_volumes_matrix(raw_matrix_data, idx, nozzle_num));
|
||||
@@ -239,7 +241,10 @@ wxString WipingDialog::BuildTableObjStr()
|
||||
}
|
||||
|
||||
for (int idx = 0; idx < nozzle_num; ++idx) {
|
||||
obj["min_flush_volumes"].push_back(0);
|
||||
int min_flush_from_nozzle_volume = *min_element(m_extra_flush_volume[idx].begin(), m_extra_flush_volume[idx].end());
|
||||
GenericFlushPredictor pd(nozzle_flush_dataset[idx]);
|
||||
int min_flush_from_flush_data = pd.get_min_flush_volume();
|
||||
obj["min_flush_volumes"].push_back(std::min(min_flush_from_flush_data,min_flush_from_nozzle_volume));
|
||||
obj["max_flush_volumes"].push_back(m_max_flush_volume);
|
||||
}
|
||||
|
||||
@@ -421,9 +426,9 @@ WipingDialog::WipingDialog(wxWindow* parent, const std::vector<std::vector<int>>
|
||||
}
|
||||
|
||||
|
||||
int WipingDialog::CalcFlushingVolume(const wxColour& from, const wxColour& to, int min_flush_volume ,bool is_multi_extruder, NozzleVolumeType volume_type)
|
||||
int WipingDialog::CalcFlushingVolume(const wxColour& from, const wxColour& to, int min_flush_volume , int nozzle_flush_dataset)
|
||||
{
|
||||
Slic3r::FlushVolCalculator calculator(min_flush_volume, Slic3r::g_max_flush_volume, is_multi_extruder, volume_type);
|
||||
Slic3r::FlushVolCalculator calculator(min_flush_volume, Slic3r::g_max_flush_volume, nozzle_flush_dataset);
|
||||
return calculator.calc_flush_vol(from.Alpha(), from.Red(), from.Green(), from.Blue(), to.Alpha(), to.Red(), to.Green(), to.Blue());
|
||||
}
|
||||
|
||||
@@ -439,8 +444,7 @@ WipingDialog::VolumeMatrix WipingDialog::CalcFlushingVolumes(int extruder_id)
|
||||
for (auto color_str : filament_color_strs)
|
||||
filament_colors.emplace_back(color_str);
|
||||
|
||||
NozzleVolumeType volume_type = NozzleVolumeType(full_config.option<ConfigOptionEnumsGeneric>("nozzle_volume_type")->values[extruder_id]);
|
||||
bool is_multi_extruder = preset_bundle->get_printer_extruder_count() > 1;
|
||||
int flush_dataset_value = full_config.option<ConfigOptionIntsNullable>("nozzle_flush_dataset")->values[extruder_id];
|
||||
// Support for multi-color filament
|
||||
for (int i = 0; i < filament_colors.size(); ++i) {
|
||||
std::vector<wxColour> single_filament;
|
||||
@@ -480,7 +484,7 @@ WipingDialog::VolumeMatrix WipingDialog::CalcFlushingVolumes(int extruder_id)
|
||||
const wxColour& from = multi_colors[from_idx][i];
|
||||
for (int j = 0; j < multi_colors[to_idx].size(); ++j) {
|
||||
const wxColour& to = multi_colors[to_idx][j];
|
||||
int volume = CalcFlushingVolume(from, to, m_extra_flush_volume[extruder_id][from_idx], is_multi_extruder, volume_type);
|
||||
int volume = CalcFlushingVolume(from, to, m_extra_flush_volume[extruder_id][from_idx], flush_dataset_value);
|
||||
flushing_volume = std::max(flushing_volume, volume);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user