mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-15 10:45:55 +08:00
#205 separate external perimeters and thin walls (speed & gcode layout).
This commit is contained in:
parent
0d8d386c72
commit
0da98baa11
@ -189,8 +189,9 @@ group:label_width$8:Speed for print moves
|
|||||||
line:Bridge speed
|
line:Bridge speed
|
||||||
setting:label$_:width$4:bridge_speed
|
setting:label$_:width$4:bridge_speed
|
||||||
end_line
|
end_line
|
||||||
line:Gap fill speed
|
line:Thin extrusions speed
|
||||||
setting:label$_:width$4:gap_fill_speed
|
setting:width$4:gap_fill_speed
|
||||||
|
setting:width$4:thin_walls_speed
|
||||||
end_line
|
end_line
|
||||||
group:Speed for non-print moves
|
group:Speed for non-print moves
|
||||||
setting:travel_speed
|
setting:travel_speed
|
||||||
|
@ -274,6 +274,7 @@ std::string ExtrusionEntity::role_to_string(ExtrusionRole role)
|
|||||||
case erSolidInfill : return L("Solid infill");
|
case erSolidInfill : return L("Solid infill");
|
||||||
case erTopSolidInfill : return L("Top solid infill");
|
case erTopSolidInfill : return L("Top solid infill");
|
||||||
case erBridgeInfill : return L("Bridge infill");
|
case erBridgeInfill : return L("Bridge infill");
|
||||||
|
case erThinWall : return L("Thin wall");
|
||||||
case erGapFill : return L("Gap fill");
|
case erGapFill : return L("Gap fill");
|
||||||
case erSkirt : return L("Skirt");
|
case erSkirt : return L("Skirt");
|
||||||
case erSupportMaterial : return L("Support material");
|
case erSupportMaterial : return L("Support material");
|
||||||
|
@ -23,6 +23,7 @@ enum ExtrusionRole : uint8_t {
|
|||||||
erSolidInfill,
|
erSolidInfill,
|
||||||
erTopSolidInfill,
|
erTopSolidInfill,
|
||||||
erBridgeInfill,
|
erBridgeInfill,
|
||||||
|
erThinWall,
|
||||||
erGapFill,
|
erGapFill,
|
||||||
erSkirt,
|
erSkirt,
|
||||||
erSupportMaterial,
|
erSupportMaterial,
|
||||||
@ -54,6 +55,7 @@ inline bool is_perimeter(ExtrusionRole role)
|
|||||||
{
|
{
|
||||||
return role == erPerimeter
|
return role == erPerimeter
|
||||||
|| role == erExternalPerimeter
|
|| role == erExternalPerimeter
|
||||||
|
|| role == erThinWall
|
||||||
|| role == erOverhangPerimeter;
|
|| role == erOverhangPerimeter;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3524,6 +3524,8 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string
|
|||||||
speed = m_config.get_abs_value("solid_infill_speed");
|
speed = m_config.get_abs_value("solid_infill_speed");
|
||||||
} else if (path.role() == erTopSolidInfill) {
|
} else if (path.role() == erTopSolidInfill) {
|
||||||
speed = m_config.get_abs_value("top_solid_infill_speed");
|
speed = m_config.get_abs_value("top_solid_infill_speed");
|
||||||
|
} else if (path.role() == erThinWall) {
|
||||||
|
speed = m_config.get_abs_value("thin_walls_speed");
|
||||||
} else if (path.role() == erGapFill) {
|
} else if (path.role() == erGapFill) {
|
||||||
speed = m_config.get_abs_value("gap_fill_speed");
|
speed = m_config.get_abs_value("gap_fill_speed");
|
||||||
} else if (path.role() == erNone) {
|
} else if (path.role() == erNone) {
|
||||||
@ -3621,6 +3623,8 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string
|
|||||||
comment = ";_EXTRUDE_SET_SPEED";
|
comment = ";_EXTRUDE_SET_SPEED";
|
||||||
if (path.role() == erExternalPerimeter)
|
if (path.role() == erExternalPerimeter)
|
||||||
comment += ";_EXTERNAL_PERIMETER";
|
comment += ";_EXTERNAL_PERIMETER";
|
||||||
|
if (path.role() == erThinWall)
|
||||||
|
comment += ";_EXTERNAL_PERIMETER";
|
||||||
}
|
}
|
||||||
// F is mm per minute.
|
// F is mm per minute.
|
||||||
gcode += m_writer.set_speed(F, "", comment);
|
gcode += m_writer.set_speed(F, "", comment);
|
||||||
@ -3995,6 +3999,8 @@ GCode::extrusion_role_to_string_for_parser(const ExtrusionRole & role) {
|
|||||||
return "TopSolidInfill";
|
return "TopSolidInfill";
|
||||||
case erBridgeInfill:
|
case erBridgeInfill:
|
||||||
return "BridgeInfill";
|
return "BridgeInfill";
|
||||||
|
case erThinWall:
|
||||||
|
return "ThinWall";
|
||||||
case erGapFill:
|
case erGapFill:
|
||||||
return "GapFill";
|
return "GapFill";
|
||||||
case erSkirt:
|
case erSkirt:
|
||||||
|
@ -118,6 +118,7 @@ const Color GCodePreviewData::Extrusion::Default_Extrusion_Role_Colors[erCount]
|
|||||||
Color(1.0f, 0.0f, 1.0f, 1.0f), // erSolidInfill
|
Color(1.0f, 0.0f, 1.0f, 1.0f), // erSolidInfill
|
||||||
Color(0.0f, 1.0f, 1.0f, 1.0f), // erTopSolidInfill
|
Color(0.0f, 1.0f, 1.0f, 1.0f), // erTopSolidInfill
|
||||||
Color(0.5f, 0.5f, 0.5f, 1.0f), // erBridgeInfill
|
Color(0.5f, 0.5f, 0.5f, 1.0f), // erBridgeInfill
|
||||||
|
Color(0.0f, 1.0f, 0.4f, 1.0f), // erThinWall
|
||||||
Color(1.0f, 1.0f, 1.0f, 1.0f), // erGapFill
|
Color(1.0f, 1.0f, 1.0f, 1.0f), // erGapFill
|
||||||
Color(0.5f, 0.0f, 0.0f, 1.0f), // erSkirt
|
Color(0.5f, 0.0f, 0.0f, 1.0f), // erSkirt
|
||||||
Color(0.0f, 0.5f, 0.0f, 1.0f), // erSupportMaterial
|
Color(0.0f, 0.5f, 0.0f, 1.0f), // erSupportMaterial
|
||||||
|
@ -613,7 +613,7 @@ void PerimeterGenerator::process()
|
|||||||
// append thin walls
|
// append thin walls
|
||||||
if (!thin_walls.empty()) {
|
if (!thin_walls.empty()) {
|
||||||
ExtrusionEntityCollection tw = thin_variable_width
|
ExtrusionEntityCollection tw = thin_variable_width
|
||||||
(thin_walls, erExternalPerimeter, this->ext_perimeter_flow);
|
(thin_walls, erThinWall, this->ext_perimeter_flow);
|
||||||
|
|
||||||
entities.append(tw.entities);
|
entities.append(tw.entities);
|
||||||
thin_walls.clear();
|
thin_walls.clear();
|
||||||
@ -814,7 +814,7 @@ ExtrusionEntityCollection PerimeterGenerator::_traverse_loops(
|
|||||||
|
|
||||||
// append thin walls to the nearest-neighbor search (only for first iteration)
|
// append thin walls to the nearest-neighbor search (only for first iteration)
|
||||||
if (!thin_walls.empty()) {
|
if (!thin_walls.empty()) {
|
||||||
ExtrusionEntityCollection tw = thin_variable_width(thin_walls, erExternalPerimeter, this->ext_perimeter_flow);
|
ExtrusionEntityCollection tw = thin_variable_width(thin_walls, erThinWall, this->ext_perimeter_flow);
|
||||||
coll.append(tw.entities);
|
coll.append(tw.entities);
|
||||||
thin_walls.clear();
|
thin_walls.clear();
|
||||||
}
|
}
|
||||||
|
@ -2973,6 +2973,16 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->min = 0;
|
def->min = 0;
|
||||||
def->set_default_value(new ConfigOptionFloatOrPercent(50, true));
|
def->set_default_value(new ConfigOptionFloatOrPercent(50, true));
|
||||||
|
|
||||||
|
def = this->add("thin_walls_speed", coFloat);
|
||||||
|
def->label = L("Thin walls");
|
||||||
|
def->full_label = L("Thin walls speed");
|
||||||
|
def->category = OptionCategory::speed;
|
||||||
|
def->tooltip = L("Speed for thin wall (external extrusion that are alone because the obect is too thin at these places).");
|
||||||
|
def->sidetext = L("mm/s");
|
||||||
|
def->min = 0;
|
||||||
|
def->mode = comAdvanced;
|
||||||
|
def->set_default_value(new ConfigOptionFloat(30));
|
||||||
|
|
||||||
def = this->add("threads", coInt);
|
def = this->add("threads", coInt);
|
||||||
def->label = L("Threads");
|
def->label = L("Threads");
|
||||||
def->tooltip = L("Threads are used to parallelize long-running tasks. Optimal threads number "
|
def->tooltip = L("Threads are used to parallelize long-running tasks. Optimal threads number "
|
||||||
|
@ -639,6 +639,7 @@ public:
|
|||||||
ConfigOptionBool thin_walls;
|
ConfigOptionBool thin_walls;
|
||||||
ConfigOptionFloatOrPercent thin_walls_min_width;
|
ConfigOptionFloatOrPercent thin_walls_min_width;
|
||||||
ConfigOptionFloatOrPercent thin_walls_overlap;
|
ConfigOptionFloatOrPercent thin_walls_overlap;
|
||||||
|
ConfigOptionFloat thin_walls_speed;
|
||||||
ConfigOptionEnum<InfillPattern> top_fill_pattern;
|
ConfigOptionEnum<InfillPattern> top_fill_pattern;
|
||||||
ConfigOptionFloatOrPercent top_infill_extrusion_width;
|
ConfigOptionFloatOrPercent top_infill_extrusion_width;
|
||||||
ConfigOptionInt top_solid_layers;
|
ConfigOptionInt top_solid_layers;
|
||||||
@ -713,6 +714,7 @@ protected:
|
|||||||
OPT_PTR(thin_walls);
|
OPT_PTR(thin_walls);
|
||||||
OPT_PTR(thin_walls_min_width);
|
OPT_PTR(thin_walls_min_width);
|
||||||
OPT_PTR(thin_walls_overlap);
|
OPT_PTR(thin_walls_overlap);
|
||||||
|
OPT_PTR(thin_walls_speed);
|
||||||
OPT_PTR(top_fill_pattern);
|
OPT_PTR(top_fill_pattern);
|
||||||
OPT_PTR(top_infill_extrusion_width);
|
OPT_PTR(top_infill_extrusion_width);
|
||||||
OPT_PTR(top_solid_infill_speed);
|
OPT_PTR(top_solid_infill_speed);
|
||||||
|
@ -299,6 +299,7 @@ bool Preview::init(wxWindow* parent, Bed3D& bed, Camera& camera, GLToolbar& view
|
|||||||
"Solid infill", "D732D7",
|
"Solid infill", "D732D7",
|
||||||
"Top solid infill", "FF1A1A",
|
"Top solid infill", "FF1A1A",
|
||||||
"Bridge infill", "9999FF",
|
"Bridge infill", "9999FF",
|
||||||
|
"Thin wall", "FFB000",
|
||||||
"Gap fill", "FFFFFF",
|
"Gap fill", "FFFFFF",
|
||||||
"Skirt", "845321",
|
"Skirt", "845321",
|
||||||
"Support material", "00FF00",
|
"Support material", "00FF00",
|
||||||
|
@ -506,7 +506,8 @@ const std::vector<std::string>& Preset::print_options()
|
|||||||
, "infill_not_connected"
|
, "infill_not_connected"
|
||||||
, "first_layer_infill_speed"
|
, "first_layer_infill_speed"
|
||||||
, "thin_walls_min_width"
|
, "thin_walls_min_width"
|
||||||
, "thin_walls_overlap"
|
, "thin_walls_overlap",
|
||||||
|
"thin_walls_speed"
|
||||||
, "model_precision"
|
, "model_precision"
|
||||||
, "curve_smoothing_precision"
|
, "curve_smoothing_precision"
|
||||||
, "curve_smoothing_cutoff_dist"
|
, "curve_smoothing_cutoff_dist"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user