mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-11-02 20:51:23 -07:00 
			
		
		
		
	The XS was left only for the unit / integration tests, and it links libslic3r only. No wxWidgets are allowed to be used from Perl starting from now.
		
			
				
	
	
		
			81 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
#ifndef slic3r_Extruder_hpp_
 | 
						|
#define slic3r_Extruder_hpp_
 | 
						|
 | 
						|
#include "libslic3r.h"
 | 
						|
#include "Point.hpp"
 | 
						|
#include "PrintConfig.hpp"
 | 
						|
 | 
						|
namespace Slic3r {
 | 
						|
 | 
						|
class Extruder
 | 
						|
{
 | 
						|
public:
 | 
						|
    Extruder(unsigned int id, GCodeConfig *config);
 | 
						|
    virtual ~Extruder() {}
 | 
						|
 | 
						|
    void   reset() {
 | 
						|
        m_E             = 0;
 | 
						|
        m_absolute_E    = 0;
 | 
						|
        m_retracted     = 0;
 | 
						|
        m_restart_extra = 0;
 | 
						|
    }
 | 
						|
 | 
						|
    unsigned int id() const { return m_id; }
 | 
						|
 | 
						|
    double extrude(double dE);
 | 
						|
    double retract(double length, double restart_extra);
 | 
						|
    double unretract();
 | 
						|
    double E() const { return m_E; }
 | 
						|
    void   reset_E() { m_E = 0.; }
 | 
						|
    double e_per_mm(double mm3_per_mm) const { return mm3_per_mm * m_e_per_mm3; }
 | 
						|
    double e_per_mm3() const { return m_e_per_mm3; }
 | 
						|
    // Used filament volume in mm^3.
 | 
						|
    double extruded_volume() const;
 | 
						|
    // Used filament length in mm.
 | 
						|
    double used_filament() const;
 | 
						|
    
 | 
						|
    double filament_diameter() const;
 | 
						|
    double filament_crossection() const { return this->filament_diameter() * this->filament_diameter() * 0.25 * PI; }
 | 
						|
    double filament_density() const;
 | 
						|
    double filament_cost() const;
 | 
						|
    double extrusion_multiplier() const;
 | 
						|
    double retract_before_wipe() const;
 | 
						|
    double retract_length() const;
 | 
						|
    double retract_lift() const;
 | 
						|
    int    retract_speed() const;
 | 
						|
    int    deretract_speed() const;
 | 
						|
    double retract_restart_extra() const;
 | 
						|
    double retract_length_toolchange() const;
 | 
						|
    double retract_restart_extra_toolchange() const;
 | 
						|
 | 
						|
    // Constructor for a key object, to be used by the stdlib search functions.
 | 
						|
    static Extruder key(unsigned int id) { return Extruder(id); }
 | 
						|
 | 
						|
private:
 | 
						|
    // Private constructor to create a key for a search in std::set.
 | 
						|
    Extruder(unsigned int id) : m_id(id) {}
 | 
						|
 | 
						|
    // Reference to GCodeWriter instance owned by GCodeWriter.
 | 
						|
    GCodeConfig *m_config;
 | 
						|
    // Print-wide global ID of this extruder.
 | 
						|
    unsigned int m_id;
 | 
						|
    // Current state of the extruder axis, may be resetted if use_relative_e_distances.
 | 
						|
    double       m_E;
 | 
						|
    // Current state of the extruder tachometer, used to output the extruded_volume() and used_filament() statistics.
 | 
						|
    double       m_absolute_E;
 | 
						|
    // Current positive amount of retraction.
 | 
						|
    double       m_retracted;
 | 
						|
    // When retracted, this value stores the extra amount of priming on deretraction.
 | 
						|
    double       m_restart_extra;
 | 
						|
    double       m_e_per_mm3;
 | 
						|
};
 | 
						|
 | 
						|
// Sort Extruder objects by the extruder id by default.
 | 
						|
inline bool operator==(const Extruder &e1, const Extruder &e2) { return e1.id() == e2.id(); }
 | 
						|
inline bool operator!=(const Extruder &e1, const Extruder &e2) { return e1.id() != e2.id(); }
 | 
						|
inline bool operator< (const Extruder &e1, const Extruder &e2) { return e1.id() < e2.id(); }
 | 
						|
inline bool operator> (const Extruder &e1, const Extruder &e2) { return e1.id() > e2.id(); }
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
#endif
 |