mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-25 07:34:03 -06:00
Adding pellet printer suppor to OrcaSlicer (#4836)
* creating settings for printer and some UI changes work * related filament diameter and pellet flow changes to each other * UI name change to turn Filament to Material * updated the flow coefficient to filament diameter formula * updated the preset for the configuration wizard * configuration changes for the final release * config changes and preset bundle sync removed * start gcode change for ginger machines * added explanation of relationship between pellet_flow_coefficient and filament_diameter * Added tooltip. Fixed Ginger machine configuration, Added docs
This commit is contained in:
parent
409004d471
commit
8ccf0edbc2
35 changed files with 1506 additions and 3 deletions
|
@ -817,7 +817,7 @@ static std::vector<std::string> s_Preset_print_options {
|
|||
};
|
||||
|
||||
static std::vector<std::string> s_Preset_filament_options {
|
||||
/*"filament_colour", */ "default_filament_colour","required_nozzle_HRC","filament_diameter", "filament_type", "filament_soluble", "filament_is_support",
|
||||
/*"filament_colour", */ "default_filament_colour","required_nozzle_HRC","filament_diameter", "pellet_flow_coefficient", "filament_type", "filament_soluble", "filament_is_support",
|
||||
"filament_max_volumetric_speed",
|
||||
"filament_flow_ratio", "filament_density", "filament_cost", "filament_minimal_purge_on_wipe_tower",
|
||||
"nozzle_temperature", "nozzle_temperature_initial_layer",
|
||||
|
@ -877,7 +877,7 @@ static std::vector<std::string> s_Preset_printer_options {
|
|||
"cooling_tube_retraction",
|
||||
"cooling_tube_length", "high_current_on_filament_swap", "parking_pos_retraction", "extra_loading_move", "purge_in_prime_tower", "enable_filament_ramming",
|
||||
"z_offset",
|
||||
"disable_m73", "preferred_orientation", "emit_machine_limits_to_gcode", "support_multi_bed_types","bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance", "adaptive_bed_mesh_margin", "enable_long_retraction_when_cut","long_retractions_when_cut","retraction_distances_when_cut"
|
||||
"disable_m73", "preferred_orientation", "emit_machine_limits_to_gcode", "pellet_modded_printer", "support_multi_bed_types","bed_mesh_min","bed_mesh_max","bed_mesh_probe_distance", "adaptive_bed_mesh_margin", "enable_long_retraction_when_cut","long_retractions_when_cut","retraction_distances_when_cut"
|
||||
};
|
||||
|
||||
static std::vector<std::string> s_Preset_sla_print_options {
|
||||
|
|
|
@ -320,6 +320,15 @@ public:
|
|||
bool has_cali_lines(PresetBundle* preset_bundle);
|
||||
|
||||
|
||||
static double convert_pellet_flow_to_filament_diameter(double pellet_flow_coefficient)
|
||||
{
|
||||
return sqrt(4 / (PI * pellet_flow_coefficient));
|
||||
}
|
||||
|
||||
static double convert_filament_diameter_to_pellet_flow(double filament_diameter)
|
||||
{
|
||||
return 4 / (pow(filament_diameter, 2) * PI);
|
||||
}
|
||||
|
||||
static const std::vector<std::string>& print_options();
|
||||
static const std::vector<std::string>& filament_options();
|
||||
|
|
|
@ -1547,6 +1547,7 @@ void PresetBundle::load_installed_filaments(AppConfig &config)
|
|||
Preset* filament = filaments.find_preset(filament_iter.first, false, true);
|
||||
if (filament && is_compatible_with_printer(PresetWithVendorProfile(*filament, filament->vendor), PresetWithVendorProfile(printer, printer.vendor)))
|
||||
{
|
||||
|
||||
//already has compatible filament
|
||||
add_default_materials = false;
|
||||
break;
|
||||
|
|
|
@ -1786,6 +1786,38 @@ void PrintConfigDef::init_fff_params()
|
|||
def->min = 0;
|
||||
def->set_default_value(new ConfigOptionFloats { 1.75 });
|
||||
|
||||
/*
|
||||
Large format printers with print volumes in the order of 1m^3 generally use pellets for printing.
|
||||
The overall tech is very similar to FDM printing.
|
||||
It is FDM printing, but instead of filaments, it uses pellets.
|
||||
|
||||
The difference here is that where filaments have a filament_diameter that is used to calculate
|
||||
the volume of filament ingested, pellets have a particular flow_coefficient that is empirically
|
||||
devised for that particular pellet.
|
||||
|
||||
pellet_flow_coefficient is basically a measure of the packing density of a particular pellet.
|
||||
Shape, material and density of an individual pellet will determine the packing density and
|
||||
the only thing that matters for 3d printing is how much of that pellet material is extruded by
|
||||
one turn of whatever feeding mehcanism/gear your printer uses. You can emperically derive that
|
||||
for your own pellets for a particular printer model.
|
||||
|
||||
We are translating the pellet_flow_coefficient into filament_diameter so that everything works just like it
|
||||
does already with very minor adjustments.
|
||||
|
||||
filament_diameter = sqrt( (4 * pellet_flow_coefficient) / PI )
|
||||
|
||||
sqrt just makes the relationship between flow_coefficient and volume linear.
|
||||
|
||||
higher packing density -> more material extruded by single turn -> higher pellet_flow_coefficient -> treated as if a filament of larger diameter is being used
|
||||
All other calculations remain the same for slicing.
|
||||
*/
|
||||
|
||||
def = this->add("pellet_flow_coefficient", coFloats);
|
||||
def->label = L("Pellet flow coefficient");
|
||||
def->tooltip = L("Pellet flow coefficient is emperically derived and allows for volume calculation for pellet printers.\n\nInternally it is converted to filament_diameter. All other volume calculations remain the same.\n\nfilament_diameter = sqrt( (4 * pellet_flow_coefficient) / PI )");
|
||||
def->min = 0;
|
||||
def->set_default_value(new ConfigOptionFloats{ 0.4157 });
|
||||
|
||||
def = this->add("filament_shrink", coPercents);
|
||||
def->label = L("Shrinkage");
|
||||
// xgettext:no-c-format, no-boost-format
|
||||
|
@ -2639,6 +2671,12 @@ void PrintConfigDef::init_fff_params()
|
|||
def->readonly = false;
|
||||
def->set_default_value(new ConfigOptionEnum<GCodeFlavor>(gcfMarlinLegacy));
|
||||
|
||||
def = this->add("pellet_modded_printer", coBool);
|
||||
def->label = L("Pellet Modded Printer");
|
||||
def->tooltip = L("Enable this option if your printer uses pellets instead of filaments");
|
||||
def->mode = comSimple;
|
||||
def->set_default_value(new ConfigOptionBool(false));
|
||||
|
||||
def = this->add("support_multi_bed_types", coBool);
|
||||
def->label = L("Support multi bed types");
|
||||
def->tooltip = L("Enable this option if you want to use multiple bed types");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue