mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	add back small perimeter support
This commit is contained in:
		
							parent
							
								
									c24680e09d
								
							
						
					
					
						commit
						166832cd94
					
				
					 11 changed files with 33 additions and 6 deletions
				
			
		| 
						 | 
				
			
			@ -3225,8 +3225,8 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou
 | 
			
		|||
    // BBS: remove small small_perimeter_speed config, and will absolutely
 | 
			
		||||
    // remove related code if no other issue in the coming release.
 | 
			
		||||
    // apply the small perimeter speed
 | 
			
		||||
    //if (is_perimeter(paths.front().role()) && loop.length() <= SMALL_PERIMETER_LENGTH && speed == -1)
 | 
			
		||||
    //    speed = m_config.small_perimeter_speed.get_abs_value(m_config.inner_wall_speed);
 | 
			
		||||
    if (is_perimeter(paths.front().role()) && loop.length() <= SMALL_PERIMETER_LENGTH && speed == -1)
 | 
			
		||||
       speed = m_config.small_perimeter_speed.get_abs_value(m_config.outer_wall_speed);
 | 
			
		||||
 | 
			
		||||
    // extrude along the path
 | 
			
		||||
    std::string gcode;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -170,6 +170,7 @@ void Layer::make_perimeters()
 | 
			
		|||
		                && config.wall_loops                  == other_config.wall_loops
 | 
			
		||||
		                && config.inner_wall_speed             == other_config.inner_wall_speed
 | 
			
		||||
		                && config.outer_wall_speed    == other_config.outer_wall_speed
 | 
			
		||||
		                && config.small_perimeter_speed    == other_config.small_perimeter_speed
 | 
			
		||||
		                && config.gap_infill_speed.value == other_config.gap_infill_speed.value
 | 
			
		||||
		                && config.detect_overhang_wall                   == other_config.detect_overhang_wall
 | 
			
		||||
		                && config.opt_serialize("inner_wall_line_width") == other_config.opt_serialize("inner_wall_line_width")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2769,6 +2769,7 @@ double Model::findMaxSpeed(const ModelObject* object) {
 | 
			
		|||
    double solidInfillSpeedObj = Model::printSpeedMap.solidInfillSpeed;
 | 
			
		||||
    double topSolidInfillSpeedObj = Model::printSpeedMap.topSolidInfillSpeed;
 | 
			
		||||
    double supportSpeedObj = Model::printSpeedMap.supportSpeed;
 | 
			
		||||
    double smallPerimeterSpeedObj = Model::printSpeedMap.smallPerimeterSpeed;
 | 
			
		||||
    for (std::string objectKey : objectKeys) {
 | 
			
		||||
        if (objectKey == "inner_wall_speed"){
 | 
			
		||||
            perimeterSpeedObj = object->config.opt_float(objectKey);
 | 
			
		||||
| 
						 | 
				
			
			@ -2784,8 +2785,10 @@ double Model::findMaxSpeed(const ModelObject* object) {
 | 
			
		|||
            supportSpeedObj = object->config.opt_float(objectKey);
 | 
			
		||||
        if (objectKey == "outer_wall_speed")
 | 
			
		||||
            externalPerimeterSpeedObj = object->config.opt_float(objectKey);
 | 
			
		||||
        if (objectKey == "small_perimeter_speed")
 | 
			
		||||
            smallPerimeterSpeedObj = object->config.opt_float(objectKey);
 | 
			
		||||
    }
 | 
			
		||||
    objMaxSpeed = std::max(perimeterSpeedObj, std::max(externalPerimeterSpeedObj, std::max(infillSpeedObj, std::max(solidInfillSpeedObj, std::max(topSolidInfillSpeedObj, std::max(supportSpeedObj, objMaxSpeed))))));
 | 
			
		||||
    objMaxSpeed = std::max(perimeterSpeedObj, std::max(externalPerimeterSpeedObj, std::max(infillSpeedObj, std::max(solidInfillSpeedObj, std::max(topSolidInfillSpeedObj, std::max(supportSpeedObj, std::max(smallPerimeterSpeedObj, objMaxSpeed)))))));
 | 
			
		||||
    if (objMaxSpeed <= 0) objMaxSpeed = 250.;
 | 
			
		||||
    return objMaxSpeed;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1211,6 +1211,7 @@ struct GlobalSpeedMap
 | 
			
		|||
    double solidInfillSpeed;
 | 
			
		||||
    double topSolidInfillSpeed;
 | 
			
		||||
    double supportSpeed;
 | 
			
		||||
    double smallPerimeterSpeed;
 | 
			
		||||
    double maxSpeed;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -695,7 +695,7 @@ static std::vector<std::string> s_Preset_print_options {
 | 
			
		|||
#ifdef HAS_PRESSURE_EQUALIZER
 | 
			
		||||
    "max_volumetric_extrusion_rate_slope_positive", "max_volumetric_extrusion_rate_slope_negative",
 | 
			
		||||
#endif /* HAS_PRESSURE_EQUALIZER */
 | 
			
		||||
    "inner_wall_speed", "outer_wall_speed", "sparse_infill_speed", "internal_solid_infill_speed",
 | 
			
		||||
    "inner_wall_speed", "outer_wall_speed", "small_perimeter_speed", "sparse_infill_speed", "internal_solid_infill_speed",
 | 
			
		||||
    "top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed",
 | 
			
		||||
    "bridge_speed", "gap_infill_speed", "travel_speed", "travel_speed_z", "initial_layer_speed",
 | 
			
		||||
    "initial_layer_acceleration", "top_surface_acceleration", "default_acceleration", "skirt_loops", "skirt_distance", "skirt_height", "draft_shield",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -934,6 +934,18 @@ void PrintConfigDef::init_fff_params()
 | 
			
		|||
    def->mode = comAdvanced;
 | 
			
		||||
    def->set_default_value(new ConfigOptionFloat(60));
 | 
			
		||||
 | 
			
		||||
    def = this->add("small_perimeter_speed", coFloatOrPercent);
 | 
			
		||||
    def->label = L("Small perimeters");
 | 
			
		||||
    def->category = L("Speed");
 | 
			
		||||
    def->tooltip = L("This separate setting will affect the speed of perimeters having radius <= 6.5mm "
 | 
			
		||||
                   "(usually holes). If expressed as percentage (for example: 80%) it will be calculated "
 | 
			
		||||
                   "on the outer wall speed setting above. Set to zero for auto.");
 | 
			
		||||
    def->sidetext = L("mm/s or %");
 | 
			
		||||
    def->ratio_over = "outer_wall_speed";
 | 
			
		||||
    def->min = 0;
 | 
			
		||||
    def->mode = comAdvanced;
 | 
			
		||||
    def->set_default_value(new ConfigOptionFloatOrPercent(15, false));
 | 
			
		||||
    
 | 
			
		||||
    def = this->add("wall_infill_order", coEnum);
 | 
			
		||||
    def->label = L("Order of inner wall/outer wall/infil");
 | 
			
		||||
    def->category = L("Quality");
 | 
			
		||||
| 
						 | 
				
			
			@ -3584,6 +3596,7 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va
 | 
			
		|||
                opt_key == "top_surface_speed"            ||
 | 
			
		||||
                opt_key == "support_interface_speed"      ||
 | 
			
		||||
                opt_key == "outer_wall_speed"             ||
 | 
			
		||||
                opt_key == "small_perimeter_speed"        ||
 | 
			
		||||
                opt_key == "support_object_xy_distance")     && value.find("%") != std::string::npos) {
 | 
			
		||||
        //BBS: this is old profile in which value is expressed as percentage.
 | 
			
		||||
        //But now these key-value must be absolute value.
 | 
			
		||||
| 
						 | 
				
			
			@ -3623,7 +3636,7 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va
 | 
			
		|||
        // BBS
 | 
			
		||||
        , "support_sharp_tails","remove_small_overhangs", "support_with_sheath",
 | 
			
		||||
        "tree_support_branch_diameter_angle", "tree_support_collision_resolution",
 | 
			
		||||
        "small_perimeter_speed", "max_volumetric_speed", "max_print_speed",
 | 
			
		||||
        "max_volumetric_speed", "max_print_speed",
 | 
			
		||||
        "support_bottom_z_distance", "support_closing_radius", "slicing_mode",
 | 
			
		||||
        "remove_freq_sweep", "remove_bed_leveling", "remove_extrusion_calibration",
 | 
			
		||||
        "support_transition_line_width", "support_transition_speed", "bed_temperature", "bed_temperature_initial_layer",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -662,6 +662,7 @@ PRINT_CONFIG_CLASS_DEFINE(
 | 
			
		|||
    ((ConfigOptionEnum<InfillPattern>,  bottom_surface_pattern))
 | 
			
		||||
    ((ConfigOptionFloat,                outer_wall_line_width))
 | 
			
		||||
    ((ConfigOptionFloat,                outer_wall_speed))
 | 
			
		||||
    ((ConfigOptionFloatOrPercent,       small_perimeter_speed))
 | 
			
		||||
    ((ConfigOptionFloat,                infill_direction))
 | 
			
		||||
    ((ConfigOptionPercent,              sparse_infill_density))
 | 
			
		||||
    ((ConfigOptionEnum<InfillPattern>,  sparse_infill_pattern))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -656,6 +656,7 @@ bool PrintObject::invalidate_state_by_config_options(
 | 
			
		|||
            || opt_key == "brim_type"
 | 
			
		||||
            // BBS: brim generation depends on printing speed
 | 
			
		||||
            || opt_key == "outer_wall_speed"
 | 
			
		||||
            || opt_key == "small_perimeter_speed"
 | 
			
		||||
            || opt_key == "sparse_infill_speed"
 | 
			
		||||
            || opt_key == "inner_wall_speed"
 | 
			
		||||
            || opt_key == "support_speed"
 | 
			
		||||
| 
						 | 
				
			
			@ -827,6 +828,7 @@ bool PrintObject::invalidate_state_by_config_options(
 | 
			
		|||
            || opt_key == "overhang_4_4_speed"
 | 
			
		||||
            || opt_key == "bridge_speed"
 | 
			
		||||
            || opt_key == "outer_wall_speed"
 | 
			
		||||
            || opt_key == "small_perimeter_speed"
 | 
			
		||||
            || opt_key == "sparse_infill_speed"
 | 
			
		||||
            || opt_key == "inner_wall_speed"
 | 
			
		||||
            || opt_key == "internal_solid_infill_speed"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -451,7 +451,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co
 | 
			
		|||
    bool have_perimeters = config->opt_int("wall_loops") > 0;
 | 
			
		||||
    for (auto el : { "detect_thin_wall", "detect_overhang_wall",
 | 
			
		||||
                    "seam_position", "wall_infill_order", "outer_wall_line_width",
 | 
			
		||||
                    "inner_wall_speed", "outer_wall_speed" })
 | 
			
		||||
                    "inner_wall_speed", "outer_wall_speed", "small_perimeter_speed" })
 | 
			
		||||
        toggle_field(el, have_perimeters);
 | 
			
		||||
 | 
			
		||||
    bool have_infill = config->option<ConfigOptionPercent>("sparse_infill_density")->value > 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -2492,7 +2492,12 @@ void Plater::setPrintSpeedTable(GlobalSpeedMap &printSpeedMap) {
 | 
			
		|||
        if (printSpeedMap.supportSpeed > printSpeedMap.maxSpeed)
 | 
			
		||||
            printSpeedMap.maxSpeed = printSpeedMap.supportSpeed;
 | 
			
		||||
    }
 | 
			
		||||
    if (config.has("small_perimeter_speed")) {
 | 
			
		||||
        printSpeedMap.smallPerimeterSpeed = config.get_abs_value("small_perimeter_speed");
 | 
			
		||||
 | 
			
		||||
        if (printSpeedMap.smallPerimeterSpeed > printSpeedMap.maxSpeed)
 | 
			
		||||
            printSpeedMap.maxSpeed = printSpeedMap.smallPerimeterSpeed;
 | 
			
		||||
    }
 | 
			
		||||
    /*        "inner_wall_speed", "outer_wall_speed", "sparse_infill_speed", "internal_solid_infill_speed",
 | 
			
		||||
        "top_surface_speed", "support_speed", "support_object_xy_distance", "support_interface_speed",
 | 
			
		||||
        "bridge_speed", "gap_infill_speed", "travel_speed", "initial_layer_speed"*/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1816,6 +1816,7 @@ void TabPrint::build()
 | 
			
		|||
        optgroup = page->new_optgroup(L("Other layers speed"), L"param_speed", 15);
 | 
			
		||||
        optgroup->append_single_option_line("outer_wall_speed");
 | 
			
		||||
        optgroup->append_single_option_line("inner_wall_speed");
 | 
			
		||||
        optgroup->append_single_option_line("small_perimeter_speed");
 | 
			
		||||
        optgroup->append_single_option_line("sparse_infill_speed");
 | 
			
		||||
        optgroup->append_single_option_line("internal_solid_infill_speed");
 | 
			
		||||
        optgroup->append_single_option_line("top_surface_speed");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue