diff --git a/resources/calibration/filament_flow/fr_filament_flow.html b/resources/calibration/filament_flow/fr_filament_flow.html index 6041f690626..e12a0dad124 100644 --- a/resources/calibration/filament_flow/fr_filament_flow.html +++ b/resources/calibration/filament_flow/fr_filament_flow.html @@ -62,9 +62,9 @@

Deuxième étape, à partir de +20%.:

Bon -

Ici, nous pouvons voir que la boucle n'est pas très bonne dans les -8 et -6. Le -4 est presque rond mais pas tout à fait, il indique donc que la buse a perdu de la pression. Le -2 est presque bon mais le 0 est le seul qui peut être considéré comme "bon", et même ainsi la boucle n'est pas parfaite.

+

Ici, nous pouvons voir que le cercle n'est pas très bon dans les modèles -8 et -6. Le -4 est presque rond mais pas tout à fait, il indique donc que la buse a perdu de la pression. Le -2 est presque bon mais le 0 est le seul qui peut être considéré comme "bon", et même ainsi le cercle n'est pas parfaite.

Comment régler votre imprimante

-

Vous devez modifier le multiplicateur d'extrusion pour le filament pour lequel vous calibrez (et le sauvegarder). Formule pour le nouveau multiplicateur d'extrusion : new_multiplier = ( (100 + nombre_choisi) / 100 ) * old_multiplier
+

Vous devez modifier le multiplicateur d'extrusion pour le filament pour lequel vous calibrez (et le sauvegarder). Formule pour le nouveau multiplicateur d'extrusion : nouveau_multiplicateur = ( (100 + nombre_choisi) / 100 ) * ancien_multiplicateur
Exemple : première étape, je choisis le -10, donc j'ai ((100-10)/100) * 1 = (0.9) * 1 = 0.9
deuxième étape, je choisis +5, donc j'ai ((100+5)/100) * 0.9 = (1.05) * 0.9 = 0.945

