diff --git a/src/BambuStudio.cpp b/src/BambuStudio.cpp index d372346e29..5933f6047f 100644 --- a/src/BambuStudio.cpp +++ b/src/BambuStudio.cpp @@ -1912,8 +1912,7 @@ int CLI::run(int argc, char **argv) outfile = outfile_final; }*/ // Run the post-processing scripts if defined. - //BBS: TODO, maybe need to open this function later - //run_post_process_scripts(outfile, print->full_print_config()); + run_post_process_scripts(outfile, print->full_print_config()); BOOST_LOG_TRIVIAL(info) << "Slicing result exported to " << outfile << std::endl; part_plate->update_slice_result_valid_state(true); #if defined(__linux__) || defined(__LINUX__) diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index 879b6810c4..b8cd820810 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -749,7 +749,7 @@ static std::vector s_Preset_print_options { "wall_generator", "wall_transition_length", "wall_transition_filter_deviation", "wall_transition_angle", "wall_distribution_count", "min_feature_size", "min_bead_width", // SoftFever - "small_perimeter_speed", "small_perimeter_threshold","bridge_angle", "filter_out_gap_fill", "travel_acceleration","inner_wall_acceleration", + "small_perimeter_speed", "small_perimeter_threshold","bridge_angle", "filter_out_gap_fill", "post_process", "travel_acceleration","inner_wall_acceleration", "default_jerk", "outer_wall_jerk", "inner_wall_jerk", "top_surface_jerk", "initial_layer_jerk","travel_jerk", "top_solid_infill_flow_ratio","bottom_solid_infill_flow_ratio","only_one_wall_first_layer", "print_flow_ratio" diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 7d2187d997..f48f5c29f3 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -84,6 +84,7 @@ bool Print::invalidate_state_by_config_options(const ConfigOptionResolver & /* n "close_fan_the_first_x_layers", "machine_end_gcode", "filament_end_gcode", + "post_process", "extruder_clearance_height_to_rod", "extruder_clearance_height_to_lid", "extruder_clearance_radius", diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 36a2252714..bbad230f88 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2168,7 +2168,20 @@ void PrintConfigDef::init_fff_params() def->min = 0; def->max = 1000; def->set_default_value(new ConfigOptionInt(2)); - + + def = this->add("post_process", coStrings); + def->label = L("Post-processing Scripts"); + def->tooltip = L("If you want to process the output G-code through custom scripts, " + "just list their absolute paths here. Separate multiple scripts with a semicolon. " + "Scripts will be passed the absolute path to the G-code file as the first argument, " + "and they can access the Slic3r config settings by reading environment variables."); + def->gui_flags = "serialized"; + def->multiline = true; + def->full_width = true; + def->height = 6; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionStrings()); + def = this->add("printer_model", coString); //def->label = L("Printer type"); //def->tooltip = L("Type of the printer"); diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index c1bb62329c..eee8615824 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -921,6 +921,7 @@ PRINT_CONFIG_CLASS_DERIVED_DEFINE( ((ConfigOptionBool, reduce_infill_retraction)) ((ConfigOptionBool, ooze_prevention)) ((ConfigOptionString, filename_format)) + ((ConfigOptionStrings, post_process)) ((ConfigOptionString, printer_model)) ((ConfigOptionFloat, resolution)) ((ConfigOptionFloats, retraction_minimum_travel)) diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 0541ba2c97..5e9fe0f96f 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -769,8 +769,7 @@ void BackgroundSlicingProcess::finalize_gcode() // is calculated for the unprocessed G-code and it references lines in the memory mapped G-code file by line numbers. // export_path may be changed by the post-processing script as well if the post processing script decides so, see GH #6042. //BBS: don't support running post process scripts - //bool post_processed = run_post_process_scripts(output_path, true, "File", export_path, m_fff_print->full_print_config()); - bool post_processed = false; + bool post_processed = run_post_process_scripts(output_path, true, "File", export_path, m_fff_print->full_print_config()); auto remove_post_processed_temp_file = [post_processed, &output_path]() { if (post_processed) try { diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 485fd82202..1a495a2ff4 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2034,6 +2034,13 @@ void TabPrint::build() option.opt.multiline = true; // option.opt.height = 5; optgroup->append_single_option_line(option); + + optgroup = page->new_optgroup(L("Post-processing Scripts"), L"param_gcode", 0); + option = optgroup->get_option("post_process"); + option.opt.full_width = true; + option.opt.is_code = true; + option.opt.height = 15; + optgroup->append_single_option_line(option); #if 0 //page = add_options_page(L("Dependencies"), "advanced.png");