diff options
Diffstat (limited to 'src/libslic3r/Flow.hpp')
-rw-r--r-- | src/libslic3r/Flow.hpp | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/libslic3r/Flow.hpp b/src/libslic3r/Flow.hpp new file mode 100644 index 000000000..516490b35 --- /dev/null +++ b/src/libslic3r/Flow.hpp @@ -0,0 +1,67 @@ +#ifndef slic3r_Flow_hpp_ +#define slic3r_Flow_hpp_ + +#include "libslic3r.h" +#include "Config.hpp" +#include "ExtrusionEntity.hpp" + +namespace Slic3r { + +class PrintObject; + +// Extra spacing of bridge threads, in mm. +#define BRIDGE_EXTRA_SPACING 0.05 + +// Overlap factor of perimeter lines. Currently no overlap. +#ifdef HAS_PERIMETER_LINE_OVERLAP + #define PERIMETER_LINE_OVERLAP_FACTOR 1.0 +#endif + +enum FlowRole { + frExternalPerimeter, + frPerimeter, + frInfill, + frSolidInfill, + frTopSolidInfill, + frSupportMaterial, + frSupportMaterialInterface, +}; + +class Flow +{ +public: + // Non bridging flow: Maximum width of an extrusion with semicircles at the ends. + // Bridging flow: Bridge thread diameter. + float width; + // Non bridging flow: Layer height. + // Bridging flow: Bridge thread diameter = layer height. + float height; + // Nozzle diameter. + float nozzle_diameter; + // Is it a bridge? + bool bridge; + + Flow(float _w, float _h, float _nd, bool _bridge = false) : + width(_w), height(_h), nozzle_diameter(_nd), bridge(_bridge) {}; + + float spacing() const; + float spacing(const Flow &other) const; + double mm3_per_mm() const; + coord_t scaled_width() const { return coord_t(scale_(this->width)); }; + coord_t scaled_spacing() const { return coord_t(scale_(this->spacing())); }; + coord_t scaled_spacing(const Flow &other) const { return coord_t(scale_(this->spacing(other))); }; + + static Flow new_from_config_width(FlowRole role, const ConfigOptionFloatOrPercent &width, float nozzle_diameter, float height, float bridge_flow_ratio); + // Create a flow from the spacing of extrusion lines. + // This method is used exclusively to calculate new flow of 100% infill, where the extrusion width was allowed to scale + // to fit a region with integer number of lines. + static Flow new_from_spacing(float spacing, float nozzle_diameter, float height, bool bridge); +}; + +extern Flow support_material_flow(const PrintObject *object, float layer_height = 0.f); +extern Flow support_material_1st_layer_flow(const PrintObject *object, float layer_height = 0.f); +extern Flow support_material_interface_flow(const PrintObject *object, float layer_height = 0.f); + +} + +#endif |