Arquivos
CuraEngine/src/Wireframe2gcode.h
T

171 linhas
5.3 KiB
C++

#ifndef WIREFRAME2GCODE_H
#define WIREFRAME2GCODE_H
#include <functional> // passing function pointer or lambda as argument to a function
#include "utils/NoCopy.h"
#include "weaveDataStorage.h"
#include "commandSocket.h"
#include "settings/settings.h"
#include "MeshGroup.h"
#include "slicer.h"
#include "utils/polygon.h"
#include "Weaver.h"
namespace cura
{
/*!
* Export class for exporting wireframe print gcode / weaver gcode / wireprint gcode.
*/
class Wireframe2gcode : public SettingsMessenger, NoCopy
{
private:
static const int STRATEGY_COMPENSATE = 0;
static const int STRATEGY_KNOT = 1;
static const int STRATEGY_RETRACT = 2;
int initial_layer_thickness;
int filament_diameter;
int line_width;
double flowConnection;
double flowFlat;
double extrusion_mm3_per_mm_connection;
double extrusion_mm3_per_mm_flat;
int nozzle_outer_diameter;
int nozzle_head_distance;
double nozzle_expansion_angle;
int nozzle_clearance;
int nozzle_top_diameter;
double moveSpeed;
double speedBottom;
double speedUp;
double speedDown;
double speedFlat;
int connectionHeight;
int roof_inset;
double flat_delay;
double bottom_delay;
double top_delay;
int up_dist_half_speed;
int top_jump_dist;
int fall_down;
int drag_along;
int strategy;
double go_back_to_last_top;
int straight_first_when_going_down;
int roof_fall_down;
int roof_drag_along;
double roof_outer_delay;
RetractionConfig standard_retraction_config; //!< The standard retraction settings used for moves between parts etc.
public:
GCodeExport& gcode; //!< Where the result is 'stored'
Wireframe2gcode(Weaver& weaver, GCodeExport& gcode, SettingsBase* settings_base);
void writeGCode();
private:
WireFrame& wireFrame;
/*!
* Startup gcode: nozzle temp up, retraction settings, bed temp
*/
void processStartingCode();
/*!
* Lay down a skirt
*/
void processSkirt();
/*!
* End gcode: nozzle temp down
*/
void finalize();
void writeFill(std::vector<WeaveRoofPart>& infill_insets, Polygons& outlines
, std::function<void (Wireframe2gcode& thiss, WeaveRoofPart& inset, WeaveConnectionPart& part, unsigned int segment_idx)> connectionHandler
, std::function<void (Wireframe2gcode& thiss, WeaveConnectionSegment& p)> flatHandler);
/*!
* Function for writing the gcode for a diagonally down movement of a connection.
*
* \param layer The layer in which the segment is
* \param part The part in which the segment is
* \param segment_idx The index of the segment in the \p part
*/
void go_down(WeaveLayer& layer, WeaveConnectionPart& part, unsigned int segment_idx);
/*!
* Function for writing the gcode of an upward move of a connection, which does a couple of small moves at the top.
*
* \param layer The layer in which the segment is
* \param part The part in which the segment is
* \param segment_idx The index of the segment in the \p part
*/
void strategy_knot(WeaveLayer& layer, WeaveConnectionPart& part, unsigned int segment_idx);
/*!
* Function for writing the gcode of an upward move of a connection, which does a retract at the top.
*
* \param layer The layer in which the segment is
* \param part The part in which the segment is
* \param segment_idx The index of the segment in the \p part
*/
void strategy_retract(WeaveLayer& layer, WeaveConnectionPart& part, unsigned int segment_idx);
/*!
* Function for writing the gcode of an upward move of a connection, which goes Wireframe2gcode::fall_down further up
* and Wireframe2gcode::drag_along back from the direction it will go to next.
*
* \param layer The layer in which the segment is
* \param part The part in which the segment is
* \param segment_idx The index of the segment in the \p part
*/
void strategy_compensate(WeaveLayer& layer, WeaveConnectionPart& part, unsigned int segment_idx);
/*!
* Function writing the gcode of a segment in the connection between two layers.
*
* \param layer The layer in which the segment is
* \param part The part in which the segment is
* \param segment_idx The index of the segment in the \p part
*/
void handle_segment(WeaveLayer& layer, WeaveConnectionPart& part, unsigned int segment_idx);
/*!
* Function for writing the gcode of a segment in the connection between two roof insets / floor outsets.
*
* \param inset The inset in which the segment is
* \param part the part in which the segment is
* \param segment_idx The index of the segment in the \p part
*/
void handle_roof_segment(WeaveRoofPart& inset, WeaveConnectionPart& part, unsigned int segment_idx);
/*!
* Write a move action to gcode, inserting a retraction if neccesary.
*
* \param to The 3D destination of the move
*/
void writeMoveWithRetract(Point3 to);
/*!
* Write a move action to gcode, inserting a retraction if neccesary.
*
* \param to The 2D destination of the move
*/
void writeMoveWithRetract(Point to);
};
}//namespace cura
#endif//WIREFRAME2GCODE_H