|
@@ -176,27 +176,28 @@ void CalibrationRetractionDialog::create_geometry(wxCommandEvent& event_args) {
|
|
|
|
|
|
//add sub-part after scale
|
|
|
float zscale_number = (first_layer_height + layer_height) / 0.4;
|
|
|
- std::vector < std::vector<ModelObject*>> part_tower;
|
|
|
std::vector<std::string> filament_temp_item_name;
|
|
|
for (size_t id_item = 0; id_item < nb_items; id_item++) {
|
|
|
- part_tower.emplace_back();
|
|
|
int mytemp = temp - temp_decr * id_item;
|
|
|
if (mytemp <= 285 && mytemp >= 180 && mytemp % 5 == 0) {
|
|
|
filament_temp_item_name.push_back("t" + std::to_string(mytemp) + ".amf");
|
|
|
+ assert(model.objects[objs_idx[id_item]]->volumes.size() == 1);
|
|
|
add_part(model.objects[objs_idx[id_item]], (boost::filesystem::path(Slic3r::resources_dir()) / "calibration" / "filament_temp" / filament_temp_item_name.back()).string(),
|
|
|
Vec3d{ 0,0, scale * 0.0 - 4.8 }, Vec3d{ scale,scale,scale });
|
|
|
+ assert(model.objects[objs_idx[id_item]]->volumes.size() == 2);
|
|
|
model.objects[objs_idx[id_item]]->volumes[1]->rotate(PI / 2, Vec3d(0, 0, 1));
|
|
|
model.objects[objs_idx[id_item]]->volumes[1]->rotate(-PI / 2, Vec3d(1, 0, 0));
|
|
|
+ //model.objects[objs_idx[id_item]]->volumes[1]->rotate(Geometry::deg2rad(plat->config()->opt_float("init_z_rotate")), Axis::Z);
|
|
|
}
|
|
|
for (int num_retract = 0; num_retract < nb_retract; num_retract++) {
|
|
|
- part_tower.back().push_back(add_part(model.objects[objs_idx[id_item]],
|
|
|
+ add_part(model.objects[objs_idx[id_item]],
|
|
|
(boost::filesystem::path(Slic3r::resources_dir()) / "calibration" / "retraction" / "retraction_calibration_pillar.amf").string(),
|
|
|
- Vec3d{ 0,0,scale * 0.7 - 0.3 + scale * num_retract }, Vec3d{ scale,scale,scale }));
|
|
|
+ Vec3d{ 0,0,scale * 0.7 - 0.3 + scale * num_retract }, Vec3d{ scale,scale,scale });
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// --- translate ---;
|
|
|
- bool has_to_arrange = false;
|
|
|
+ bool has_to_arrange = plat->config()->opt_float("init_z_rotate") != 0;
|
|
|
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.);
|
|
@@ -214,41 +215,42 @@ void CalibrationRetractionDialog::create_geometry(wxCommandEvent& event_args) {
|
|
|
assert(filament_temp_item_name.size() == nb_items);
|
|
|
assert(model.objects.size() == nb_items);
|
|
|
for (size_t i = 0; i < nb_items; i++) {
|
|
|
+ ModelObject *current_obj = model.objects[objs_idx[i]];
|
|
|
//speed
|
|
|
double perimeter_speed = full_print_config.get_computed_value("perimeter_speed");
|
|
|
double external_perimeter_speed = full_print_config.get_computed_value("external_perimeter_speed");
|
|
|
//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));
|
|
|
- for(auto& volume : model.objects[objs_idx[i]]->volumes)
|
|
|
+ current_obj->config.set_key_value("brim_width", new ConfigOptionFloat(0));
|
|
|
+ current_obj->config.set_key_value("perimeters", new ConfigOptionInt(2));
|
|
|
+ current_obj->config.set_key_value("external_perimeters_first", new ConfigOptionBool(false));
|
|
|
+ current_obj->config.set_key_value("bottom_solid_layers", new ConfigOptionInt(0));
|
|
|
+ for(auto& volume : current_obj->volumes)
|
|
|
if( volume->name == filament_temp_item_name[i] || volume->name.empty()) // if temperature patch or the main retraction patch (empty name because it's the initial volume)
|
|
|
volume->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_width_speed", new ConfigOptionFloatOrPercent(0,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_enabled", 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.));
|
|
|
+ current_obj->config.set_key_value("top_solid_layers", new ConfigOptionInt(0));
|
|
|
+ current_obj->config.set_key_value("fill_density", new ConfigOptionPercent(0));
|
|
|
+ //current_obj->config.set_key_value("fill_pattern", new ConfigOptionEnum<InfillPattern>(ipRectilinear));
|
|
|
+ current_obj->config.set_key_value("only_one_perimeter_top", new ConfigOptionBool(false));
|
|
|
+ current_obj->config.set_key_value("overhangs_width_speed", new ConfigOptionFloatOrPercent(0,false));
|
|
|
+ current_obj->config.set_key_value("thin_walls", new ConfigOptionBool(true));
|
|
|
+ current_obj->config.set_key_value("thin_walls_min_width", new ConfigOptionFloatOrPercent(2,true));
|
|
|
+ current_obj->config.set_key_value("gap_fill_enabled", new ConfigOptionBool(false));
|
|
|
+ current_obj->config.set_key_value("first_layer_height", new ConfigOptionFloatOrPercent(nozzle_diameter / 2., false));
|
|
|
+ current_obj->config.set_key_value("layer_height", new ConfigOptionFloat(nozzle_diameter / 2.));
|
|
|
//temp
|
|
|
- model.objects[objs_idx[i]]->config.set_key_value("print_temperature", new ConfigOptionInt(int(temp - temp_decr * i)));
|
|
|
+ current_obj->config.set_key_value("print_temperature", new ConfigOptionInt(int(temp - temp_decr * i)));
|
|
|
//set retraction override
|
|
|
- size_t num_part = 0;
|
|
|
+
|
|
|
const int mytemp = temp - temp_decr * i;
|
|
|
const int extra_vol = (mytemp <= 285 && mytemp >= 180 && mytemp % 5 == 0) ? 2 : 1;
|
|
|
- for (ModelObject* part : part_tower[i]) {
|
|
|
- model.objects[objs_idx[i]]->volumes[num_part + extra_vol]->config.set_key_value("print_retract_length", new ConfigOptionFloat(retraction_start + num_part * retraction_steps));
|
|
|
- model.objects[objs_idx[i]]->volumes[num_part + extra_vol]->config.set_key_value("small_perimeter_speed", new ConfigOptionFloatOrPercent(external_perimeter_speed, false));
|
|
|
- model.objects[objs_idx[i]]->volumes[num_part + extra_vol]->config.set_key_value("perimeter_speed", new ConfigOptionFloatOrPercent(std::min(external_perimeter_speed, perimeter_speed), false));
|
|
|
- model.objects[objs_idx[i]]->volumes[num_part + extra_vol]->config.set_key_value("external_perimeter_speed", new ConfigOptionFloatOrPercent(external_perimeter_speed, false));
|
|
|
- //model.objects[objs_idx[i]]->volumes[num_part + extra_vol]->config.set_key_value("small_perimeter_speed", new ConfigOptionFloatOrPercent(external_perimeter_speed, false));
|
|
|
- //model.objects[objs_idx[i]]->volumes[num_part + extra_vol]->config.set_key_value("infill_speed", new ConfigOptionFloatOrPercent(std::min(print_config->option<ConfigOptionFloatOrPercent>("infill_speed")->value, 10.*scale)), false);
|
|
|
- num_part++;
|
|
|
+ for (size_t num_part = extra_vol; num_part < current_obj->volumes.size(); num_part++) {
|
|
|
+ current_obj->volumes[num_part]->config.set_key_value("print_retract_length", new ConfigOptionFloat(retraction_start + num_part * retraction_steps));
|
|
|
+ current_obj->volumes[num_part]->config.set_key_value("small_perimeter_speed", new ConfigOptionFloatOrPercent(external_perimeter_speed, false));
|
|
|
+ current_obj->volumes[num_part]->config.set_key_value("perimeter_speed", new ConfigOptionFloatOrPercent(std::min(external_perimeter_speed, perimeter_speed), false));
|
|
|
+ current_obj->volumes[num_part]->config.set_key_value("external_perimeter_speed", new ConfigOptionFloatOrPercent(external_perimeter_speed, false));
|
|
|
+ //current_obj->volumes[num_part + extra_vol]->config.set_key_value("small_perimeter_speed", new ConfigOptionFloatOrPercent(external_perimeter_speed, false));
|
|
|
+ //current_obj->volumes[num_part + extra_vol]->config.set_key_value("infill_speed", new ConfigOptionFloatOrPercent(std::min(print_config->option<ConfigOptionFloatOrPercent>("infill_speed")->value, 10.*scale)), false);
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|