mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-07-30 06:12:12 +00:00
Complete basic draw_box function
This commit is contained in:
@@ -391,26 +391,25 @@ std::string CalibPressureAdvancePattern::draw_line(double to_x, double to_y, std
|
|||||||
|
|
||||||
std::string CalibPressureAdvancePattern::draw_box(double min_x, double min_y, double size_x, double size_y)
|
std::string CalibPressureAdvancePattern::draw_box(double min_x, double min_y, double size_x, double size_y)
|
||||||
{
|
{
|
||||||
auto& config = mp_gcodegen->config();
|
const auto& config = mp_gcodegen->config();
|
||||||
auto& writer = mp_gcodegen->writer();
|
const auto& writer = mp_gcodegen->writer();
|
||||||
std::stringstream gcode;
|
std::stringstream gcode;
|
||||||
|
|
||||||
double x = min_x;
|
double x = min_x;
|
||||||
double y = min_y;
|
double y = min_y;
|
||||||
double max_x = min_x + size_x;
|
|
||||||
double max_y = min_y + size_y;
|
|
||||||
|
|
||||||
double layer_height;
|
const double max_x = min_x + size_x;
|
||||||
if (mp_gcodegen.m_layer_index <= 0) {
|
const double max_y = min_y + size_y;
|
||||||
layer_height = config.initial_layer_print_height.value;
|
|
||||||
} else {
|
|
||||||
layer_height = config.layer_height.value;
|
|
||||||
}
|
|
||||||
|
|
||||||
double spacing = line_width_anchor() - layer_height * (1 - M_PI / 4);
|
int num_perimeters = m_anchor_perimeters;
|
||||||
|
const double layer_height = m_height_first_layer;
|
||||||
|
const double line_width = m_nozzle_diameter * m_anchor_layer_line_ratio / 100;
|
||||||
|
const double speed = m_speed_first_layer * 60;
|
||||||
|
|
||||||
|
const double spacing = line_width - layer_height * (1 - M_PI / 4);
|
||||||
|
|
||||||
// if number of perims exceeds size of box, reduce it to max
|
// if number of perims exceeds size of box, reduce it to max
|
||||||
int max_perimeters =
|
const int max_perimeters =
|
||||||
std::min(
|
std::min(
|
||||||
// this is the equivalent of number of perims for concentric fill
|
// this is the equivalent of number of perims for concentric fill
|
||||||
std::floor(size_x * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45))),
|
std::floor(size_x * std::sin(to_radians(45))) / (spacing / std::sin(to_radians(45))),
|
||||||
@@ -418,9 +417,9 @@ std::string CalibPressureAdvancePattern::draw_box(double min_x, double min_y, do
|
|||||||
)
|
)
|
||||||
;
|
;
|
||||||
|
|
||||||
int num_perimeters = std::min(config.num_perimeters, max_perimeters);
|
num_perimeters = std::min(num_perimeters, max_perimeters);
|
||||||
|
|
||||||
gcode << move_to(Vec2d(min_x, min_y));
|
gcode << move_to(Vec2d(min_x, min_y), "Move to box start");
|
||||||
|
|
||||||
for (int i = 0; i < num_perimeters; ++i) {
|
for (int i = 0; i < num_perimeters; ++i) {
|
||||||
if (i != 0) { // after first perimeter, step inwards to start next perimeter
|
if (i != 0) { // after first perimeter, step inwards to start next perimeter
|
||||||
@@ -428,9 +427,18 @@ std::string CalibPressureAdvancePattern::draw_box(double min_x, double min_y, do
|
|||||||
y += spacing;
|
y += spacing;
|
||||||
gcode << move_to(Vec2d(x, y), "Step inwards to print next perimeter");
|
gcode << move_to(Vec2d(x, y), "Step inwards to print next perimeter");
|
||||||
}
|
}
|
||||||
// draw line up
|
|
||||||
y += size_y - (i * spacing) * 2;
|
y += size_y - i * spacing * 2;
|
||||||
gcode << writer.extrude_to_xy(Vec2d(x, y), );
|
gcode << draw_line(x, y, "Draw perimeter (up)");
|
||||||
|
|
||||||
|
x += size_x - i * spacing * 2;
|
||||||
|
gcode << draw_line(x, y, "Draw perimeter (right)");
|
||||||
|
|
||||||
|
y -= size_y - i * spacing * 2;
|
||||||
|
gcode << draw_line(x, y, "Draw perimeter (down)");
|
||||||
|
|
||||||
|
x -= size_x - i * spacing * 2;
|
||||||
|
gcode << draw_line(x, y, "Draw perimeter (left)");
|
||||||
}
|
}
|
||||||
|
|
||||||
return gcode.str();
|
return gcode.str();
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ public:
|
|||||||
m_extrusion_multiplier(0.98),
|
m_extrusion_multiplier(0.98),
|
||||||
m_height_layer(0.2),
|
m_height_layer(0.2),
|
||||||
m_height_first_layer(0.25),
|
m_height_first_layer(0.25),
|
||||||
|
m_speed_first_layer(30),
|
||||||
|
|
||||||
m_anchor_perimeters(4),
|
m_anchor_perimeters(4),
|
||||||
m_anchor_layer_line_ratio(140),
|
m_anchor_layer_line_ratio(140),
|
||||||
@@ -151,6 +152,7 @@ private:
|
|||||||
double m_extrusion_multiplier;
|
double m_extrusion_multiplier;
|
||||||
double m_height_layer;
|
double m_height_layer;
|
||||||
double m_height_first_layer;
|
double m_height_first_layer;
|
||||||
|
double m_speed_first_layer;
|
||||||
|
|
||||||
int m_anchor_perimeters;
|
int m_anchor_perimeters;
|
||||||
int m_anchor_layer_line_ratio;
|
int m_anchor_layer_line_ratio;
|
||||||
|
|||||||
Reference in New Issue
Block a user