mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-14 03:55:54 +08:00
#922 Infill bridge issues
This commit is contained in:
parent
a8036a9e31
commit
519bcaf1a2
@ -312,7 +312,7 @@ ExtrusionRole ExtrusionEntity::string_to_role(const std::string_view role)
|
||||
else if (role == L("Bridge infill"))
|
||||
return erBridgeInfill;
|
||||
else if (role == L("Internal bridge infill"))
|
||||
return erBridgeInfill;
|
||||
return erInternalBridgeInfill;
|
||||
else if (role == L("Thin wall"))
|
||||
return erThinWall;
|
||||
else if (role == L("Gap fill"))
|
||||
|
@ -104,6 +104,7 @@ inline bool is_perimeter(ExtrusionRole role)
|
||||
inline bool is_infill(ExtrusionRole role)
|
||||
{
|
||||
return role == erBridgeInfill
|
||||
|| role == erInternalBridgeInfill
|
||||
|| role == erInternalInfill
|
||||
|| role == erSolidInfill
|
||||
|| role == erTopSolidInfill
|
||||
@ -113,13 +114,15 @@ inline bool is_infill(ExtrusionRole role)
|
||||
inline bool is_solid_infill(ExtrusionRole role)
|
||||
{
|
||||
return role == erBridgeInfill
|
||||
|| role == erInternalBridgeInfill
|
||||
|| role == erSolidInfill
|
||||
|| role == erTopSolidInfill
|
||||
|| role == erIroning;
|
||||
}
|
||||
|
||||
inline bool is_bridge(ExtrusionRole role) {
|
||||
return role == erBridgeInfill;
|
||||
return role == erBridgeInfill
|
||||
|| role == erInternalBridgeInfill;
|
||||
}
|
||||
|
||||
|
||||
|
@ -252,7 +252,7 @@ Fill::do_gap_fill(const ExPolygons& gapfill_areas, const FillParams& params, Ext
|
||||
MedialAxis{ ex, params.flow.scaled_width() * 2, params.flow.scaled_width() / 5, coord_t(params.flow.height) }.build(polylines_gapfill);
|
||||
}
|
||||
}
|
||||
if (!polylines_gapfill.empty() && params.role != erBridgeInfill && params.role != erInternalBridgeInfill) {
|
||||
if (!polylines_gapfill.empty() && !is_bridge(params.role)) {
|
||||
//test
|
||||
#ifdef _DEBUG
|
||||
for (ThickPolyline poly : polylines_gapfill) {
|
||||
|
@ -164,7 +164,7 @@ protected:
|
||||
ExtrusionRole getRoleFromSurfaceType(const FillParams ¶ms, const Surface *surface) const {
|
||||
if (params.role == erNone || params.role == erCustom) {
|
||||
return params.flow.bridge ?
|
||||
(surface->has_pos_bottom() ? erBridgeInfill :erInternalBridgeInfill) :
|
||||
(surface->has_pos_bottom() ? erBridgeInfill : erInternalBridgeInfill) :
|
||||
(surface->has_fill_solid() ?
|
||||
((surface->has_pos_top()) ? erTopSolidInfill : erSolidInfill) :
|
||||
erInternalInfill);
|
||||
|
@ -153,7 +153,7 @@ FillConcentricWGapFill::fill_surface_extrusion(
|
||||
MedialAxis{ ex, coord_t(max), coord_t(min), coord_t(params.flow.height) }.build(polylines);
|
||||
}
|
||||
}
|
||||
if (!polylines.empty() && good_role != erBridgeInfill && good_role != erInternalBridgeInfill) {
|
||||
if (!polylines.empty() && !is_bridge(good_role)) {
|
||||
ExtrusionEntityCollection gap_fill = thin_variable_width(polylines, erGapFill, params.flow);
|
||||
//set role if needed
|
||||
if (good_role != erSolidInfill) {
|
||||
|
@ -3719,7 +3719,7 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string
|
||||
throw Slic3r::InvalidArgument("Invalid speed");
|
||||
}
|
||||
//don't modify bridge speed
|
||||
if (factor < 1 && !(path.role() == erOverhangPerimeter || path.role() == erBridgeInfill || path.role() == erInternalBridgeInfill)) {
|
||||
if (factor < 1 && !(path.role() == erOverhangPerimeter || is_bridge(path.role()))) {
|
||||
float small_speed = m_config.small_perimeter_speed.get_abs_value(m_config.perimeter_speed);
|
||||
//apply factor between feature speed and small speed
|
||||
speed = speed * factor + (1.f - factor) * small_speed;
|
||||
|
@ -1909,7 +1909,7 @@ void GCodeProcessor::process_G1(const GCodeReader::GCodeLine& line)
|
||||
#endif // ENABLE_TOOLPATHS_WIDTH_HEIGHT_FROM_GCODE
|
||||
// cross section: rectangle
|
||||
m_width = delta_pos[E] * static_cast<float>(M_PI * sqr(1.05f * filament_radius)) / (delta_xyz * m_height);
|
||||
else if (m_extrusion_role == erBridgeInfill || m_extrusion_role == erNone)
|
||||
else if (is_bridge(m_extrusion_role) || m_extrusion_role == erNone)
|
||||
// cross section: circle
|
||||
m_width = static_cast<float>(m_filament_diameters[m_extruder_id]) * std::sqrt(delta_pos[E] / delta_xyz);
|
||||
else
|
||||
|
@ -808,7 +808,7 @@ namespace SupportMaterialInternal {
|
||||
return true;
|
||||
} else {
|
||||
assert(! ee->is_loop());
|
||||
if (ee->role() == erBridgeInfill || ee->role() == erInternalBridgeInfill)
|
||||
if (is_bridge(ee->role()))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user