mirror of
https://git.mirrors.martin98.com/https://github.com/SoftFever/OrcaSlicer.git
synced 2025-10-15 22:41:32 +08:00

* Overhang perimeter handling Updated code to handle overhang perimeters as an overhang and not as a bridge. * Preparing to add curled extrusions identification * Porting curling calculations from Prusa Slier 2.6.1 * Prototype 1 - slowdown extended to detect curled edges and further reduce speed First prototype of the code submitted. * Working prototype - 2 Code is now finally working - external perimeters are slowed down as needed when there is likelyhood of curling up. ToDo: 1. Reslicing the model causes the algorithm not to run - need to find where this fails to trigger the call for this. 2. Slowdown of internal perimeters not working yet. * Updated to use overhang wall speed instead of bridging speed for this algorithm * Fixed bug in speed calculation and tweaked parameters for high speed printer Fixed bug in speed calculation and tweaked parameters for high speed printer * Attempting to fix "set started" not being set * Parameter tweak after print tests * Fixed estimation not running when model is re-sliced. * Removing debug printf statements and fixed threading flag. * Fixed threading * Parameter tweaks following print tests * Made this as an option in the GUI * Reintroduced handling of bridges as per original design * UI line toggling when option makes sense to be visible. * Fixed bug in field visibility & made it default to off * Code optimisation * Initial commit of code from Prusa Slicer 2.6.1 * Ported ExtrusionRole from Prusa Slicer 2.6.1 * fix compile errors * Update GCode.hpp * code changes to invoke pressure equalizer * attempting to trigger pressure equalizer (Not compiling) * Update Fill.cpp * Update Fill.cpp * Pressure equaliser layer result update * Further commits * Merged PR https://github.com/prusa3d/PrusaSlicer/pull/9622 * First complete working version * Update PressureEqualizer.cpp * Implemented parameter in GUI * Toggle fields according to compatibility * Updated UI toggles between extrusion rate slope and arc fitting. * Updated tooltip * Introduced parameter smoothing segment length This parameter influences the number of division a line will undergo in response to the requirement to adhere to the extrusion rate flow adjustment. * Internal parameter and tool tip tweaking * Parameter and tool tip tweaking * Updated parameters and tooltip following testing. * Sync PressureEq with latest PrusaSlicer * Revert "Sync PressureEq with latest PrusaSlicer" This reverts commit 131fb94c6bebe0a6abb3ca28d4a162aacbe75f40. --------- Co-authored-by: MGunlogson <MGunlogson@users.noreply.github.com> Co-authored-by: Vojtech Bubnik <bubnikv@gmail.com>
95 lines
4.7 KiB
C++
95 lines
4.7 KiB
C++
///|/ Copyright (c) Prusa Research 2023 Pavel Mikuš @Godrak, Oleksandra Iushchenko @YuSanka, Vojtěch Bubník @bubnikv
|
|
///|/
|
|
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
|
|
///|/
|
|
#include "ExtrusionRole.hpp"
|
|
#include "I18N.hpp"
|
|
|
|
#include <string>
|
|
#include <string_view>
|
|
#include <cassert>
|
|
|
|
|
|
namespace Slic3r {
|
|
|
|
// Convert a rich bitmask based ExtrusionRole to a less expressive ordinal GCodeExtrusionRole.
|
|
// GCodeExtrusionRole is to be serialized into G-code and deserialized by G-code viewer,
|
|
GCodeExtrusionRole extrusion_role_to_gcode_extrusion_role(ExtrusionRole role)
|
|
{
|
|
if (role == erNone) return GCodeExtrusionRole::None;
|
|
if (role == erOverhangPerimeter) return GCodeExtrusionRole::OverhangPerimeter;
|
|
if (role == erExternalPerimeter) return GCodeExtrusionRole::ExternalPerimeter;
|
|
if (role == erPerimeter) return GCodeExtrusionRole::Perimeter;
|
|
if (role == erInternalInfill) return GCodeExtrusionRole::InternalInfill;
|
|
if (role == erSolidInfill) return GCodeExtrusionRole::SolidInfill;
|
|
if (role == erTopSolidInfill) return GCodeExtrusionRole::TopSolidInfill;
|
|
if (role == erIroning) return GCodeExtrusionRole::Ironing;
|
|
if (role == erBridgeInfill) return GCodeExtrusionRole::BridgeInfill;
|
|
if (role == erGapFill) return GCodeExtrusionRole::GapFill;
|
|
if (role == erSkirt) return GCodeExtrusionRole::Skirt;
|
|
if (role == erSupportMaterial) return GCodeExtrusionRole::SupportMaterial;
|
|
if (role == erSupportMaterialInterface) return GCodeExtrusionRole::SupportMaterialInterface;
|
|
if (role == erWipeTower) return GCodeExtrusionRole::WipeTower;
|
|
assert(false);
|
|
return GCodeExtrusionRole::None;
|
|
}
|
|
|
|
std::string gcode_extrusion_role_to_string(GCodeExtrusionRole role)
|
|
{
|
|
switch (role) {
|
|
case GCodeExtrusionRole::None : return L("Unknown");
|
|
case GCodeExtrusionRole::Perimeter : return L("Perimeter");
|
|
case GCodeExtrusionRole::ExternalPerimeter : return L("External perimeter");
|
|
case GCodeExtrusionRole::OverhangPerimeter : return L("Overhang perimeter");
|
|
case GCodeExtrusionRole::InternalInfill : return L("Internal infill");
|
|
case GCodeExtrusionRole::SolidInfill : return L("Solid infill");
|
|
case GCodeExtrusionRole::TopSolidInfill : return L("Top solid infill");
|
|
case GCodeExtrusionRole::Ironing : return L("Ironing");
|
|
case GCodeExtrusionRole::BridgeInfill : return L("Bridge infill");
|
|
case GCodeExtrusionRole::GapFill : return L("Gap fill");
|
|
case GCodeExtrusionRole::Skirt : return L("Skirt/Brim");
|
|
case GCodeExtrusionRole::SupportMaterial : return L("Support material");
|
|
case GCodeExtrusionRole::SupportMaterialInterface : return L("Support material interface");
|
|
case GCodeExtrusionRole::WipeTower : return L("Wipe tower");
|
|
case GCodeExtrusionRole::Custom : return L("Custom");
|
|
default : assert(false);
|
|
}
|
|
return {};
|
|
}
|
|
|
|
GCodeExtrusionRole string_to_gcode_extrusion_role(const std::string_view role)
|
|
{
|
|
if (role == L("Perimeter"))
|
|
return GCodeExtrusionRole::Perimeter;
|
|
else if (role == L("External perimeter"))
|
|
return GCodeExtrusionRole::ExternalPerimeter;
|
|
else if (role == L("Overhang perimeter"))
|
|
return GCodeExtrusionRole::OverhangPerimeter;
|
|
else if (role == L("Internal infill"))
|
|
return GCodeExtrusionRole::InternalInfill;
|
|
else if (role == L("Solid infill"))
|
|
return GCodeExtrusionRole::SolidInfill;
|
|
else if (role == L("Top solid infill"))
|
|
return GCodeExtrusionRole::TopSolidInfill;
|
|
else if (role == L("Ironing"))
|
|
return GCodeExtrusionRole::Ironing;
|
|
else if (role == L("Bridge infill"))
|
|
return GCodeExtrusionRole::BridgeInfill;
|
|
else if (role == L("Gap fill"))
|
|
return GCodeExtrusionRole::GapFill;
|
|
else if (role == L("Skirt") || role == L("Skirt/Brim")) // "Skirt" is for backward compatibility with 2.3.1 and earlier
|
|
return GCodeExtrusionRole::Skirt;
|
|
else if (role == L("Support material"))
|
|
return GCodeExtrusionRole::SupportMaterial;
|
|
else if (role == L("Support material interface"))
|
|
return GCodeExtrusionRole::SupportMaterialInterface;
|
|
else if (role == L("Wipe tower"))
|
|
return GCodeExtrusionRole::WipeTower;
|
|
else if (role == L("Custom"))
|
|
return GCodeExtrusionRole::Custom;
|
|
else
|
|
return GCodeExtrusionRole::None;
|
|
}
|
|
|
|
}
|