112 linhas
2.7 KiB
C++
112 linhas
2.7 KiB
C++
/** Copyright (C) 2016 Ultimaker - Released under terms of the AGPLv3 License */
|
|
|
|
#include "utils/intpoint.h" // INT2MM
|
|
#include "GCodePathConfig.h"
|
|
|
|
namespace cura
|
|
{
|
|
|
|
GCodePathConfig::BasicConfig::BasicConfig()
|
|
: speed(0)
|
|
, acceleration(0)
|
|
, jerk(0)
|
|
, line_width(0)
|
|
, flow(100)
|
|
{
|
|
}
|
|
|
|
|
|
GCodePathConfig::BasicConfig::BasicConfig(double speed, double acceleration, double jerk, int line_width, double flow)
|
|
: speed(speed)
|
|
, acceleration(acceleration)
|
|
, jerk(jerk)
|
|
, line_width(line_width)
|
|
, flow(flow)
|
|
{
|
|
}
|
|
|
|
void GCodePathConfig::BasicConfig::set(double speed, double acceleration, double jerk, int line_width, double flow)
|
|
{
|
|
this->speed = speed;
|
|
this->acceleration = acceleration;
|
|
this->jerk = jerk;
|
|
this->line_width = line_width;
|
|
this->flow = flow;
|
|
}
|
|
|
|
|
|
GCodePathConfig::GCodePathConfig(PrintFeatureType type)
|
|
: extrusion_mm3_per_mm(0.0)
|
|
, type(type)
|
|
{
|
|
}
|
|
|
|
void GCodePathConfig::init(double speed, double acceleration, double jerk, int line_width, double flow)
|
|
{
|
|
iconic_config.set(speed, acceleration, jerk, line_width, flow);
|
|
current_config = iconic_config;
|
|
}
|
|
|
|
void GCodePathConfig::setLayerHeight(int layer_height)
|
|
{
|
|
this->layer_thickness = layer_height;
|
|
calculateExtrusion();
|
|
}
|
|
|
|
void GCodePathConfig::smoothSpeed(GCodePathConfig::BasicConfig first_layer_config, int layer_nr, double max_speed_layer)
|
|
{
|
|
current_config.speed = (iconic_config.speed * layer_nr) / max_speed_layer + (first_layer_config.speed * (max_speed_layer - layer_nr) / max_speed_layer);
|
|
current_config.acceleration = (iconic_config.acceleration * layer_nr) / max_speed_layer + (first_layer_config.acceleration * (max_speed_layer - layer_nr) / max_speed_layer);
|
|
current_config.jerk = (iconic_config.jerk * layer_nr) / max_speed_layer + (first_layer_config.jerk * (max_speed_layer - layer_nr) / max_speed_layer);
|
|
}
|
|
|
|
void GCodePathConfig::setSpeedIconic()
|
|
{
|
|
current_config.speed = iconic_config.speed;
|
|
current_config.acceleration = iconic_config.acceleration;
|
|
current_config.jerk = iconic_config.jerk;
|
|
}
|
|
|
|
double GCodePathConfig::getExtrusionMM3perMM()
|
|
{
|
|
return extrusion_mm3_per_mm;
|
|
}
|
|
|
|
double GCodePathConfig::getSpeed()
|
|
{
|
|
return current_config.speed;
|
|
}
|
|
|
|
double GCodePathConfig::getAcceleration()
|
|
{
|
|
return current_config.acceleration;
|
|
}
|
|
|
|
double GCodePathConfig::getJerk()
|
|
{
|
|
return current_config.jerk;
|
|
}
|
|
|
|
int GCodePathConfig::getLineWidth()
|
|
{
|
|
return current_config.line_width;
|
|
}
|
|
|
|
bool GCodePathConfig::isTravelPath()
|
|
{
|
|
return current_config.line_width == 0;
|
|
}
|
|
|
|
double GCodePathConfig::getFlowPercentage()
|
|
{
|
|
return current_config.flow;
|
|
}
|
|
|
|
void GCodePathConfig::calculateExtrusion()
|
|
{
|
|
extrusion_mm3_per_mm = INT2MM(current_config.line_width) * INT2MM(layer_thickness) * double(current_config.flow) / 100.0;
|
|
}
|
|
|
|
|
|
}//namespace cura
|