mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-14 09:05:54 +08:00
new retraction calibration
had to add an override from region to ~gcode writer (and gcode), maybe I have to think about a better system that the current system that will began to transform into a spaghetti monster
This commit is contained in:
parent
06d2b9b2d0
commit
dd2e3241f8
31
resources/calibration/retraction/retraction.html
Normal file
31
resources/calibration/retraction/retraction.html
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="fr">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>Retraction Calibration</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<table width="100%">
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td style="text-align: center;">
|
||||||
|
<h1>Retraction Calibration</h1>
|
||||||
|
</td>
|
||||||
|
<td style="text-align: right;"><strong>
|
||||||
|
<table><tr><td>needs:</td><td style="text-align: left;">Flow</td><td style="text-align: left;">Temp</td></tr>
|
||||||
|
</table>
|
||||||
|
</strong>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>it's preferable to have done the flow and temperature calibration.
|
||||||
|
This calibration will help you to choose the right retraction legnth for your extrudr and the current filament.</p>
|
||||||
|
<p>This test will print some retraction test patches</h2>
|
||||||
|
<p>The goal is to choose the highest temperature possible that doesn't produce artifacts.</p>
|
||||||
|
<p>First, you have to analyse the tower. Each floor has the according temperature written on it.</p>
|
||||||
|
<h2>Notes</h2>
|
||||||
|
<p>The retraction speed should be set to the maximum value your extruder/drivers/firmware can reliably support.</p>
|
||||||
|
</body>
|
||||||
|
</html>
|
BIN
resources/calibration/retraction/retraction_calibration.amf
Normal file
BIN
resources/calibration/retraction/retraction_calibration.amf
Normal file
Binary file not shown.
Binary file not shown.
@ -234,9 +234,12 @@ std::string Wipe::wipe(GCode &gcodegen, bool toolchange)
|
|||||||
double wipe_speed = gcodegen.writer().config.travel_speed.value * 0.8;
|
double wipe_speed = gcodegen.writer().config.travel_speed.value * 0.8;
|
||||||
|
|
||||||
// get the retraction length
|
// get the retraction length
|
||||||
double length = toolchange
|
double length = gcodegen.writer().tool()->retract_length();
|
||||||
? gcodegen.writer().tool()->retract_length_toolchange()
|
if (toolchange) {
|
||||||
: gcodegen.writer().tool()->retract_length();
|
length = gcodegen.writer().tool()->retract_length_toolchange();
|
||||||
|
} else if (gcodegen.writer().config_region && gcodegen.writer().config_region->print_retract_length.value >= 0) {
|
||||||
|
length = gcodegen.writer().config_region->print_retract_length.value;
|
||||||
|
}
|
||||||
// Shorten the retraction length by the amount already retracted before wipe.
|
// Shorten the retraction length by the amount already retracted before wipe.
|
||||||
length *= (1. - gcodegen.writer().tool()->retract_before_wipe());
|
length *= (1. - gcodegen.writer().tool()->retract_before_wipe());
|
||||||
|
|
||||||
@ -2501,7 +2504,7 @@ void GCode::process_layer(
|
|||||||
m_layer = layers[instance_to_print.layer_id].layer();
|
m_layer = layers[instance_to_print.layer_id].layer();
|
||||||
}
|
}
|
||||||
for (ObjectByExtruder::Island &island : instance_to_print.object_by_extruder.islands) {
|
for (ObjectByExtruder::Island &island : instance_to_print.object_by_extruder.islands) {
|
||||||
const auto& by_region_specific =
|
const std::vector<ObjectByExtruder::Island::Region>& by_region_specific =
|
||||||
is_anything_overridden ?
|
is_anything_overridden ?
|
||||||
island.by_region_per_copy(by_region_per_copy_cache,
|
island.by_region_per_copy(by_region_per_copy_cache,
|
||||||
static_cast<unsigned int>(instance_to_print.instance_id),
|
static_cast<unsigned int>(instance_to_print.instance_id),
|
||||||
@ -3732,8 +3735,9 @@ std::string GCode::extrude_perimeters(const Print &print, const std::vector<Obje
|
|||||||
{
|
{
|
||||||
std::string gcode;
|
std::string gcode;
|
||||||
for (const ObjectByExtruder::Island::Region ®ion : by_region)
|
for (const ObjectByExtruder::Island::Region ®ion : by_region)
|
||||||
if (! region.perimeters.empty()) {
|
if (!region.perimeters.empty()) {
|
||||||
m_config.apply(print.regions()[®ion - &by_region.front()]->config());
|
m_config.apply(print.regions()[®ion - &by_region.front()]->config());
|
||||||
|
m_writer.apply_print_region_config(print.regions()[®ion - &by_region.front()]->config());
|
||||||
for (const ExtrusionEntity *ee : region.perimeters)
|
for (const ExtrusionEntity *ee : region.perimeters)
|
||||||
gcode += this->extrude_entity(*ee, "", -1., &lower_layer_edge_grid);
|
gcode += this->extrude_entity(*ee, "", -1., &lower_layer_edge_grid);
|
||||||
}
|
}
|
||||||
@ -3745,8 +3749,9 @@ std::string GCode::extrude_infill(const Print &print, const std::vector<ObjectBy
|
|||||||
{
|
{
|
||||||
std::string gcode;
|
std::string gcode;
|
||||||
for (const ObjectByExtruder::Island::Region ®ion : by_region) {
|
for (const ObjectByExtruder::Island::Region ®ion : by_region) {
|
||||||
if (print.regions()[®ion - &by_region.front()]->config().infill_first == is_infill_first) {
|
if (!region.infills.empty() && print.regions()[®ion - &by_region.front()]->config().infill_first == is_infill_first) {
|
||||||
m_config.apply(print.regions()[®ion - &by_region.front()]->config());
|
m_config.apply(print.regions()[®ion - &by_region.front()]->config());
|
||||||
|
m_writer.apply_print_region_config(print.regions()[®ion - &by_region.front()]->config());
|
||||||
ExtrusionEntitiesPtr extrusions { region.infills };
|
ExtrusionEntitiesPtr extrusions { region.infills };
|
||||||
chain_and_reorder_extrusion_entities(extrusions, &m_last_pos);
|
chain_and_reorder_extrusion_entities(extrusions, &m_last_pos);
|
||||||
for (const ExtrusionEntity *fill : extrusions) {
|
for (const ExtrusionEntity *fill : extrusions) {
|
||||||
|
@ -26,6 +26,11 @@ void GCodeWriter::apply_print_config(const PrintConfig &print_config)
|
|||||||
print_config.machine_max_acceleration_extruding.values.front() : 0);
|
print_config.machine_max_acceleration_extruding.values.front() : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GCodeWriter::apply_print_region_config(const PrintRegionConfig& print_region_config)
|
||||||
|
{
|
||||||
|
config_region = &print_region_config;
|
||||||
|
}
|
||||||
|
|
||||||
void GCodeWriter::set_extruders(std::vector<uint16_t> extruder_ids)
|
void GCodeWriter::set_extruders(std::vector<uint16_t> extruder_ids)
|
||||||
{
|
{
|
||||||
std::sort(extruder_ids.begin(), extruder_ids.end());
|
std::sort(extruder_ids.begin(), extruder_ids.end());
|
||||||
@ -474,6 +479,14 @@ std::string GCodeWriter::retract(bool before_wipe)
|
|||||||
{
|
{
|
||||||
double factor = before_wipe ? m_tool->retract_before_wipe() : 1.;
|
double factor = before_wipe ? m_tool->retract_before_wipe() : 1.;
|
||||||
assert(factor >= 0. && factor <= 1. + EPSILON);
|
assert(factor >= 0. && factor <= 1. + EPSILON);
|
||||||
|
//check for override
|
||||||
|
if (config_region && config_region->print_retract_length >= 0) {
|
||||||
|
return this->_retract(
|
||||||
|
factor * config_region->print_retract_length,
|
||||||
|
factor * m_tool->retract_restart_extra(),
|
||||||
|
"retract"
|
||||||
|
);
|
||||||
|
}
|
||||||
return this->_retract(
|
return this->_retract(
|
||||||
factor * m_tool->retract_length(),
|
factor * m_tool->retract_length(),
|
||||||
factor * m_tool->retract_restart_extra(),
|
factor * m_tool->retract_restart_extra(),
|
||||||
|
@ -15,6 +15,8 @@ public:
|
|||||||
static std::string PausePrintCode;
|
static std::string PausePrintCode;
|
||||||
GCodeConfig config;
|
GCodeConfig config;
|
||||||
bool multiple_extruders;
|
bool multiple_extruders;
|
||||||
|
// override from region
|
||||||
|
const PrintRegionConfig* config_region = nullptr;
|
||||||
|
|
||||||
GCodeWriter() :
|
GCodeWriter() :
|
||||||
multiple_extruders(false), m_extrusion_axis("E"), m_tool(nullptr),
|
multiple_extruders(false), m_extrusion_axis("E"), m_tool(nullptr),
|
||||||
@ -28,6 +30,7 @@ public:
|
|||||||
|
|
||||||
std::string extrusion_axis() const { return m_extrusion_axis; }
|
std::string extrusion_axis() const { return m_extrusion_axis; }
|
||||||
void apply_print_config(const PrintConfig &print_config);
|
void apply_print_config(const PrintConfig &print_config);
|
||||||
|
void apply_print_region_config(const PrintRegionConfig& print_region_config);
|
||||||
// Extruders are expected to be sorted in an increasing order.
|
// Extruders are expected to be sorted in an increasing order.
|
||||||
void set_extruders(std::vector<uint16_t> extruder_ids);
|
void set_extruders(std::vector<uint16_t> extruder_ids);
|
||||||
const std::vector<Extruder>& extruders() const { return m_extruders; }
|
const std::vector<Extruder>& extruders() const { return m_extruders; }
|
||||||
|
@ -2463,6 +2463,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->tooltip = L("Retraction is not triggered when travel moves are shorter than this length.");
|
def->tooltip = L("Retraction is not triggered when travel moves are shorter than this length.");
|
||||||
def->sidetext = L("mm");
|
def->sidetext = L("mm");
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
|
def->min = 0;
|
||||||
def->set_default_value(new ConfigOptionFloats { 2. });
|
def->set_default_value(new ConfigOptionFloats { 2. });
|
||||||
|
|
||||||
def = this->add("retract_before_wipe", coPercents);
|
def = this->add("retract_before_wipe", coPercents);
|
||||||
@ -2488,8 +2489,16 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->tooltip = L("When retraction is triggered, filament is pulled back by the specified amount "
|
def->tooltip = L("When retraction is triggered, filament is pulled back by the specified amount "
|
||||||
"(the length is measured on raw filament, before it enters the extruder).");
|
"(the length is measured on raw filament, before it enters the extruder).");
|
||||||
def->sidetext = L("mm (zero to disable)");
|
def->sidetext = L("mm (zero to disable)");
|
||||||
|
def->min = 0;
|
||||||
def->set_default_value(new ConfigOptionFloats { 2. });
|
def->set_default_value(new ConfigOptionFloats { 2. });
|
||||||
|
|
||||||
|
def = this->add("print_retract_length", coFloat);
|
||||||
|
def->label = L("Retraction length");
|
||||||
|
def->category = OptionCategory::width;
|
||||||
|
def->tooltip = L("Override the retract_length settign from the printer config. Used for calibration. Set negative to disable");
|
||||||
|
def->mode = comExpert;
|
||||||
|
def->set_default_value(new ConfigOptionFloat( -1.f));
|
||||||
|
|
||||||
def = this->add("retract_length_toolchange", coFloats);
|
def = this->add("retract_length_toolchange", coFloats);
|
||||||
def->label = L("Length");
|
def->label = L("Length");
|
||||||
def->full_label = L("Retraction Length (Toolchange)");
|
def->full_label = L("Retraction Length (Toolchange)");
|
||||||
@ -2498,6 +2507,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
"the extruder).");
|
"the extruder).");
|
||||||
def->sidetext = L("mm (zero to disable)");
|
def->sidetext = L("mm (zero to disable)");
|
||||||
def->mode = comExpert;
|
def->mode = comExpert;
|
||||||
|
def->min = 0;
|
||||||
def->set_default_value(new ConfigOptionFloats { 10. });
|
def->set_default_value(new ConfigOptionFloats { 10. });
|
||||||
|
|
||||||
def = this->add("retract_lift", coFloats);
|
def = this->add("retract_lift", coFloats);
|
||||||
|
@ -681,6 +681,7 @@ public:
|
|||||||
// Total number of perimeters.
|
// Total number of perimeters.
|
||||||
ConfigOptionInt perimeters;
|
ConfigOptionInt perimeters;
|
||||||
ConfigOptionPercent print_extrusion_multiplier;
|
ConfigOptionPercent print_extrusion_multiplier;
|
||||||
|
ConfigOptionFloat print_retract_length;
|
||||||
ConfigOptionFloatOrPercent small_perimeter_speed;
|
ConfigOptionFloatOrPercent small_perimeter_speed;
|
||||||
ConfigOptionEnum<InfillPattern> solid_fill_pattern;
|
ConfigOptionEnum<InfillPattern> solid_fill_pattern;
|
||||||
ConfigOptionFloat solid_infill_below_area;
|
ConfigOptionFloat solid_infill_below_area;
|
||||||
@ -768,6 +769,7 @@ protected:
|
|||||||
OPT_PTR(perimeter_speed);
|
OPT_PTR(perimeter_speed);
|
||||||
OPT_PTR(perimeters);
|
OPT_PTR(perimeters);
|
||||||
OPT_PTR(print_extrusion_multiplier);
|
OPT_PTR(print_extrusion_multiplier);
|
||||||
|
OPT_PTR(print_retract_length);
|
||||||
OPT_PTR(small_perimeter_speed);
|
OPT_PTR(small_perimeter_speed);
|
||||||
OPT_PTR(solid_fill_pattern);
|
OPT_PTR(solid_fill_pattern);
|
||||||
OPT_PTR(solid_infill_below_area);
|
OPT_PTR(solid_infill_below_area);
|
||||||
|
@ -154,16 +154,30 @@ SVG::draw_outline(const Surfaces &surfaces, std::string stroke_outer, std::strin
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SVG::draw(const SurfacesPtr &surfaces, std::string fill, const float fill_opacity)
|
SVG::draw(const SurfacesPtr& surfaces, std::string fill, const float fill_opacity)
|
||||||
{
|
{
|
||||||
for (SurfacesPtr::const_iterator it = surfaces.begin(); it != surfaces.end(); ++it)
|
for (SurfacesPtr::const_iterator it = surfaces.begin(); it != surfaces.end(); ++it)
|
||||||
this->draw(*(*it), fill, fill_opacity);
|
this->draw(*(*it), fill, fill_opacity);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SVG::draw_outline(const SurfacesPtr &surfaces, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
|
SVG::draw_outline(const SurfacesPtr& surfaces, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
|
||||||
{
|
{
|
||||||
for (SurfacesPtr::const_iterator it = surfaces.begin(); it != surfaces.end(); ++ it)
|
for (SurfacesPtr::const_iterator it = surfaces.begin(); it != surfaces.end(); ++it)
|
||||||
|
draw_outline(*(*it), stroke_outer, stroke_holes, stroke_width);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SVG::draw(const SurfacesConstPtr& surfaces, std::string fill, const float fill_opacity)
|
||||||
|
{
|
||||||
|
for (SurfacesConstPtr::const_iterator it = surfaces.begin(); it != surfaces.end(); ++it)
|
||||||
|
this->draw(*(*it), fill, fill_opacity);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
SVG::draw_outline(const SurfacesConstPtr& surfaces, std::string stroke_outer, std::string stroke_holes, coordf_t stroke_width)
|
||||||
|
{
|
||||||
|
for (SurfacesConstPtr::const_iterator it = surfaces.begin(); it != surfaces.end(); ++it)
|
||||||
draw_outline(*(*it), stroke_outer, stroke_holes, stroke_width);
|
draw_outline(*(*it), stroke_outer, stroke_holes, stroke_width);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,8 +53,10 @@ public:
|
|||||||
void draw_outline(const Surface &surface, std::string stroke_outer = "black", std::string stroke_holes = "blue", coordf_t stroke_width = 0);
|
void draw_outline(const Surface &surface, std::string stroke_outer = "black", std::string stroke_holes = "blue", coordf_t stroke_width = 0);
|
||||||
void draw(const Surfaces &surfaces, std::string fill = "grey", const float fill_opacity=1.f);
|
void draw(const Surfaces &surfaces, std::string fill = "grey", const float fill_opacity=1.f);
|
||||||
void draw_outline(const Surfaces &surfaces, std::string stroke_outer = "black", std::string stroke_holes = "blue", coordf_t stroke_width = 0);
|
void draw_outline(const Surfaces &surfaces, std::string stroke_outer = "black", std::string stroke_holes = "blue", coordf_t stroke_width = 0);
|
||||||
void draw(const SurfacesPtr &surfaces, std::string fill = "grey", const float fill_opacity=1.f);
|
void draw(const SurfacesPtr& surfaces, std::string fill = "grey", const float fill_opacity = 1.f);
|
||||||
void draw_outline(const SurfacesPtr &surfaces, std::string stroke_outer = "black", std::string stroke_holes = "blue", coordf_t stroke_width = 0);
|
void draw_outline(const SurfacesPtr& surfaces, std::string stroke_outer = "black", std::string stroke_holes = "blue", coordf_t stroke_width = 0);
|
||||||
|
void draw(const SurfacesConstPtr& surfaces, std::string fill = "grey", const float fill_opacity = 1.f);
|
||||||
|
void draw_outline(const SurfacesConstPtr& surfaces, std::string stroke_outer = "black", std::string stroke_holes = "blue", coordf_t stroke_width = 0);
|
||||||
|
|
||||||
void draw(const Polygon &polygon, std::string fill = "grey");
|
void draw(const Polygon &polygon, std::string fill = "grey");
|
||||||
void draw_outline(const Polygon &polygon, std::string stroke = "black", coordf_t stroke_width = 0);
|
void draw_outline(const Polygon &polygon, std::string stroke = "black", coordf_t stroke_width = 0);
|
||||||
|
@ -32,6 +32,8 @@ set(SLIC3R_GUI_SOURCES
|
|||||||
GUI/CalibrationOverBridgeDialog.hpp
|
GUI/CalibrationOverBridgeDialog.hpp
|
||||||
GUI/CalibrationTempDialog.cpp
|
GUI/CalibrationTempDialog.cpp
|
||||||
GUI/CalibrationTempDialog.hpp
|
GUI/CalibrationTempDialog.hpp
|
||||||
|
GUI/CalibrationRetractionDialog.cpp
|
||||||
|
GUI/CalibrationRetractionDialog.hpp
|
||||||
GUI/ConfigSnapshotDialog.cpp
|
GUI/ConfigSnapshotDialog.cpp
|
||||||
GUI/ConfigSnapshotDialog.hpp
|
GUI/ConfigSnapshotDialog.hpp
|
||||||
GUI/3DScene.cpp
|
GUI/3DScene.cpp
|
||||||
|
@ -41,11 +41,11 @@ void CalibrationOverBridgeDialog::create_geometry(wxCommandEvent& event_args) {
|
|||||||
|
|
||||||
assert(objs_idx.size() == 6);
|
assert(objs_idx.size() == 6);
|
||||||
const DynamicPrintConfig* print_config = this->gui_app->get_tab(Preset::TYPE_PRINT)->get_config();
|
const DynamicPrintConfig* print_config = this->gui_app->get_tab(Preset::TYPE_PRINT)->get_config();
|
||||||
const DynamicPrintConfig* printerConfig = this->gui_app->get_tab(Preset::TYPE_PRINTER)->get_config();
|
const DynamicPrintConfig* printer_config = this->gui_app->get_tab(Preset::TYPE_PRINTER)->get_config();
|
||||||
|
|
||||||
/// --- scale ---
|
/// --- scale ---
|
||||||
// model is created for a 0.4 nozzle, scale xy with nozzle size.
|
// model is created for a 0.4 nozzle, scale xy with nozzle size.
|
||||||
const ConfigOptionFloats* nozzle_diameter_config = printerConfig->option<ConfigOptionFloats>("nozzle_diameter");
|
const ConfigOptionFloats* nozzle_diameter_config = printer_config->option<ConfigOptionFloats>("nozzle_diameter");
|
||||||
assert(nozzle_diameter_config->values.size() > 0);
|
assert(nozzle_diameter_config->values.size() > 0);
|
||||||
float nozzle_diameter = nozzle_diameter_config->values[0];
|
float nozzle_diameter = nozzle_diameter_config->values[0];
|
||||||
float xyz_scale = (0.2 + nozzle_diameter) / 0.6;
|
float xyz_scale = (0.2 + nozzle_diameter) / 0.6;
|
||||||
@ -68,7 +68,7 @@ void CalibrationOverBridgeDialog::create_geometry(wxCommandEvent& event_args) {
|
|||||||
|
|
||||||
/// --- translate ---;
|
/// --- translate ---;
|
||||||
const ConfigOptionFloat* extruder_clearance_radius = print_config->option<ConfigOptionFloat>("extruder_clearance_radius");
|
const ConfigOptionFloat* extruder_clearance_radius = print_config->option<ConfigOptionFloat>("extruder_clearance_radius");
|
||||||
const ConfigOptionPoints* bed_shape = printerConfig->option<ConfigOptionPoints>("bed_shape");
|
const ConfigOptionPoints* bed_shape = printer_config->option<ConfigOptionPoints>("bed_shape");
|
||||||
const float brim_width = print_config->option<ConfigOptionFloat>("brim_width")->getFloat();
|
const float brim_width = print_config->option<ConfigOptionFloat>("brim_width")->getFloat();
|
||||||
Vec2d bed_size = BoundingBoxf(bed_shape->values).size();
|
Vec2d bed_size = BoundingBoxf(bed_shape->values).size();
|
||||||
Vec2d bed_min = BoundingBoxf(bed_shape->values).min;
|
Vec2d bed_min = BoundingBoxf(bed_shape->values).min;
|
||||||
|
248
src/slic3r/GUI/CalibrationRetractionDialog.cpp
Normal file
248
src/slic3r/GUI/CalibrationRetractionDialog.cpp
Normal file
@ -0,0 +1,248 @@
|
|||||||
|
#include "CalibrationRetractionDialog.hpp"
|
||||||
|
#include "I18N.hpp"
|
||||||
|
#include "libslic3r/Utils.hpp"
|
||||||
|
#include "GUI.hpp"
|
||||||
|
#include "GUI_ObjectList.hpp"
|
||||||
|
#include "Tab.hpp"
|
||||||
|
#include <wx/scrolwin.h>
|
||||||
|
#include <wx/display.h>
|
||||||
|
#include <wx/file.h>
|
||||||
|
#include "wxExtensions.hpp"
|
||||||
|
|
||||||
|
#if ENABLE_SCROLLABLE
|
||||||
|
static wxSize get_screen_size(wxWindow* window)
|
||||||
|
{
|
||||||
|
const auto idx = wxDisplay::GetFromWindow(window);
|
||||||
|
wxDisplay display(idx != wxNOT_FOUND ? idx : 0u);
|
||||||
|
return display.GetClientArea().GetSize();
|
||||||
|
}
|
||||||
|
#endif // ENABLE_SCROLLABLE
|
||||||
|
|
||||||
|
namespace Slic3r {
|
||||||
|
namespace GUI {
|
||||||
|
|
||||||
|
void CalibrationRetractionDialog::create_buttons(wxStdDialogButtonSizer* buttons){
|
||||||
|
wxString choices_steps[] = { "0.1","0.2","0.5","1" };
|
||||||
|
steps = new wxComboBox(this, wxID_ANY, wxString{ "0.2" }, wxDefaultPosition, wxDefaultSize, 4, choices_steps);
|
||||||
|
steps->SetToolTip(_(L("Each militer add this value to the retraction value. ")));
|
||||||
|
steps->SetSelection(1);
|
||||||
|
wxString choices_nb[] = { "2","4","6","8","10","15","20","25" };
|
||||||
|
nb_steps = new wxComboBox(this, wxID_ANY, wxString{ "10" }, wxDefaultPosition, wxDefaultSize, 8, choices_nb);
|
||||||
|
nb_steps->SetToolTip(_(L("Select the number milimeters for the tower.")));
|
||||||
|
nb_steps->SetSelection(4);
|
||||||
|
//wxString choices_start[] = { "current","260","250","240","230","220","210" };
|
||||||
|
//start_step = new wxComboBox(this, wxID_ANY, wxString{ "current" }, wxDefaultPosition, wxDefaultSize, 7, choices_start);
|
||||||
|
//start_step->SetToolTip(_(L("Select the highest temperature to test for.")));
|
||||||
|
//start_step->SetSelection(0);
|
||||||
|
//wxString choices_decr[] = { "one test","2x10°","3x10°","4x10°","3x5°","5x5°" };
|
||||||
|
//decr_temp = new wxComboBox(this, wxID_ANY, wxString{ "current" }, wxDefaultPosition, wxDefaultSize, 6, choices_decr);
|
||||||
|
//decr_temp->SetToolTip(_(L("Select the number tower to print, and by how many degrees C to decrease each time.")));
|
||||||
|
//decr_temp->SetSelection(0);
|
||||||
|
|
||||||
|
buttons->Add(new wxStaticText(this, wxID_ANY, wxString{ "step:" }));
|
||||||
|
buttons->Add(steps);
|
||||||
|
buttons->AddSpacer(15);
|
||||||
|
buttons->Add(new wxStaticText(this, wxID_ANY, wxString{ "height:" }));
|
||||||
|
buttons->Add(nb_steps);
|
||||||
|
buttons->AddSpacer(20);
|
||||||
|
|
||||||
|
//buttons->Add(new wxStaticText(this, wxID_ANY, wxString{ "start temp:" }));
|
||||||
|
//buttons->Add(start_step);
|
||||||
|
//buttons->AddSpacer(15);
|
||||||
|
//buttons->Add(new wxStaticText(this, wxID_ANY, wxString{ "temp decr:" }));
|
||||||
|
//buttons->Add(decr_temp);
|
||||||
|
//buttons->AddSpacer(20);
|
||||||
|
|
||||||
|
wxButton* bt = new wxButton(this, wxID_FILE1, _(L("Remove fil. slowdown")));
|
||||||
|
bt->Bind(wxEVT_BUTTON, &CalibrationRetractionDialog::remove_slowdown, this);
|
||||||
|
buttons->Add(bt);
|
||||||
|
|
||||||
|
buttons->AddSpacer(30);
|
||||||
|
|
||||||
|
bt = new wxButton(this, wxID_FILE1, _(L("Generate")));
|
||||||
|
bt->Bind(wxEVT_BUTTON, &CalibrationRetractionDialog::create_geometry, this);
|
||||||
|
buttons->Add(bt);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CalibrationRetractionDialog::remove_slowdown(wxCommandEvent& event_args) {
|
||||||
|
|
||||||
|
const DynamicPrintConfig* filament_config = this->gui_app->get_tab(Preset::TYPE_FILAMENT)->get_config();
|
||||||
|
DynamicPrintConfig new_filament_config = *filament_config; //make a copy
|
||||||
|
|
||||||
|
const ConfigOptionInts *fil_conf = filament_config->option<ConfigOptionInts>("slowdown_below_layer_time");
|
||||||
|
ConfigOptionInts *new_fil_conf = new ConfigOptionInts();
|
||||||
|
new_fil_conf->default_value = 5;
|
||||||
|
new_fil_conf->values = fil_conf->values;
|
||||||
|
new_fil_conf->values[0] = 0;
|
||||||
|
new_filament_config.set_key_value("slowdown_below_layer_time", new_fil_conf);
|
||||||
|
|
||||||
|
fil_conf = filament_config->option<ConfigOptionInts>("fan_below_layer_time"); new_fil_conf = new ConfigOptionInts();
|
||||||
|
new_fil_conf->default_value = 60;
|
||||||
|
new_fil_conf->values = fil_conf->values;
|
||||||
|
new_fil_conf->values[0] = 0;
|
||||||
|
new_filament_config.set_key_value("fan_below_layer_time", new_fil_conf);
|
||||||
|
|
||||||
|
this->gui_app->get_tab(Preset::TYPE_FILAMENT)->load_config(new_filament_config);
|
||||||
|
this->main_frame->plater()->on_config_change(new_filament_config);
|
||||||
|
this->gui_app->get_tab(Preset::TYPE_FILAMENT)->update_dirty();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void CalibrationRetractionDialog::create_geometry(wxCommandEvent& event_args) {
|
||||||
|
Plater* plat = this->main_frame->plater();
|
||||||
|
Model& model = plat->model();
|
||||||
|
plat->reset();
|
||||||
|
|
||||||
|
size_t nb_retract = nb_steps->GetSelection() < 4 ? ((int(nb_steps->GetSelection()) + 1) * 2) : ((int(nb_steps->GetSelection()) - 2) * 5);
|
||||||
|
size_t nb_items = 1;
|
||||||
|
//if (start_step->GetSelection() == 1) {
|
||||||
|
// nb_items = 2;
|
||||||
|
//} else if (start_step->GetSelection() == 2 || start_step->GetSelection() == 4) {
|
||||||
|
// nb_items = 3;
|
||||||
|
//} else if (start_step->GetSelection() == 3) {
|
||||||
|
// nb_items = 4;
|
||||||
|
//} else if (start_step->GetSelection() == 5) {
|
||||||
|
// nb_items = 5;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
std::vector<std::string> items;
|
||||||
|
items.emplace_back(Slic3r::resources_dir() + "/calibration/retraction/retraction_calibration.amf");
|
||||||
|
std::vector<size_t> objs_idx = plat->load_files(items, true, false, false);
|
||||||
|
|
||||||
|
|
||||||
|
assert(objs_idx.size() == nb_items);
|
||||||
|
const DynamicPrintConfig* print_config = this->gui_app->get_tab(Preset::TYPE_PRINT)->get_config();
|
||||||
|
const DynamicPrintConfig* printer_config = this->gui_app->get_tab(Preset::TYPE_PRINTER)->get_config();
|
||||||
|
const DynamicPrintConfig* filament_config = this->gui_app->get_tab(Preset::TYPE_FILAMENT)->get_config();
|
||||||
|
|
||||||
|
double retraction_start = 0;
|
||||||
|
int temp = filament_config->option<ConfigOptionInts>("temperature")->get_at(0);
|
||||||
|
|
||||||
|
double retraction_steps = 0.01;
|
||||||
|
if (steps->GetSelection() == 0)
|
||||||
|
retraction_steps = 0.1;
|
||||||
|
if (steps->GetSelection() == 1)
|
||||||
|
retraction_steps = 0.2;
|
||||||
|
if (steps->GetSelection() == 2)
|
||||||
|
retraction_steps = 0.5;
|
||||||
|
if (steps->GetSelection() == 3)
|
||||||
|
retraction_steps = 1;
|
||||||
|
if (steps->GetSelection() == 4)
|
||||||
|
retraction_steps = 2;
|
||||||
|
|
||||||
|
/// --- scale ---
|
||||||
|
// model is created for a 0.4 nozzle, scale xy with nozzle size.
|
||||||
|
const ConfigOptionFloats* nozzle_diameter_config = printer_config->option<ConfigOptionFloats>("nozzle_diameter");
|
||||||
|
assert(nozzle_diameter_config->values.size() > 0);
|
||||||
|
float nozzle_diameter = nozzle_diameter_config->values[0];
|
||||||
|
float xyScale = nozzle_diameter / 0.4;
|
||||||
|
//scale z to have 6 layers
|
||||||
|
const ConfigOptionFloatOrPercent* first_layer_height_setting = print_config->option<ConfigOptionFloatOrPercent>("first_layer_height");
|
||||||
|
double first_layer_height = first_layer_height_setting->get_abs_value(nozzle_diameter);
|
||||||
|
first_layer_height = nozzle_diameter / 2; //TODO remove and use the user's first_layer_height
|
||||||
|
double layer_height = nozzle_diameter / 2.;
|
||||||
|
first_layer_height = std::max(first_layer_height, nozzle_diameter / 2.);
|
||||||
|
|
||||||
|
float scale = nozzle_diameter / 0.4;
|
||||||
|
//do scaling
|
||||||
|
if (scale < 0.9 || 1.2 < scale) {
|
||||||
|
for (size_t i = 0; i < nb_items; i++)
|
||||||
|
model.objects[objs_idx[i]]->scale(scale, scale, scale);
|
||||||
|
}
|
||||||
|
|
||||||
|
//add sub-part after scale
|
||||||
|
float zshift = (1 - scale) / 2 + 0.4 * scale;
|
||||||
|
float zscale_number = (first_layer_height + layer_height) / 0.4;
|
||||||
|
std::vector<ModelObject*> part_tower;
|
||||||
|
//add_part(model.objects[objs_idx[0]], Slic3r::resources_dir()+"/calibration/filament_temp/t215.amf", Vec3d{ 0,0,zshift-5.2*scale }, Vec3d{ scale,scale,scale });
|
||||||
|
//model.objects[objs_idx[0]]->volumes[1]->rotate(PI/2, Vec3d(0, 0, 1));
|
||||||
|
//model.objects[objs_idx[0]]->volumes[1]->rotate(-PI / 2, Vec3d(1, 0, 0));
|
||||||
|
for (size_t num_retract = 0; num_retract < nb_retract; num_retract++) {
|
||||||
|
part_tower.push_back(add_part(model.objects[objs_idx[0]], Slic3r::resources_dir()+"/calibration/retraction/retraction_calibration_pillar.amf", Vec3d{ 0,0,zshift + scale * num_retract }, Vec3d{ scale,scale,scale }));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// --- translate ---;
|
||||||
|
const ConfigOptionFloat* extruder_clearance_radius = print_config->option<ConfigOptionFloat>("extruder_clearance_radius");
|
||||||
|
const ConfigOptionPoints* bed_shape = printer_config->option<ConfigOptionPoints>("bed_shape");
|
||||||
|
const float brim_width = std::max(print_config->option<ConfigOptionFloat>("brim_width")->value, nozzle_diameter * 5.);
|
||||||
|
Vec2d bed_size = BoundingBoxf(bed_shape->values).size();
|
||||||
|
Vec2d bed_min = BoundingBoxf(bed_shape->values).min;
|
||||||
|
float offsety = 2 + 22 * 1 + extruder_clearance_radius->value + brim_width + (brim_width > extruder_clearance_radius->value ? brim_width - extruder_clearance_radius->value : 0);
|
||||||
|
model.objects[objs_idx[0]]->translate({ bed_min.x() + bed_size.x() / 2, bed_min.y() + bed_size.y() / 2, 0 });
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/// --- custom config ---
|
||||||
|
for (size_t i = 0; i < nb_items; i++) {
|
||||||
|
//speed
|
||||||
|
double perimeter_speed = print_config->option<ConfigOptionFloat>("perimeter_speed")->value;
|
||||||
|
double external_perimeter_speed = print_config->option<ConfigOptionFloatOrPercent>("external_perimeter_speed")->get_abs_value(perimeter_speed);
|
||||||
|
//filament test
|
||||||
|
//const ConfigOptionInts* fil_conf = filament_config->option<ConfigOptionInts>("slowdown_below_layer_time");
|
||||||
|
//ConfigOptionInts* new_fil_conf = new ConfigOptionInts();
|
||||||
|
//new_fil_conf->default_value = 5;
|
||||||
|
//new_fil_conf->values = fil_conf->values;
|
||||||
|
//new_fil_conf->values[0] = 0;
|
||||||
|
//model.objects[objs_idx[i]]->config.set_key_value("slowdown_below_layer_time", new_fil_conf);
|
||||||
|
//fil_conf = filament_config->option<ConfigOptionInts>("temperature");
|
||||||
|
//new_fil_conf = new ConfigOptionInts();
|
||||||
|
//new_fil_conf->values = fil_conf->values;
|
||||||
|
//new_fil_conf->values[0] = 150;
|
||||||
|
//model.objects[objs_idx[i]]->config.set_key_value("temperature", new_fil_conf);
|
||||||
|
//brim to have some time to build up pressure in the nozzle
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("brim_width", new ConfigOptionFloat(0));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("perimeters", new ConfigOptionInt(2));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("external_perimeters_first", new ConfigOptionBool(false));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("bottom_solid_layers", new ConfigOptionInt(0));
|
||||||
|
model.objects[objs_idx[i]]->volumes[0]->config.set_key_value("bottom_solid_layers", new ConfigOptionInt(2));
|
||||||
|
//model.objects[objs_idx[i]]->volumes[1]->config.set_key_value("bottom_solid_layers", new ConfigOptionInt(2));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("top_solid_layers", new ConfigOptionInt(0));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("fill_density", new ConfigOptionPercent(0));
|
||||||
|
//model.objects[objs_idx[i]]->config.set_key_value("fill_pattern", new ConfigOptionEnum<InfillPattern>(ipRectilinear));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("only_one_perimeter_top", new ConfigOptionBool(false));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("overhangs", new ConfigOptionBool(false));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("thin_walls", new ConfigOptionBool(true));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("thin_walls_min_width", new ConfigOptionFloatOrPercent(2,true));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("gap_fill", new ConfigOptionBool(false));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("first_layer_height", new ConfigOptionFloatOrPercent(nozzle_diameter / 2., false));
|
||||||
|
model.objects[objs_idx[i]]->config.set_key_value("layer_height", new ConfigOptionFloat(nozzle_diameter / 2.));
|
||||||
|
//set retraction override
|
||||||
|
int num_part = 0;
|
||||||
|
for (ModelObject* part : part_tower) {
|
||||||
|
model.objects[objs_idx[i]]->volumes[num_part + 1]->config.set_key_value("print_retract_length", new ConfigOptionFloat(retraction_start + num_part * retraction_steps));
|
||||||
|
model.objects[objs_idx[i]]->volumes[num_part + 1]->config.set_key_value("small_perimeter_speed", new ConfigOptionFloatOrPercent(external_perimeter_speed, false));
|
||||||
|
model.objects[objs_idx[i]]->volumes[num_part + 1]->config.set_key_value("perimeter_speed", new ConfigOptionFloat(std::min(external_perimeter_speed, perimeter_speed)));
|
||||||
|
model.objects[objs_idx[i]]->volumes[num_part + 1]->config.set_key_value("external_perimeter_speed", new ConfigOptionFloatOrPercent(external_perimeter_speed, false));
|
||||||
|
model.objects[objs_idx[i]]->volumes[num_part + 1]->config.set_key_value("small_perimeter_speed", new ConfigOptionFloatOrPercent(external_perimeter_speed, false));
|
||||||
|
//model.objects[objs_idx[i]]->volumes[num_part + 1]->config.set_key_value("infill_speed", new ConfigOptionFloat(std::min(print_config->option<ConfigOptionFloat>("infill_speed")->value, 10.*scale)));
|
||||||
|
num_part++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// --- main config, please modify object config when possible ---
|
||||||
|
if (nb_items > 1) {
|
||||||
|
DynamicPrintConfig new_print_config = *print_config; //make a copy
|
||||||
|
new_print_config.set_key_value("complete_objects", new ConfigOptionBool(true));
|
||||||
|
//if skirt, use only one
|
||||||
|
if (print_config->option<ConfigOptionInt>("skirts")->getInt() > 0 && print_config->option<ConfigOptionInt>("skirt_height")->getInt() > 0) {
|
||||||
|
new_print_config.set_key_value("complete_objects_one_skirt", new ConfigOptionBool(true));
|
||||||
|
}
|
||||||
|
this->gui_app->get_tab(Preset::TYPE_PRINT)->load_config(new_print_config);
|
||||||
|
plat->on_config_change(new_print_config);
|
||||||
|
this->gui_app->get_tab(Preset::TYPE_PRINT)->update_dirty();
|
||||||
|
}
|
||||||
|
|
||||||
|
//update plater
|
||||||
|
plat->changed_objects(objs_idx);
|
||||||
|
//update everything, easier to code.
|
||||||
|
ObjectList* obj = this->gui_app->obj_list();
|
||||||
|
obj->update_after_undo_redo();
|
||||||
|
|
||||||
|
|
||||||
|
plat->reslice();
|
||||||
|
plat->select_view_3D("Preview");
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace GUI
|
||||||
|
} // namespace Slic3r
|
30
src/slic3r/GUI/CalibrationRetractionDialog.hpp
Normal file
30
src/slic3r/GUI/CalibrationRetractionDialog.hpp
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#ifndef slic3r_GUI_CalibrationRetractionDialog_hpp_
|
||||||
|
#define slic3r_GUI_CalibrationRetractionDialog_hpp_
|
||||||
|
|
||||||
|
#include "CalibrationAbstractDialog.hpp"
|
||||||
|
|
||||||
|
namespace Slic3r {
|
||||||
|
namespace GUI {
|
||||||
|
|
||||||
|
class CalibrationRetractionDialog : public CalibrationAbstractDialog
|
||||||
|
{
|
||||||
|
|
||||||
|
public:
|
||||||
|
CalibrationRetractionDialog(GUI_App* app, MainFrame* mainframe) : CalibrationAbstractDialog(app, mainframe, "Flow calibration") { create("/calibration/retraction/retraction.html", wxSize(900, 500)); }
|
||||||
|
virtual ~CalibrationRetractionDialog() {}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void create_buttons(wxStdDialogButtonSizer* sizer) override;
|
||||||
|
void remove_slowdown(wxCommandEvent& event_args);
|
||||||
|
void create_geometry(wxCommandEvent& event_args);
|
||||||
|
|
||||||
|
wxComboBox* steps;
|
||||||
|
wxComboBox* nb_steps;
|
||||||
|
wxComboBox* start_step;
|
||||||
|
wxComboBox* decr_temp;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace GUI
|
||||||
|
} // namespace Slic3r
|
||||||
|
|
||||||
|
#endif
|
@ -57,12 +57,12 @@ void CalibrationTempDialog::create_geometry(wxCommandEvent& event_args) {
|
|||||||
Slic3r::resources_dir()+"/calibration/filament_temp/Smart_compact_temperature_calibration_item.amf"}, true, false, false);
|
Slic3r::resources_dir()+"/calibration/filament_temp/Smart_compact_temperature_calibration_item.amf"}, true, false, false);
|
||||||
|
|
||||||
assert(objs_idx.size() == 1);
|
assert(objs_idx.size() == 1);
|
||||||
const DynamicPrintConfig* printConfig = this->gui_app->get_tab(Preset::TYPE_PRINT)->get_config();
|
const DynamicPrintConfig* print_config = this->gui_app->get_tab(Preset::TYPE_PRINT)->get_config();
|
||||||
const DynamicPrintConfig* filamentConfig = this->gui_app->get_tab(Preset::TYPE_FILAMENT)->get_config();
|
const DynamicPrintConfig* filament_config = this->gui_app->get_tab(Preset::TYPE_FILAMENT)->get_config();
|
||||||
const DynamicPrintConfig* printerConfig = this->gui_app->get_tab(Preset::TYPE_PRINTER)->get_config();
|
const DynamicPrintConfig* printer_config = this->gui_app->get_tab(Preset::TYPE_PRINTER)->get_config();
|
||||||
|
|
||||||
// -- get temps
|
// -- get temps
|
||||||
const ConfigOptionInts* temperature_config = filamentConfig->option<ConfigOptionInts>("temperature");
|
const ConfigOptionInts* temperature_config = filament_config->option<ConfigOptionInts>("temperature");
|
||||||
assert(temperature_config->values.size() >= 1);
|
assert(temperature_config->values.size() >= 1);
|
||||||
int idx_steps = steps->GetSelection();
|
int idx_steps = steps->GetSelection();
|
||||||
int idx_up = nb_up->GetSelection();
|
int idx_up = nb_up->GetSelection();
|
||||||
@ -76,7 +76,7 @@ void CalibrationTempDialog::create_geometry(wxCommandEvent& event_args) {
|
|||||||
|
|
||||||
/// --- scale ---
|
/// --- scale ---
|
||||||
//model is created for a 0.4 nozzle, scale xy with nozzle size.
|
//model is created for a 0.4 nozzle, scale xy with nozzle size.
|
||||||
const ConfigOptionFloats* nozzle_diameter_config = printerConfig->option<ConfigOptionFloats>("nozzle_diameter");
|
const ConfigOptionFloats* nozzle_diameter_config = printer_config->option<ConfigOptionFloats>("nozzle_diameter");
|
||||||
assert(nozzle_diameter_config->values.size() > 0);
|
assert(nozzle_diameter_config->values.size() > 0);
|
||||||
float nozzle_diameter = nozzle_diameter_config->values[0];
|
float nozzle_diameter = nozzle_diameter_config->values[0];
|
||||||
float xyzScale = nozzle_diameter / 0.4;
|
float xyzScale = nozzle_diameter / 0.4;
|
||||||
@ -107,13 +107,13 @@ void CalibrationTempDialog::create_geometry(wxCommandEvent& event_args) {
|
|||||||
|
|
||||||
|
|
||||||
/// --- translate ---
|
/// --- translate ---
|
||||||
const ConfigOptionPoints* bed_shape = printerConfig->option<ConfigOptionPoints>("bed_shape");
|
const ConfigOptionPoints* bed_shape = printer_config->option<ConfigOptionPoints>("bed_shape");
|
||||||
Vec2d bed_size = BoundingBoxf(bed_shape->values).size();
|
Vec2d bed_size = BoundingBoxf(bed_shape->values).size();
|
||||||
Vec2d bed_min = BoundingBoxf(bed_shape->values).min;
|
Vec2d bed_min = BoundingBoxf(bed_shape->values).min;
|
||||||
model.objects[objs_idx[0]]->translate({ bed_min.x() + bed_size.x() / 2, bed_min.y() + bed_size.y() / 2, 0 });
|
model.objects[objs_idx[0]]->translate({ bed_min.x() + bed_size.x() / 2, bed_min.y() + bed_size.y() / 2, 0 });
|
||||||
|
|
||||||
/// --- main config, please modify object config when possible ---
|
/// --- main config, please modify object config when possible ---
|
||||||
DynamicPrintConfig new_print_config = *printConfig; //make a copy
|
DynamicPrintConfig new_print_config = *print_config; //make a copy
|
||||||
new_print_config.set_key_value("complete_objects", new ConfigOptionBool(false));
|
new_print_config.set_key_value("complete_objects", new ConfigOptionBool(false));
|
||||||
|
|
||||||
/// -- generate the heat change gcode
|
/// -- generate the heat change gcode
|
||||||
@ -129,7 +129,7 @@ void CalibrationTempDialog::create_geometry(wxCommandEvent& event_args) {
|
|||||||
//new_printer_config.set_key_value("layer_gcode", new ConfigOptionString(str_layer_gcode));
|
//new_printer_config.set_key_value("layer_gcode", new ConfigOptionString(str_layer_gcode));
|
||||||
|
|
||||||
/// --- custom config ---
|
/// --- custom config ---
|
||||||
float brim_width = printConfig->option<ConfigOptionFloat>("brim_width")->value;
|
float brim_width = print_config->option<ConfigOptionFloat>("brim_width")->value;
|
||||||
if (brim_width < nozzle_diameter * 8) {
|
if (brim_width < nozzle_diameter * 8) {
|
||||||
model.objects[objs_idx[0]]->config.set_key_value("brim_width", new ConfigOptionFloat(nozzle_diameter * 8));
|
model.objects[objs_idx[0]]->config.set_key_value("brim_width", new ConfigOptionFloat(nozzle_diameter * 8));
|
||||||
}
|
}
|
||||||
@ -152,7 +152,7 @@ void CalibrationTempDialog::create_geometry(wxCommandEvent& event_args) {
|
|||||||
//plat->on_config_change(new_printer_config);
|
//plat->on_config_change(new_printer_config);
|
||||||
plat->changed_objects(objs_idx);
|
plat->changed_objects(objs_idx);
|
||||||
this->gui_app->get_tab(Preset::TYPE_PRINT)->update_dirty();
|
this->gui_app->get_tab(Preset::TYPE_PRINT)->update_dirty();
|
||||||
this->gui_app->get_tab(Preset::TYPE_PRINTER)->update_dirty();
|
//this->gui_app->get_tab(Preset::TYPE_PRINTER)->update_dirty();
|
||||||
plat->is_preview_shown();
|
plat->is_preview_shown();
|
||||||
//update everything, easier to code.
|
//update everything, easier to code.
|
||||||
ObjectList* obj = this->gui_app->obj_list();
|
ObjectList* obj = this->gui_app->obj_list();
|
||||||
|
@ -46,6 +46,7 @@
|
|||||||
#include "CalibrationFlowDialog.hpp"
|
#include "CalibrationFlowDialog.hpp"
|
||||||
#include "CalibrationOverBridgeDialog.hpp"
|
#include "CalibrationOverBridgeDialog.hpp"
|
||||||
#include "CalibrationTempDialog.hpp"
|
#include "CalibrationTempDialog.hpp"
|
||||||
|
#include "CalibrationRetractionDialog.hpp"
|
||||||
#include "ConfigSnapshotDialog.hpp"
|
#include "ConfigSnapshotDialog.hpp"
|
||||||
#include "FreeCADDialog.hpp"
|
#include "FreeCADDialog.hpp"
|
||||||
#include "FirmwareDialog.hpp"
|
#include "FirmwareDialog.hpp"
|
||||||
@ -602,6 +603,10 @@ void GUI_App::calibration_cube_dialog()
|
|||||||
{
|
{
|
||||||
change_calibration_dialog(nullptr, new CalibrationCubeDialog(this, mainframe));
|
change_calibration_dialog(nullptr, new CalibrationCubeDialog(this, mainframe));
|
||||||
}
|
}
|
||||||
|
void GUI_App::calibration_retraction_dialog()
|
||||||
|
{
|
||||||
|
change_calibration_dialog(nullptr, new CalibrationRetractionDialog(this, mainframe));
|
||||||
|
}
|
||||||
void GUI_App::freecad_script_dialog()
|
void GUI_App::freecad_script_dialog()
|
||||||
{
|
{
|
||||||
change_calibration_dialog(nullptr, new FreeCADDialog(this, mainframe));
|
change_calibration_dialog(nullptr, new FreeCADDialog(this, mainframe));
|
||||||
|
@ -139,6 +139,7 @@ public:
|
|||||||
void bridge_tuning_dialog();
|
void bridge_tuning_dialog();
|
||||||
void over_bridge_dialog();
|
void over_bridge_dialog();
|
||||||
void calibration_cube_dialog();
|
void calibration_cube_dialog();
|
||||||
|
void calibration_retraction_dialog();
|
||||||
void freecad_script_dialog();
|
void freecad_script_dialog();
|
||||||
//void support_tuning(); //have to do multiple, in a submenu
|
//void support_tuning(); //have to do multiple, in a submenu
|
||||||
void load_project(wxWindow *parent, wxString& input_file) const;
|
void load_project(wxWindow *parent, wxString& input_file) const;
|
||||||
|
@ -780,6 +780,8 @@ void MainFrame::init_menubar()
|
|||||||
[this](wxCommandEvent&) { wxGetApp().bridge_tuning_dialog(); });
|
[this](wxCommandEvent&) { wxGetApp().bridge_tuning_dialog(); });
|
||||||
append_menu_item(calibrationMenu, wxID_ANY, _(L("Ironing pattern calibration")), _(L("Create a test print to help you to set your over-bridge flow ratio and ironing pattern.")),
|
append_menu_item(calibrationMenu, wxID_ANY, _(L("Ironing pattern calibration")), _(L("Create a test print to help you to set your over-bridge flow ratio and ironing pattern.")),
|
||||||
[this](wxCommandEvent&) { wxGetApp().over_bridge_dialog(); });
|
[this](wxCommandEvent&) { wxGetApp().over_bridge_dialog(); });
|
||||||
|
append_menu_item(calibrationMenu, wxID_ANY, _(L("Extruder retraction calibration")), _(L("Create a test print to help you to set your retraction length.")),
|
||||||
|
[this](wxCommandEvent&) { wxGetApp().calibration_retraction_dialog(); });
|
||||||
calibrationMenu->AppendSeparator();
|
calibrationMenu->AppendSeparator();
|
||||||
append_menu_item(calibrationMenu, wxID_ANY, _(L("Calibration cube")), _(L("Print a calibration cube, for various calibration goals.")),
|
append_menu_item(calibrationMenu, wxID_ANY, _(L("Calibration cube")), _(L("Print a calibration cube, for various calibration goals.")),
|
||||||
[this](wxCommandEvent&) { wxGetApp().calibration_cube_dialog(); });
|
[this](wxCommandEvent&) { wxGetApp().calibration_cube_dialog(); });
|
||||||
|
@ -539,6 +539,7 @@ const std::vector<std::string>& Preset::print_options()
|
|||||||
, "curve_smoothing_angle_convex"
|
, "curve_smoothing_angle_convex"
|
||||||
, "curve_smoothing_angle_concave",
|
, "curve_smoothing_angle_concave",
|
||||||
"print_extrusion_multiplier",
|
"print_extrusion_multiplier",
|
||||||
|
"print_retract_length",
|
||||||
"external_perimeter_cut_corners",
|
"external_perimeter_cut_corners",
|
||||||
"external_perimeter_overlap",
|
"external_perimeter_overlap",
|
||||||
"perimeter_bonding",
|
"perimeter_bonding",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user