mirror of
https://git.mirrors.martin98.com/https://github.com/slic3r/Slic3r.git
synced 2025-08-16 06:25:56 +08:00
Merge branch 'dev'
This commit is contained in:
commit
2e5f70bb5f
@ -415,7 +415,7 @@ set(L10N_DIR "${SLIC3R_RESOURCES_DIR}/localization")
|
|||||||
add_custom_target(gettext_make_pot
|
add_custom_target(gettext_make_pot
|
||||||
COMMAND xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --debug
|
COMMAND xgettext --keyword=L --keyword=_L --keyword=_u8L --keyword=L_CONTEXT:1,2c --keyword=_L_PLURAL:1,2 --add-comments=TRN --from-code=UTF-8 --debug
|
||||||
-f "${L10N_DIR}/list.txt"
|
-f "${L10N_DIR}/list.txt"
|
||||||
-o "${L10N_DIR}/SupserSlicer.pot"
|
-o "${L10N_DIR}/SuperSlicer.pot"
|
||||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||||
COMMENT "Generate pot file from strings in the source tree"
|
COMMENT "Generate pot file from strings in the source tree"
|
||||||
)
|
)
|
||||||
|
57
resources/localization/README.md
Normal file
57
resources/localization/README.md
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
# How to create / update your own language
|
||||||
|
|
||||||
|
## 1) initialisation
|
||||||
|
open the settings.ini
|
||||||
|
for each file that can contains useful translation, create / edit a "data" line to point to the said file.
|
||||||
|
The 'input' property must be the SuperSlicer.pot path
|
||||||
|
The 'output' must be the SuperSlicer.po
|
||||||
|
The 'todo' contains the path of the po file to complete.
|
||||||
|
|
||||||
|
note that the first data line has the priority over the other ones (the first translation encountered is the one used)
|
||||||
|
|
||||||
|
In this exemple, we are going to update the spanish translation.
|
||||||
|
We are going to use the old slic3++ translation and the prusa one.
|
||||||
|
So the settings.ini contains these lines :
|
||||||
|
```
|
||||||
|
data = es/Slic3r++.po
|
||||||
|
data = es/PrusaSlicer_es.po
|
||||||
|
|
||||||
|
input = SuperSlicer.pot
|
||||||
|
todo = es/todo.po
|
||||||
|
output = es/SuperSlicer.po
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2) launch the utility.
|
||||||
|
* Open a console
|
||||||
|
* cd into the localization directory,
|
||||||
|
* execute 'java -jar pomergeur.jar'
|
||||||
|
It will tell you if you made some mistakes about the paths, the number of translations reused and the number to do.
|
||||||
|
|
||||||
|
## 3) complete the translation file
|
||||||
|
Then, you have to open the es/toto.po file and complete all the translation.
|
||||||
|
* msgid lines are the english string
|
||||||
|
* msgstr is the translated one, should be empty string ("").
|
||||||
|
|
||||||
|
Important:
|
||||||
|
* you must write it in one line, use \n to input a line change.
|
||||||
|
* the %1, %2, ... MUST be put also in the translation, as it's a placeholder for input numbers, if one is missed the software will crash, so be careful. '%%' means '%'.
|
||||||
|
|
||||||
|
## 4) relaunch the utility
|
||||||
|
|
||||||
|
You can copy/save the todo.po in an other file in case of.
|
||||||
|
After filling the todo file, change the settings.ini:
|
||||||
|
|
||||||
|
```
|
||||||
|
data = es/todo.po
|
||||||
|
data = es/SuperSlicer.po
|
||||||
|
data = es/Slic3r++.po
|
||||||
|
data = es/PrusaSlicer_es.po
|
||||||
|
|
||||||
|
input = SuperSlicer.pot
|
||||||
|
todo = es/todo.po
|
||||||
|
output = es/SuperSlicer.po
|
||||||
|
```
|
||||||
|
|
||||||
|
And re-launch the utility.
|
||||||
|
|
||||||
|
Repeat (if needed) until you have almost nothing left in your todo.po file (one-letter translation like "." are not copied by the utility)
|
11447
resources/localization/SuperSlicer.pot
Normal file
11447
resources/localization/SuperSlicer.pot
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@ -1,8 +1,9 @@
|
|||||||
|
|
||||||
data = C:/local/Slic3rcpp/resources/localization/fr/SuperSlicer.po
|
#data = C:/local/Slic3r/resources/localization/lang/TODO.po
|
||||||
data = C:/local/Slic3rcpp/resources/localization/PrusaSlicer.pot
|
#data = C:/local/Slic3r/resources/localization/lang/SuperSlicer.po
|
||||||
data = C:/local/Slic3rcpp/resources/localization/TODO.po
|
data = C:/local/Slic3r/resources/localization/lang/Slic3r++.po
|
||||||
|
data = C:/local/Slic3r/resources/localization/lang/PrusaSlicer_fr.po
|
||||||
|
|
||||||
input = C:/local/Slic3rcpp/resources/localization/SuperSlicer_en_US.po
|
input = C:/local/Slic3r/resources/localization/SuperSlicer.pot
|
||||||
todo = C:/local/Slic3rcpp/resources/localization/TODO.po
|
todo = C:/local/Slic3r/resources/localization/lang/TODO.po
|
||||||
output = C:/local/Slic3rcpp/resources/localization/SuperSlicer.po
|
output = C:/local/Slic3r/resources/localization/lang/SuperSlicer.po
|
||||||
|
@ -16,8 +16,10 @@ group:Retraction
|
|||||||
setting:idx:retract_lift_below
|
setting:idx:retract_lift_below
|
||||||
setting:idx:retract_lift_not_last_layer
|
setting:idx:retract_lift_not_last_layer
|
||||||
end_line
|
end_line
|
||||||
setting:idx:retract_speed
|
line:"Retraction Speed"
|
||||||
setting:idx:deretract_speed
|
setting:idx:retract_speed
|
||||||
|
setting:idx:label$Deretraction:deretract_speed
|
||||||
|
end_line
|
||||||
setting:idx:retract_restart_extra
|
setting:idx:retract_restart_extra
|
||||||
setting:idx:retract_before_travel
|
setting:idx:retract_before_travel
|
||||||
setting:idx:retract_layer_change
|
setting:idx:retract_layer_change
|
||||||
|
@ -232,6 +232,7 @@ group:Extrusion width
|
|||||||
setting:solid_infill_extrusion_width
|
setting:solid_infill_extrusion_width
|
||||||
setting:top_infill_extrusion_width
|
setting:top_infill_extrusion_width
|
||||||
setting:support_material_extrusion_width
|
setting:support_material_extrusion_width
|
||||||
|
setting:skirt_extrusion_width
|
||||||
group:Overlap
|
group:Overlap
|
||||||
line:Perimeter overlap
|
line:Perimeter overlap
|
||||||
setting:label$External:external_perimeter_overlap
|
setting:label$External:external_perimeter_overlap
|
||||||
|
@ -20,6 +20,7 @@ group:Advanced
|
|||||||
setting:use_relative_e_distances
|
setting:use_relative_e_distances
|
||||||
setting:use_firmware_retraction
|
setting:use_firmware_retraction
|
||||||
setting:use_volumetric_e
|
setting:use_volumetric_e
|
||||||
|
setting:min_length
|
||||||
setting:variable_layer_height
|
setting:variable_layer_height
|
||||||
|
|
||||||
page:Custom G-code:cog
|
page:Custom G-code:cog
|
||||||
|
@ -845,6 +845,7 @@ namespace DoExport {
|
|||||||
if (config.gcode_flavor.value == gcfMarlin || config.gcode_flavor.value == gcfLerdge) {
|
if (config.gcode_flavor.value == gcfMarlin || config.gcode_flavor.value == gcfLerdge) {
|
||||||
normal_time_estimator.set_max_acceleration((float)config.machine_max_acceleration_extruding.values[0]);
|
normal_time_estimator.set_max_acceleration((float)config.machine_max_acceleration_extruding.values[0]);
|
||||||
normal_time_estimator.set_retract_acceleration((float)config.machine_max_acceleration_retracting.values[0]);
|
normal_time_estimator.set_retract_acceleration((float)config.machine_max_acceleration_retracting.values[0]);
|
||||||
|
normal_time_estimator.set_max_travel_acceleration((float)config.machine_max_acceleration_travel.values[0]);
|
||||||
normal_time_estimator.set_minimum_feedrate((float)config.machine_min_extruding_rate.values[0]);
|
normal_time_estimator.set_minimum_feedrate((float)config.machine_min_extruding_rate.values[0]);
|
||||||
normal_time_estimator.set_minimum_travel_feedrate((float)config.machine_min_travel_rate.values[0]);
|
normal_time_estimator.set_minimum_travel_feedrate((float)config.machine_min_travel_rate.values[0]);
|
||||||
normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::X, (float)config.machine_max_acceleration_x.values[0]);
|
normal_time_estimator.set_axis_max_acceleration(GCodeTimeEstimator::X, (float)config.machine_max_acceleration_x.values[0]);
|
||||||
@ -1757,11 +1758,11 @@ void GCode::print_machine_envelope(FILE *file, Print &print)
|
|||||||
fprintf(file, "M204 P%d R%d T%d ; sets acceleration (P, T) and retract acceleration (R), mm/sec^2\n",
|
fprintf(file, "M204 P%d R%d T%d ; sets acceleration (P, T) and retract acceleration (R), mm/sec^2\n",
|
||||||
int(print.config().machine_max_acceleration_extruding.values.front() + 0.5),
|
int(print.config().machine_max_acceleration_extruding.values.front() + 0.5),
|
||||||
int(print.config().machine_max_acceleration_retracting.values.front() + 0.5),
|
int(print.config().machine_max_acceleration_retracting.values.front() + 0.5),
|
||||||
int(print.config().machine_max_acceleration_extruding.values.front() + 0.5));
|
int(print.config().machine_max_acceleration_travel.values.front() + 0.5));
|
||||||
if (std::set<uint8_t>{gcfRepRap, gcfKlipper}.count(print.config().gcode_flavor.value) > 0)
|
if (std::set<uint8_t>{gcfRepRap, gcfKlipper}.count(print.config().gcode_flavor.value) > 0)
|
||||||
fprintf(file, "M204 P%d T%d ; sets acceleration (P, T) and retract acceleration (R), mm/sec^2\n",
|
fprintf(file, "M204 P%d T%d ; sets acceleration (P, T), mm/sec^2\n",
|
||||||
int(print.config().machine_max_acceleration_extruding.values.front() + 0.5),
|
int(print.config().machine_max_acceleration_extruding.values.front() + 0.5),
|
||||||
int(print.config().machine_max_acceleration_retracting.values.front() + 0.5));
|
int(print.config().machine_max_acceleration_travel.values.front() + 0.5));
|
||||||
if (std::set<uint8_t>{gcfRepRap}.count(print.config().gcode_flavor.value) > 0)
|
if (std::set<uint8_t>{gcfRepRap}.count(print.config().gcode_flavor.value) > 0)
|
||||||
fprintf(file, "M566 X%.2lf Y%.2lf Z%.2lf E%.2lf ; sets the jerk limits, mm/sec\n",
|
fprintf(file, "M566 X%.2lf Y%.2lf Z%.2lf E%.2lf ; sets the jerk limits, mm/sec\n",
|
||||||
print.config().machine_max_jerk_x.values.front(),
|
print.config().machine_max_jerk_x.values.front(),
|
||||||
@ -2133,10 +2134,12 @@ void GCode::process_layer(
|
|||||||
std::string gcode;
|
std::string gcode;
|
||||||
|
|
||||||
// Set new layer - this will change Z and force a retraction if retract_layer_change is enabled.
|
// Set new layer - this will change Z and force a retraction if retract_layer_change is enabled.
|
||||||
|
coordf_t previous_print_z = m_layer != nullptr ? m_layer->print_z : 0;
|
||||||
if (! print.config().before_layer_gcode.value.empty()) {
|
if (! print.config().before_layer_gcode.value.empty()) {
|
||||||
DynamicConfig config;
|
DynamicConfig config;
|
||||||
|
config.set_key_value("previous_layer_z", new ConfigOptionFloat(previous_print_z));
|
||||||
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index + 1));
|
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index + 1));
|
||||||
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
||||||
gcode += this->placeholder_parser_process("before_layer_gcode",
|
gcode += this->placeholder_parser_process("before_layer_gcode",
|
||||||
print.config().before_layer_gcode.value, m_writer.tool()->id(), &config)
|
print.config().before_layer_gcode.value, m_writer.tool()->id(), &config)
|
||||||
+ "\n";
|
+ "\n";
|
||||||
@ -2145,6 +2148,7 @@ void GCode::process_layer(
|
|||||||
m_layer = &layer;
|
m_layer = &layer;
|
||||||
if (! print.config().layer_gcode.value.empty()) {
|
if (! print.config().layer_gcode.value.empty()) {
|
||||||
DynamicConfig config;
|
DynamicConfig config;
|
||||||
|
config.set_key_value("previous_layer_z", new ConfigOptionFloat(previous_print_z));
|
||||||
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
|
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
|
||||||
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
||||||
gcode += this->placeholder_parser_process("layer_gcode",
|
gcode += this->placeholder_parser_process("layer_gcode",
|
||||||
@ -2515,6 +2519,7 @@ void GCode::process_layer(
|
|||||||
config.set_key_value("previous_extruder", new ConfigOptionInt((int)current_extruder_filament));
|
config.set_key_value("previous_extruder", new ConfigOptionInt((int)current_extruder_filament));
|
||||||
config.set_key_value("next_extruder", new ConfigOptionInt((int)milling_extruder_id));
|
config.set_key_value("next_extruder", new ConfigOptionInt((int)milling_extruder_id));
|
||||||
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
|
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
|
||||||
|
config.set_key_value("previous_layer_z", new ConfigOptionFloat(previous_print_z));
|
||||||
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
||||||
// Process the start_mill_gcode for the new filament.
|
// Process the start_mill_gcode for the new filament.
|
||||||
gcode += this->placeholder_parser_process("milling_toolchange_start_gcode", start_mill_gcode, current_extruder_filament, &config);
|
gcode += this->placeholder_parser_process("milling_toolchange_start_gcode", start_mill_gcode, current_extruder_filament, &config);
|
||||||
@ -2546,6 +2551,7 @@ void GCode::process_layer(
|
|||||||
config.set_key_value("previous_extruder", new ConfigOptionInt((int)milling_extruder_id));
|
config.set_key_value("previous_extruder", new ConfigOptionInt((int)milling_extruder_id));
|
||||||
config.set_key_value("next_extruder", new ConfigOptionInt((int)current_extruder_filament));
|
config.set_key_value("next_extruder", new ConfigOptionInt((int)current_extruder_filament));
|
||||||
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
|
config.set_key_value("layer_num", new ConfigOptionInt(m_layer_index));
|
||||||
|
config.set_key_value("previous_layer_z", new ConfigOptionFloat(previous_print_z));
|
||||||
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
config.set_key_value("layer_z", new ConfigOptionFloat(print_z));
|
||||||
// Process the end_mill_gcode for the new filament.
|
// Process the end_mill_gcode for the new filament.
|
||||||
gcode += this->placeholder_parser_process("milling_toolchange_start_gcode", end_mill_gcode, current_extruder_filament, &config);
|
gcode += this->placeholder_parser_process("milling_toolchange_start_gcode", end_mill_gcode, current_extruder_filament, &config);
|
||||||
@ -3030,7 +3036,7 @@ std::string GCode::extrude_loop_vase(const ExtrusionLoop &original_loop, const s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// reset acceleration
|
// reset acceleration
|
||||||
gcode += m_writer.set_acceleration((unsigned int)(m_config.default_acceleration.value + 0.5));
|
m_writer.set_acceleration((unsigned int)(m_config.default_acceleration.value + 0.5));
|
||||||
|
|
||||||
//don't wipe here
|
//don't wipe here
|
||||||
//if (m_wipe.enable)
|
//if (m_wipe.enable)
|
||||||
@ -3374,7 +3380,7 @@ std::string GCode::extrude_loop(const ExtrusionLoop &original_loop, const std::s
|
|||||||
}
|
}
|
||||||
|
|
||||||
// reset acceleration
|
// reset acceleration
|
||||||
gcode += m_writer.set_acceleration((unsigned int)(m_config.default_acceleration.value + 0.5));
|
m_writer.set_acceleration((unsigned int)(m_config.default_acceleration.value + 0.5));
|
||||||
|
|
||||||
if (m_wipe.enable)
|
if (m_wipe.enable)
|
||||||
m_wipe.path = paths.front().polyline; // TODO: don't limit wipe to last path
|
m_wipe.path = paths.front().polyline; // TODO: don't limit wipe to last path
|
||||||
@ -3474,7 +3480,7 @@ std::string GCode::extrude_multi_path(const ExtrusionMultiPath &multipath, const
|
|||||||
m_wipe.path.reverse();
|
m_wipe.path.reverse();
|
||||||
}
|
}
|
||||||
// reset acceleration
|
// reset acceleration
|
||||||
gcode += m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5));
|
m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5));
|
||||||
return gcode;
|
return gcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3511,7 +3517,7 @@ std::string GCode::extrude_multi_path3D(const ExtrusionMultiPath3D &multipath3D,
|
|||||||
m_wipe.path.reverse();
|
m_wipe.path.reverse();
|
||||||
}
|
}
|
||||||
// reset acceleration
|
// reset acceleration
|
||||||
gcode += m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5));
|
m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5));
|
||||||
return gcode;
|
return gcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3538,25 +3544,73 @@ void GCode::use(const ExtrusionEntityCollection &collection) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::string extrusion_role_2_string(const ExtrusionRole &er) {
|
||||||
|
switch (er) {
|
||||||
|
case erNone: return " none";
|
||||||
|
case erPerimeter: return " perimeter";
|
||||||
|
case erExternalPerimeter: return " external_perimeter";
|
||||||
|
case erOverhangPerimeter: return " overhang_perimeter";
|
||||||
|
case erInternalInfill: return " internal_infill";
|
||||||
|
case erSolidInfill: return " solid_infill";
|
||||||
|
case erTopSolidInfill: return " top_solid_infill";
|
||||||
|
case erBridgeInfill: return " bridge_infill";
|
||||||
|
case erThinWall: return " thin_wall";
|
||||||
|
case erGapFill: return " gap_fill";
|
||||||
|
case erSkirt: return " skirt";
|
||||||
|
case erSupportMaterial: return " support_material";
|
||||||
|
case erSupportMaterialInterface: return " support_material_interface";
|
||||||
|
case erWipeTower: return " wipe_tower";
|
||||||
|
case erMilling: return " milling";
|
||||||
|
case erCustom: return " custom";
|
||||||
|
case erMixed: return " mixed";
|
||||||
|
case erCount: return " count";
|
||||||
|
}
|
||||||
|
return " unkown";
|
||||||
|
}
|
||||||
|
|
||||||
std::string GCode::extrude_path(const ExtrusionPath &path, const std::string &description, double speed) {
|
std::string GCode::extrude_path(const ExtrusionPath &path, const std::string &description, double speed) {
|
||||||
// description += ExtrusionRole2String(path.role());
|
|
||||||
|
std::string descr = extrusion_role_2_string(path.role());
|
||||||
ExtrusionPath simplifed_path = path;
|
ExtrusionPath simplifed_path = path;
|
||||||
simplifed_path.simplify(SCALED_RESOLUTION);
|
if (this->config().min_length.value != 0 && !m_last_too_small.empty()) {
|
||||||
std::string gcode = this->_extrude(simplifed_path, description, speed);
|
//descr += " trys fusion " + std::to_string(unscaled(m_last_too_small.last_point().x())) + " , " + std::to_string(unscaled(path.first_point().x()));
|
||||||
|
//ensure that it's a continous thing
|
||||||
|
if (m_last_too_small.last_point().distance_to_square(path.first_point()) < scale_(this->config().min_length)) {
|
||||||
|
//descr += " ! fusion " + std::to_string(simplifed_path.polyline.points.size());
|
||||||
|
simplifed_path.height = (m_last_too_small.height * m_last_too_small.length() + path.height * path.length()) / (m_last_too_small.length() + path.length());
|
||||||
|
simplifed_path.mm3_per_mm = (m_last_too_small.mm3_per_mm * m_last_too_small.length() + path.mm3_per_mm * path.length()) / (m_last_too_small.length() + path.length());
|
||||||
|
simplifed_path.polyline.points.insert(simplifed_path.polyline.points.begin(), m_last_too_small.polyline.points.begin(), m_last_too_small.polyline.points.end()-1);
|
||||||
|
}
|
||||||
|
m_last_too_small.polyline.points.clear();
|
||||||
|
}
|
||||||
|
simplifed_path.simplify(this->config().min_length.value != 0 ? scale_(this->config().min_length) : SCALED_RESOLUTION);
|
||||||
|
if (this->config().min_length.value != 0 && simplifed_path.length() < scale_(this->config().min_length)) {
|
||||||
|
m_last_too_small = simplifed_path;
|
||||||
|
return "";
|
||||||
|
//"; "+ descr+" .... too small for extrude: "+std::to_string(simplifed_path.length())+" < "+ std::to_string(scale_(this->config().min_length))
|
||||||
|
//+ " ; " + std::to_string(unscaled(path.first_point().x())) + " : " + std::to_string(unscaled(path.last_point().x()))
|
||||||
|
//+" =;=> " + std::to_string(unscaled(simplifed_path.first_point().x())) + " : " + std::to_string(unscaled(simplifed_path.last_point().x()))
|
||||||
|
//+ "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string gcode = this->_extrude(simplifed_path, description + descr, speed);
|
||||||
|
|
||||||
|
//gcode += " ; " + std::to_string(unscaled(path.first_point().x())) + " : " + std::to_string(unscaled(path.last_point().x()));
|
||||||
|
//gcode += " =;=> " + std::to_string(unscaled(simplifed_path.first_point().x())) + " : " + std::to_string(unscaled(simplifed_path.last_point().x()));
|
||||||
|
|
||||||
if (m_wipe.enable) {
|
if (m_wipe.enable) {
|
||||||
m_wipe.path = std::move(simplifed_path.polyline);
|
m_wipe.path = std::move(simplifed_path.polyline);
|
||||||
m_wipe.path.reverse();
|
m_wipe.path.reverse();
|
||||||
}
|
}
|
||||||
// reset acceleration
|
// reset acceleration
|
||||||
gcode += m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5));
|
m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5));
|
||||||
return gcode;
|
return gcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GCode::extrude_path_3D(const ExtrusionPath3D &path, const std::string &description, double speed) {
|
std::string GCode::extrude_path_3D(const ExtrusionPath3D &path, const std::string &description, double speed) {
|
||||||
// description += ExtrusionRole2String(path.role());
|
std::string descr = extrusion_role_2_string(path.role());
|
||||||
//path.simplify(SCALED_RESOLUTION);
|
//path.simplify(SCALED_RESOLUTION);
|
||||||
std::string gcode = this->_before_extrude(path, description, speed);
|
std::string gcode = this->_before_extrude(path, description + descr, speed);
|
||||||
|
|
||||||
// calculate extrusion length per distance unit
|
// calculate extrusion length per distance unit
|
||||||
double e_per_mm = path.mm3_per_mm
|
double e_per_mm = path.mm3_per_mm
|
||||||
@ -3584,7 +3638,7 @@ std::string GCode::extrude_path_3D(const ExtrusionPath3D &path, const std::strin
|
|||||||
m_wipe.path.reverse();
|
m_wipe.path.reverse();
|
||||||
}
|
}
|
||||||
// reset acceleration
|
// reset acceleration
|
||||||
gcode += m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5));
|
m_writer.set_acceleration((unsigned int)floor(m_config.default_acceleration.value + 0.5));
|
||||||
return gcode;
|
return gcode;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -3876,8 +3930,8 @@ std::string GCode::_before_extrude(const ExtrusionPath &path, const std::string
|
|||||||
acceleration = m_config.infill_acceleration.value;
|
acceleration = m_config.infill_acceleration.value;
|
||||||
} else {
|
} else {
|
||||||
acceleration = m_config.default_acceleration.value;
|
acceleration = m_config.default_acceleration.value;
|
||||||
}
|
}//TODO: add travel accel?
|
||||||
gcode += m_writer.set_acceleration((unsigned int)floor(acceleration + 0.5));
|
m_writer.set_acceleration((unsigned int)floor(acceleration + 0.5));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -161,7 +161,8 @@ public:
|
|||||||
m_normal_time_estimator(GCodeTimeEstimator::Normal),
|
m_normal_time_estimator(GCodeTimeEstimator::Normal),
|
||||||
m_silent_time_estimator(GCodeTimeEstimator::Silent),
|
m_silent_time_estimator(GCodeTimeEstimator::Silent),
|
||||||
m_silent_time_estimator_enabled(false),
|
m_silent_time_estimator_enabled(false),
|
||||||
m_last_obj_copy(nullptr, Point(std::numeric_limits<coord_t>::max(), std::numeric_limits<coord_t>::max()))
|
m_last_obj_copy(nullptr, Point(std::numeric_limits<coord_t>::max(), std::numeric_limits<coord_t>::max())),
|
||||||
|
m_last_too_small(ExtrusionRole::erNone)
|
||||||
{}
|
{}
|
||||||
~GCode() {}
|
~GCode() {}
|
||||||
|
|
||||||
@ -380,6 +381,9 @@ private:
|
|||||||
Point m_last_pos;
|
Point m_last_pos;
|
||||||
bool m_last_pos_defined;
|
bool m_last_pos_defined;
|
||||||
|
|
||||||
|
// a previous extrusion path that is too small to be extruded, have to fusion it into the next call.
|
||||||
|
ExtrusionPath m_last_too_small;
|
||||||
|
|
||||||
std::unique_ptr<CoolingBuffer> m_cooling_buffer;
|
std::unique_ptr<CoolingBuffer> m_cooling_buffer;
|
||||||
std::unique_ptr<SpiralVase> m_spiral_vase;
|
std::unique_ptr<SpiralVase> m_spiral_vase;
|
||||||
#ifdef HAS_PRESSURE_EQUALIZER
|
#ifdef HAS_PRESSURE_EQUALIZER
|
||||||
|
@ -496,6 +496,31 @@ namespace Slic3r {
|
|||||||
return m_state.max_acceleration;
|
return m_state.max_acceleration;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GCodeTimeEstimator::set_max_travel_acceleration(float acceleration_mm_sec2)
|
||||||
|
{
|
||||||
|
m_state.max_travel_acceleration = acceleration_mm_sec2;
|
||||||
|
if (acceleration_mm_sec2 > 0)
|
||||||
|
m_state.travel_acceleration = acceleration_mm_sec2;
|
||||||
|
}
|
||||||
|
|
||||||
|
float GCodeTimeEstimator::get_max_travel_acceleration() const
|
||||||
|
{
|
||||||
|
return m_state.max_travel_acceleration;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GCodeTimeEstimator::set_travel_acceleration(float acceleration_mm_sec2)
|
||||||
|
{
|
||||||
|
m_state.travel_acceleration = (m_state.max_travel_acceleration == 0) ?
|
||||||
|
acceleration_mm_sec2 :
|
||||||
|
// Clamp the acceleration with the maximum.
|
||||||
|
std::min(m_state.max_travel_acceleration, acceleration_mm_sec2);
|
||||||
|
}
|
||||||
|
|
||||||
|
float GCodeTimeEstimator::get_travel_acceleration() const
|
||||||
|
{
|
||||||
|
return m_state.travel_acceleration;
|
||||||
|
}
|
||||||
|
|
||||||
void GCodeTimeEstimator::set_retract_acceleration(float acceleration_mm_sec2)
|
void GCodeTimeEstimator::set_retract_acceleration(float acceleration_mm_sec2)
|
||||||
{
|
{
|
||||||
m_state.retract_acceleration = acceleration_mm_sec2;
|
m_state.retract_acceleration = acceleration_mm_sec2;
|
||||||
@ -670,7 +695,9 @@ namespace Slic3r {
|
|||||||
// Setting the maximum acceleration to zero means that the there is no limit and the G-code
|
// Setting the maximum acceleration to zero means that the there is no limit and the G-code
|
||||||
// is allowed to set excessive values.
|
// is allowed to set excessive values.
|
||||||
set_max_acceleration(0);
|
set_max_acceleration(0);
|
||||||
|
set_max_travel_acceleration(0);
|
||||||
set_acceleration(DEFAULT_ACCELERATION);
|
set_acceleration(DEFAULT_ACCELERATION);
|
||||||
|
set_travel_acceleration(DEFAULT_ACCELERATION);
|
||||||
set_retract_acceleration(DEFAULT_RETRACT_ACCELERATION);
|
set_retract_acceleration(DEFAULT_RETRACT_ACCELERATION);
|
||||||
set_minimum_feedrate(DEFAULT_MINIMUM_FEEDRATE);
|
set_minimum_feedrate(DEFAULT_MINIMUM_FEEDRATE);
|
||||||
set_minimum_travel_feedrate(DEFAULT_MINIMUM_TRAVEL_FEEDRATE);
|
set_minimum_travel_feedrate(DEFAULT_MINIMUM_TRAVEL_FEEDRATE);
|
||||||
@ -1087,7 +1114,7 @@ namespace Slic3r {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// calculates block acceleration
|
// calculates block acceleration
|
||||||
float acceleration = block.is_extruder_only_move() ? get_retract_acceleration() : get_acceleration();
|
float acceleration = block.is_extruder_only_move() ? get_retract_acceleration() : block.is_travel_move() ? get_travel_acceleration() : get_acceleration();
|
||||||
|
|
||||||
for (unsigned char a = X; a < Num_Axis; ++a)
|
for (unsigned char a = X; a < Num_Axis; ++a)
|
||||||
{
|
{
|
||||||
@ -1406,8 +1433,7 @@ namespace Slic3r {
|
|||||||
set_retract_acceleration(value);
|
set_retract_acceleration(value);
|
||||||
if (line.has_value('T', value)) {
|
if (line.has_value('T', value)) {
|
||||||
// Interpret the T value as the travel acceleration in the new Marlin format.
|
// Interpret the T value as the travel acceleration in the new Marlin format.
|
||||||
//FIXME Prusa3D firmware currently does not support travel acceleration value independent from the extruding acceleration value.
|
set_travel_acceleration(value);
|
||||||
// set_travel_acceleration(value);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,9 @@ namespace Slic3r {
|
|||||||
float acceleration; // mm/s^2
|
float acceleration; // mm/s^2
|
||||||
// hard limit for the acceleration, to which the firmware will clamp.
|
// hard limit for the acceleration, to which the firmware will clamp.
|
||||||
float max_acceleration; // mm/s^2
|
float max_acceleration; // mm/s^2
|
||||||
|
float travel_acceleration; // mm/s^2
|
||||||
|
// hard limit for the travel_acceleration, to which the firmware will clamp.
|
||||||
|
float max_travel_acceleration; // mm/s^2
|
||||||
float retract_acceleration; // mm/s^2
|
float retract_acceleration; // mm/s^2
|
||||||
float additional_time; // s
|
float additional_time; // s
|
||||||
float minimum_feedrate; // mm/s
|
float minimum_feedrate; // mm/s
|
||||||
@ -327,6 +330,13 @@ namespace Slic3r {
|
|||||||
void set_max_acceleration(float acceleration_mm_sec2);
|
void set_max_acceleration(float acceleration_mm_sec2);
|
||||||
float get_max_acceleration() const;
|
float get_max_acceleration() const;
|
||||||
|
|
||||||
|
void set_travel_acceleration(float acceleration_mm_sec2);
|
||||||
|
float get_travel_acceleration() const;
|
||||||
|
|
||||||
|
// Maximum acceleration for the machine. The firmware simulator will clamp the M204 Txxx to this maximum.
|
||||||
|
void set_max_travel_acceleration(float acceleration_mm_sec2);
|
||||||
|
float get_max_travel_acceleration() const;
|
||||||
|
|
||||||
void set_retract_acceleration(float acceleration_mm_sec2);
|
void set_retract_acceleration(float acceleration_mm_sec2);
|
||||||
float get_retract_acceleration() const;
|
float get_retract_acceleration() const;
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ std::string GCodeWriter::preamble()
|
|||||||
gcode << "G21 ; set units to millimeters\n";
|
gcode << "G21 ; set units to millimeters\n";
|
||||||
gcode << "G90 ; use absolute coordinates\n";
|
gcode << "G90 ; use absolute coordinates\n";
|
||||||
}
|
}
|
||||||
if (FLAVOR_IS(gcfRepRap) || FLAVOR_IS(gcfMarlin) || FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepetier) || FLAVOR_IS(gcfSmoothie)
|
if (FLAVOR_IS(gcfRepRap) || FLAVOR_IS(gcfMarlin) || FLAVOR_IS(gcfLerdge) || FLAVOR_IS(gcfTeacup) || FLAVOR_IS(gcfRepetier) || FLAVOR_IS(gcfSmoothie)
|
||||||
|| FLAVOR_IS(gcfKlipper) || FLAVOR_IS(gcfLerdge)) {
|
|| FLAVOR_IS(gcfKlipper) || FLAVOR_IS(gcfLerdge)) {
|
||||||
if (this->config.use_relative_e_distances) {
|
if (this->config.use_relative_e_distances) {
|
||||||
gcode << "M83 ; use relative distances for extrusion\n";
|
gcode << "M83 ; use relative distances for extrusion\n";
|
||||||
@ -188,28 +188,35 @@ std::string GCodeWriter::set_fan(unsigned int speed, bool dont_save)
|
|||||||
return gcode.str();
|
return gcode.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string GCodeWriter::set_acceleration(unsigned int acceleration)
|
void GCodeWriter::set_acceleration(unsigned int acceleration)
|
||||||
{
|
{
|
||||||
// Clamp the acceleration to the allowed maximum.
|
// Clamp the acceleration to the allowed maximum.
|
||||||
if (m_max_acceleration > 0 && acceleration > m_max_acceleration)
|
if (m_max_acceleration > 0 && acceleration > m_max_acceleration)
|
||||||
acceleration = m_max_acceleration;
|
acceleration = m_max_acceleration;
|
||||||
|
|
||||||
if (acceleration == 0 || acceleration == m_last_acceleration)
|
if (acceleration == 0 || acceleration == m_current_acceleration)
|
||||||
return std::string();
|
return;
|
||||||
|
|
||||||
m_last_acceleration = acceleration;
|
m_current_acceleration = acceleration;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string GCodeWriter::write_acceleration(){
|
||||||
|
if (m_current_acceleration == m_last_acceleration || m_current_acceleration == 0)
|
||||||
|
return "";
|
||||||
|
|
||||||
|
m_last_acceleration = m_current_acceleration;
|
||||||
|
|
||||||
std::ostringstream gcode;
|
std::ostringstream gcode;
|
||||||
|
//try to set only printing acceleration, travel should be untouched if possible
|
||||||
if (FLAVOR_IS(gcfRepetier)) {
|
if (FLAVOR_IS(gcfRepetier)) {
|
||||||
// M201: Set max printing acceleration
|
// M201: Set max printing acceleration
|
||||||
gcode << "M201 X" << acceleration << " Y" << acceleration;
|
gcode << "M201 X" << m_current_acceleration << " Y" << m_current_acceleration;
|
||||||
if (this->config.gcode_comments) gcode << " ; adjust acceleration";
|
} else if(FLAVOR_IS(gcfMarlin) || FLAVOR_IS(gcfLerdge)){
|
||||||
gcode << "\n";
|
// M204: Set printing acceleration
|
||||||
// M202: Set max travel acceleration
|
gcode << "M204 P" << m_current_acceleration;
|
||||||
gcode << "M202 X" << acceleration << " Y" << acceleration;
|
|
||||||
} else {
|
} else {
|
||||||
// M204: Set default acceleration
|
// M204: Set default acceleration
|
||||||
gcode << "M204 S" << acceleration;
|
gcode << "M204 S" << m_current_acceleration;
|
||||||
}
|
}
|
||||||
if (this->config.gcode_comments) gcode << " ; adjust acceleration";
|
if (this->config.gcode_comments) gcode << " ; adjust acceleration";
|
||||||
gcode << "\n";
|
gcode << "\n";
|
||||||
@ -321,10 +328,12 @@ std::string GCodeWriter::set_speed(double F, const std::string &comment, const s
|
|||||||
|
|
||||||
std::string GCodeWriter::travel_to_xy(const Vec2d &point, const std::string &comment)
|
std::string GCodeWriter::travel_to_xy(const Vec2d &point, const std::string &comment)
|
||||||
{
|
{
|
||||||
|
std::ostringstream gcode;
|
||||||
|
gcode << write_acceleration();
|
||||||
|
|
||||||
m_pos.x() = point.x();
|
m_pos.x() = point.x();
|
||||||
m_pos.y() = point.y();
|
m_pos.y() = point.y();
|
||||||
|
|
||||||
std::ostringstream gcode;
|
|
||||||
gcode << "G1 X" << XYZF_NUM(point.x())
|
gcode << "G1 X" << XYZF_NUM(point.x())
|
||||||
<< " Y" << XYZF_NUM(point.y())
|
<< " Y" << XYZF_NUM(point.y())
|
||||||
<< " F" << XYZF_NUM(this->config.travel_speed.value * 60.0);
|
<< " F" << XYZF_NUM(this->config.travel_speed.value * 60.0);
|
||||||
@ -353,7 +362,9 @@ std::string GCodeWriter::travel_to_xyz(const Vec3d &point, const std::string &co
|
|||||||
the lift. */
|
the lift. */
|
||||||
m_lifted = 0;
|
m_lifted = 0;
|
||||||
m_pos = point;
|
m_pos = point;
|
||||||
|
|
||||||
std::ostringstream gcode;
|
std::ostringstream gcode;
|
||||||
|
gcode << write_acceleration();
|
||||||
gcode << "G1 X" << XYZF_NUM(point.x())
|
gcode << "G1 X" << XYZF_NUM(point.x())
|
||||||
<< " Y" << XYZF_NUM(point.y());
|
<< " Y" << XYZF_NUM(point.y());
|
||||||
if (config.z_step > SCALING_FACTOR)
|
if (config.z_step > SCALING_FACTOR)
|
||||||
@ -389,9 +400,10 @@ std::string GCodeWriter::travel_to_z(double z, const std::string &comment)
|
|||||||
std::string GCodeWriter::_travel_to_z(double z, const std::string &comment)
|
std::string GCodeWriter::_travel_to_z(double z, const std::string &comment)
|
||||||
{
|
{
|
||||||
m_pos.z() = z;
|
m_pos.z() = z;
|
||||||
|
|
||||||
std::ostringstream gcode;
|
std::ostringstream gcode;
|
||||||
if (config.z_step > SCALING_FACTOR)
|
|
||||||
|
gcode << write_acceleration(); if (config.z_step > SCALING_FACTOR)
|
||||||
gcode << "G1 Z" << PRECISION(z, 6);
|
gcode << "G1 Z" << PRECISION(z, 6);
|
||||||
else
|
else
|
||||||
gcode << "G1 Z" << XYZF_NUM(z);
|
gcode << "G1 Z" << XYZF_NUM(z);
|
||||||
@ -419,8 +431,9 @@ std::string GCodeWriter::extrude_to_xy(const Vec2d &point, double dE, const std:
|
|||||||
m_pos.x() = point.x();
|
m_pos.x() = point.x();
|
||||||
m_pos.y() = point.y();
|
m_pos.y() = point.y();
|
||||||
bool is_extrude = m_tool->extrude(dE) != 0;
|
bool is_extrude = m_tool->extrude(dE) != 0;
|
||||||
|
|
||||||
std::ostringstream gcode;
|
std::ostringstream gcode;
|
||||||
|
gcode << write_acceleration();
|
||||||
gcode << "G1 X" << XYZF_NUM(point.x())
|
gcode << "G1 X" << XYZF_NUM(point.x())
|
||||||
<< " Y" << XYZF_NUM(point.y());
|
<< " Y" << XYZF_NUM(point.y());
|
||||||
if(is_extrude)
|
if(is_extrude)
|
||||||
@ -437,8 +450,9 @@ std::string GCodeWriter::extrude_to_xyz(const Vec3d &point, double dE, const std
|
|||||||
m_pos.y() = point.y();
|
m_pos.y() = point.y();
|
||||||
m_lifted = 0;
|
m_lifted = 0;
|
||||||
bool is_extrude = m_tool->extrude(dE) != 0;
|
bool is_extrude = m_tool->extrude(dE) != 0;
|
||||||
|
|
||||||
std::ostringstream gcode;
|
std::ostringstream gcode;
|
||||||
|
gcode << write_acceleration();
|
||||||
gcode << "G1 X" << XYZF_NUM(point.x())
|
gcode << "G1 X" << XYZF_NUM(point.x())
|
||||||
<< " Y" << XYZF_NUM(point.y())
|
<< " Y" << XYZF_NUM(point.y())
|
||||||
<< " Z" << XYZF_NUM(point.z() + m_pos.z());
|
<< " Z" << XYZF_NUM(point.z() + m_pos.z());
|
||||||
|
@ -65,7 +65,8 @@ public:
|
|||||||
std::string set_temperature(unsigned int temperature, bool wait = false, int tool = -1) const;
|
std::string set_temperature(unsigned int temperature, bool wait = false, int tool = -1) const;
|
||||||
std::string set_bed_temperature(unsigned int temperature, bool wait = false);
|
std::string set_bed_temperature(unsigned int temperature, bool wait = false);
|
||||||
std::string set_fan(unsigned int speed, bool dont_save = false);
|
std::string set_fan(unsigned int speed, bool dont_save = false);
|
||||||
std::string set_acceleration(unsigned int acceleration);
|
void set_acceleration(unsigned int acceleration);
|
||||||
|
std::string write_acceleration();
|
||||||
std::string reset_e(bool force = false);
|
std::string reset_e(bool force = false);
|
||||||
std::string update_progress(unsigned int num, unsigned int tot, bool allow_100 = false) const;
|
std::string update_progress(unsigned int num, unsigned int tot, bool allow_100 = false) const;
|
||||||
// return false if this extruder was already selected
|
// return false if this extruder was already selected
|
||||||
@ -100,6 +101,7 @@ private:
|
|||||||
bool m_single_extruder_multi_material;
|
bool m_single_extruder_multi_material;
|
||||||
Tool* m_tool;
|
Tool* m_tool;
|
||||||
unsigned int m_last_acceleration;
|
unsigned int m_last_acceleration;
|
||||||
|
unsigned int m_current_acceleration;
|
||||||
// Limit for setting the acceleration, to respect the machine limits set for the Marlin firmware.
|
// Limit for setting the acceleration, to respect the machine limits set for the Marlin firmware.
|
||||||
// If set to zero, the limit is not in action.
|
// If set to zero, the limit is not in action.
|
||||||
unsigned int m_max_acceleration;
|
unsigned int m_max_acceleration;
|
||||||
|
@ -1599,7 +1599,9 @@ Flow Print::brim_flow(size_t extruder_id) const
|
|||||||
|
|
||||||
Flow Print::skirt_flow(size_t extruder_id) const
|
Flow Print::skirt_flow(size_t extruder_id) const
|
||||||
{
|
{
|
||||||
ConfigOptionFloatOrPercent width = m_config.first_layer_extrusion_width;
|
ConfigOptionFloatOrPercent width = m_config.skirt_extrusion_width;
|
||||||
|
if (width.value <= 0 && m_config.first_layer_extrusion_width.value > 0)
|
||||||
|
width = m_config.first_layer_extrusion_width;
|
||||||
if (width.value <= 0)
|
if (width.value <= 0)
|
||||||
width = m_regions.front()->config().perimeter_extrusion_width;
|
width = m_regions.front()->config().perimeter_extrusion_width;
|
||||||
if (width.value <= 0)
|
if (width.value <= 0)
|
||||||
@ -1610,6 +1612,7 @@ Flow Print::skirt_flow(size_t extruder_id) const
|
|||||||
extruders and take the one with, say, the smallest index;
|
extruders and take the one with, say, the smallest index;
|
||||||
The same logic should be applied to the code that selects the extruder during G-code
|
The same logic should be applied to the code that selects the extruder during G-code
|
||||||
generation as well. */
|
generation as well. */
|
||||||
|
/* or select the used extruder with the highest nozzle diameter, to be on the safe side.*/
|
||||||
return Flow::new_from_config_width(
|
return Flow::new_from_config_width(
|
||||||
frPerimeter,
|
frPerimeter,
|
||||||
width,
|
width,
|
||||||
|
@ -335,7 +335,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->set_default_value(new ConfigOptionFloat(0));
|
def->set_default_value(new ConfigOptionFloat(0));
|
||||||
|
|
||||||
def = this->add("brim_ears", coBool);
|
def = this->add("brim_ears", coBool);
|
||||||
def->label = L("");
|
def->label = ("");
|
||||||
def->full_label = L("Brim ears");
|
def->full_label = L("Brim ears");
|
||||||
def->category = OptionCategory::skirtBrim;
|
def->category = OptionCategory::skirtBrim;
|
||||||
def->tooltip = L("Only draw brim over the sharp edges of the model.");
|
def->tooltip = L("Only draw brim over the sharp edges of the model.");
|
||||||
@ -534,7 +534,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->set_default_value(new ConfigOptionBool(true));
|
def->set_default_value(new ConfigOptionBool(true));
|
||||||
|
|
||||||
def = this->add("duplicate_distance", coFloat);
|
def = this->add("duplicate_distance", coFloat);
|
||||||
def->label = L("Distance between copies");
|
def->label = L("Distance between objects");
|
||||||
def->category = OptionCategory::output;
|
def->category = OptionCategory::output;
|
||||||
def->tooltip = L("Distance used for the auto-arrange feature of the plater.");
|
def->tooltip = L("Distance used for the auto-arrange feature of the plater.");
|
||||||
def->sidetext = L("mm");
|
def->sidetext = L("mm");
|
||||||
@ -1932,17 +1932,27 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def = this->add("machine_max_acceleration_extruding", coFloats);
|
def = this->add("machine_max_acceleration_extruding", coFloats);
|
||||||
def->full_label = L("Maximum acceleration when extruding");
|
def->full_label = L("Maximum acceleration when extruding");
|
||||||
def->category = OptionCategory::limits;
|
def->category = OptionCategory::limits;
|
||||||
def->tooltip = L("Maximum acceleration when extruding (M204 S)");
|
def->tooltip = L("Maximum acceleration when extruding (M204 P)");
|
||||||
|
def->sidetext = L("mm/s²");
|
||||||
|
def->min = 0;
|
||||||
|
def->mode = comAdvanced;
|
||||||
|
def->set_default_value(new ConfigOptionFloats{ 1500., 1250. });
|
||||||
|
|
||||||
|
// M204 R... [mm/sec^2]
|
||||||
|
def = this->add("machine_max_acceleration_retracting", coFloats);
|
||||||
|
def->full_label = L("Maximum acceleration when retracting");
|
||||||
|
def->category = OptionCategory::limits;
|
||||||
|
def->tooltip = L("Maximum acceleration when retracting (M204 R)");
|
||||||
def->sidetext = L("mm/s²");
|
def->sidetext = L("mm/s²");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloats{ 1500., 1250. });
|
def->set_default_value(new ConfigOptionFloats{ 1500., 1250. });
|
||||||
|
|
||||||
// M204 T... [mm/sec^2]
|
// M204 T... [mm/sec^2]
|
||||||
def = this->add("machine_max_acceleration_retracting", coFloats);
|
def = this->add("machine_max_acceleration_travel", coFloats);
|
||||||
def->full_label = L("Maximum acceleration when retracting");
|
def->full_label = L("Maximum acceleration when travelling");
|
||||||
def->category = OptionCategory::limits;
|
def->category = OptionCategory::limits;
|
||||||
def->tooltip = L("Maximum acceleration when retracting (M204 T)");
|
def->tooltip = L("Maximum acceleration when travelling (M204 T)");
|
||||||
def->sidetext = L("mm/s²");
|
def->sidetext = L("mm/s²");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
@ -1986,7 +1996,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def = this->add("max_speed_reduction", coPercents);
|
def = this->add("max_speed_reduction", coPercents);
|
||||||
def->label = L("Max speed reduction");
|
def->label = L("Max speed reduction");
|
||||||
def->category = OptionCategory::speed;
|
def->category = OptionCategory::speed;
|
||||||
def->tooltip = L("Amount of speed you can reduce per extrusion speed.");
|
def->tooltip = L("Set to 90% if you don't want the speed to be reduced by more than 90%.");
|
||||||
def->sidetext = L("%");
|
def->sidetext = L("%");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
def->max = 100;
|
def->max = 100;
|
||||||
@ -2051,6 +2061,16 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->mode = comSimple;
|
def->mode = comSimple;
|
||||||
def->set_default_value(new ConfigOptionFloats { 0.07 });
|
def->set_default_value(new ConfigOptionFloats { 0.07 });
|
||||||
|
|
||||||
|
def = this->add("min_length", coFloat);
|
||||||
|
def->label = L("minimum extrusion length");
|
||||||
|
def->category = OptionCategory::speed;
|
||||||
|
def->tooltip = L("Too many too small commands may overload the firmware / connection. Put a higher value here if you see strange slowdown."
|
||||||
|
"\n0 to disable.");
|
||||||
|
def->sidetext = L("mm");
|
||||||
|
def->min = 0;
|
||||||
|
def->mode = comExpert;
|
||||||
|
def->set_default_value(new ConfigOptionFloat(0.035));
|
||||||
|
|
||||||
def = this->add("min_width_top_surface", coFloatOrPercent);
|
def = this->add("min_width_top_surface", coFloatOrPercent);
|
||||||
def->label = L("minimum top width for infill");
|
def->label = L("minimum top width for infill");
|
||||||
def->category = OptionCategory::speed;
|
def->category = OptionCategory::speed;
|
||||||
@ -2146,7 +2166,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->label = L("Enable Limits");
|
def->label = L("Enable Limits");
|
||||||
def->category = OptionCategory::limits;
|
def->category = OptionCategory::limits;
|
||||||
def->tooltip = L("Slic3r can add M201 M203 M202 M204 and M205 gcodes to pass the machine limits defined here to the firmware."
|
def->tooltip = L("Slic3r can add M201 M203 M202 M204 and M205 gcodes to pass the machine limits defined here to the firmware."
|
||||||
"Gcodes printed will depends of the firmware selected (please Report an issue if you found something wrong)."
|
" Gcodes printed will depends of the firmware selected (please Report an issue if you found something wrong)."
|
||||||
"\nIf you want only a selection, you can write your gcode with these value, example: "
|
"\nIf you want only a selection, you can write your gcode with these value, example: "
|
||||||
"\nM204 P[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]");
|
"\nM204 P[machine_max_acceleration_extruding] T[machine_max_acceleration_retracting]");
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
@ -2190,7 +2210,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->set_default_value(new ConfigOptionBool(true));
|
def->set_default_value(new ConfigOptionBool(true));
|
||||||
|
|
||||||
def = this->add("overhangs_width", coFloatOrPercent);
|
def = this->add("overhangs_width", coFloatOrPercent);
|
||||||
def->label = L("As bridge threshold");
|
def->label = L("'As bridge' threshold");
|
||||||
def->full_label = L("Overhang bridge threshold");
|
def->full_label = L("Overhang bridge threshold");
|
||||||
def->category = OptionCategory::perimeter;
|
def->category = OptionCategory::perimeter;
|
||||||
def->tooltip = L("Minimum unsupported width for an extrusion to be considered an overhang. Can be in mm or in a % of the nozzle diameter.");
|
def->tooltip = L("Minimum unsupported width for an extrusion to be considered an overhang. Can be in mm or in a % of the nozzle diameter.");
|
||||||
@ -2605,6 +2625,15 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionInt(1));
|
def->set_default_value(new ConfigOptionInt(1));
|
||||||
|
|
||||||
|
def = this->add("skirt_extrusion_width", coFloatOrPercent);
|
||||||
|
def->label = L("Skirt");
|
||||||
|
def->category = OptionCategory::width;
|
||||||
|
def->tooltip = L("Horizontal width of the skirt that will be printed around each object.");
|
||||||
|
def->sidetext = L("mm");
|
||||||
|
def->min = 0;
|
||||||
|
def->mode = comAdvanced;
|
||||||
|
def->set_default_value(new ConfigOptionFloatOrPercent(0, false));
|
||||||
|
|
||||||
def = this->add("draft_shield", coBool);
|
def = this->add("draft_shield", coBool);
|
||||||
def->label = L("Draft shield");
|
def->label = L("Draft shield");
|
||||||
def->tooltip = L("If enabled, the skirt will be as tall as a highest printed object. "
|
def->tooltip = L("If enabled, the skirt will be as tall as a highest printed object. "
|
||||||
@ -2750,8 +2779,8 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->full_label = ("Solid infill speed");
|
def->full_label = ("Solid infill speed");
|
||||||
def->category = OptionCategory::speed;
|
def->category = OptionCategory::speed;
|
||||||
def->tooltip = L("Speed for printing solid regions (top/bottom/internal horizontal shells). "
|
def->tooltip = L("Speed for printing solid regions (top/bottom/internal horizontal shells). "
|
||||||
"This can be expressed as a percentage (for example: 80%) over the default infill speed "
|
"This can be expressed as a percentage (for example: 80%) over the default infill speed."
|
||||||
"infill speed above. Set to zero for auto.");
|
" Set to zero for auto.");
|
||||||
def->sidetext = L("mm/s or %");
|
def->sidetext = L("mm/s or %");
|
||||||
def->ratio_over = "infill_speed";
|
def->ratio_over = "infill_speed";
|
||||||
def->aliases = { "solid_infill_feed_rate" };
|
def->aliases = { "solid_infill_feed_rate" };
|
||||||
@ -3173,7 +3202,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
def->label = L("merging with perimeters");
|
def->label = L("merging with perimeters");
|
||||||
def->full_label = L("Thin wall merge");
|
def->full_label = L("Thin wall merge");
|
||||||
def->category = OptionCategory::perimeter;
|
def->category = OptionCategory::perimeter;
|
||||||
def->tooltip = L("Allow the external periemter to merge the thin wals int he path. !!! IF you disable this setting, please explain me why (via help->report issue)"
|
def->tooltip = L("Allow the external perimeter to merge the thin walls in the path. !!! IF you disable this setting, please explain me why (via help->report issue)"
|
||||||
" because I'm going to DELETE this setting next release, as i don't see why someone may want to disable it.");
|
" because I'm going to DELETE this setting next release, as i don't see why someone may want to disable it.");
|
||||||
def->mode = comExpert;
|
def->mode = comExpert;
|
||||||
def->set_default_value(new ConfigOptionBool(true));
|
def->set_default_value(new ConfigOptionBool(true));
|
||||||
@ -3462,7 +3491,7 @@ void PrintConfigDef::init_fff_params()
|
|||||||
" The number put in this setting increase the wipe by moving the nozzle again along the loop before the final wipe.");
|
" The number put in this setting increase the wipe by moving the nozzle again along the loop before the final wipe.");
|
||||||
def->min = 0;
|
def->min = 0;
|
||||||
def->sidetext = L("mm");
|
def->sidetext = L("mm");
|
||||||
def->mode = comExpert;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionFloats{ 0.f });
|
def->set_default_value(new ConfigOptionFloats{ 0.f });
|
||||||
|
|
||||||
def = this->add("wipe_tower_bridging", coFloat);
|
def = this->add("wipe_tower_bridging", coFloat);
|
||||||
@ -3684,7 +3713,7 @@ void PrintConfigDef::init_milling_params()
|
|||||||
def->tooltip = L("Put here the gcode to change the toolhead (called after the g-code T[next_extruder]). You have access to [next_extruder] and [previous_extruder]."
|
def->tooltip = L("Put here the gcode to change the toolhead (called after the g-code T[next_extruder]). You have access to [next_extruder] and [previous_extruder]."
|
||||||
" next_extruder is the 'extruder number' of the new milling tool, it's equal to the index (begining at 0) of the milling tool plus the number of extruders."
|
" next_extruder is the 'extruder number' of the new milling tool, it's equal to the index (begining at 0) of the milling tool plus the number of extruders."
|
||||||
" previous_extruder is the 'extruder number' of the previous tool, it may be a normal extruder, if it's below the number of extruders."
|
" previous_extruder is the 'extruder number' of the previous tool, it may be a normal extruder, if it's below the number of extruders."
|
||||||
" The numbe rof extruder is available at [extruder]and the number of milling tool is available at [milling_cutter].");
|
" The number of extruder is available at [extruder] and the number of milling tool is available at [milling_cutter].");
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionStrings(""));
|
def->set_default_value(new ConfigOptionStrings(""));
|
||||||
|
|
||||||
@ -3694,14 +3723,14 @@ void PrintConfigDef::init_milling_params()
|
|||||||
def->tooltip = L("Put here the gcode to end the toolhead action, like stopping the spindle. You have access to [next_extruder] and [previous_extruder]."
|
def->tooltip = L("Put here the gcode to end the toolhead action, like stopping the spindle. You have access to [next_extruder] and [previous_extruder]."
|
||||||
" previous_extruder is the 'extruder number' of the current milling tool, it's equal to the index (begining at 0) of the milling tool plus the number of extruders."
|
" previous_extruder is the 'extruder number' of the current milling tool, it's equal to the index (begining at 0) of the milling tool plus the number of extruders."
|
||||||
" next_extruder is the 'extruder number' of the next tool, it may be a normal extruder, if it's below the number of extruders."
|
" next_extruder is the 'extruder number' of the next tool, it may be a normal extruder, if it's below the number of extruders."
|
||||||
" The numbe rof extruder is available at [extruder]and the number of milling tool is available at [milling_cutter].");
|
" The number of extruder is available at [extruder]and the number of milling tool is available at [milling_cutter].");
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
def->set_default_value(new ConfigOptionStrings(""));
|
def->set_default_value(new ConfigOptionStrings(""));
|
||||||
|
|
||||||
def = this->add("milling_post_process", coBool);
|
def = this->add("milling_post_process", coBool);
|
||||||
def->label = L("Milling post-processing");
|
def->label = L("Milling post-processing");
|
||||||
def->category = OptionCategory::milling;
|
def->category = OptionCategory::milling;
|
||||||
def->tooltip = L("If activated, at the end of each layer, the printer will switch to a milling ead and mill the external perimeters."
|
def->tooltip = L("If activated, at the end of each layer, the printer will switch to a milling head and mill the external perimeters."
|
||||||
"\nYou should set the 'Milling extra XY size' to a value high enough to have enough plastic to mill. Also, be sure that your piece is firmly glued to the bed.");
|
"\nYou should set the 'Milling extra XY size' to a value high enough to have enough plastic to mill. Also, be sure that your piece is firmly glued to the bed.");
|
||||||
def->mode = comSimple;
|
def->mode = comSimple;
|
||||||
def->set_default_value(new ConfigOptionBool(false));
|
def->set_default_value(new ConfigOptionBool(false));
|
||||||
@ -3719,7 +3748,7 @@ void PrintConfigDef::init_milling_params()
|
|||||||
def = this->add("milling_after_z", coFloatOrPercent);
|
def = this->add("milling_after_z", coFloatOrPercent);
|
||||||
def->label = L("Milling only after");
|
def->label = L("Milling only after");
|
||||||
def->category = OptionCategory::milling;
|
def->category = OptionCategory::milling;
|
||||||
def->tooltip = L("THis setting restrict the post-process milling to a certain height, to avoid milling the bed. It can be a mm of a % of the first layer height (so it can depends of the object).");
|
def->tooltip = L("This setting restrict the post-process milling to a certain height, to avoid milling the bed. It can be a mm of a % of the first layer height (so it can depends of the object).");
|
||||||
def->sidetext = L("mm or %");
|
def->sidetext = L("mm or %");
|
||||||
def->ratio_over = "first_layer_height";
|
def->ratio_over = "first_layer_height";
|
||||||
def->mode = comAdvanced;
|
def->mode = comAdvanced;
|
||||||
|
@ -798,8 +798,10 @@ public:
|
|||||||
ConfigOptionFloats machine_max_feedrate_e;
|
ConfigOptionFloats machine_max_feedrate_e;
|
||||||
// M204 S... [mm/sec^2]
|
// M204 S... [mm/sec^2]
|
||||||
ConfigOptionFloats machine_max_acceleration_extruding;
|
ConfigOptionFloats machine_max_acceleration_extruding;
|
||||||
// M204 T... [mm/sec^2]
|
// M204 R... [mm/sec^2]
|
||||||
ConfigOptionFloats machine_max_acceleration_retracting;
|
ConfigOptionFloats machine_max_acceleration_retracting;
|
||||||
|
// M204 T... [mm/sec^2]
|
||||||
|
ConfigOptionFloats machine_max_acceleration_travel;
|
||||||
// M205 X... Y... Z... E... [mm/sec]
|
// M205 X... Y... Z... E... [mm/sec]
|
||||||
ConfigOptionFloats machine_max_jerk_x;
|
ConfigOptionFloats machine_max_jerk_x;
|
||||||
ConfigOptionFloats machine_max_jerk_y;
|
ConfigOptionFloats machine_max_jerk_y;
|
||||||
@ -823,6 +825,7 @@ protected:
|
|||||||
OPT_PTR(machine_max_feedrate_e);
|
OPT_PTR(machine_max_feedrate_e);
|
||||||
OPT_PTR(machine_max_acceleration_extruding);
|
OPT_PTR(machine_max_acceleration_extruding);
|
||||||
OPT_PTR(machine_max_acceleration_retracting);
|
OPT_PTR(machine_max_acceleration_retracting);
|
||||||
|
OPT_PTR(machine_max_acceleration_travel);
|
||||||
OPT_PTR(machine_max_jerk_x);
|
OPT_PTR(machine_max_jerk_x);
|
||||||
OPT_PTR(machine_max_jerk_y);
|
OPT_PTR(machine_max_jerk_y);
|
||||||
OPT_PTR(machine_max_jerk_z);
|
OPT_PTR(machine_max_jerk_z);
|
||||||
@ -883,11 +886,12 @@ public:
|
|||||||
ConfigOptionString feature_gcode;
|
ConfigOptionString feature_gcode;
|
||||||
ConfigOptionFloat max_print_speed;
|
ConfigOptionFloat max_print_speed;
|
||||||
ConfigOptionFloat max_volumetric_speed;
|
ConfigOptionFloat max_volumetric_speed;
|
||||||
ConfigOptionFloats milling_z_lift;
|
|
||||||
#ifdef HAS_PRESSURE_EQUALIZER
|
#ifdef HAS_PRESSURE_EQUALIZER
|
||||||
ConfigOptionFloat max_volumetric_extrusion_rate_slope_positive;
|
ConfigOptionFloat max_volumetric_extrusion_rate_slope_positive;
|
||||||
ConfigOptionFloat max_volumetric_extrusion_rate_slope_negative;
|
ConfigOptionFloat max_volumetric_extrusion_rate_slope_negative;
|
||||||
#endif
|
#endif
|
||||||
|
ConfigOptionFloats milling_z_lift;
|
||||||
|
ConfigOptionFloat min_length;
|
||||||
ConfigOptionPercents retract_before_wipe;
|
ConfigOptionPercents retract_before_wipe;
|
||||||
ConfigOptionFloats retract_length;
|
ConfigOptionFloats retract_length;
|
||||||
ConfigOptionFloats retract_length_toolchange;
|
ConfigOptionFloats retract_length_toolchange;
|
||||||
@ -980,6 +984,7 @@ protected:
|
|||||||
OPT_PTR(max_print_speed);
|
OPT_PTR(max_print_speed);
|
||||||
OPT_PTR(max_volumetric_speed);
|
OPT_PTR(max_volumetric_speed);
|
||||||
OPT_PTR(milling_z_lift);
|
OPT_PTR(milling_z_lift);
|
||||||
|
OPT_PTR(min_length);
|
||||||
#ifdef HAS_PRESSURE_EQUALIZER
|
#ifdef HAS_PRESSURE_EQUALIZER
|
||||||
OPT_PTR(max_volumetric_extrusion_rate_slope_positive);
|
OPT_PTR(max_volumetric_extrusion_rate_slope_positive);
|
||||||
OPT_PTR(max_volumetric_extrusion_rate_slope_negative);
|
OPT_PTR(max_volumetric_extrusion_rate_slope_negative);
|
||||||
@ -1091,6 +1096,7 @@ public:
|
|||||||
ConfigOptionBools retract_layer_change;
|
ConfigOptionBools retract_layer_change;
|
||||||
ConfigOptionFloat skirt_distance;
|
ConfigOptionFloat skirt_distance;
|
||||||
ConfigOptionInt skirt_height;
|
ConfigOptionInt skirt_height;
|
||||||
|
ConfigOptionFloatOrPercent skirt_extrusion_width;
|
||||||
ConfigOptionBool draft_shield;
|
ConfigOptionBool draft_shield;
|
||||||
ConfigOptionInt skirts;
|
ConfigOptionInt skirts;
|
||||||
ConfigOptionInts slowdown_below_layer_time;
|
ConfigOptionInts slowdown_below_layer_time;
|
||||||
@ -1179,6 +1185,7 @@ protected:
|
|||||||
OPT_PTR(retract_before_travel);
|
OPT_PTR(retract_before_travel);
|
||||||
OPT_PTR(retract_layer_change);
|
OPT_PTR(retract_layer_change);
|
||||||
OPT_PTR(skirt_distance);
|
OPT_PTR(skirt_distance);
|
||||||
|
OPT_PTR(skirt_extrusion_width);
|
||||||
OPT_PTR(skirt_height);
|
OPT_PTR(skirt_height);
|
||||||
OPT_PTR(draft_shield);
|
OPT_PTR(draft_shield);
|
||||||
OPT_PTR(skirts);
|
OPT_PTR(skirts);
|
||||||
|
@ -364,6 +364,7 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig* config)
|
|||||||
|
|
||||||
bool have_skirt = config->opt_int("skirts") > 0;
|
bool have_skirt = config->opt_int("skirts") > 0;
|
||||||
toggle_field("skirt_height", have_skirt && !config->opt_bool("draft_shield"));
|
toggle_field("skirt_height", have_skirt && !config->opt_bool("draft_shield"));
|
||||||
|
toggle_field("skirt_width", have_skirt);
|
||||||
for (auto el : { "skirt_distance", "draft_shield", "min_skirt_length" })
|
for (auto el : { "skirt_distance", "draft_shield", "min_skirt_length" })
|
||||||
toggle_field(el, have_skirt);
|
toggle_field(el, have_skirt);
|
||||||
|
|
||||||
|
@ -529,11 +529,69 @@ void FreeCADDialog::on_char_add(wxStyledTextEvent& event) {
|
|||||||
stc->InsertText(current_pos, "\"");
|
stc->InsertText(current_pos, "\"");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
void FreeCADDialog::comment(bool is_switch) {
|
||||||
|
//if selction, do that for every line
|
||||||
|
std::vector<int> lines;
|
||||||
|
if (m_text->LineFromPosition(m_text->GetSelectionStart()) < m_text->LineFromPosition(m_text->GetSelectionEnd()) ) {
|
||||||
|
for(int i= m_text->LineFromPosition(m_text->GetSelectionStart()); i <= m_text->LineFromPosition(m_text->GetSelectionEnd()); i++)
|
||||||
|
lines.push_back(i);
|
||||||
|
} else {
|
||||||
|
lines.push_back(m_text->GetCurrentLine());
|
||||||
|
}
|
||||||
|
|
||||||
|
//get last \n pos or 0
|
||||||
|
int saved_pos = m_text->GetCurrentPos();
|
||||||
|
int begin = m_text->GetSelectionStart();
|
||||||
|
int end = m_text->GetSelectionEnd();
|
||||||
|
|
||||||
|
for (int l : lines) {
|
||||||
|
int commentpos = m_text->PositionFromLine(l);
|
||||||
|
//skip ' ' and '\t'
|
||||||
|
if(is_switch)
|
||||||
|
while (m_text->GetCharAt(commentpos) == ' ' || m_text->GetCharAt(commentpos) == '\t')
|
||||||
|
commentpos++;
|
||||||
|
if (m_text->GetCharAt(commentpos) == '#' && is_switch) {
|
||||||
|
m_text->SetTargetStart(commentpos);
|
||||||
|
m_text->SetTargetEnd(commentpos + 1);
|
||||||
|
m_text->ReplaceTarget("");
|
||||||
|
if (commentpos < begin) {
|
||||||
|
begin--;
|
||||||
|
}
|
||||||
|
end--;
|
||||||
|
saved_pos--;
|
||||||
|
} else {
|
||||||
|
m_text->InsertText(commentpos, "#");
|
||||||
|
if (commentpos < begin) {
|
||||||
|
begin++;
|
||||||
|
}
|
||||||
|
end++;
|
||||||
|
saved_pos++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_text->SetCurrentPos(saved_pos); //TODO +- some if # added/removed
|
||||||
|
if (begin < end) {
|
||||||
|
m_text->SetSelectionStart(begin);
|
||||||
|
m_text->SetSelectionEnd(end);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void FreeCADDialog::on_char_type(wxKeyEvent &event) {
|
||||||
|
//std::cout << "on_char_type " << event.GetUnicodeKey() <<", " << event.GetModifiers() << "\n";
|
||||||
|
if (event.GetUnicodeKey() == 'Q' && event.GetModifiers() == wxMOD_CONTROL) {
|
||||||
|
comment(true);
|
||||||
|
} else if (event.GetUnicodeKey() == 'K' && event.GetModifiers() == wxMOD_CONTROL) {
|
||||||
|
comment(false);
|
||||||
|
} else {
|
||||||
|
event.Skip(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// note: this works on KEY, not on CHAR, so be sure the key is the right one for all keyboard layout.
|
// note: this works on KEY, not on CHAR, so be sure the key is the right one for all keyboard layout.
|
||||||
// space, back, del are ok but no ascii char
|
// space, back, del are ok but no ascii char
|
||||||
void FreeCADDialog::on_key_type(wxKeyEvent& event)
|
void FreeCADDialog::on_key_type(wxKeyEvent& event)
|
||||||
{
|
{
|
||||||
|
//std::cout << "on_key_type " << event.GetUnicodeKey() << " ? "<< int('Q') <<", "<< event.GetKeyCode() << ", " << event.GetModifiers() << "\n";
|
||||||
if (event.GetKeyCode() == WXK_SPACE && event.GetModifiers() == wxMOD_CONTROL)
|
if (event.GetKeyCode() == WXK_SPACE && event.GetModifiers() == wxMOD_CONTROL)
|
||||||
{
|
{
|
||||||
//get word, if any
|
//get word, if any
|
||||||
@ -604,6 +662,10 @@ void FreeCADDialog::on_key_type(wxKeyEvent& event)
|
|||||||
event.Skip(true);
|
event.Skip(true);
|
||||||
} else if (event.GetKeyCode() == WXK_ESCAPE && m_text != nullptr && m_text->AutoCompActive()) {
|
} else if (event.GetKeyCode() == WXK_ESCAPE && m_text != nullptr && m_text->AutoCompActive()) {
|
||||||
m_text->AutoCompCancel();
|
m_text->AutoCompCancel();
|
||||||
|
}else if (event.GetUnicodeKey() == 'Q' && event.GetModifiers() == wxMOD_CONTROL) {
|
||||||
|
comment(true);
|
||||||
|
} else if (event.GetUnicodeKey() == 'K' && event.GetModifiers() == wxMOD_CONTROL) {
|
||||||
|
comment(false);
|
||||||
} else {
|
} else {
|
||||||
event.Skip(true);
|
event.Skip(true);
|
||||||
}
|
}
|
||||||
@ -635,6 +697,7 @@ void FreeCADDialog::createSTC()
|
|||||||
m_text->Bind(wxEVT_STC_MODIFIED, &FreeCADDialog::on_word_change_for_autocomplete, this);
|
m_text->Bind(wxEVT_STC_MODIFIED, &FreeCADDialog::on_word_change_for_autocomplete, this);
|
||||||
m_text->Bind(wxEVT_STC_CHARADDED, &FreeCADDialog::on_char_add, this);
|
m_text->Bind(wxEVT_STC_CHARADDED, &FreeCADDialog::on_char_add, this);
|
||||||
m_text->Bind(wxEVT_KEY_DOWN, &FreeCADDialog::on_key_type, this);
|
m_text->Bind(wxEVT_KEY_DOWN, &FreeCADDialog::on_key_type, this);
|
||||||
|
m_text->Bind(wxEVT_CHAR, &FreeCADDialog::on_char_type, this);
|
||||||
m_text->Bind(wxEVT_STC_AUTOCOMP_COMPLETED, &FreeCADDialog::on_autocomp_complete, this);
|
m_text->Bind(wxEVT_STC_AUTOCOMP_COMPLETED, &FreeCADDialog::on_autocomp_complete, this);
|
||||||
m_text->Connect(wxID_ANY,
|
m_text->Connect(wxID_ANY,
|
||||||
wxEVT_KEY_DOWN,
|
wxEVT_KEY_DOWN,
|
||||||
|
@ -68,10 +68,12 @@ protected:
|
|||||||
void on_word_change_for_autocomplete(wxStyledTextEvent& event);
|
void on_word_change_for_autocomplete(wxStyledTextEvent& event);
|
||||||
void on_char_add(wxStyledTextEvent& event);
|
void on_char_add(wxStyledTextEvent& event);
|
||||||
void on_key_type(wxKeyEvent& event);
|
void on_key_type(wxKeyEvent& event);
|
||||||
|
void on_char_type(wxKeyEvent& event);
|
||||||
void on_autocomp_complete(wxStyledTextEvent& event);
|
void on_autocomp_complete(wxStyledTextEvent& event);
|
||||||
bool write_text_in_file(const wxString &towrite, const boost::filesystem::path &file);
|
bool write_text_in_file(const wxString &towrite, const boost::filesystem::path &file);
|
||||||
bool load_text_from_file(const boost::filesystem::path &file);
|
bool load_text_from_file(const boost::filesystem::path &file);
|
||||||
void test_update_script_file(std::string &json);
|
void test_update_script_file(std::string &json);
|
||||||
|
void comment(bool is_switch);
|
||||||
|
|
||||||
wxStyledTextCtrl* m_text;
|
wxStyledTextCtrl* m_text;
|
||||||
wxTextCtrl* m_errors;
|
wxTextCtrl* m_errors;
|
||||||
|
@ -1439,7 +1439,7 @@ void GLCanvas3D::Tooltip::render(const Vec2d& mouse_position) const
|
|||||||
imgui.set_next_window_pos(mouse_position(0), mouse_position(1) + 16, ImGuiCond_Always, 0.0f, 0.0f);
|
imgui.set_next_window_pos(mouse_position(0), mouse_position(1) + 16, ImGuiCond_Always, 0.0f, 0.0f);
|
||||||
#endif // ENABLE_CANVAS_CONSTRAINED_TOOLTIP_USING_IMGUI
|
#endif // ENABLE_CANVAS_CONSTRAINED_TOOLTIP_USING_IMGUI
|
||||||
|
|
||||||
imgui.begin(_(L("canvas_tooltip")), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoFocusOnAppearing);
|
imgui.begin(_("canvas_tooltip"), ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoMouseInputs | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoDecoration | ImGuiWindowFlags_NoFocusOnAppearing);
|
||||||
ImGui::BringWindowToDisplayFront(ImGui::GetCurrentWindow());
|
ImGui::BringWindowToDisplayFront(ImGui::GetCurrentWindow());
|
||||||
ImGui::TextUnformatted(m_text.c_str());
|
ImGui::TextUnformatted(m_text.c_str());
|
||||||
|
|
||||||
|
@ -474,6 +474,7 @@ const std::vector<std::string>& Preset::print_options()
|
|||||||
"bridge_acceleration", "first_layer_acceleration", "default_acceleration",
|
"bridge_acceleration", "first_layer_acceleration", "default_acceleration",
|
||||||
"duplicate_distance",
|
"duplicate_distance",
|
||||||
"skirts", "skirt_distance", "skirt_height",
|
"skirts", "skirt_distance", "skirt_height",
|
||||||
|
"skirt_extrusion_width",
|
||||||
"min_skirt_length",
|
"min_skirt_length",
|
||||||
"draft_shield",
|
"draft_shield",
|
||||||
"brim_inside_holes",
|
"brim_inside_holes",
|
||||||
@ -596,6 +597,7 @@ const std::vector<std::string>& Preset::printer_options()
|
|||||||
"printer_technology",
|
"printer_technology",
|
||||||
"bed_shape", "bed_custom_texture", "bed_custom_model", "z_offset", "gcode_flavor", "use_relative_e_distances", "serial_port", "serial_speed",
|
"bed_shape", "bed_custom_texture", "bed_custom_model", "z_offset", "gcode_flavor", "use_relative_e_distances", "serial_port", "serial_speed",
|
||||||
"use_firmware_retraction", "use_volumetric_e", "variable_layer_height",
|
"use_firmware_retraction", "use_volumetric_e", "variable_layer_height",
|
||||||
|
"min_length",
|
||||||
"host_type", "print_host", "printhost_apikey", "printhost_cafile",
|
"host_type", "print_host", "printhost_apikey", "printhost_cafile",
|
||||||
"single_extruder_multi_material", "start_gcode", "end_gcode", "before_layer_gcode", "layer_gcode", "toolchange_gcode",
|
"single_extruder_multi_material", "start_gcode", "end_gcode", "before_layer_gcode", "layer_gcode", "toolchange_gcode",
|
||||||
"feature_gcode",
|
"feature_gcode",
|
||||||
@ -607,6 +609,7 @@ const std::vector<std::string>& Preset::printer_options()
|
|||||||
"wipe_advanced_multiplier",
|
"wipe_advanced_multiplier",
|
||||||
"wipe_advanced_algo",
|
"wipe_advanced_algo",
|
||||||
"remaining_times", "silent_mode", "machine_max_acceleration_extruding", "machine_max_acceleration_retracting",
|
"remaining_times", "silent_mode", "machine_max_acceleration_extruding", "machine_max_acceleration_retracting",
|
||||||
|
"machine_max_acceleration_travel",
|
||||||
"machine_max_acceleration_x", "machine_max_acceleration_y", "machine_max_acceleration_z", "machine_max_acceleration_e",
|
"machine_max_acceleration_x", "machine_max_acceleration_y", "machine_max_acceleration_z", "machine_max_acceleration_e",
|
||||||
"machine_max_feedrate_x", "machine_max_feedrate_y", "machine_max_feedrate_z", "machine_max_feedrate_e",
|
"machine_max_feedrate_x", "machine_max_feedrate_y", "machine_max_feedrate_z", "machine_max_feedrate_e",
|
||||||
"machine_min_extruding_rate", "machine_min_travel_rate",
|
"machine_min_extruding_rate", "machine_min_travel_rate",
|
||||||
|
@ -2224,6 +2224,7 @@ PageShp TabPrinter::build_kinematics_page()
|
|||||||
}
|
}
|
||||||
append_option_line_kinematics(optgroup, "machine_max_acceleration_extruding");
|
append_option_line_kinematics(optgroup, "machine_max_acceleration_extruding");
|
||||||
append_option_line_kinematics(optgroup, "machine_max_acceleration_retracting");
|
append_option_line_kinematics(optgroup, "machine_max_acceleration_retracting");
|
||||||
|
append_option_line_kinematics(optgroup, "machine_max_acceleration_travel");
|
||||||
|
|
||||||
optgroup = page->new_optgroup(_(L("Jerk limits")));
|
optgroup = page->new_optgroup(_(L("Jerk limits")));
|
||||||
for (const std::string &axis : axes) {
|
for (const std::string &axis : axes) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user