diff --git a/resources/icons/PrusaSlicer_256_icns.png b/resources/icons/PrusaSlicer_256_icns.png new file mode 100644 index 00000000000..6dd7c132d79 Binary files /dev/null and b/resources/icons/PrusaSlicer_256_icns.png differ diff --git a/resources/icons/Slic3r_256_icns.png b/resources/icons/Slic3r_256_icns.png new file mode 100644 index 00000000000..e6318a0c9b7 Binary files /dev/null and b/resources/icons/Slic3r_256_icns.png differ diff --git a/resources/icons/SuperSlicer_256_icns.png b/resources/icons/SuperSlicer_256_icns.png new file mode 100644 index 00000000000..1a75b265ec1 Binary files /dev/null and b/resources/icons/SuperSlicer_256_icns.png differ diff --git a/resources/localization/fr/Slic3r.po b/resources/localization/fr/Slic3r.po index 3ef07653ab8..807f15512c8 100644 --- a/resources/localization/fr/Slic3r.po +++ b/resources/localization/fr/Slic3r.po @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: Slic3r\n" -"POT-Creation-Date: 2021-06-26 00:00\n" -"PO-Revision-Date: 2021-06-26 00:00\n" +"POT-Creation-Date: 2021-07-10 00:00\n" +"PO-Revision-Date: 2021-07-10 00:00\n" "Last-Translator: 5axes\n" "Language-Team:5axes, supermerill\n" "MIME-Version: 1.0\n" @@ -1440,6 +1440,9 @@ msgstr "" "Peut être utile pour éviter que les engrenages bondtech ne déforment les pointes encore un peu chaudes," " mais ce n'est généralement pas nécessaire." +msgid "Can't process the repetier return message: missing field '%s'" +msgstr "Impossible d'interpréter le message retourné par Repetier: champ '%s' manquant" + msgid "Cancel" msgstr "Annuler" @@ -2039,7 +2042,9 @@ msgid "" "Cracks smaller than 2x gap closing radius are being filled during the " "triangle mesh slicing. The gap closing operation may reduce the final print " "resolution, therefore it is advisable to keep the value reasonably low." -msgstr "Les fentes d'une taille inférieure à 2x le rayon de fermeture de l'espacement sont remplies au cours du tranchage par maillage triangulaire. L'opération de fermeture de l'espacement peut réduire la résolution de l'impression finale, aussi est-il conseillé de conserver une valeur relativement basse." +msgstr "" +"Les fentes d'une taille inférieure à 2x le rayon de fermeture de l'espacement sont remplies au cours du tranchage du maillage triangulaire." +" L'opération de fermeture de l'espacement peut réduire la résolution de l'impression finale, aussi est-il conseillé de conserver une valeur relativement basse." msgid "CRC-32 check failed" msgstr "Échec du test CRC-32" @@ -3620,7 +3625,7 @@ msgid "Filament notes" msgstr "Notes du filament" msgid "Filament Overrides" -msgstr "Annulations de Filament" +msgstr "Rétractions de Filament" msgid "Filament parking position" msgstr "Position d'attente du filament" @@ -4440,7 +4445,6 @@ msgstr "" "* Si vous voulez seulement sauvegarder les valeurs, choisissez l'option ‘Utiliser aussi pour l'estimation du temps’ et écrivez vous-même les limites dans la section G-Code personnalisé.\n" "* L’option ‘Utiliser uniquement pour sauvegarde’ ne fera d’écrire les données dans les paramètres sauvegardés du G-Code." - msgid "" "How to compute the vertical z-distance.\n" "From filament: it uses the nearest bit of the filament. When a bridge is " @@ -5685,7 +5689,7 @@ msgid "Material Settings Tab" msgstr "Onglet de réglages du matériau" msgid "material_correction" -msgstr "material_correction" +msgstr "Correction matière" msgid "Materials" msgstr "Matériaux" @@ -8508,7 +8512,7 @@ msgid "Sequential printing" msgstr "Impression séquentielle" msgid "Sequential slider applied only to top layer" -msgstr "Barre de défilement séquentielle appliquée uniquement à la couche du dessus" +msgstr "Barre de défilement séquentielle appliquée uniquement à la couche active" msgid "Serial port:" msgstr "Port série :" @@ -9181,7 +9185,7 @@ msgid "Slice a file into a G-code, save as" msgstr "Découper un fichier en G-Code, enregistrer sous" msgid "Slice gap closing radius" -msgstr "Découper le rayon de fermeture de l'espacement" +msgstr "Distance de fermeture des faces disjointes" msgid "Slice now" msgstr "Découper maintenant" diff --git a/resources/profiles b/resources/profiles index 1ad1be82da2..118aa919c16 160000 --- a/resources/profiles +++ b/resources/profiles @@ -1 +1 @@ -Subproject commit 1ad1be82da2c8477b87055e00998f094b31868a2 +Subproject commit 118aa919c16837eb2ff6ba97e2934fa4144ef806 diff --git a/src/libslic3r/MedialAxis.cpp b/src/libslic3r/MedialAxis.cpp index e040ec99a1a..8b33bc3f5b8 100644 --- a/src/libslic3r/MedialAxis.cpp +++ b/src/libslic3r/MedialAxis.cpp @@ -1579,6 +1579,28 @@ MedialAxis::taper_ends(ThickPolylines& pp) } } +double +check_circular(ExPolygon& expolygon, coord_t max_variation) { + if (expolygon.holes.size() > 0) return 0; + + //test if convex + if (expolygon.contour.concave_points().empty() && expolygon.contour.points.size() > 3) { + // Computing circle center + Point center = expolygon.contour.centroid(); + double radius_min = std::numeric_limits::max(), radius_max = 0; + for (int i = 0; i < expolygon.contour.points.size(); ++i) { + double dist = expolygon.contour.points[i].distance_to(center); + radius_min = std::min(radius_min, dist); + radius_max = std::max(radius_max, dist); + } + // check with max_variation to be sure it's round enough + if (radius_max - radius_min < max_variation) { + return radius_max; + } + } + return 0; +} + void MedialAxis::build(ThickPolylines &polylines_out) { @@ -1603,6 +1625,23 @@ MedialAxis::build(ThickPolylines &polylines_out) if (this->expolygon.area() < this->min_width * this->min_width) this->expolygon = this->surface; if (this->expolygon.area() < this->min_width * this->min_width) return; + //check for circular shape + double radius = check_circular(this->expolygon, this->min_width/4); + if (radius > 0) { + ExPolygons miniPeri = offset_ex(this->expolygon.contour, -radius / 2); + if (miniPeri.size() == 1 && miniPeri[0].holes.size() == 0) { + ThickPolyline thickPoly; + thickPoly.points = miniPeri[0].contour.points; + thickPoly.endpoints.first = false; + thickPoly.endpoints.second = false; + for (int i = 0; i < thickPoly.points.size(); i++) { + thickPoly.width.push_back(radius); + } + polylines_out.insert(polylines_out.end(), thickPoly); + return; + } + } + //std::cout << "simplify_polygon_frontier\n"; // compute the Voronoi diagram and extract medial axis polylines ThickPolylines pp; diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 10cbe401b47..9990027b549 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -2338,8 +2338,10 @@ void Print::_make_brim_ears(const Flow &flow, const PrintObjectPtrs &objects, Ex Points points = poly.contour.points; points.push_back(points.front()); points = MultiPoint::_douglas_peucker(points, scale_(object->config().brim_ears_detection_length.value)); - if(points.size()>1) + if (points.size() > 1) { points.erase(points.end() - 1); + decimated_polygon.points = points; + } } for (const Point &p : decimated_polygon.convex_points(brim_config.brim_ears_max_angle.value * PI / 180.0)) { pt_ears.push_back(p); diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index 2e9065b7891..9bb37680c05 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -132,7 +132,7 @@ DPIFrame(NULL, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_S default: case GUI_App::EAppMode::Editor: m_taskbar_icon = std::make_unique(wxTBI_DOCK); - m_taskbar_icon->SetIcon(wxIcon(Slic3r::var(SLIC3R_APP_KEY "_128px.png"), wxBITMAP_TYPE_PNG), SLIC3R_APP_KEY); + m_taskbar_icon->SetIcon(wxIcon(Slic3r::var(SLIC3R_APP_KEY "_256_icns.png"), wxBITMAP_TYPE_PNG), SLIC3R_APP_KEY); break; case GUI_App::EAppMode::GCodeViewer: m_taskbar_icon = std::make_unique(wxTBI_DOCK); diff --git a/src/slic3r/GUI/PhysicalPrinterDialog.cpp b/src/slic3r/GUI/PhysicalPrinterDialog.cpp index a98ef459349..57a8f770080 100644 --- a/src/slic3r/GUI/PhysicalPrinterDialog.cpp +++ b/src/slic3r/GUI/PhysicalPrinterDialog.cpp @@ -271,31 +271,35 @@ void PhysicalPrinterDialog::update_printers() wxArrayString printers; Field* rs = m_optgroup->get_field("printhost_port"); - if (!host->get_printers(printers)) { - std::vector slugs; + try { + if (!host->get_printers(printers)) { + std::vector slugs; - Choice* choice = dynamic_cast(rs); - choice->set_values(slugs); + Choice* choice = dynamic_cast(rs); + choice->set_values(slugs); - rs->disable(); - } else { - std::vector slugs; - for (int i = 0; i < printers.size(); i++) { - slugs.push_back(printers[i].ToStdString()); - } + rs->disable(); + } else { + std::vector slugs; + for (int i = 0; i < printers.size(); i++) { + slugs.push_back(printers[i].ToStdString()); + } - Choice* choice = dynamic_cast(rs); - choice->set_values(slugs); - boost::any val = choice->get_value(); - boost::any any_string_type = std::string(""); - auto value_idx = std::find(slugs.begin(), slugs.end(), m_config->opt("printhost_port")->value); - if ((val.empty() || (any_string_type.type() == val.type() && boost::any_cast(val) == "")) && !slugs.empty() && value_idx == slugs.end()) { - change_opt_value(*m_config, "printhost_port", slugs[0]); - choice->set_value(slugs[0],false); - } else if(value_idx != slugs.end() ){ - choice->set_value(m_config->option("printhost_port")->value, false); + Choice* choice = dynamic_cast(rs); + choice->set_values(slugs); + boost::any val = choice->get_value(); + boost::any any_string_type = std::string(""); + auto value_idx = std::find(slugs.begin(), slugs.end(), m_config->opt("printhost_port")->value); + if ((val.empty() || (any_string_type.type() == val.type() && boost::any_cast(val) == "")) && !slugs.empty() && value_idx == slugs.end()) { + change_opt_value(*m_config, "printhost_port", slugs[0]); + choice->set_value(slugs[0], false); + } else if (value_idx != slugs.end()) { + choice->set_value(m_config->option("printhost_port")->value, false); + } + rs->enable(); } - rs->enable(); + } catch (HostNetworkError error) { + show_error(this, error.what()); } } diff --git a/src/slic3r/Utils/Repetier.cpp b/src/slic3r/Utils/Repetier.cpp index c3c24c38ee7..7bae531ea18 100644 --- a/src/slic3r/Utils/Repetier.cpp +++ b/src/slic3r/Utils/Repetier.cpp @@ -62,11 +62,14 @@ bool Repetier::test(wxString &msg) const std::stringstream ss(body); pt::ptree ptree; pt::read_json(ss, ptree); - - const auto text = ptree.get_optional("name"); - res = validate_version_text(text); - if (! res) { - msg = GUI::from_u8((boost::format(_u8L("Mismatched type of print host: %s")) % (text ? *text : "Repetier")).str()); + + res = ptree.get_optional("name").has_value(); + if (!res) + msg = GUI::from_u8((boost::format(_u8L("Can't process the repetier return message: missing field '%s'")) % ("name")).str()); + else { + res = ptree.get_optional("printers").has_value(); + if (!res) + msg = GUI::from_u8((boost::format(_u8L("Can't process the repetier return message: missing field '%s'")) % ("printers")).str()); } } catch (const std::exception &) {