diff --git a/BuildLinux.sh b/BuildLinux.sh index f60e5c5f34..abb81ca737 100755 --- a/BuildLinux.sh +++ b/BuildLinux.sh @@ -127,8 +127,11 @@ then if [[ -n "${BUILD_DEBUG}" ]] then # have to build deps with debug & release or the cmake won't find everything it needs - mkdir deps/build/release - cmake -S deps -B deps/build/release -G Ninja -DDESTDIR="../destdir" ${BUILD_ARGS} + if [ ! -d "deps/build/release" ] + then + mkdir deps/build/release + fi + cmake -S deps -B deps/build/release -G Ninja -DDESTDIR="${PWD}/deps/build/destdir" -DDEP_DOWNLOAD_DIR="${PWD}/deps/DL_CACHE" ${BUILD_ARGS} cmake --build deps/build/release BUILD_ARGS="${BUILD_ARGS} -DCMAKE_BUILD_TYPE=Debug" fi diff --git a/doc/Home.md b/doc/Home.md index cdbe12562f..fce4bc3480 100644 --- a/doc/Home.md +++ b/doc/Home.md @@ -1,8 +1,37 @@ -Welcome to the OrcaSlicer WIKI! +# Welcome to the OrcaSlicer WIKI! -We have divided it roughly into the following pages: +Orca slicer is a powerful open source slicer for FFF (FDM) 3D Printers. This wiki page aims to provide an detailed explanation of the slicer settings, how to get the most out of them as well as how to calibrate and setup your printer. -- [Calibration](./Calibration) -- [Print settings](./Print-settings) +The Wiki is work in progress so bear with us while we get it up and running! + +## Print Settings, Tips and Tricks (Work In Progress) +The below sections provide a detailed settings explanation as well as tips and tricks in setting these for optimal print results. + +### Quality Settings +- [Layer Height Settings](print_settings/quality/quality_settings_layer_height) +- [Line Width Settings](print_settings/quality/quality_settings_line_width) +- [Seam Settings](print_settings/quality/quality_settings_seam) +- [Precise wall](Precise-wall) + +### Speed Settings +- [Extrusion rate smoothing](print_settings/speed/extrusion-rate-smoothing) + +### Multi material +- [Single Extruder Multimaterial](semm) + +### Printer Settings: +- [Air filtration/Exhaust fan handling](air-filtration) +- [Auxiliary fan handling](Auxiliary-fan) +- [Chamber temperature control](chamber-temperature) +- [Adaptive Bed Mesh](adaptive-bed-mesh) +- [Using different bed types in Orca](bed-types) +- [Pellet Printers (pellet flow coefficient)](pellet-flow-coefficient) + +## Printer Calibration +The guide below takes you through the key calibration tests in Orca - flow rate, pressure advance, print temperature, retraction, tolerances and maximum volumetric speed +- [Calibration Guide](./Calibration) + +## Developer Section - [How to build Orca Slicer](./How-to-build) +- [Localization and translation guide](Localization_guide) - [Developer Reference](./developer-reference/Home) diff --git a/doc/print_settings/quality/quality_settings_layer_height.md b/doc/print_settings/quality/quality_settings_layer_height.md new file mode 100644 index 0000000000..350738f379 --- /dev/null +++ b/doc/print_settings/quality/quality_settings_layer_height.md @@ -0,0 +1,17 @@ +# Layer Height + +This setting controls how tall each printed layer will be. Typically, a smaller layer height produces a better-looking part with less jagged edges, especially around curved sections (like the top of a sphere). However, lower layer heights mean more layers to print, proportionally increasing print time. + +### Tips: +1. **The optimal layer height depends on the size of your nozzle**. The set layer height must not be taller than 80% of the diameter of the nozzle, else there is little "squish" between the printed layer and the layer below, leading to weaker parts. + +2. While technically there is no limit to how small a layer height one can use, **typically most printers struggle to print reliably with a layer height that is smaller than 20% of the nozzle diameter**. This is because with smaller layer heights, less material is extruded per mm and, at some point, the tolerances of the extruder system result in variations in the flow to such an extent that visible artifacts occur, especially if printing at high speeds. + +For example, it is not uncommon to see "fish scale" type patterns on external walls when printing with a 0.4 mm nozzle at 0.08 mm layer height at speeds of 200mm/sec+. If you observe that pattern, simply increase your layer height to 30% of your nozzle height and/or slow down the print speed considerably. + +# First Layer Height + +This setting controls how tall the first layer of the print will be. Typically, this is set to 50% of the nozzle width for optimal bed adhesion. + +### Tip: +A thicker first layer is more forgiving to slight variations to the evenness of the build surface, resulting in a more uniform, visually, first layer. Set it to 0.25mm for a 0.4mm nozzle, for example, if your build surface is uneven or your printer has a slightly inconsistent z offset between print runs. However, as a rule of thumb, try not to exceed 65% of the nozzle width so as to not compromise bed adhesion too much. diff --git a/doc/print_settings/quality/quality_settings_line_width.md b/doc/print_settings/quality/quality_settings_line_width.md new file mode 100644 index 0000000000..ae4ae05233 --- /dev/null +++ b/doc/print_settings/quality/quality_settings_line_width.md @@ -0,0 +1,43 @@ +# Line Width + +These settings control how wide the extruded lines are. + +- **Default**: The default line width in mm or as a percentage of the nozzle size. + +- **First Layer**: The line width of the first layer. Typically, this is wider than the rest of the print, to promote better bed adhesion. See tips below for why. + +- **Outer Wall**: The line width in mm or as a percentage of the nozzle size used when printing the model’s external wall perimeters. + +- **Inner Wall**: The line width in mm or as a percentage of the nozzle size used when printing the model’s internal wall perimeters. + +- **Top Surface**: The line width in mm or as a percentage of the nozzle size used when printing the model’s top surface. + +- **Sparse Infill**: The line width in mm or as a percentage of the nozzle size used when printing the model’s sparse infill. + +- **Internal Solid Infill**: The line width in mm or as a percentage of the nozzle size used when printing the model’s internal solid infill. + +- **Support**: The line width in mm or as a percentage of the nozzle size used when printing the model’s support structures. + + +## Tips: +1. **Typically, the line width will be anything from 100% up to 150% of the nozzle width**. Due to the way the slicer’s flow math works, a 100% line width will attempt to extrude slightly “smaller” than the nozzle size and when squished onto the layer below will match the nozzle orifice. You can read more on the flow math here: [Flow Math](https://manual.slic3r.org/advanced/flow-math). + +2. **For most cases, the minimum acceptable recommended line width is 105% of the nozzle diameter**, typically reserved for the outer walls, where greater precision is required. A wider line is less precise than a thinner line. + +3. **Wider lines provide better adhesion to the layer below**, as the material is squished more with the previous layer. For parts that need to be strong, setting this value to 120-150% of the nozzle diameter is recommended and has been experimentally proven to significantly increase part strength. + +4. **Wider lines improve step over and overhang appearance**, i.e., the overlap of the currently printed line to the surface below. So, if you are printing models with overhangs, setting a larger external perimeter line width will improve the overhang’s appearance to an extent. + +5. **For top surfaces, typically a value of ~100%-105% of the nozzle width is recommended** as it provides the most precision, compared to a wider line. + +6. **For external walls, you need to strike a balance between precision and step over and, consequently, overhang appearance.** Typically these values are set to ~105% of nozzle diameter for models with limited overhangs up to ~120% for models with more significant overhangs. + +7. **For internal walls, you typically want to maximize part strength**, so a good starting point is approximately 120% of the nozzle width, which gives a good balance between print speed, accuracy, and material use. However, depending on the model, larger or smaller line widths may make sense in order to reduce gap fill and/or line width variations if you are using Arachne. + +8. **Don’t feel constrained to have wider internal wall lines compared to external ones**. While this is the default for most profiles, for models where significant overhangs are present, printing wider external walls compared to the internal ones may yield better overhang quality without increasing material use! + +9. **For sparse infill, the line width also affects how dense, visually, the sparse infill will be.** The sparse infill aims to extrude a set amount of material based on the percentage infill selected. When increasing the line width, the space between the sparse infill extrusions is larger in order to roughly maintain the same material usage. Typically for sparse infill, a value of 120% of nozzle diameter is a good starting point. + +10. **For supports, using 100% or less line width will make the supports weaker** by reducing their layer adhesion, making them easier to remove. + +11. **If your printer is limited mechanically, try to maintain the material flow as consistent as possible between critical features of your model**, to ease the load on the extruder having to adapt its flow between them. This is especially useful for printers that do not use pressure advance/linear advance and if your extruder is not as capable mechanically. You can do that by adjusting the line widths and speeds to reduce the variation between critical features (e.g., external and internal wall flow). For example, print them at the same speed and the same line width, or print the external perimeter slightly wider and slightly slower than the internal perimeter. Material flow can be visualized in the sliced model – flow drop down. diff --git a/doc/print_settings/quality/quality_settings_seam.md b/doc/print_settings/quality/quality_settings_seam.md new file mode 100644 index 0000000000..7777be8ff6 --- /dev/null +++ b/doc/print_settings/quality/quality_settings_seam.md @@ -0,0 +1,81 @@ +# Seam Section + +Unless printed in spiral vase mode, every layer needs to begin somewhere and end somewhere. That start and end of the extrusion is what results in what visually looks like a seam on the perimeters. This section contains options to control the visual appearance of a seam. + +- **Seam Position**: Controls the placement of the seam. + 1. **Aligned**: Will attempt to align the seam to a hidden internal facet of the model. + 2. **Nearest**: Will place the seam at the nearest starting point compared to where the nozzle stopped printing in the previous layer. + 3. **Back**: Will align the seam in a (mostly) straight line at the rear of the model. + 4. **Random**: Will randomize the placement of the seam between layers. + + Typically, aligned or back work the best, especially in combination with seam painting. However, as seams create weak points and slight surface "bulges" or "divots," random seam placement may be optimal for parts that need higher strength as that weak point is spread to different locations between layers (e.g., a pin meant to fit through a hole). + +- **Staggered Inner Seams**: As the seam location forms a weak point in the print (it's a discontinuity in the extrusion process after all!), staggering the seam on the internal perimeters can help reduce stress points. This setting moves the start of the internal wall's seam around across layers as well as away from the external perimeter seam. This way, the internal and external seams don't all align at the same point and between them across layers, distributing those weak points further away from the seam location, hence making the part stronger. It can also help improve the water tightness of your model. + +- **Seam Gap**: Controls the gap in mm or as a percentage of the nozzle size between the two ends of a loop starting and ending with a seam. A larger gap will reduce the bulging seen at the seam. A smaller gap reduces the visual appearance of a seam. For a well-tuned printer with pressure advance, a value of 0-15% is typically optimal. + +- **Scarf Seam**: Read more here: [Better Seams - An Orca Slicer Guide](https://www.printables.com/model/783313-better-seams-an-orca-slicer-guide-to-using-scarf-s). + +- **Role-Based Wipe Speed**: Controls the speed of a wipe motion, i.e., how fast the nozzle will move over a printed area to "clean" it before traveling to another area of the model. It is recommended to turn this option on, to ensure the nozzle performs the wipe motion with the same speed that the feature was printed with. + +- **Wipe Speed**: If role-based wipe speed is disabled, set this field to the absolute wipe speed or as a percentage over the travel speed. + +- **Wipe on Loops**: When finishing printing a "loop" (i.e., an extrusion that starts and ends at the same point), move the nozzle slightly inwards towards the part. That move aims to reduce seam unevenness by tucking in the end of the seam to the part. It also slightly cleans the nozzle before traveling to the next area of the model, reducing stringing. + +- **Wipe Before External Perimeters**: To minimize the visibility of potential over-extrusion at the start of an external perimeter, the de-retraction move is performed slightly on the inside of the model and, hence, the start of the external perimeter. That way, any potential over-extrusion is hidden from the outside surface. + + This is useful when printing with Outer/Inner or Inner/Outer/Inner wall print order, as in these modes, it is more likely an external perimeter is printed immediately after a de-retraction move, which would cause slight extrusion variance at the start of a seam. + +## Tips: +With seams being inevitable when 3D printing using FFF, there are two distinct approaches on how to deal with them: + +1. **Try and hide the seam as much as possible**: This can be done by enabling scarf seam, which works very well, especially with simple models with limited overhang regions. +2. **Try and make the seam as "clean" and "distinct" as possible**: This can be done by tuning the seam gap and enabling role-based wipe speed, wipe on loops, and wipe before the external loop. + +## Troubleshooting Seam Performance: +The section below will focus on troubleshooting traditional seams. For scarf seam troubleshooting, refer to the guide linked above. + +There are several factors that influence how clean the seam of your model is, with the biggest one being extrusion control after a travel move. As a seam defines the start and end of an extrusion, it is critical that: + +1. **The same amount of material is extruded at the same point across layers** to ensure a consistent visual appearance at the start of a seam. +2. **The printer consistently stops extruding at the same point** across layers. + +However, due to mechanical and material tolerances, as well as the very nature of 3D printing with FFF, that is not always possible. Hopefully with some tuning you'll be able to achieve prints like this! + +![IMG_4059](https://github.com/user-attachments/assets/e60c3d24-9b21-4484-bcbe-614237a2fe09) + + +### Troubleshooting the Start of a Seam: +Imagine the scenario where the toolhead finishes printing a layer line on one side of the bed, retracts, travels the whole distance of the bed to de-retract, and starts printing another part. Compare this to the scenario where the toolhead finishes printing an internal perimeter and only travels a few mm to start printing an external perimeter, without even retracting or de-retracting. + +The first scenario has much more opportunity for the filament to ooze outside the nozzle, resulting in a small blob forming at the start of the seam or, conversely, if too much material has leaked, a gap/under extrusion at the start of the seam. + +The key to a consistent start of a seam is to reduce the opportunity for ooze as much as possible. The good news is that this is mostly tunable by: + +1. **Ensure your pressure advance is calibrated correctly**. A too low pressure advance will result in the nozzle experiencing excess pressure at the end of the previous extrusion, which increases the chance of oozing when traveling. +2. **Make sure your travel speed is as fast as possible within your printer's limits**, and the travel acceleration is as high as practically possible, again within the printer's limits. This reduces the travel time between features, reducing oozing. +3. **Enable wipe before external perimeters** – this setting performs the de-retraction move inside the model, hence reducing the visual appearance of the "blob" if it does appear at the seam. +4. **Increase your travel distance threshold to be such that small travel moves do not trigger a retraction and de-retraction operation**, reducing extrusion variances caused by the extruder tolerances. 2-4mm is a good starting point as, if your PA is tuned correctly and your travel speed and acceleration are high, it is unlikely that the nozzle will ooze in the milliseconds it will take to travel to the new location. +5. **Enable retract on layer change**, to ensure the start of your layer is always performed under the same conditions – a de-pressurized nozzle with retracted filament. + +In addition, some toolhead systems are inherently better at seams compared to others. For example, high-flow nozzles with larger melt zones usually have poorer extrusion control as more of the material is in a molten state inside the nozzle. They tend to string more, ooze easier, and hence have poorer seam performance. Conversely, smaller melt zone nozzles have more of the filament solid in their heat zone, leading to more accurate extrusion control and better seam performance. + +So this is a trade-off between print speed and print quality. From experimental data, volcano-type nozzles tend to perform the worst at seams, followed by CHT-type nozzles, and finally regular flow nozzles. + +In addition, larger nozzle diameters allow for more opportunity for material to leak compared to smaller diameter nozzles. A 0.2/0.25 mm nozzle will have significantly better seam performance than a 0.4, and that will have much better performance than a 0.6mm nozzle and so forth. + +### Troubleshooting the End of a Seam: +The end of a seam is much easier to get right, as the extrusion system is already at a pressure equilibrium while printing. It just needs to stop extruding at the right time and consistently. + +**If you are getting bulges at the seam**, the extruder is not stopping at the right time. The first thing to tune would be **pressure advance** – too low of a PA will result in the nozzle still being pressurized when finishing the print move, hence leaving a wider line at the end as it stops printing. + +And the opposite is true too – **too high PA will result in under extrusion at the end of a print move**, shown as a larger-than-needed gap at the seam. Thankfully, tuning PA is straightforward, so run the calibration tests and pick the optimal value for your material, print speed, and acceleration. + +Furthermore, the printer mechanics have tolerances – the print head may be requested to stop at point XY but practically it cannot stop precisely at that point due to the limits of micro-stepping, belt tension, and toolhead rigidity. Here is where tuning the seam gap comes into effect. **A slightly larger seam gap will allow for more variance to be tolerated at the end of a print move before showing as a seam bulge**. Experiment with this value after you are certain your PA is tuned correctly and your travel speeds and retractions are set appropriately. + +Finally, the techniques of **wiping can help improve the visual continuity and consistency of a seam** (please note, these settings do not make the seam less visible, but rather make them more consistent!). Wiping on loops with a consistent speed helps tuck in the end of the seam, hiding the effects of retraction from view. + +### The Role of Wall Ordering in Seam Appearance: +The order of wall printing plays a significant role in the appearance of a seam. **Starting to print the external perimeter first after a long travel move will always result in more visible artifacts compared to printing the internal perimeters first and traveling just a few mm to print the external perimeter.** + +For optimal seam performance, printing with **inner-outer-inner wall order is typically best, followed by inner-outer**. It reduces the amount of traveling performed prior to printing the external perimeter and ensures the nozzle is having as consistent pressure as possible, compared to printing outer-inner. diff --git a/doc/Extrusion-rate-smoothing.md b/doc/print_settings/speed/extrusion-rate-smoothing.md similarity index 100% rename from doc/Extrusion-rate-smoothing.md rename to doc/print_settings/speed/extrusion-rate-smoothing.md diff --git a/localization/i18n/de/OrcaSlicer_de.po b/localization/i18n/de/OrcaSlicer_de.po index 2dd0c93dbc..7547eaeee6 100644 --- a/localization/i18n/de/OrcaSlicer_de.po +++ b/localization/i18n/de/OrcaSlicer_de.po @@ -6236,6 +6236,8 @@ msgid "" "Your object appears to be too large. It will be scaled down to fit the heat " "bed automatically." msgstr "" +"Ihr Objekt scheint zu groß zu sein. Es wird automatisch verkleinert, um auf " +"das Druckbett zu passen." msgid "Object too large" msgstr "Objekt zu groß" @@ -6825,10 +6827,10 @@ msgstr "" "mehrere Geräte senden und mehrere Geräte verwalten." msgid "Auto arrange plate after cloning" -msgstr "" +msgstr "Druckplatte nach dem Klonen automatisch anordnen" msgid "Auto arrange plate after object cloning" -msgstr "" +msgstr "Druckplatte nach dem Klonen von Objekten automatisch anordnen" msgid "Network" msgstr "Netzwerk" @@ -7860,10 +7862,10 @@ msgid "Prime tower" msgstr "Reinigungsturm" msgid "Filament for Features" -msgstr "" +msgstr "Filament für Funktionen" msgid "Ooze prevention" -msgstr "" +msgstr "Ooze-Prävention" msgid "Skirt" msgstr "Saum" @@ -7922,7 +7924,7 @@ msgstr "" "gesetzt" msgid "Flow ratio and Pressure Advance" -msgstr "" +msgstr "Flussverhältnis und Pressure Advance" msgid "Print chamber temperature" msgstr "Druckkammertemperatur" @@ -8125,7 +8127,7 @@ msgid "Single extruder multimaterial setup" msgstr "Single-Extruder-Multimaterial-Einstellung" msgid "Number of extruders of the printer." -msgstr "" +msgstr "Anzahl der Extruder des Druckers." msgid "" "Single Extruder Multi Material is selected, \n" @@ -8133,6 +8135,10 @@ msgid "" "Do you want to change the diameter for all extruders to first extruder " "nozzle diameter value?" msgstr "" +"Single-Extruder-Multimaterial ist ausgewählt, \n" +"und alle Extruder müssen denselben Durchmesser haben.\n" +"Möchten Sie den Durchmesser für alle Extruder auf den Wert des ersten " +"Extruder-Düsendurchmessers ändern?" msgid "Nozzle diameter" msgstr "Düsendurchmesser" @@ -8147,6 +8153,8 @@ msgid "" "This is a single extruder multimaterial printer, diameters of all extruders " "will be set to the new value. Do you want to proceed?" msgstr "" +"Dies ist ein Single-Extruder-Multimaterial-Drucker, die Durchmesser aller " +"Extruder werden auf den neuen Wert gesetzt. Möchten Sie fortfahren?" msgid "Layer height limits" msgstr "Höhenbegrenzungen für Schichten" @@ -8667,7 +8675,7 @@ msgid "Import geometry data from STL/STEP/3MF/OBJ/AMF files" msgstr "Importiere Geometriedaten aus STL/STEP/3MF/OBJ/AMF-Dateien" msgid "Shift+G" -msgstr "" +msgstr "Umschalt+G" msgid "Paste from clipboard" msgstr "Aus Zwischenablage einfügen" @@ -8719,7 +8727,7 @@ msgid "Collapse/Expand the sidebar" msgstr "Seitenleiste zu-/aufklappen" msgid "Any arrow" -msgstr "" +msgstr "Beliebiger Pfeil" msgid "Movement in camera space" msgstr "Bewegung im Kameraraum" @@ -9159,6 +9167,8 @@ msgid "" "Your print is very close to the priming regions. Make sure there is no " "collision." msgstr "" +"Ihr Druck ist sehr nahe an den Priming-Regionen. Stellen Sie sicher, dass es " +"keine Kollision gibt." msgid "" "Failed to generate gcode for invalid custom G-code.\n" @@ -9412,6 +9422,9 @@ msgid "" "well when the prime tower is enabled. It's very experimental, so please " "proceed with caution." msgstr "" +"Unterschiedliche Düsendurchmesser und unterschiedliche Filamentdurchmesser " +"funktionieren möglicherweise nicht gut, wenn der Reinigungsturm aktiviert " +"ist. Es ist sehr experimentell, also gehen Sie bitte vorsichtig vor." msgid "" "The Wipe Tower is currently only supported with the relative extruder " @@ -9424,6 +9437,8 @@ msgid "" "Ooze prevention is only supported with the wipe tower when " "'single_extruder_multi_material' is off." msgstr "" +"Ooze-Prävention wird nur mit dem Reinigungsturm unterstützt, wenn " +"'single_extruder_multi_material' ausgeschaltet ist." msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " @@ -10946,9 +10961,30 @@ msgid "" "and for when tool changing.\n" "\n" msgstr "" +"Mit zunehmender Druckgeschwindigkeit (und damit zunehmendem Volumenstrom " +"durch die Düse) und zunehmenden Beschleunigungen wurde beobachtet, dass der " +"effektive PA-Wert in der Regel abnimmt. Dies bedeutet, dass ein einzelner PA-" +"Wert nicht immer zu 100% optimal für alle Funktionen ist und in der Regel " +"ein Kompromisswert verwendet wird, der keine zu starke Ausbeulung bei " +"Funktionen mit niedrigerer Fließgeschwindigkeit und Beschleunigungen " +"verursacht, während er auch keine Lücken bei schnelleren Funktionen " +"verursacht.\n" +"\n" +"Dieses Feature zielt darauf ab, diese Einschränkung zu beheben, indem die " +"Reaktion des Extrusionssystems Ihres Druckers in Abhängigkeit von der " +"Volumenfließgeschwindigkeit und Beschleunigung, mit der gedruckt wird, " +"modelliert wird. Intern wird ein angepasstes Modell generiert, das den " +"benötigten Druckvorschub für eine beliebige gegebene Volumenfließgeschwindig-" +"keit und Beschleunigung extrapolieren kann, der dann je nach den aktuellen " +"Druckbedingungen an den Drucker ausgegeben wird.\n" +"\n" +"Wenn diese Option aktiviert ist, wird der obige Druckvorschubwert überschrie-" +"ben. Es wird jedoch dringend empfohlen, einen vernünftigen Standardwert " +"oben zu verwenden, um als Fallback und für den Werkzeugwechsel zu dienen.\n" +"\n" msgid "Adaptive pressure advance measurements (beta)" -msgstr "" +msgstr "Adaptive Pressure Advance Messung (experimentell)" msgid "" "Add sets of pressure advance (PA) values, the volumetric flow speeds and " @@ -10979,9 +11015,38 @@ msgid "" "your filament profile\n" "\n" msgstr "" +"Fügen Sie Sätze von Druckvorschub (PA)-Werten, den Volumenfließgeschwindig-" +"keiten und Beschleunigungen, bei denen sie gemessen wurden, durch ein Komma " +"getrennt hinzu. Ein Satz von Werten pro Zeile. Zum Beispiel\n" +"0,04,3,96,3000\n" +"0,033,3,96,10000\n" +"0,029,7,91,3000\n" +"0,026,7,91,10000\n" +"\n" +"Wie einstellen?\n" +"1. PA Test für mindestens 3 Geschwindigkeiten pro Beschleunigung " +"durchführen. Es wird empfohlen, dass der Test mindestens für die Geschwindig-" +"keit der äußeren Umfänge, die Geschwindigkeit der inneren Umfänge und die " +"schnellste Funktionendruckgeschwindigkeit in Ihrem Profil (normalerweise ist " +"es das dünne oder massive Infill) durchgeführt wird. Führen Sie sie dann für " +"die gleichen Geschwindigkeiten für die langsamsten und schnellsten " +"Druckbeschleunigungen durch und nicht schneller als die empfohlene maximale " +"Beschleunigung, wie sie vom Klipper-Eingabe-Shaper angegeben wird.\n" +"2. Notieren Sie den optimalen PA-Wert für jede Volumenfließgeschwindigkeit " +"und Beschleunigung. Sie können die Fließzahl auswählen, indem Sie Fluss aus" +"dem Farbschema-Dropdown auswählen und den horizontalen Schieberegler über den " +"PA-Musterlinien bewegen. Die Zahl sollte am unteren Rand der Seite sichtbar " +"sein. Der ideale PA-Wert sollte abnehmen, je höher die Volumenfließgeschwin-" +"digkeit ist. Wenn dies nicht der Fall ist, bestätigen Sie, dass Ihr Extruder " +"korrekt funktioniert. Je langsamer und mit weniger Beschleunigung Sie drucken, " +"desto größer ist der Bereich der akzeptablen PA-Werte. Wenn kein Unterschied " +"sichtbar ist, verwenden Sie den PA-Wert aus dem schnelleren Test.3. Geben Sie " +"die Triplets von PA-Werten, Fluss und Beschleunigungen im Textfeld hier ein " +"und speichern Sie Ihr Filamentprofil\n" +"\n" msgid "Enable adaptive pressure advance for overhangs (beta)" -msgstr "" +msgstr "Adaptives PA für Überhänge aktivieren (experimentell)" msgid "" "Enable adaptive PA for overhangs as well as when flow changes within the " @@ -10989,9 +11054,13 @@ msgid "" "set accurately, it will cause uniformity issues on the external surfaces " "before and after overhangs.\n" msgstr "" +"Adaptives PA für Überhänge aktivieren, sowie wenn der Fluss innerhalb der " +"gleichen Funktion geändert wird. Dies ist eine experimentelle Option, da bei " +"einer ungenauen Einstellung des PA-Profils Gleichmäßigkeitsprobleme auf den " +"externen Oberflächen vor und nach Überhängen verursacht werden.\n" msgid "Pressure advance for bridges" -msgstr "" +msgstr "Pressure Advance für Brücken" msgid "" "Pressure advance value for bridges. Set to 0 to disable. \n" @@ -11001,6 +11070,12 @@ msgid "" "pressure drop in the nozzle when printing in the air and a lower PA helps " "counteract this." msgstr "" +"Pressure Advance-Wert für Brücken. Auf 0 setzen, um zu deaktivieren.\n" +"\n" +"Ein niedrigerer PA-Wert beim Drucken von Brücken hilft, das Auftreten einer " +"leichten Unterextrusion unmittelbar nach Brücken zu reduzieren. Dies wird " +"durch den Druckabfall in der Düse beim Drucken in der Luft verursacht, und " +"ein niedrigerer PA hilft, dem entgegenzuwirken." msgid "" "Default line width if other line widths are set to 0. If expressed as a %, " @@ -11211,19 +11286,23 @@ msgstr "" "wird. Geben Sie die gewünschte Anzahl dieser Bewegungen an." msgid "Stamping loading speed" -msgstr "" +msgstr "Lade-Geschwindigkeit für das Stamping" msgid "Speed used for stamping." -msgstr "" +msgstr "Geschwindigkeit, die für das Stamping verwendet wird." msgid "Stamping distance measured from the center of the cooling tube" -msgstr "" +msgstr "Stamping-Abstand, gemessen vom Zentrum des Kühlrohrs" msgid "" "If set to nonzero value, filament is moved toward the nozzle between the " "individual cooling moves (\"stamping\"). This option configures how long " "this movement should be before the filament is retracted again." msgstr "" +"Wenn ein Wert ungleich Null eingestellt ist, wird das Filament zwischen den " +"einzelnen Kühlbewegungen (\"Stamping\") in Richtung der Düse bewegt. Diese " +"Option konfiguriert, wie lange diese Bewegung sein soll, bevor das Filament " +"wieder zurückgezogen wird." msgid "Speed of the first cooling move" msgstr "Geschwindigkeit der ersten Kühlbewegung" @@ -12086,6 +12165,7 @@ msgid "" "\"mmu_segmented_region_max_width\". Zero disables this feature." msgstr "" + msgid "Use beam interlocking" msgstr "Verwende Interlock-Strukturen" @@ -12603,6 +12683,8 @@ msgid "" "This option will drop the temperature of the inactive extruders to prevent " "oozing." msgstr "" +"Diese Option senkt die Temperatur der inaktiven Extruder, um das Herauslaufen " +"des Filaments zu verhindern." msgid "Filename format" msgstr "Format des Dateinamens" @@ -12656,7 +12738,7 @@ msgstr "" "100%% Überhang wird die Brückengeschwindigkeit verwendet." msgid "Filament to print walls" -msgstr "" +msgstr "Filament für den Druck der Wände" msgid "" "Line width of inner wall. If expressed as a %, it will be computed over the " @@ -12709,10 +12791,10 @@ msgstr "" "Konfigurationseinstellungen durch Lesen von Umgebungsvariablen abrufen." msgid "Printer type" -msgstr "" +msgstr "Druckertyp" msgid "Type of the printer" -msgstr "" +msgstr "Typ des Druckers" msgid "Printer notes" msgstr "Druckernotizen" @@ -12721,7 +12803,7 @@ msgid "You can put your notes regarding the printer here." msgstr "Sie können hier Ihre Notizen zum Drucker eintragen." msgid "Printer variant" -msgstr "" +msgstr "Druckervariante" msgid "Raft contact Z distance" msgstr "Z Abstand Objekt Druckbasis " @@ -13308,10 +13390,10 @@ msgstr "" "Füllungen ersetzt." msgid "Solid infill" -msgstr "" +msgstr "Massive Füllung" msgid "Filament to print solid infill" -msgstr "" +msgstr "Filament für den Druck der massiven Füllung" msgid "" "Line width of internal solid infill. If expressed as a %, it will be " @@ -13389,9 +13471,12 @@ msgid "" "value is not used when 'idle_temperature' in filament settings is set to non " "zero value." msgstr "" +"Temperaturunterschied, der angewendet wird, wenn ein Extruder nicht aktiv " +"ist. Der Wert wird nicht verwendet, wenn 'idle_temperature' in den " +"Filament-Einstellungen auf einen Wert ungleich Null gesetzt ist." msgid "Preheat time" -msgstr "" +msgstr "Vorheizzeit" msgid "" "To reduce the waiting time after tool change, Orca can preheat the next tool " @@ -13399,14 +13484,21 @@ msgid "" "seconds to preheat the next tool. Orca will insert a M104 command to preheat " "the tool in advance." msgstr "" +"Um die Wartezeit nach dem Werkzeugwechsel zu reduzieren, kann Orca das " +"nächste Werkzeug vorheizen, während das aktuelle Werkzeug noch in Gebrauch " +"ist. Diese Einstellung gibt die Zeit in Sekunden an, um das nächste Werkzeug " +"vorzuheizen. Orca fügt einen M104-Befehl ein, um das Werkzeug im Voraus zu " +"vorzuheizen." msgid "Preheat steps" -msgstr "" +msgstr "Vorheizschritte" msgid "" "Insert multiple preheat commands(e.g. M104.1). Only useful for Prusa XL. For " "other printers, please set it to 1." msgstr "" +"Fügen Sie mehrere Vorheizbefehle ein (z.B. M104.1). Nur nützlich für Prusa " +"XL. Für andere Drucker bitte auf 1 setzen." msgid "Start G-code" msgstr "Start G-Code" @@ -14209,22 +14301,28 @@ msgid "Spacing of purge lines on the wipe tower." msgstr "Abstand der Reinigungsturmpurges." msgid "Extra flow for purging" -msgstr "" +msgstr "Zusätzlicher Fluss für Reinigung" msgid "" "Extra flow used for the purging lines on the wipe tower. This makes the " "purging lines thicker or narrower than they normally would be. The spacing " "is adjusted automatically." msgstr "" +"Zusätzlicher Fluss, der für die Reinigungslinien auf dem Reinigungsturm " +"verwendet wird. Dadurch werden die Reinigungslinien dicker oder schmaler, " +"als sie normalerweise wären. Der Abstand wird automatisch angepasst." msgid "Idle temperature" -msgstr "" +msgstr "Leerlauftemperatur" msgid "" "Nozzle temperature when the tool is currently not used in multi-tool setups." "This is only used when 'Ooze prevention' is active in Print Settings. Set to " "0 to disable." msgstr "" +"Düsentemperatur, wenn das Werkzeug in Mehrwerkzeug-Setups derzeit nicht " +"verwendet wird. Dies wird nur verwendet, wenn die „Ausflussverhinderung“ in " +"den Druckeinstellungen aktiviert ist. Auf 0 setzen, um zu deaktivieren." msgid "X-Y hole compensation" msgstr "X-Y-Loch-Kompensation" @@ -14582,12 +14680,13 @@ msgid "Currently planned extra extruder priming after deretraction." msgstr "Derzeit geplantes zusätzliches Extruder-Priming nach dem Rückzug." msgid "Absolute E position" -msgstr "" +msgstr "Absolute E-Position" msgid "" "Current position of the extruder axis. Only used with absolute extruder " "addressing." msgstr "" +"Aktuelle Position der Extruderachse. Wird nur bei absoluter Extruderadressierung verwendet." msgid "Current extruder" msgstr "Aktueller Extruder" @@ -14640,10 +14739,10 @@ msgstr "" "Druck verwendet wird." msgid "Has single extruder MM priming" -msgstr "" +msgstr "Hat einzelnes Extruder-MM-Priming" msgid "Are the extra multi-material priming regions used in this print?" -msgstr "" +msgstr "Werden die zusätzlichen Multi-Material-Priming-Regionen in diesem Druck verwendet?" msgid "Volume per extruder" msgstr "Volumen pro Extruder" @@ -14807,12 +14906,14 @@ msgid "Name of the physical printer used for slicing." msgstr "Name des physischen Druckers, der zum Slicen verwendet wird." msgid "Number of extruders" -msgstr "" +msgstr "Anzahl der Extruder" msgid "" "Total number of extruders, regardless of whether they are used in the " "current print." msgstr "" +"Gesamtanzahl der Extruder, unabhängig davon, ob sie im aktuellen Druck " +"verwendet werden." msgid "Layer number" msgstr "Schichtnummer" diff --git a/localization/i18n/fr/OrcaSlicer_fr.po b/localization/i18n/fr/OrcaSlicer_fr.po index c495ac4ca6..1f2edeab23 100644 --- a/localization/i18n/fr/OrcaSlicer_fr.po +++ b/localization/i18n/fr/OrcaSlicer_fr.po @@ -1315,7 +1315,7 @@ msgid "ShiftLeft mouse button" msgstr "ShiftLeft mouse button" msgid "Select feature" -msgstr "Sélectionner une fonctionnalité" +msgstr "Sélectionner un trait" msgid "Select point" msgstr "Sélectionner un point" @@ -4452,7 +4452,7 @@ msgstr "Le volume:" msgid "Size:" msgstr "Taille:" -#, c-format, boost-format +#, boost-format msgid "" "Conflicts of gcode paths have been found at layer %d, z = %.2lf mm. Please " "separate the conflicted objects farther (%s <-> %s)." @@ -5915,7 +5915,7 @@ msgid "View all object's settings" msgstr "Afficher tous les paramètres de l'objet" msgid "Material settings" -msgstr "" +msgstr "Réglages des matériaux" msgid "Remove current plate (if not last one)" msgstr "Retirer la plaque actuelle (si elle n'est pas la dernière)" @@ -5994,7 +5994,7 @@ msgid "Search plate, object and part." msgstr "Recherche de plaque, d'objet et de pièce." msgid "Pellets" -msgstr "" +msgstr "Pellets" msgid "" "No AMS filaments. Please select a printer in 'Device' page to load AMS info." @@ -6218,6 +6218,8 @@ msgid "" "Your object appears to be too large. It will be scaled down to fit the heat " "bed automatically." msgstr "" +"Votre objet est trop grand. Il sera automatiquement réduit pour s’adapter au " +"plateau." msgid "Object too large" msgstr "Objet trop grand" @@ -6638,19 +6640,19 @@ msgid "Choose Download Directory" msgstr "Choisissez le répertoire de téléchargement" msgid "Associate" -msgstr "" +msgstr "Associé" msgid "with OrcaSlicer so that Orca can open models from" -msgstr "" +msgstr "avec OrcaSlicer afin qu’Orca puisse ouvrir des modèles à partir de" msgid "Current Association: " -msgstr "" +msgstr "Association actuelle : " msgid "Current Instance" -msgstr "" +msgstr "Instance courante" msgid "Current Instance Path: " -msgstr "" +msgstr "Chemin d’accès à l’instance courante : " msgid "General Settings" msgstr "Paramètres généraux" @@ -6825,10 +6827,10 @@ msgstr "" "appareils en même temps et gérer plusieurs appareils." msgid "Auto arrange plate after cloning" -msgstr "" +msgstr "Arrangement automatique de la plaque après le clonage" msgid "Auto arrange plate after object cloning" -msgstr "" +msgstr "Arrangement automatique de la plaque après le clonage de l’objet" msgid "Network" msgstr "Réseau" @@ -7790,8 +7792,8 @@ msgstr "" msgid "" "When recording timelapse without toolhead, it is recommended to add a " "\"Timelapse Wipe Tower\" \n" -"by right-click the empty position of build plate and choose \"Add Primitive" -"\"->\"Timelapse Wipe Tower\"." +"by right-click the empty position of build plate and choose \"Add " +"Primitive\"->\"Timelapse Wipe Tower\"." msgstr "" "Lorsque vous enregistrez un timelapse sans tête d’outil, il est recommandé " "d’ajouter une \"Tour d’essuyage timelapse\".\n" @@ -7875,10 +7877,10 @@ msgid "Prime tower" msgstr "Tour de purge" msgid "Filament for Features" -msgstr "" +msgstr "Filament pour les caractéristiques" msgid "Ooze prevention" -msgstr "" +msgstr "Prévention des suintements" msgid "Skirt" msgstr "Jupe" @@ -7937,7 +7939,7 @@ msgstr "" "d'ensemble" msgid "Flow ratio and Pressure Advance" -msgstr "" +msgstr "Rapport de débit et avance de pression" msgid "Print chamber temperature" msgstr "Température du caisson d’impression" @@ -7958,9 +7960,9 @@ msgid "" "Bed temperature when cool plate is installed. Value 0 means the filament " "does not support to print on the Cool Plate" msgstr "" -"Il s'agit de la température du plateau lorsque le plateau froid (\"Cool plate" -"\") est installé. Une valeur à 0 signifie que ce filament ne peut pas être " -"imprimé sur le plateau froid." +"Il s'agit de la température du plateau lorsque le plateau froid (\"Cool " +"plate\") est installé. Une valeur à 0 signifie que ce filament ne peut pas " +"être imprimé sur le plateau froid." msgid "Engineering plate" msgstr "Plaque Engineering" @@ -8145,7 +8147,7 @@ msgid "Single extruder multimaterial setup" msgstr "Configuration multi-matériaux pour extrudeur unique" msgid "Number of extruders of the printer." -msgstr "" +msgstr "Nombre d’extrudeurs de l’imprimante." msgid "" "Single Extruder Multi Material is selected, \n" @@ -8153,6 +8155,10 @@ msgid "" "Do you want to change the diameter for all extruders to first extruder " "nozzle diameter value?" msgstr "" +"Extrudeur unique multi-matériaux est sélectionné, \n" +"et tous les extrudeurs doivent avoir le même diamètre.\n" +"Souhaitez-vous modifier le diamètre de tous les extrudeurs pour qu’il " +"corresponde à la première valeur du diamètre de la buse de l’extrudeur ?" msgid "Nozzle diameter" msgstr "Diamètre de la buse" @@ -8167,6 +8173,9 @@ msgid "" "This is a single extruder multimaterial printer, diameters of all extruders " "will be set to the new value. Do you want to proceed?" msgstr "" +"Il s’agit d’une imprimante mono extrudeur multimatériaux, les diamètres de " +"tous les extrudeurs seront réglés sur la nouvelle valeur. Voulez-vous " +"continuer ?" msgid "Layer height limits" msgstr "Limites de hauteur de couche" @@ -8697,7 +8706,7 @@ msgstr "" "Importez des données de géométrie à partir de fichiers STL/STEP/3MF/OBJ/AMF." msgid "Shift+G" -msgstr "" +msgstr "Shift+G" msgid "Paste from clipboard" msgstr "Coller depuis le presse-papier" @@ -8750,7 +8759,7 @@ msgid "Collapse/Expand the sidebar" msgstr "Réduire/développer la barre latérale" msgid "Any arrow" -msgstr "" +msgstr "Toutes les flèches" msgid "Movement in camera space" msgstr "Mouvement dans l'espace de la caméra" @@ -8873,7 +8882,7 @@ msgid "Gizmo" msgstr "Gizmo" msgid "Set extruder number for the objects and parts" -msgstr "Définir le numéro d'extrudeuse pour les objets et les pièces" +msgstr "Définir le numéro d'extrudeur pour les objets et les pièces" msgid "Delete objects, parts, modifiers " msgstr "Supprimer des objets, des pièces, des modificateurs " @@ -9193,6 +9202,8 @@ msgid "" "Your print is very close to the priming regions. Make sure there is no " "collision." msgstr "" +"Votre impression est très proche des régions d’amorçage. Assurez-vous qu’il " +"n’y a pas de collision." msgid "" "Failed to generate gcode for invalid custom G-code.\n" @@ -9394,8 +9405,8 @@ msgid "" "during printing" msgstr "" "Impossible d'imprimer plusieurs filaments qui ont une grande différence de " -"température ensemble. Sinon, l'extrudeuse et la buse peuvent être bloquées " -"ou endommagées pendant l'impression" +"température ensemble. Sinon, l'extrudeur et la buse peuvent être bloquées ou " +"endommagées pendant l'impression" msgid "No extrusions under current settings." msgstr "Aucune extrusion dans les paramètres actuels." @@ -9450,6 +9461,9 @@ msgid "" "well when the prime tower is enabled. It's very experimental, so please " "proceed with caution." msgstr "" +"Différents diamètres de buses et de filaments peuvent ne pas fonctionner " +"correctement lorsque la tour d’amorçage est activée. Il s’agit d’un projet " +"très expérimental, il convient donc de procéder avec prudence." msgid "" "The Wipe Tower is currently only supported with the relative extruder " @@ -9462,6 +9476,8 @@ msgid "" "Ooze prevention is only supported with the wipe tower when " "'single_extruder_multi_material' is off." msgstr "" +"La prévention du suintement n’est possible qu’avec la tour d’essuyage " +"lorsque l’option ‘single_extruder_multi_material’ est désactivée." msgid "" "The prime tower is currently only supported for the Marlin, RepRap/Sprinter, " @@ -10867,7 +10883,7 @@ msgid "" "Clearance radius around extruder. Used for collision avoidance in by-object " "printing." msgstr "" -"Rayon de dégagement autour de l'extrudeuse : utilisé pour éviter les " +"Rayon de dégagement autour de l'extrudeur : utilisé pour éviter les " "collisions lors de l'impression par objets." msgid "Nozzle height" @@ -10985,14 +11001,14 @@ msgid "Pressure advance(Klipper) AKA Linear advance factor(Marlin)" msgstr "Pressure Advance (Klipper) AKA Linear Advance (Marlin)" msgid "Enable adaptive pressure advance (beta)" -msgstr "" +msgstr "Activer l’avance de pression adaptative (beta)" #, c-format, boost-format msgid "" "With increasing print speeds (and hence increasing volumetric flow through " "the nozzle) and increasing accelerations, it has been observed that the " "effective PA value typically decreases. This means that a single PA value is " -"not always 100% optimal for all features and a compromise value is usually " +"not always 100%% optimal for all features and a compromise value is usually " "used that does not cause too much bulging on features with lower flow speed " "and accelerations while also not causing gaps on faster features.\n" "\n" @@ -11008,9 +11024,30 @@ msgid "" "and for when tool changing.\n" "\n" msgstr "" +"Avec l’augmentation des vitesses d’impression (et donc du débit volumétrique " +"à travers la buse) et des accélérations, il a été observé que la valeur " +"effective de PA diminue généralement. Cela signifie qu’une valeur PA unique " +"n’est pas toujours optimale à 100%% pour toutes les caractéristiques et " +"qu’une valeur de compromis est généralement utilisée pour éviter de trop " +"gonfler les caractéristiques avec une vitesse d’écoulement et des " +"accélérations plus faibles, tout en évitant de créer des interstices sur les " +"traits plus rapides.\n" +"\n" +"Cette fonction vise à remédier à cette limitation en modélisant la réponse " +"du système d’extrusion de votre imprimante en fonction de la vitesse du flux " +"volumétrique et de l’accélération de l’impression. En interne, elle génère " +"un modèle ajusté qui peut extrapoler l’avance de pression nécessaire pour " +"une vitesse de débit volumétrique et une accélération données, qui est " +"ensuite émise à l’imprimante en fonction des conditions d’impression " +"actuelles.\n" +"\n" +"Lorsqu’elle est activée, la valeur de l’avance de pression ci-dessus est " +"annulée. Cependant, une valeur par défaut raisonnable est fortement " +"recommandée pour servir de solution de secours et en cas de changement " +"d’outil.\n" msgid "Adaptive pressure advance measurements (beta)" -msgstr "" +msgstr "Mesures adaptatives de l’avance de pression (beta)" msgid "" "Add sets of pressure advance (PA) values, the volumetric flow speeds and " @@ -11041,9 +11078,38 @@ msgid "" "your filament profile\n" "\n" msgstr "" +"Ajouter des séries de valeurs d'avance de pression (PA), les vitesses de " +"débit volumétrique et les accélérations auxquelles elles ont été mesurées, " +"séparées par une virgule. Un ensemble de valeurs par ligne. Par exemple\n" +"0.04,3.96,3000\n" +"0.033,3.96,10000\n" +"0.029,7.91,3000\n" +"0.026,7.91,10000\n" +"\n" +"Comment calibrer :\n" +"1. Effectuer le test d’avance de pression pour au moins 3 vitesses par " +"valeur d’accélération. Il est recommandé d’effectuer le test pour au moins " +"la vitesse des périmètres externes, la vitesse des périmètres internes et la " +"vitesse d’impression de la caractéristique la plus rapide de votre profil " +"(en général, il s’agit du remplissage clairsemé ou plein). Ensuite, il faut " +"les exécuter aux mêmes vitesses pour les accélérations d’impression les plus " +"lentes et les plus rapides, et pas plus vite que l’accélération maximale " +"recommandée par le modeleur d’entrée de klipper.\n" +"2. Notez la valeur optimale de PA pour chaque vitesse de flux volumétrique " +"et accélération. Vous pouvez trouver le numéro de débit en sélectionnant le " +"débit dans le menu déroulant du schéma de couleurs et en déplaçant le " +"curseur horizontal sur les lignes du schéma PA. Le chiffre doit être visible " +"en bas de la page. La valeur idéale du PA devrait diminuer au fur et à " +"mesure que le débit volumétrique augmente. Si ce n’est pas le cas, vérifiez " +"que votre extrudeur fonctionne correctement. Plus vous imprimez lentement et " +"avec peu d’accélération, plus la plage des valeurs PA acceptables est " +"grande. Si aucune différence n’est visible, utilisez la valeur PA du test le " +"plus rapide.3 Entrez les triplets de valeurs PA, de débit et d’accélérations " +"dans la zone de texte ici et sauvegardez votre profil de filament.\n" msgid "Enable adaptive pressure advance for overhangs (beta)" msgstr "" +"Activation de l’avance de pression adaptative pour les surplombs (beta)" msgid "" "Enable adaptive PA for overhangs as well as when flow changes within the " @@ -11051,9 +11117,13 @@ msgid "" "set accurately, it will cause uniformity issues on the external surfaces " "before and after overhangs.\n" msgstr "" +"Activer le PA adaptatif pour les surplombs ainsi que pour les changements de " +"débit au sein d’un même élément. Il s’agit d’une option expérimentale, car " +"si le profil PA n’est pas défini avec précision, il entraînera des problèmes " +"d’uniformité sur les surfaces externes avant et après les surplombs.\n" msgid "Pressure advance for bridges" -msgstr "" +msgstr "Avance de pression pour les ponts" msgid "" "Pressure advance value for bridges. Set to 0 to disable. \n" @@ -11063,6 +11133,12 @@ msgid "" "pressure drop in the nozzle when printing in the air and a lower PA helps " "counteract this." msgstr "" +"Valeur de l’avance de pression pour les ponts. Régler à 0 pour désactiver. \n" +"\n" +" Une valeur PA plus faible lors de l’impression de ponts permet de réduire " +"l’apparition d’une légère sous-extrusion immédiatement après les ponts. Ce " +"phénomène est dû à la chute de pression dans la buse lors de l’impression " +"dans l’air et une valeur PA plus faible permet d’y remédier." msgid "" "Default line width if other line widths are set to 0. If expressed as a %, " @@ -11180,7 +11256,7 @@ msgstr "" "dans le G-code, il est donc important qu'il soit exact et précis." msgid "Pellet flow coefficient" -msgstr "" +msgstr "Coefficient d’écoulement des pellets" msgid "" "Pellet flow coefficient is emperically derived and allows for volume " @@ -11191,6 +11267,13 @@ msgid "" "\n" "filament_diameter = sqrt( (4 * pellet_flow_coefficient) / PI )" msgstr "" +"Le coefficient d’écoulement des pellets est dérivé de manière empirique et " +"permet de calculer le volume des imprimantes à pellets.\n" +"\n" +"En interne, il est converti en diamètre de filament. Tous les autres calculs " +"de volume restent inchangés.\n" +"\n" +"filament_diameter = sqrt( (4 * pellet_flow_coefficient) / PI )" msgid "Shrinkage" msgstr "Pourcentage de retrait" @@ -11264,19 +11347,24 @@ msgstr "" "de refroidissement. Précisez le nombre souhaité de ces mouvements." msgid "Stamping loading speed" -msgstr "" +msgstr "Vitesse de chargement du marquage" msgid "Speed used for stamping." -msgstr "" +msgstr "Vitesse utilisée pour le marquage." msgid "Stamping distance measured from the center of the cooling tube" msgstr "" +"Distance de marquage mesurée à partir du centre du tube de refroidissement" msgid "" "If set to nonzero value, filament is moved toward the nozzle between the " "individual cooling moves (\"stamping\"). This option configures how long " "this movement should be before the filament is retracted again." msgstr "" +"Si la valeur est différente de zéro, le filament est déplacé vers la buse " +"entre les différents mouvements de refroidissement («  marquage »). Cette " +"option permet de configurer la durée de ce mouvement avant que le filament " +"ne soit à nouveau rétracté." msgid "Speed of the first cooling move" msgstr "Vitesse du premier mouvement de refroidissement" @@ -11714,10 +11802,10 @@ msgstr "Ventilateur à pleine vitesse à la couche" msgid "" "Fan speed will be ramped up linearly from zero at layer " -"\"close_fan_the_first_x_layers\" to maximum at layer \"full_fan_speed_layer" -"\". \"full_fan_speed_layer\" will be ignored if lower than " -"\"close_fan_the_first_x_layers\", in which case the fan will be running at " -"maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." +"\"close_fan_the_first_x_layers\" to maximum at layer " +"\"full_fan_speed_layer\". \"full_fan_speed_layer\" will be ignored if lower " +"than \"close_fan_the_first_x_layers\", in which case the fan will be running " +"at maximum allowed speed at layer \"close_fan_the_first_x_layers\" + 1." msgstr "" "La vitesse du ventilateur augmentera de manière linéaire à partir de zéro à " "la couche \"close_fan_the_first_x_layers\" jusqu’au maximum à la couche " @@ -12009,10 +12097,12 @@ msgid "Klipper" msgstr "Klipper" msgid "Pellet Modded Printer" -msgstr "" +msgstr "Imprimante à pellets" msgid "Enable this option if your printer uses pellets instead of filaments" msgstr "" +"Activez cette option si votre imprimante utilise des pellets au lieu de " +"filaments." msgid "Support multi bed types" msgstr "Prise en charge de plusieurs types de plateaux" @@ -12141,51 +12231,67 @@ msgid "" "\"mmu_segmented_region_interlocking_depth\"is bigger then " "\"mmu_segmented_region_max_width\". Zero disables this feature." msgstr "" +"Profondeur d’imbrication d’une région segmentée. Elle sera ignorée si " +"« mmu_segmented_region_max_width » est égal à zéro ou si " +"« mmu_segmented_region_interlocking_depth » est supérieur à " +"« mmu_segmented_region_max_width ». La valeur zéro désactive cette " +"fonctionnalité." msgid "Use beam interlocking" -msgstr "" +msgstr "Utiliser l’emboîtement des poutres" msgid "" "Generate interlocking beam structure at the locations where different " "filaments touch. This improves the adhesion between filaments, especially " "models printed in different materials." msgstr "" +"Génère une structure de poutres imbriquées aux endroits où les différents " +"filaments se touchent. Cela améliore l’adhérence entre les filaments, en " +"particulier pour les modèles imprimés dans des matériaux différents." msgid "Interlocking beam width" -msgstr "" +msgstr "Largeur du faisceau d’emboîtement" msgid "The width of the interlocking structure beams." -msgstr "" +msgstr "La largeur des poutres de la structure d’emboîtement." msgid "Interlocking direction" -msgstr "" +msgstr "Sens d’emboîtement" msgid "Orientation of interlock beams." -msgstr "" +msgstr "Orientation des poutres de verrouillage." msgid "Interlocking beam layers" -msgstr "" +msgstr "Couches de poutres emboîtées" msgid "" "The height of the beams of the interlocking structure, measured in number of " "layers. Less layers is stronger, but more prone to defects." msgstr "" +"La hauteur des poutres de la structure d’emboîtement, mesurée en nombre de " +"couches. Moins il y a de couches, plus la structure est solide, mais plus " +"elle est sujette à des défauts." msgid "Interlocking depth" -msgstr "" +msgstr "Profondeur d’emboîtement" msgid "" "The distance from the boundary between filaments to generate interlocking " "structure, measured in cells. Too few cells will result in poor adhesion." msgstr "" +"La distance de la limite entre les filaments pour générer une structure " +"imbriquée, mesurée en cellules. Un nombre insuffisant de cellules entraîne " +"une mauvaise adhérence." msgid "Interlocking boundary avoidance" -msgstr "" +msgstr "Évitement des limites de l’imbrication" msgid "" "The distance from the outside of a model where interlocking structures will " "not be generated, measured in cells." msgstr "" +"La distance à partir de l’extérieur d’un modèle où les structures imbriquées " +"ne seront pas générées, mesurée en cellules." msgid "Ironing Type" msgstr "Type de lissage" @@ -12430,7 +12536,7 @@ msgid "" "The largest printable layer height for extruder. Used tp limits the maximum " "layer hight when enable adaptive layer height" msgstr "" -"La plus grande hauteur de couche imprimable pour l'extrudeuse. Utilisé tp " +"La plus grande hauteur de couche imprimable pour l'extrudeur. Utilisé tp " "limite la hauteur de couche maximale lorsque la hauteur de couche adaptative " "est activée" @@ -12544,7 +12650,7 @@ msgid "" "The lowest printable layer height for extruder. Used tp limits the minimum " "layer hight when enable adaptive layer height" msgstr "" -"La hauteur de couche imprimable la plus basse pour l'extrudeuse. Utilisé tp " +"La hauteur de couche imprimable la plus basse pour l'extrudeur. Utilisé tp " "limite la hauteur de couche minimale lorsque la hauteur de couche adaptative " "est activée" @@ -12670,6 +12776,8 @@ msgid "" "This option will drop the temperature of the inactive extruders to prevent " "oozing." msgstr "" +"Cette option permet d’abaisser la température des extrudeurs inactifs afin " +"d’éviter le suintement." msgid "Filename format" msgstr "Format du nom de fichier" @@ -12725,7 +12833,7 @@ msgstr "" "vitesse du pont est utilisée." msgid "Filament to print walls" -msgstr "" +msgstr "Filament pour imprimer les parois" msgid "" "Line width of inner wall. If expressed as a %, it will be computed over the " @@ -12778,10 +12886,10 @@ msgstr "" "configuration Orca Slicer en lisant les variables d’environnement." msgid "Printer type" -msgstr "" +msgstr "Type d’imprimante" msgid "Type of the printer" -msgstr "" +msgstr "Type de l’imprimante" msgid "Printer notes" msgstr "Notes de l’mprimante" @@ -12790,7 +12898,7 @@ msgid "You can put your notes regarding the printer here." msgstr "Vous pouvez mettre vos notes concernant l’imprimante ici." msgid "Printer variant" -msgstr "" +msgstr "Variante de l’imprimante" msgid "Raft contact Z distance" msgstr "Distance Z de contact du radeau" @@ -12870,7 +12978,7 @@ msgid "" "Some amount of material in extruder is pulled back to avoid ooze during long " "travel. Set zero to disable retraction" msgstr "" -"Une certaine quantité de matériau dans l'extrudeuse est retirée pour éviter " +"Une certaine quantité de matériau dans l'extrudeur est retirée pour éviter " "le suintement pendant les longs trajets. Définir zéro pour désactiver la " "rétraction" @@ -12942,12 +13050,14 @@ msgid "Spiral" msgstr "Spirale" msgid "Traveling angle" -msgstr "" +msgstr "Angle de déplacement" msgid "" "Traveling angle for Slope and Spiral Z hop type. Setting it to 90° results " "in Normal Lift" msgstr "" +"Angle de déplacement pour les sauts en Z en pente et en spirale. En le " +"réglant sur 90°, on obtient une levée normale." msgid "Only lift Z above" msgstr "Décalage en Z au-dessus uniquement" @@ -13022,7 +13132,7 @@ msgid "" "Speed for reloading filament into extruder. Zero means same speed with " "retraction" msgstr "" -"Vitesse de rechargement du filament dans l'extrudeuse. Zéro signifie même " +"Vitesse de rechargement du filament dans l'extrudeur. Zéro signifie même " "vitesse avec rétraction" msgid "Use firmware retraction" @@ -13377,10 +13487,10 @@ msgstr "" "remplissage plein interne" msgid "Solid infill" -msgstr "" +msgstr "Remplissage solide" msgid "Filament to print solid infill" -msgstr "" +msgstr "Filament pour l’impression de remplissage solide" msgid "" "Line width of internal solid infill. If expressed as a %, it will be " @@ -13456,9 +13566,12 @@ msgid "" "value is not used when 'idle_temperature' in filament settings is set to non " "zero value." msgstr "" +"Différence de température à appliquer lorsqu’un extrudeur n’est pas actif. " +"La valeur n’est pas utilisée lorsque ‘idle_temperature’ dans les paramètres " +"du filament est réglé sur une valeur non nulle." msgid "Preheat time" -msgstr "" +msgstr "Durée du préchauffage" msgid "" "To reduce the waiting time after tool change, Orca can preheat the next tool " @@ -13466,14 +13579,22 @@ msgid "" "seconds to preheat the next tool. Orca will insert a M104 command to preheat " "the tool in advance." msgstr "" +"Pour réduire le temps d’attente après un changement d’outil, Orca peut " +"préchauffer l’outil suivant pendant que l’outil actuel est encore en cours " +"d’utilisation. Ce paramètre spécifie le temps en secondes pour préchauffer " +"l’outil suivant. Orca insère une commande M104 pour préchauffer l’outil à " +"l’avance." msgid "Preheat steps" -msgstr "" +msgstr "Étapes de préchauffage" msgid "" "Insert multiple preheat commands(e.g. M104.1). Only useful for Prusa XL. For " "other printers, please set it to 1." msgstr "" +"Insérer plusieurs commandes de préchauffage (par exemple M104.1). Uniquement " +"utile pour la Prusa XL. Pour les autres imprimantes, veuillez le régler sur " +"1." msgid "Start G-code" msgstr "G-code de démarrage" @@ -13560,8 +13681,8 @@ msgid "" "Use \"Even-odd\" for 3DLabPrint airplane models. Use \"Close holes\" to " "close all holes in the model." msgstr "" -"Utilisez « Pair-impair » pour les modèles d'avion 3DLabPrint. Utilisez « " -"Fermer les trous » pour fermer tous les trous du modèle." +"Utilisez « Pair-impair » pour les modèles d'avion 3DLabPrint. Utilisez " +"« Fermer les trous » pour fermer tous les trous du modèle." msgid "Regular" msgstr "Standard" @@ -14144,7 +14265,7 @@ msgid "Prime volume" msgstr "Premier volume" msgid "The volume of material to prime extruder on tower." -msgstr "Le volume de matériau à amorcer l'extrudeuse sur la tour." +msgstr "Le volume de matériau pour amorcer l'extrudeur sur la tour." msgid "Width of prime tower" msgstr "Largeur de la tour de purge." @@ -14275,22 +14396,29 @@ msgid "Spacing of purge lines on the wipe tower." msgstr "Espacement des lignes de purge sur la tour d’essuyage." msgid "Extra flow for purging" -msgstr "" +msgstr "Débit supplémentaire pour purger" msgid "" "Extra flow used for the purging lines on the wipe tower. This makes the " "purging lines thicker or narrower than they normally would be. The spacing " "is adjusted automatically." msgstr "" +"Débit supplémentaire utilisé pour les lignes de purge de la tour d’essuyage. " +"Cela rend les lignes de purge plus épaisses ou plus étroites qu’elles ne le " +"seraient normalement. L’espacement est ajusté automatiquement." msgid "Idle temperature" -msgstr "" +msgstr "Température au repos" msgid "" "Nozzle temperature when the tool is currently not used in multi-tool setups." "This is only used when 'Ooze prevention' is active in Print Settings. Set to " "0 to disable." msgstr "" +"Température de la buse lorsque l’outil n’est pas utilisé dans les " +"configurations multi-outils. Cette fonction n’est utilisée que lorsque la " +"fonction « Prévention des suintements » est activée dans les paramètres " +"d’impression. Régler à 0 pour désactiver." msgid "X-Y hole compensation" msgstr "Compensation de trou X-Y" @@ -14385,8 +14513,8 @@ msgid "" "Wipe tower is only compatible with relative mode. It is recommended on most " "printers. Default is checked" msgstr "" -"L’extrusion relative est recommandée lors de l’utilisation de l’option « " -"label_objects ». Certains extrudeurs fonctionnent mieux avec cette option " +"L’extrusion relative est recommandée lors de l’utilisation de l’option " +"« label_objects ». Certains extrudeurs fonctionnent mieux avec cette option " "non verrouillée (mode d’extrusion absolu). La tour d’essuyage n’est " "compatible qu’avec le mode relatif. Il est recommandé sur la plupart des " "imprimantes. L’option par défaut est cochée" @@ -14651,12 +14779,14 @@ msgstr "" "actuellement prévu." msgid "Absolute E position" -msgstr "" +msgstr "Position E absolue" msgid "" "Current position of the extruder axis. Only used with absolute extruder " "addressing." msgstr "" +"Position actuelle de l’axe de l’extrudeuse. Utilisé uniquement avec " +"l’adressage absolu de de I’extrudeur." msgid "Current extruder" msgstr "Extrudeur actuel" @@ -14709,17 +14839,19 @@ msgstr "" "l’impression." msgid "Has single extruder MM priming" -msgstr "" +msgstr "Dispose d’un seul extrudeur MM d’amorçage" msgid "Are the extra multi-material priming regions used in this print?" msgstr "" +"Les régions d’amorçage multimatériaux supplémentaires sont-elles utilisées " +"dans cette impression ?" msgid "Volume per extruder" msgstr "Volume par extrudeur" msgid "Total filament volume extruded per extruder during the entire print." msgstr "" -"Volume total de filament extrudé par extrudeuse pendant toute la durée de " +"Volume total de filament extrudé par extrudeur pendant toute la durée de " "l’impression." msgid "Total toolchanges" @@ -14867,7 +14999,7 @@ msgid "" "containing one name for each extruder." msgstr "" "Noms des préréglages de filaments utilisés pour le découpage. La variable " -"est un vecteur contenant un nom pour chaque extrudeuse." +"est un vecteur contenant un nom pour chaque extrudeur." msgid "Printer preset name" msgstr "Nom du préréglage de l’imprimante" @@ -14882,12 +15014,14 @@ msgid "Name of the physical printer used for slicing." msgstr "Nom de l’imprimante physique utilisé pour la découpe." msgid "Number of extruders" -msgstr "" +msgstr "Nombre d’extrudeurs" msgid "" "Total number of extruders, regardless of whether they are used in the " "current print." msgstr "" +"Nombre total d’extrudeurs, qu’ils soient ou non utilisées dans l’impression " +"en cours." msgid "Layer number" msgstr "Numéro de couche" @@ -16039,8 +16173,8 @@ msgstr "" "Voulez-vous le réécrire ?" msgid "" -"We would rename the presets as \"Vendor Type Serial @printer you selected" -"\". \n" +"We would rename the presets as \"Vendor Type Serial @printer you " +"selected\". \n" "To add preset for more printers, Please go to printer selection" msgstr "" "Nous renommerions les préréglages en « Vendor Type Serial @printer you " @@ -16984,7 +17118,7 @@ msgid "Could not connect to SimplyPrint" msgstr "Impossible de se connecter à SimplyPrint" msgid "Internal error" -msgstr "" +msgstr "Erreur interne" msgid "Unknown error" msgstr "Erreur inconnue" @@ -17016,474 +17150,6 @@ msgstr "" msgid "User cancelled." msgstr "L’utilisateur a annulé." -#: resources/data/hints.ini: [hint:Precise wall] -msgid "" -"Precise wall\n" -"Did you know that turning on precise wall can improve precision and layer " -"consistency?" -msgstr "" -"Paroi précise\n" -"Saviez-vous que l’activation de la paroi précise peut améliorer la précision " -"et l’homogénéité des couches ?" - -#: resources/data/hints.ini: [hint:Sandwich mode] -msgid "" -"Sandwich mode\n" -"Did you know that you can use sandwich mode (inner-outer-inner) to improve " -"precision and layer consistency if your model doesn't have very steep " -"overhangs?" -msgstr "" -"Mode sandwich\n" -"Saviez-vous que vous pouvez utiliser le mode sandwich (intérieur-extérieur-" -"intérieur) pour améliorer la précision et la cohérence des couches si votre " -"modèle n’a pas de porte-à-faux très prononcés ?" - -#: resources/data/hints.ini: [hint:Chamber temperature] -msgid "" -"Chamber temperature\n" -"Did you know that OrcaSlicer supports chamber temperature?" -msgstr "" -"Température du caisson\n" -"Saviez-vous qu’OrcaSlicer prend en charge la température du caisson ?" - -#: resources/data/hints.ini: [hint:Calibration] -msgid "" -"Calibration\n" -"Did you know that calibrating your printer can do wonders? Check out our " -"beloved calibration solution in OrcaSlicer." -msgstr "" -"Calibrage\n" -"Saviez-vous que le calibrage de votre imprimante peut faire des merveilles ? " -"Découvrez notre solution de calibrage bien-aimée dans OrcaSlicer." - -#: resources/data/hints.ini: [hint:Auxiliary fan] -msgid "" -"Auxiliary fan\n" -"Did you know that OrcaSlicer supports Auxiliary part cooling fan?" -msgstr "" -"Ventilateur auxiliaire\n" -"Saviez-vous qu’OrcaSlicer prend en charge le ventilateur auxiliaire de " -"refroidissement des pièces ?" - -#: resources/data/hints.ini: [hint:Air filtration] -msgid "" -"Air filtration/Exhaust Fan\n" -"Did you know that OrcaSlicer can support Air filtration/Exhaust Fan?" -msgstr "" -"Filtration de l’air/ventilateur d’extraction\n" -"Saviez-vous qu’OrcaSlicer peut prendre en charge la filtration de l’air/le " -"ventilateur d’extraction ?" - -#: resources/data/hints.ini: [hint:G-code window] -msgid "" -"G-code window\n" -"You can turn on/off the G-code window by pressing the C key." -msgstr "" -"Fenêtre de G-code\n" -"Vous pouvez activer/désactiver la fenêtre G-code en appuyant sur la touche " -"C." - -#: resources/data/hints.ini: [hint:Switch workspaces] -msgid "" -"Switch workspaces\n" -"You can switch between Prepare and Preview workspaces by " -"pressing the Tab key." -msgstr "" -"Changer les espaces de travail\n" -"Vous pouvez alterner entre l’espace de travail Préparer et Aperçu en appuyant sur la touche Tab." - -#: resources/data/hints.ini: [hint:How to use keyboard shortcuts] -msgid "" -"How to use keyboard shortcuts\n" -"Did you know that Orca Slicer offers a wide range of keyboard shortcuts and " -"3D scene operations." -msgstr "" -"Comment utiliser les raccourcis clavier\n" -"Saviez-vous qu’Orca Slicer offre une large gamme de raccourcis clavier et " -"d’opérations sur les scènes 3D." - -#: resources/data/hints.ini: [hint:Reverse on odd] -msgid "" -"Reverse on odd\n" -"Did you know that Reverse on odd feature can significantly improve " -"the surface quality of your overhangs?" -msgstr "" -"Parois inversées sur couches impaires\n" -"Saviez-vous que la fonction Parois inversées sur couches impaires " -"peut améliorer de manière significative la qualité de la surface de vos " -"surplombs ?" - -#: resources/data/hints.ini: [hint:Cut Tool] -msgid "" -"Cut Tool\n" -"Did you know that you can cut a model at any angle and position with the " -"cutting tool?" -msgstr "" -"Outil de découpe\n" -"Saviez-vous que vous pouvez découper un modèle à n'importe quel angle et " -"dans n'importe quelle position avec l'outil de découpe ?" - -#: resources/data/hints.ini: [hint:Fix Model] -msgid "" -"Fix Model\n" -"Did you know that you can fix a corrupted 3D model to avoid a lot of slicing " -"problems on the Windows system?" -msgstr "" -"Réparer un modèle\n" -"Saviez-vous que vous pouvez réparer un modèle 3D corrompu pour éviter de " -"nombreux problèmes de découpage sur le système Windows ?" - -#: resources/data/hints.ini: [hint:Timelapse] -msgid "" -"Timelapse\n" -"Did you know that you can generate a timelapse video during each print?" -msgstr "" -"Timelapse\n" -"Saviez-vous que vous pouvez générer une vidéo en timelapse à chaque " -"impression ?" - -#: resources/data/hints.ini: [hint:Auto-Arrange] -msgid "" -"Auto-Arrange\n" -"Did you know that you can auto-arrange all objects in your project?" -msgstr "" -"Agencement Automatique\n" -"Saviez-vous que vous pouvez agencement automatiquement tous les objets de " -"votre projet ?" - -#: resources/data/hints.ini: [hint:Auto-Orient] -msgid "" -"Auto-Orient\n" -"Did you know that you can rotate objects to an optimal orientation for " -"printing by a simple click?" -msgstr "" -"Orientation Automatique\n" -"Saviez-vous que vous pouvez faire pivoter des objets dans une orientation " -"optimale pour l'impression d'un simple clic ?" - -#: resources/data/hints.ini: [hint:Lay on Face] -msgid "" -"Lay on Face\n" -"Did you know that you can quickly orient a model so that one of its faces " -"sits on the print bed? Select the \"Place on face\" function or press the " -"F key." -msgstr "" -"Poser sur une face\n" -"Saviez-vous qu'il est possible d'orienter rapidement un modèle de manière à " -"ce que l'une de ses faces repose sur le plateau d'impression ? Sélectionnez " -"la fonction « Placer sur la face » ou appuyez sur la touche F." - -#: resources/data/hints.ini: [hint:Object List] -msgid "" -"Object List\n" -"Did you know that you can view all objects/parts in a list and change " -"settings for each object/part?" -msgstr "" -"Liste d'objets\n" -"Saviez-vous que vous pouvez afficher tous les objets/pièces dans une liste " -"et modifier les paramètres de chaque objet/pièce ?" - -#: resources/data/hints.ini: [hint:Search Functionality] -msgid "" -"Search Functionality\n" -"Did you know that you use the Search tool to quickly find a specific Orca " -"Slicer setting?" -msgstr "" -"Fonctionnalité de recherche\n" -"Saviez-vous que vous pouvez utiliser l’outil de recherche pour trouver " -"rapidement un paramètre spécifique de l’Orca Slicer ?" - -#: resources/data/hints.ini: [hint:Simplify Model] -msgid "" -"Simplify Model\n" -"Did you know that you can reduce the number of triangles in a mesh using the " -"Simplify mesh feature? Right-click the model and select Simplify model." -msgstr "" -"Simplifier le modèle\n" -"Saviez-vous que vous pouviez réduire le nombre de triangles dans un maillage " -"à l’aide de la fonction Simplifier le maillage ? Cliquez avec le bouton " -"droit de la souris sur le modèle et sélectionnez Simplifier le modèle." - -#: resources/data/hints.ini: [hint:Slicing Parameter Table] -msgid "" -"Slicing Parameter Table\n" -"Did you know that you can view all objects/parts on a table and change " -"settings for each object/part?" -msgstr "" -"Tableau des paramètres de découpe\n" -"Saviez-vous que vous pouvez afficher tous les objets/pièces sur un tableau " -"et modifier les paramètres de chaque objet/pièce ?" - -#: resources/data/hints.ini: [hint:Split to Objects/Parts] -msgid "" -"Split to Objects/Parts\n" -"Did you know that you can split a big object into small ones for easy " -"colorizing or printing?" -msgstr "" -"Séparer en objets/parties\n" -"Saviez-vous que vous pouvez séparer un gros objet en petits objets pour les " -"colorier ou les imprimer facilement ?" - -#: resources/data/hints.ini: [hint:Subtract a Part] -msgid "" -"Subtract a Part\n" -"Did you know that you can subtract one mesh from another using the Negative " -"part modifier? That way you can, for example, create easily resizable holes " -"directly in Orca Slicer." -msgstr "" -"Soustraire une pièce\n" -"Saviez-vous que vous pouviez soustraire un maillage d’un autre à l’aide du " -"modificateur de partie négative ? De cette façon, vous pouvez, par exemple, " -"créer des trous facilement redimensionnables directement dans Orca Slicer." - -#: resources/data/hints.ini: [hint:STEP] -msgid "" -"STEP\n" -"Did you know that you can improve your print quality by slicing a STEP file " -"instead of an STL?\n" -"Orca Slicer supports slicing STEP files, providing smoother results than a " -"lower resolution STL. Give it a try!" -msgstr "" -"STEP\n" -"Saviez-vous que vous pouvez améliorer votre qualité d'impression en " -"découpant un fichier .step au lieu d'un .stl ?\n" -"Orca Slicer prend en charge le découpage des fichiers .step, offrant des " -"résultats plus fluides qu'un .stl de résolution inférieure. Essayez !" - -#: resources/data/hints.ini: [hint:Z seam location] -msgid "" -"Z seam location\n" -"Did you know that you can customize the location of the Z seam, and even " -"paint it on your print, to have it in a less visible location? This improves " -"the overall look of your model. Check it out!" -msgstr "" -"Emplacement de la couture Z\n" -"Saviez-vous que vous pouvez personnaliser l'emplacement de la couture Z, et " -"même la peindre manuelle sur votre impression pour le placer dans un endroit " -"moins visible ? Cela améliore l'aspect général de votre modèle. Jetez-y un " -"coup d'œil !" - -#: resources/data/hints.ini: [hint:Fine-tuning for flow rate] -msgid "" -"Fine-tuning for flow rate\n" -"Did you know that flow rate can be fine-tuned for even better-looking " -"prints? Depending on the material, you can improve the overall finish of the " -"printed model by doing some fine-tuning." -msgstr "" -"Réglage fin du débit\n" -"Saviez-vous que le débit peut être réglé avec précision pour obtenir des " -"impressions encore plus belles ? En fonction du matériau, vous pouvez " -"améliorer la finition générale du modèle imprimé en procédant à un réglage " -"fin." - -#: resources/data/hints.ini: [hint:Split your prints into plates] -msgid "" -"Split your prints into plates\n" -"Did you know that you can split a model that has a lot of parts into " -"individual plates ready to print? This will simplify the process of keeping " -"track of all the parts." -msgstr "" -"Divisez vos impressions en plateaux\n" -"Saviez-vous que vous pouvez diviser un modèle comportant de nombreuses " -"pièces en plateaux individuels prêts à être imprimés ? Cela simplifie le " -"processus de suivi de toutes les pièces." - -#: resources/data/hints.ini: [hint:Speed up your print with Adaptive Layer -#: Height] -msgid "" -"Speed up your print with Adaptive Layer Height\n" -"Did you know that you can print a model even faster, by using the Adaptive " -"Layer Height option? Check it out!" -msgstr "" -"Accélérez votre impression grâce à la Hauteur de Couche Adaptative\n" -"Saviez-vous que vous pouvez imprimer un modèle encore plus rapidement en " -"utilisant l'option Adaptive Layer Height ? Jetez-y un coup d'œil !" - -#: resources/data/hints.ini: [hint:Support painting] -msgid "" -"Support painting\n" -"Did you know that you can paint the location of your supports? This feature " -"makes it easy to place the support material only on the sections of the " -"model that actually need it." -msgstr "" -"Peinture de support\n" -"Saviez-vous que vous pouvez peindre l'emplacement de vos supports ? Cette " -"caractéristique permet de placer facilement le matériau de support " -"uniquement sur les sections du modèle qui en ont réellement besoin." - -#: resources/data/hints.ini: [hint:Different types of supports] -msgid "" -"Different types of supports\n" -"Did you know that you can choose from multiple types of supports? Tree " -"supports work great for organic models, while saving filament and improving " -"print speed. Check them out!" -msgstr "" -"Différents types de supports\n" -"Saviez-vous que vous pouvez choisir parmi plusieurs types de supports ? Les " -"supports arborescents fonctionnent parfaitement pour les modèles organiques " -"tout en économisant du filament et en améliorant la vitesse d'impression. " -"Découvrez-les !" - -#: resources/data/hints.ini: [hint:Printing Silk Filament] -msgid "" -"Printing Silk Filament\n" -"Did you know that Silk filament needs special consideration to print it " -"successfully? Higher temperature and lower speed are always recommended for " -"the best results." -msgstr "" -"Impression de filament Soie\n" -"Saviez-vous que le filament soie nécessite une attention particulière pour " -"une impression réussie ? Une température plus élevée et une vitesse plus " -"faible sont toujours recommandées pour obtenir les meilleurs résultats." - -#: resources/data/hints.ini: [hint:Brim for better adhesion] -msgid "" -"Brim for better adhesion\n" -"Did you know that when printing models have a small contact interface with " -"the printing surface, it's recommended to use a brim?" -msgstr "" -"Bordure pour une meilleure adhésion\n" -"Saviez-vous que lorsque les modèles imprimés ont une faible interface de " -"contact avec la surface d'impression, il est recommandé d'utiliser une " -"bordure ?" - -#: resources/data/hints.ini: [hint:Set parameters for multiple objects] -msgid "" -"Set parameters for multiple objects\n" -"Did you know that you can set slicing parameters for all selected objects at " -"one time?" -msgstr "" -"Définir les paramètres de plusieurs objets\n" -"Saviez-vous que vous pouvez définir des paramètres de découpe pour tous les " -"objets sélectionnés en une seule fois ?" - -#: resources/data/hints.ini: [hint:Stack objects] -msgid "" -"Stack objects\n" -"Did you know that you can stack objects as a whole one?" -msgstr "" -"Empiler des objets\n" -"Saviez-vous que vous pouvez empiler des objets pour n'en former qu'un?" - -#: resources/data/hints.ini: [hint:Flush into support/objects/infill] -msgid "" -"Flush into support/objects/infill\n" -"Did you know that you can save the wasted filament by flushing them into " -"support/objects/infill during filament change?" -msgstr "" -"Purger dans les supports/les objets/le remplissage\n" -"Saviez-vous que vous pouvez réduire le filament gaspillé en le purgeant dans " -"les supports/les objets/le remplissage lors des changements de filament ?" - -#: resources/data/hints.ini: [hint:Improve strength] -msgid "" -"Improve strength\n" -"Did you know that you can use more wall loops and higher sparse infill " -"density to improve the strength of the model?" -msgstr "" -"Améliorer la solidité\n" -"Saviez-vous que vous pouvez définir un plus grand nombre de périmètre et une " -"densité de remplissage plus élevée pour améliorer la résistance du modèle ?" - -#: resources/data/hints.ini: [hint:When need to print with the printer door -#: opened] -msgid "" -"When need to print with the printer door opened\n" -"Did you know that opening the printer door can reduce the probability of " -"extruder/hotend clogging when printing lower temperature filament with a " -"higher enclosure temperature. More info about this in the Wiki." -msgstr "" -"Quand il faut imprimer avec la porte de l’imprimante ouverte\n" -"Saviez-vous que l’ouverture de la porte de l’imprimante peut réduire la " -"probabilité de blocage de l’extrudeuse/du réchauffeur lors de l’impression " -"de filament à basse température avec une température de boîtier plus élevée. " -"Plus d’informations à ce sujet dans le Wiki." - -#: resources/data/hints.ini: [hint:Avoid warping] -msgid "" -"Avoid warping\n" -"Did you know that when printing materials that are prone to warping such as " -"ABS, appropriately increasing the heatbed temperature can reduce the " -"probability of warping." -msgstr "" -"Éviter la déformation\n" -"Saviez-vous que lors de l’impression de matériaux susceptibles de se " -"déformer, tels que l’ABS, une augmentation appropriée de la température du " -"plateau chauffant peut réduire la probabilité de déformation." - -#~ msgid "up to" -#~ msgstr "jusqu'à" - -#~ msgid "above" -#~ msgstr "au-dessus" - -#~ msgid "from" -#~ msgstr "de" - -#~ msgid "Switching application language while some presets are modified." -#~ msgstr "" -#~ "Changer la langue de l'application pendant que certains préréglages sont " -#~ "modifiés." - -#~ msgid "⌘+Shift+G" -#~ msgstr "⌘+Maj+G" - -#~ msgid "Ctrl+Shift+G" -#~ msgstr "Ctrl+Maj+G" - -#~ msgid "⌘+Any arrow" -#~ msgstr "⌘+n'importe quelle flèche" - -#~ msgid "⌥+Left mouse button" -#~ msgstr "⌥+Bouton gauche de la souris" - -#~ msgid "⌘+Left mouse button" -#~ msgstr "⌘+Bouton gauche de la souris" - -#~ msgid "Ctrl+Any arrow" -#~ msgstr "Ctrl+n'importe quelle flèche" - -#~ msgid "Alt+Left mouse button" -#~ msgstr "Alt+Bouton gauche de la souris" - -#~ msgid "Ctrl+Left mouse button" -#~ msgstr "Ctrl+Bouton gauche de la souris" - -#~ msgid "⌘+Mouse wheel" -#~ msgstr "⌘+Molette de la souris" - -#~ msgid "⌥+Mouse wheel" -#~ msgstr "⌥+Molette de la souris" - -#~ msgid "Ctrl+Mouse wheel" -#~ msgstr "Ctrl+Molette de la souris" - -#~ msgid "Alt+Mouse wheel" -#~ msgstr "Alt+Molette de la souris" - -#~ msgid "" -#~ "Different nozzle diameters and different filament diameters is not " -#~ "allowed when prime tower is enabled." -#~ msgstr "" -#~ "L’utilisation de diamètres de buses et de filaments différents n’est pas " -#~ "autorisée lorsque l’option « prime tower » est activée." - -#~ msgid "" -#~ "Ooze prevention is currently not supported with the prime tower enabled." -#~ msgstr "" -#~ "La prévention des dépôts de boue n’est actuellement pas prise en charge " -#~ "lorsque la tour principale est activée." - -#~ msgid "" -#~ "Interlocking depth of a segmented region. Zero disables this feature." -#~ msgstr "" -#~ "Profondeur d’imbrication d’une région segmentée. Zéro désactive cette " -#~ "fonction." - -#~ msgid "Wipe tower extruder" -#~ msgstr "Extrudeur de tour d’essuyage" - #~ msgid "Current association: " #~ msgstr "Association actuelle : " @@ -17523,6 +17189,371 @@ msgstr "" #~ msgid "Internel error" #~ msgstr "Erreur interne" +#~ msgid "" +#~ "Precise wall\n" +#~ "Did you know that turning on precise wall can improve precision and layer " +#~ "consistency?" +#~ msgstr "" +#~ "Paroi précise\n" +#~ "Saviez-vous que l’activation de la paroi précise peut améliorer la " +#~ "précision et l’homogénéité des couches ?" + +#~ msgid "" +#~ "Sandwich mode\n" +#~ "Did you know that you can use sandwich mode (inner-outer-inner) to " +#~ "improve precision and layer consistency if your model doesn't have very " +#~ "steep overhangs?" +#~ msgstr "" +#~ "Mode sandwich\n" +#~ "Saviez-vous que vous pouvez utiliser le mode sandwich (intérieur-" +#~ "extérieur-intérieur) pour améliorer la précision et la cohérence des " +#~ "couches si votre modèle n’a pas de porte-à-faux très prononcés ?" + +#~ msgid "" +#~ "Chamber temperature\n" +#~ "Did you know that OrcaSlicer supports chamber temperature?" +#~ msgstr "" +#~ "Température du caisson\n" +#~ "Saviez-vous qu’OrcaSlicer prend en charge la température du caisson ?" + +#~ msgid "" +#~ "Calibration\n" +#~ "Did you know that calibrating your printer can do wonders? Check out our " +#~ "beloved calibration solution in OrcaSlicer." +#~ msgstr "" +#~ "Calibrage\n" +#~ "Saviez-vous que le calibrage de votre imprimante peut faire des " +#~ "merveilles ? Découvrez notre solution de calibrage bien-aimée dans " +#~ "OrcaSlicer." + +#~ msgid "" +#~ "Auxiliary fan\n" +#~ "Did you know that OrcaSlicer supports Auxiliary part cooling fan?" +#~ msgstr "" +#~ "Ventilateur auxiliaire\n" +#~ "Saviez-vous qu’OrcaSlicer prend en charge le ventilateur auxiliaire de " +#~ "refroidissement des pièces ?" + +#~ msgid "" +#~ "Air filtration/Exhaust Fan\n" +#~ "Did you know that OrcaSlicer can support Air filtration/Exhaust Fan?" +#~ msgstr "" +#~ "Filtration de l’air/ventilateur d’extraction\n" +#~ "Saviez-vous qu’OrcaSlicer peut prendre en charge la filtration de l’air/" +#~ "le ventilateur d’extraction ?" + +#~ msgid "" +#~ "G-code window\n" +#~ "You can turn on/off the G-code window by pressing the C key." +#~ msgstr "" +#~ "Fenêtre de G-code\n" +#~ "Vous pouvez activer/désactiver la fenêtre G-code en appuyant sur la " +#~ "touche C." + +#~ msgid "" +#~ "Switch workspaces\n" +#~ "You can switch between Prepare and Preview workspaces by " +#~ "pressing the Tab key." +#~ msgstr "" +#~ "Changer les espaces de travail\n" +#~ "Vous pouvez alterner entre l’espace de travail Préparer et " +#~ "Aperçu en appuyant sur la touche Tab." + +#~ msgid "" +#~ "How to use keyboard shortcuts\n" +#~ "Did you know that Orca Slicer offers a wide range of keyboard shortcuts " +#~ "and 3D scene operations." +#~ msgstr "" +#~ "Comment utiliser les raccourcis clavier\n" +#~ "Saviez-vous qu’Orca Slicer offre une large gamme de raccourcis clavier et " +#~ "d’opérations sur les scènes 3D." + +#~ msgid "" +#~ "Reverse on odd\n" +#~ "Did you know that Reverse on odd feature can significantly improve " +#~ "the surface quality of your overhangs?" +#~ msgstr "" +#~ "Parois inversées sur couches impaires\n" +#~ "Saviez-vous que la fonction Parois inversées sur couches impaires " +#~ "peut améliorer de manière significative la qualité de la surface de vos " +#~ "surplombs ?" + +#~ msgid "" +#~ "Cut Tool\n" +#~ "Did you know that you can cut a model at any angle and position with the " +#~ "cutting tool?" +#~ msgstr "" +#~ "Outil de découpe\n" +#~ "Saviez-vous que vous pouvez découper un modèle à n'importe quel angle et " +#~ "dans n'importe quelle position avec l'outil de découpe ?" + +#~ msgid "" +#~ "Fix Model\n" +#~ "Did you know that you can fix a corrupted 3D model to avoid a lot of " +#~ "slicing problems on the Windows system?" +#~ msgstr "" +#~ "Réparer un modèle\n" +#~ "Saviez-vous que vous pouvez réparer un modèle 3D corrompu pour éviter de " +#~ "nombreux problèmes de découpage sur le système Windows ?" + +#~ msgid "" +#~ "Timelapse\n" +#~ "Did you know that you can generate a timelapse video during each print?" +#~ msgstr "" +#~ "Timelapse\n" +#~ "Saviez-vous que vous pouvez générer une vidéo en timelapse à chaque " +#~ "impression ?" + +#~ msgid "" +#~ "Auto-Arrange\n" +#~ "Did you know that you can auto-arrange all objects in your project?" +#~ msgstr "" +#~ "Agencement Automatique\n" +#~ "Saviez-vous que vous pouvez agencement automatiquement tous les objets de " +#~ "votre projet ?" + +#~ msgid "" +#~ "Auto-Orient\n" +#~ "Did you know that you can rotate objects to an optimal orientation for " +#~ "printing by a simple click?" +#~ msgstr "" +#~ "Orientation Automatique\n" +#~ "Saviez-vous que vous pouvez faire pivoter des objets dans une orientation " +#~ "optimale pour l'impression d'un simple clic ?" + +#~ msgid "" +#~ "Lay on Face\n" +#~ "Did you know that you can quickly orient a model so that one of its faces " +#~ "sits on the print bed? Select the \"Place on face\" function or press the " +#~ "F key." +#~ msgstr "" +#~ "Poser sur une face\n" +#~ "Saviez-vous qu'il est possible d'orienter rapidement un modèle de manière " +#~ "à ce que l'une de ses faces repose sur le plateau d'impression ? " +#~ "Sélectionnez la fonction « Placer sur la face » ou appuyez sur la touche " +#~ "F." + +#~ msgid "" +#~ "Object List\n" +#~ "Did you know that you can view all objects/parts in a list and change " +#~ "settings for each object/part?" +#~ msgstr "" +#~ "Liste d'objets\n" +#~ "Saviez-vous que vous pouvez afficher tous les objets/pièces dans une " +#~ "liste et modifier les paramètres de chaque objet/pièce ?" + +#~ msgid "" +#~ "Search Functionality\n" +#~ "Did you know that you use the Search tool to quickly find a specific Orca " +#~ "Slicer setting?" +#~ msgstr "" +#~ "Fonctionnalité de recherche\n" +#~ "Saviez-vous que vous pouvez utiliser l’outil de recherche pour trouver " +#~ "rapidement un paramètre spécifique de l’Orca Slicer ?" + +#~ msgid "" +#~ "Simplify Model\n" +#~ "Did you know that you can reduce the number of triangles in a mesh using " +#~ "the Simplify mesh feature? Right-click the model and select Simplify " +#~ "model." +#~ msgstr "" +#~ "Simplifier le modèle\n" +#~ "Saviez-vous que vous pouviez réduire le nombre de triangles dans un " +#~ "maillage à l’aide de la fonction Simplifier le maillage ? Cliquez avec le " +#~ "bouton droit de la souris sur le modèle et sélectionnez Simplifier le " +#~ "modèle." + +#~ msgid "" +#~ "Slicing Parameter Table\n" +#~ "Did you know that you can view all objects/parts on a table and change " +#~ "settings for each object/part?" +#~ msgstr "" +#~ "Tableau des paramètres de découpe\n" +#~ "Saviez-vous que vous pouvez afficher tous les objets/pièces sur un " +#~ "tableau et modifier les paramètres de chaque objet/pièce ?" + +#~ msgid "" +#~ "Split to Objects/Parts\n" +#~ "Did you know that you can split a big object into small ones for easy " +#~ "colorizing or printing?" +#~ msgstr "" +#~ "Séparer en objets/parties\n" +#~ "Saviez-vous que vous pouvez séparer un gros objet en petits objets pour " +#~ "les colorier ou les imprimer facilement ?" + +#~ msgid "" +#~ "Subtract a Part\n" +#~ "Did you know that you can subtract one mesh from another using the " +#~ "Negative part modifier? That way you can, for example, create easily " +#~ "resizable holes directly in Orca Slicer." +#~ msgstr "" +#~ "Soustraire une pièce\n" +#~ "Saviez-vous que vous pouviez soustraire un maillage d’un autre à l’aide " +#~ "du modificateur de partie négative ? De cette façon, vous pouvez, par " +#~ "exemple, créer des trous facilement redimensionnables directement dans " +#~ "Orca Slicer." + +#~ msgid "" +#~ "STEP\n" +#~ "Did you know that you can improve your print quality by slicing a STEP " +#~ "file instead of an STL?\n" +#~ "Orca Slicer supports slicing STEP files, providing smoother results than " +#~ "a lower resolution STL. Give it a try!" +#~ msgstr "" +#~ "STEP\n" +#~ "Saviez-vous que vous pouvez améliorer votre qualité d'impression en " +#~ "découpant un fichier .step au lieu d'un .stl ?\n" +#~ "Orca Slicer prend en charge le découpage des fichiers .step, offrant des " +#~ "résultats plus fluides qu'un .stl de résolution inférieure. Essayez !" + +#~ msgid "" +#~ "Z seam location\n" +#~ "Did you know that you can customize the location of the Z seam, and even " +#~ "paint it on your print, to have it in a less visible location? This " +#~ "improves the overall look of your model. Check it out!" +#~ msgstr "" +#~ "Emplacement de la couture Z\n" +#~ "Saviez-vous que vous pouvez personnaliser l'emplacement de la couture Z, " +#~ "et même la peindre manuelle sur votre impression pour le placer dans un " +#~ "endroit moins visible ? Cela améliore l'aspect général de votre modèle. " +#~ "Jetez-y un coup d'œil !" + +#~ msgid "" +#~ "Fine-tuning for flow rate\n" +#~ "Did you know that flow rate can be fine-tuned for even better-looking " +#~ "prints? Depending on the material, you can improve the overall finish of " +#~ "the printed model by doing some fine-tuning." +#~ msgstr "" +#~ "Réglage fin du débit\n" +#~ "Saviez-vous que le débit peut être réglé avec précision pour obtenir des " +#~ "impressions encore plus belles ? En fonction du matériau, vous pouvez " +#~ "améliorer la finition générale du modèle imprimé en procédant à un " +#~ "réglage fin." + +#~ msgid "" +#~ "Split your prints into plates\n" +#~ "Did you know that you can split a model that has a lot of parts into " +#~ "individual plates ready to print? This will simplify the process of " +#~ "keeping track of all the parts." +#~ msgstr "" +#~ "Divisez vos impressions en plateaux\n" +#~ "Saviez-vous que vous pouvez diviser un modèle comportant de nombreuses " +#~ "pièces en plateaux individuels prêts à être imprimés ? Cela simplifie le " +#~ "processus de suivi de toutes les pièces." + +#~ msgid "" +#~ "Speed up your print with Adaptive Layer Height\n" +#~ "Did you know that you can print a model even faster, by using the " +#~ "Adaptive Layer Height option? Check it out!" +#~ msgstr "" +#~ "Accélérez votre impression grâce à la Hauteur de Couche Adaptative\n" +#~ "Saviez-vous que vous pouvez imprimer un modèle encore plus rapidement en " +#~ "utilisant l'option Adaptive Layer Height ? Jetez-y un coup d'œil !" + +#~ msgid "" +#~ "Support painting\n" +#~ "Did you know that you can paint the location of your supports? This " +#~ "feature makes it easy to place the support material only on the sections " +#~ "of the model that actually need it." +#~ msgstr "" +#~ "Peinture de support\n" +#~ "Saviez-vous que vous pouvez peindre l'emplacement de vos supports ? Cette " +#~ "caractéristique permet de placer facilement le matériau de support " +#~ "uniquement sur les sections du modèle qui en ont réellement besoin." + +#~ msgid "" +#~ "Different types of supports\n" +#~ "Did you know that you can choose from multiple types of supports? Tree " +#~ "supports work great for organic models, while saving filament and " +#~ "improving print speed. Check them out!" +#~ msgstr "" +#~ "Différents types de supports\n" +#~ "Saviez-vous que vous pouvez choisir parmi plusieurs types de supports ? " +#~ "Les supports arborescents fonctionnent parfaitement pour les modèles " +#~ "organiques tout en économisant du filament et en améliorant la vitesse " +#~ "d'impression. Découvrez-les !" + +#~ msgid "" +#~ "Printing Silk Filament\n" +#~ "Did you know that Silk filament needs special consideration to print it " +#~ "successfully? Higher temperature and lower speed are always recommended " +#~ "for the best results." +#~ msgstr "" +#~ "Impression de filament Soie\n" +#~ "Saviez-vous que le filament soie nécessite une attention particulière " +#~ "pour une impression réussie ? Une température plus élevée et une vitesse " +#~ "plus faible sont toujours recommandées pour obtenir les meilleurs " +#~ "résultats." + +#~ msgid "" +#~ "Brim for better adhesion\n" +#~ "Did you know that when printing models have a small contact interface " +#~ "with the printing surface, it's recommended to use a brim?" +#~ msgstr "" +#~ "Bordure pour une meilleure adhésion\n" +#~ "Saviez-vous que lorsque les modèles imprimés ont une faible interface de " +#~ "contact avec la surface d'impression, il est recommandé d'utiliser une " +#~ "bordure ?" + +#~ msgid "" +#~ "Set parameters for multiple objects\n" +#~ "Did you know that you can set slicing parameters for all selected objects " +#~ "at one time?" +#~ msgstr "" +#~ "Définir les paramètres de plusieurs objets\n" +#~ "Saviez-vous que vous pouvez définir des paramètres de découpe pour tous " +#~ "les objets sélectionnés en une seule fois ?" + +#~ msgid "" +#~ "Stack objects\n" +#~ "Did you know that you can stack objects as a whole one?" +#~ msgstr "" +#~ "Empiler des objets\n" +#~ "Saviez-vous que vous pouvez empiler des objets pour n'en former qu'un?" + +#~ msgid "" +#~ "Flush into support/objects/infill\n" +#~ "Did you know that you can save the wasted filament by flushing them into " +#~ "support/objects/infill during filament change?" +#~ msgstr "" +#~ "Purger dans les supports/les objets/le remplissage\n" +#~ "Saviez-vous que vous pouvez réduire le filament gaspillé en le purgeant " +#~ "dans les supports/les objets/le remplissage lors des changements de " +#~ "filament ?" + +#~ msgid "" +#~ "Improve strength\n" +#~ "Did you know that you can use more wall loops and higher sparse infill " +#~ "density to improve the strength of the model?" +#~ msgstr "" +#~ "Améliorer la solidité\n" +#~ "Saviez-vous que vous pouvez définir un plus grand nombre de périmètre et " +#~ "une densité de remplissage plus élevée pour améliorer la résistance du " +#~ "modèle ?" + +#~ msgid "" +#~ "When need to print with the printer door opened\n" +#~ "Did you know that opening the printer door can reduce the probability of " +#~ "extruder/hotend clogging when printing lower temperature filament with a " +#~ "higher enclosure temperature. More info about this in the Wiki." +#~ msgstr "" +#~ "Quand il faut imprimer avec la porte de l’imprimante ouverte\n" +#~ "Saviez-vous que l’ouverture de la porte de l’imprimante peut réduire la " +#~ "probabilité de blocage de l’extrudeuse/du réchauffeur lors de " +#~ "l’impression de filament à basse température avec une température de " +#~ "boîtier plus élevée. Plus d’informations à ce sujet dans le Wiki." + +#~ msgid "" +#~ "Avoid warping\n" +#~ "Did you know that when printing materials that are prone to warping such " +#~ "as ABS, appropriately increasing the heatbed temperature can reduce the " +#~ "probability of warping." +#~ msgstr "" +#~ "Éviter la déformation\n" +#~ "Saviez-vous que lors de l’impression de matériaux susceptibles de se " +#~ "déformer, tels que l’ABS, une augmentation appropriée de la température " +#~ "du plateau chauffant peut réduire la probabilité de déformation." + #~ msgid "" #~ "File size exceeds the 100MB upload limit. Please upload your file through " #~ "the panel." @@ -18071,8 +18102,8 @@ msgstr "" #~ "thickness (top+bottom solid layers)" #~ msgstr "" #~ "Ajoutez du remplissage solide à proximité des surfaces inclinées pour " -#~ "garantir l'épaisseur verticale de la coque (couches solides supérieure" -#~ "+inférieure)." +#~ "garantir l'épaisseur verticale de la coque (couches solides " +#~ "supérieure+inférieure)." #~ msgid "Further reduce solid infill on walls (beta)" #~ msgstr "Réduire davantage le remplissage solide des parois (expérimental)" diff --git a/resources/info/filament_info.json b/resources/info/filament_info.json index 8472e66462..158d78654a 100644 --- a/resources/info/filament_info.json +++ b/resources/info/filament_info.json @@ -22,7 +22,8 @@ "PLA-CF", "PLA-AERO", "PVA", - "BVOH" + "BVOH", + "SBS" ], "high_low_compatible_filament":[ "HIPS", diff --git a/resources/profiles/Artillery/filament/Artillery ABS.json b/resources/profiles/Artillery/filament/Artillery ABS.json index f16424112e..977451b6c2 100644 --- a/resources/profiles/Artillery/filament/Artillery ABS.json +++ b/resources/profiles/Artillery/filament/Artillery ABS.json @@ -49,22 +49,31 @@ "240" ], "fan_max_speed": [ - "80" + "20" ], "fan_min_speed": [ - "60" + "10" ], "fan_cooling_layer_time": [ - "80" + "30" ], "slow_down_layer_time": [ - "8" + "3" ], "filament_max_volumetric_speed": [ - "18" + "16" ], "temperature_vitrification": [ "220" + ], + "overhang_fan_threshold": [ + "25%" + ], + "overhang_fan_speed": [ + "80" + ], + "close_fan_the_first_x_layers": [ + "3" ], "version": "2.0.2.0" } diff --git a/resources/profiles/Artillery/filament/Artillery PETG.json b/resources/profiles/Artillery/filament/Artillery PETG.json index c199304ca5..5e5a6bef53 100644 --- a/resources/profiles/Artillery/filament/Artillery PETG.json +++ b/resources/profiles/Artillery/filament/Artillery PETG.json @@ -29,10 +29,10 @@ "0.4" ], "hot_plate_temp": [ - "90" + "70" ], "hot_plate_temp_initial_layer": [ - "90" + "70" ], "inherits": "Artillery Generic PLA", "name": "Artillery PETG", @@ -43,28 +43,37 @@ "250" ], "nozzle_temperature_range_high": [ - "250" + "270" ], "nozzle_temperature_range_low": [ - "220" + "230" ], "fan_max_speed": [ - "80" + "40" ], "fan_min_speed": [ - "60" + "10" ], "fan_cooling_layer_time": [ - "80" + "30" ], "slow_down_layer_time": [ - "8" + "12" ], "filament_max_volumetric_speed": [ - "18" + "9" ], "temperature_vitrification": [ "220" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "overhang_fan_threshold": [ + "10%" + ], + "overhang_fan_speed": [ + "90" ], "version": "2.0.2.0" } diff --git a/resources/profiles/Artillery/filament/Artillery PLA Basic.json b/resources/profiles/Artillery/filament/Artillery PLA Basic.json index 028520bdeb..f0953d71fc 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Basic.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Basic.json @@ -49,7 +49,7 @@ "8" ], "filament_max_volumetric_speed": [ - "18" + "21" ], "temperature_vitrification": [ "190" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Matte.json b/resources/profiles/Artillery/filament/Artillery PLA Matte.json index 8028bae90c..ca2811a6cf 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Matte.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Matte.json @@ -49,7 +49,7 @@ "8" ], "filament_max_volumetric_speed": [ - "18" + "22" ], "temperature_vitrification": [ "190" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Silk.json b/resources/profiles/Artillery/filament/Artillery PLA Silk.json index a67d23e4fe..8b6521d783 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Silk.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Silk.json @@ -49,7 +49,7 @@ "8" ], "filament_max_volumetric_speed": [ - "18" + "12" ], "temperature_vitrification": [ "190" diff --git a/resources/profiles/Artillery/filament/Artillery PLA Tough.json b/resources/profiles/Artillery/filament/Artillery PLA Tough.json index a5a73e4d40..3b41976c91 100644 --- a/resources/profiles/Artillery/filament/Artillery PLA Tough.json +++ b/resources/profiles/Artillery/filament/Artillery PLA Tough.json @@ -31,10 +31,10 @@ "inherits": "Artillery Generic PLA", "name": "Artillery PLA Tough", "nozzle_temperature": [ - "210" + "220" ], "nozzle_temperature_initial_layer": [ - "210" + "220" ], "fan_max_speed": [ "80" @@ -49,10 +49,16 @@ "8" ], "filament_max_volumetric_speed": [ - "18" + "21" ], "temperature_vitrification": [ "190" + ], + "hot_plate_temp": [ + "65" + ], + "hot_plate_temp_initial_layer": [ + "65" ], "version": "2.0.2.0" } diff --git a/resources/profiles/Artillery/filament/Artillery TPU.json b/resources/profiles/Artillery/filament/Artillery TPU.json index ddab353347..7f149cfd8e 100644 --- a/resources/profiles/Artillery/filament/Artillery TPU.json +++ b/resources/profiles/Artillery/filament/Artillery TPU.json @@ -29,10 +29,10 @@ "0.4" ], "hot_plate_temp": [ - "70" + "45" ], "hot_plate_temp_initial_layer": [ - "70" + "45" ], "inherits": "Artillery Generic PLA", "name": "Artillery TPU", @@ -49,22 +49,28 @@ "200" ], "fan_max_speed": [ - "80" + "100" ], "fan_min_speed": [ - "60" + "100" ], "fan_cooling_layer_time": [ - "80" + "100" ], "slow_down_layer_time": [ "8" ], "filament_max_volumetric_speed": [ - "18" + "3.6" ], "temperature_vitrification": [ "190" + ], + "filament_density": [ + "1.22" + ], + "overhang_fan_threshold": [ + "95%" ], "version": "2.0.2.0" } diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Plus 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Plus 0.4 nozzle.json index a0bb01efd1..12353f4fdc 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Plus 0.4 nozzle.json @@ -123,8 +123,8 @@ "0", "0" ], - "machine_pause_gcode": "M0", - "machine_start_gcode": "M140 S60\nM104 S160\nM190 S[first_layer_bed_temperature]\nM109 S{temperature_vitrification[0]}\nM211 S0\nG1 Z-0.2 F1000\nG1 X285 F3600\nG1 X260 F3600\nG1 X285 F3600\nG1 X260 F3600\nG1 X230 F3600\nG1 X260 F3600\nG1 X230 F3600\nG1 X260 F3600\nG92 E0\nG1 Z1.0 F3000 ; move z up little to prevent scratching of surface\nG1 X180 Y303 Z0.1 F6000.0 ; move to start-line position\nG1 X70 Y303 Z0.1 F1000.0 E15.0 ; draw 1st line\nG1 X70 Y303 Z0.2 F1000.0 ; move to side a little\nG1 X180 Y303 Z0.2 F1000.0 E30.0 ; draw 2st line\nG92 E0 ; reset extruder\nG1 E-2 Z5 F1800 ; move z up little to prevent scratching of surface\nG92 E0\nG1 Y300 F1800\nM211 S1\nM140 S[first_layer_bed_temperature];\nM104 S[first_layer_temperature];", + "machine_pause_gcode": "M600", + "machine_start_gcode": "M140 S60\nM104 S140\nM190 S[first_layer_bed_temperature]\nM109 S{temperature_vitrification[0]}\nG28;\nNOZZLE_WIPE\nM140 S[first_layer_bed_temperature];\nM104 S[first_layer_temperature];\nDRAW_LINE_ONLY", "machine_unload_filament_time": "0", "manual_filament_change": "0", "max_layer_height": [ diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Pro 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Pro 0.4 nozzle.json index 1159c5fa8f..a58df16c22 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X3 Pro 0.4 nozzle.json @@ -126,8 +126,8 @@ "0", "0" ], - "machine_pause_gcode": "M0", - "machine_start_gcode": "M140 S60\nM104 S160\nM190 S[first_layer_bed_temperature]\nM109 S{temperature_vitrification[0]}\nM211 S0\nG1 Z-0.2 F1000\nG1 X225 F3600\nG1 X200 F3600\nG1 X225 F3600\nG1 X200 F3600\nG1 X160 F3600\nG1 X200 F3600\nG1 X160 F3600\nG1 X200 F3600\nG92 E0\nG1 Z1.0 F3000 ; move z up little to prevent scratching of surface\nG1 X180 Y243 Z0.1 F6000.0 ; move to start-line position\nG1 X70 Y243 Z0.1 F1000.0 E15.0 ; draw 1st line\nG1 X70 Y243 Z0.2 F1000.0 ; move to side a little\nG1 X180 Y243 Z0.2 F1000.0 E30.0 ; draw 2st line\nG92 E0 ; reset extruder\nG1 E-2 Z5 F1800 ; move z up little to prevent scratching of surface\nG92 E0\nG1 Y240 F1800\nM211 S1\nM140 S[first_layer_bed_temperature];\nM104 S[first_layer_temperature];", + "machine_pause_gcode": "M600", + "machine_start_gcode": "M140 S60\nM104 S140\nM190 S[first_layer_bed_temperature]\nM109 S{temperature_vitrification[0]}\nG28;\nNOZZLE_WIPE\nM140 S[first_layer_bed_temperature];\nM104 S[first_layer_temperature];\nDRAW_LINE_ONLY", "machine_unload_filament_time": "0", "manual_filament_change": "0", "max_layer_height": [ diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Plus 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Plus 0.4 nozzle.json index cb4cc5cd00..b4ffad9ee5 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Plus 0.4 nozzle.json @@ -126,8 +126,8 @@ "0", "0" ], - "machine_pause_gcode": "", - "machine_start_gcode": "M140 S60\nM104 S140\nM190 S60\nM109 S{temperature_vitrification[0]}\nG28;\nDRAW_LINE\nM140 S[first_layer_bed_temperature];\nM104 S[first_layer_temperature];", + "machine_pause_gcode": "M600", + "machine_start_gcode": "M140 S60\nM104 S140\nM190 S[first_layer_bed_temperature]\nM109 S{temperature_vitrification[0]}\nG28;\nNOZZLE_WIPE\nM140 S[first_layer_bed_temperature];\nM104 S[first_layer_temperature];\nDRAW_LINE_ONLY", "machine_unload_filament_time": "0", "manual_filament_change": "0", "max_layer_height": [ diff --git a/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Pro 0.4 nozzle.json b/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Pro 0.4 nozzle.json index 9802de101b..151ac268f9 100644 --- a/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/machine/Artillery Sidewinder X4 Pro 0.4 nozzle.json @@ -126,8 +126,8 @@ "0", "0" ], - "machine_pause_gcode": "", - "machine_start_gcode": "M140 S60\nM104 S140\nM190 S60\nM109 S{temperature_vitrification[0]}\nG28;\nDRAW_LINE\nM140 S[first_layer_bed_temperature];\nM104 S[first_layer_temperature];", + "machine_pause_gcode": "M600", + "machine_start_gcode": "M140 S60\nM104 S140\nM190 S[first_layer_bed_temperature]\nM109 S{temperature_vitrification[0]}\nG28;\nNOZZLE_WIPE\nM140 S[first_layer_bed_temperature];\nM104 S[first_layer_temperature];\nDRAW_LINE_ONLY", "machine_unload_filament_time": "0", "manual_filament_change": "0", "max_layer_height": [ diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json index cd1de6b7e4..9212dec2ad 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Plus 0.4 nozzle.json @@ -1,6 +1,7 @@ { "from": "system", "instantiation": "true", + "inherits": "fdm_process_common", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "alternate_extra_wall": "0", @@ -66,12 +67,12 @@ "infill_jerk": "9", "infill_wall_overlap": "15%", "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "45", + "initial_layer_infill_speed": "30", "initial_layer_jerk": "9", "initial_layer_line_width": "0.5", "initial_layer_min_bead_width": "85%", "initial_layer_print_height": "0.25", - "initial_layer_speed": "45", + "initial_layer_speed": "30", "initial_layer_travel_speed": "100%", "inner_wall_acceleration": "0", "inner_wall_jerk": "9", @@ -156,7 +157,7 @@ "seam_slope_start_height": "0", "seam_slope_steps": "10", "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", + "single_extruder_multi_material_priming": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -279,5 +280,6 @@ "70" ], "xy_contour_compensation": "0", - "xy_hole_compensation": "0" + "xy_hole_compensation": "0", + "top_bottom_infill_wall_overlap":"15%" } diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json index bab2091fdd..7f9ce95a63 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X3Pro 0.4 nozzle.json @@ -1,6 +1,7 @@ { "from": "system", "instantiation": "true", + "inherits": "fdm_process_common", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "alternate_extra_wall": "0", @@ -66,12 +67,12 @@ "infill_jerk": "9", "infill_wall_overlap": "15%", "initial_layer_acceleration": "500", - "initial_layer_infill_speed": "35", + "initial_layer_infill_speed": "30", "initial_layer_jerk": "9", "initial_layer_line_width": "0.5", "initial_layer_min_bead_width": "85%", "initial_layer_print_height": "0.25", - "initial_layer_speed": "45", + "initial_layer_speed": "30", "initial_layer_travel_speed": "100%", "inner_wall_acceleration": "3000", "inner_wall_jerk": "9", @@ -156,7 +157,7 @@ "seam_slope_start_height": "0", "seam_slope_steps": "10", "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", + "single_extruder_multi_material_priming": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -279,5 +280,6 @@ "70" ], "xy_contour_compensation": "0", - "xy_hole_compensation": "0" + "xy_hole_compensation": "0", + "top_bottom_infill_wall_overlap":"15%" } diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json index e72063a41c..8fc299a1ad 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Plus 0.4 nozzle.json @@ -1,6 +1,7 @@ { "from": "system", "instantiation": "true", + "inherits": "fdm_process_common", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "alternate_extra_wall": "0", @@ -66,12 +67,12 @@ "infill_jerk": "9", "infill_wall_overlap": "15%", "initial_layer_acceleration": "0", - "initial_layer_infill_speed": "50", + "initial_layer_infill_speed": "30", "initial_layer_jerk": "9", "initial_layer_line_width": "0.5", "initial_layer_min_bead_width": "85%", "initial_layer_print_height": "0.2", - "initial_layer_speed": "50", + "initial_layer_speed": "30", "initial_layer_travel_speed": "100%", "inner_wall_acceleration": "0", "inner_wall_jerk": "9", @@ -156,7 +157,7 @@ "seam_slope_start_height": "0", "seam_slope_steps": "10", "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", + "single_extruder_multi_material_priming": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -279,5 +280,6 @@ "70" ], "xy_contour_compensation": "0", - "xy_hole_compensation": "0" + "xy_hole_compensation": "0", + "top_bottom_infill_wall_overlap":"15%" } \ No newline at end of file diff --git a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json index 59b4db5f67..532b5b551d 100644 --- a/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json +++ b/resources/profiles/Artillery/process/0.20mm Standard @Artillery X4Pro 0.4 nozzle.json @@ -1,6 +1,7 @@ { "from": "system", "instantiation": "true", + "inherits": "fdm_process_common", "accel_to_decel_enable": "1", "accel_to_decel_factor": "50%", "alternate_extra_wall": "0", @@ -66,12 +67,12 @@ "infill_jerk": "9", "infill_wall_overlap": "15%", "initial_layer_acceleration": "0", - "initial_layer_infill_speed": "50", + "initial_layer_infill_speed": "30", "initial_layer_jerk": "9", "initial_layer_line_width": "0.5", "initial_layer_min_bead_width": "85%", "initial_layer_print_height": "0.2", - "initial_layer_speed": "50", + "initial_layer_speed": "30", "initial_layer_travel_speed": "100%", "inner_wall_acceleration": "0", "inner_wall_jerk": "9", @@ -156,7 +157,7 @@ "seam_slope_start_height": "0", "seam_slope_steps": "10", "seam_slope_type": "none", - "single_extruder_multi_material_priming": "0", + "single_extruder_multi_material_priming": "1", "skirt_distance": "2", "skirt_height": "1", "skirt_loops": "0", @@ -279,6 +280,7 @@ "70" ], "xy_contour_compensation": "0", - "xy_hole_compensation": "0" + "xy_hole_compensation": "0", + "top_bottom_infill_wall_overlap":"15%" } diff --git a/resources/profiles/BBL.json b/resources/profiles/BBL.json index 3cd51ed347..e37da6dc42 100644 --- a/resources/profiles/BBL.json +++ b/resources/profiles/BBL.json @@ -673,6 +673,10 @@ "name": "fdm_filament_bvoh", "sub_path": "filament/fdm_filament_bvoh.json" }, + { + "name": "fdm_filament_sbs", + "sub_path": "filament/fdm_filament_sbs.json" + }, { "name": "Bambu PLA Matte @base", "sub_path": "filament/Bambu PLA Matte @base.json" @@ -733,6 +737,10 @@ "name": "Generic PLA-CF @base", "sub_path": "filament/Generic PLA-CF @base.json" }, + { + "name": "Generic SBS @base", + "sub_path": "filament/Generic SBS @base.json" + }, { "name": "Bambu PLA-CF @base", "sub_path": "filament/Bambu PLA-CF @base.json" @@ -1389,6 +1397,10 @@ "name": "Generic PLA-CF @BBL A1", "sub_path": "filament/Generic PLA-CF @BBL A1.json" }, + { + "name": "Generic SBS", + "sub_path": "filament/Generic SBS.json" + }, { "name": "Bambu PLA-CF @BBL X1C 0.8 nozzle", "sub_path": "filament/Bambu PLA-CF @BBL X1C 0.8 nozzle.json" diff --git a/resources/profiles/BBL/filament/Generic SBS @base.json b/resources/profiles/BBL/filament/Generic SBS @base.json new file mode 100644 index 0000000000..dffe348812 --- /dev/null +++ b/resources/profiles/BBL/filament/Generic SBS @base.json @@ -0,0 +1,17 @@ +{ + "type": "filament", + "name": "Generic SBS @base", + "inherits": "fdm_filament_sbs", + "from": "system", + "filament_id": "GFL99", + "instantiation": "false", + "filament_flow_ratio": [ + "0.98" + ], + "slow_down_layer_time": [ + "4" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif};Prevent PLA from jamming\n\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/Generic SBS.json b/resources/profiles/BBL/filament/Generic SBS.json new file mode 100644 index 0000000000..4309d0407a --- /dev/null +++ b/resources/profiles/BBL/filament/Generic SBS.json @@ -0,0 +1,25 @@ +{ + "type": "filament", + "name": "Generic SBS", + "inherits": "Generic SBS @base", + "from": "system", + "setting_id": "GFSL99", + "instantiation": "true", + "compatible_printers": [ + "Bambu Lab X1 Carbon 0.4 nozzle", + "Bambu Lab X1 0.4 nozzle", + "Bambu Lab X1 Carbon 0.6 nozzle", + "Bambu Lab X1 Carbon 0.8 nozzle", + "Bambu Lab X1 0.6 nozzle", + "Bambu Lab X1 0.8 nozzle", + "Bambu Lab P1S 0.4 nozzle", + "Bambu Lab P1S 0.6 nozzle", + "Bambu Lab P1S 0.8 nozzle", + "Bambu Lab X1E 0.4 nozzle", + "Bambu Lab X1E 0.6 nozzle", + "Bambu Lab X1E 0.8 nozzle" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >55)||(bed_temperature_initial_layer[current_extruder] >55)}M106 P3 S200\n{elsif(bed_temperature[current_extruder] >50)||(bed_temperature_initial_layer[current_extruder] >50)}M106 P3 S150\n{elsif(bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S50\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/BBL/filament/fdm_filament_sbs.json b/resources/profiles/BBL/filament/fdm_filament_sbs.json new file mode 100644 index 0000000000..c73ab5bb95 --- /dev/null +++ b/resources/profiles/BBL/filament/fdm_filament_sbs.json @@ -0,0 +1,85 @@ +{ + "type": "filament", + "name": "fdm_filament_sbs", + "inherits": "fdm_filament_common", + "from": "system", + "instantiation": "false", + "fan_cooling_layer_time": [ + "100" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_type": [ + "SBS" + ], + "filament_density": [ + "1.02" + ], + "filament_cost": [ + "15" + ], + "cool_plate_temp": [ + "70" + ], + "eng_plate_temp": [ + "70" + ], + "hot_plate_temp": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "fan_min_speed": [ + "0" + ], + "overhang_fan_threshold": [ + "50%" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "nozzle_temperature": [ + "235" + ], + "temperature_vitrification": [ + "70" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "slow_down_min_speed": [ + "20" + ], + "slow_down_layer_time": [ + "4" + ], + "additional_cooling_fan_speed": [ + "40" + ], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ] +} \ No newline at end of file diff --git a/resources/profiles/Custom.json b/resources/profiles/Custom.json index e4dae5bd72..8ef0e84c91 100644 --- a/resources/profiles/Custom.json +++ b/resources/profiles/Custom.json @@ -1,6 +1,6 @@ { "name": "Custom Printer", - "version": "02.01.04.00", + "version": "02.01.05.00", "force_update": "0", "description": "My configurations", "machine_model_list": [ diff --git a/resources/profiles/Custom/machine/fdm_toolchanger_common.json b/resources/profiles/Custom/machine/fdm_toolchanger_common.json index 0d1fe9c165..e151cf0d4c 100644 --- a/resources/profiles/Custom/machine/fdm_toolchanger_common.json +++ b/resources/profiles/Custom/machine/fdm_toolchanger_common.json @@ -181,8 +181,8 @@ ], "purge_in_prime_tower": "0", "machine_pause_gcode": "M601", - "machine_start_gcode": "PRINT_START TOOL_TEMP={first_layer_temperature[initial_tool]} {if is_extruder_used[0]}T0_TEMP={first_layer_temperature[0]}{endif} {if is_extruder_used[1]}T1_TEMP={first_layer_temperature[1]}{endif} {if is_extruder_used[2]}T2_TEMP={first_layer_temperature[2]}{endif} {if is_extruder_used[3]}T3_TEMP={first_layer_temperature[3]}{endif} {if is_extruder_used[4]}T4_TEMP={first_layer_temperature[4]}{endif} {if is_extruder_used[5]}T5_TEMP={first_layer_temperature[5]}{endif} BED_TEMP=[first_layer_bed_temperature] TOOL=[initial_tool]\n\n", - "change_filament_gcode": "", + "change_filament_gcode": "", "machine_start_gcode": "PRINT_START TOOL_TEMP={first_layer_temperature[initial_tool]} {if is_extruder_used[0]}T0_TEMP={first_layer_temperature[0]}{endif} {if is_extruder_used[1]}T1_TEMP={first_layer_temperature[1]}{endif} {if is_extruder_used[2]}T2_TEMP={first_layer_temperature[2]}{endif} {if is_extruder_used[3]}T3_TEMP={first_layer_temperature[3]}{endif} {if is_extruder_used[4]}T4_TEMP={first_layer_temperature[4]}{endif} {if is_extruder_used[5]}T5_TEMP={first_layer_temperature[5]}{endif} BED_TEMP=[first_layer_bed_temperature] TOOL=[initial_tool]\n\nM83\n; set extruder temp\n{if first_layer_temperature[0] > 0 and (is_extruder_used[0])}M104 T0 S{first_layer_temperature[0]}{endif}\n{if first_layer_temperature[1] > 0 and (is_extruder_used[1])}M104 T1 S{first_layer_temperature[1]}{endif}\n{if first_layer_temperature[2] > 0 and (is_extruder_used[2])}M104 T2 S{first_layer_temperature[2]}{endif}\n{if first_layer_temperature[3] > 0 and (is_extruder_used[3])}M104 T3 S{first_layer_temperature[3]}{endif}\n{if first_layer_temperature[4] > 0 and (is_extruder_used[4])}M104 T4 S{first_layer_temperature[4]}{endif}\n{if (is_extruder_used[0]) and initial_tool != 0}\n;\n; purge first tool\n;\nG1 F{travel_speed * 60}\nM109 T0 S{first_layer_temperature[0]}\nT0; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(0 == 0 ? 0 : (0 == 1 ? 120 : (0 == 2 ? 180 : 300)))} Y{(0 < 4 ? 0 : 3)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[0]}10{else}30{endif} X40 Z0.2 F{if filament_multitool_ramming[0]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X40 E9 F800 ; continue purging and wipe the nozzle\nG0 X{40 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{40 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[0]} F2400 ; retract\n{e_retracted[0] = 1.5 * retract_length[0]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(idle_temperature[0] == 0 ? (first_layer_temperature[0] + standby_temperature_delta) : (idle_temperature[0]))} T0\n{endif}\n{if (is_extruder_used[1]) and initial_tool != 1}\n;\n; purge second tool\n;\nG1 F{travel_speed * 60}\nM109 T1 S{first_layer_temperature[1]}\nT1; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(1 == 0 ? 0 : (1 == 1 ? 120 : (1 == 2 ? 180 : 300)))} Y{(1 < 4 ? 0 : 3)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[1]}10{else}30{endif} X120 Z0.2 F{if filament_multitool_ramming[1]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X80 E9 F800 ; continue purging and wipe the nozzle\nG0 X{80 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{80 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[1]} F2400 ; retract\n{e_retracted[1] = 1.5 * retract_length[1]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(idle_temperature[1] == 0 ? (first_layer_temperature[1] + standby_temperature_delta) : (idle_temperature[1]))} T1\n{endif}\n{if (is_extruder_used[2]) and initial_tool != 2}\n;\n; purge third tool\n;\nG1 F{travel_speed * 60}\nM109 T2 S{first_layer_temperature[2]}\nT2; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(2 == 0 ? 0 : (2 == 1 ? 120 : (2 == 2 ? 180 : 300)))} Y{(2 < 4 ? 0 : 3)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[2]}10{else}30{endif} X220 Z0.2 F{if filament_multitool_ramming[2]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X220 E9 F800 ; continue purging and wipe the nozzle\nG0 X{220 + 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{220 + 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[2]} F2400 ; retract\n{e_retracted[2] = 1.5 * retract_length[2]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(idle_temperature[2] == 0 ? (first_layer_temperature[2] + standby_temperature_delta) : (idle_temperature[2]))} T2\n{endif}\n{if (is_extruder_used[3]) and initial_tool != 3}\n;\n; purge fourth tool\n;\nG1 F{travel_speed * 60}\nM109 T3 S{first_layer_temperature[3]}\nT3; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(3 == 0 ? 0 : (3 == 1 ? 120 : (3 == 2 ? 180 : 300)))} Y{(3 < 4 ? 0 : 3)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[3]}10{else}30{endif} X290 Z0.2 F{if filament_multitool_ramming[3]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X260 E9 F800 ; continue purging and wipe the nozzle\nG0 X{260 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{260 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[3]} F2400 ; retract\n{e_retracted[3] = 1.5 * retract_length[3]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(idle_temperature[3] == 0 ? (first_layer_temperature[3] + standby_temperature_delta) : (idle_temperature[3]))} T3\n{endif}\n{if (is_extruder_used[4]) and initial_tool != 4}\n;\n; purge fifth tool\n;\nG1 F{travel_speed * 60}\nM109 T4 S{first_layer_temperature[4]}\nT4; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(4 == 0 ? 0 : (4 == 1 ? 120 : (4 == 2 ? 180 : 300)))} Y{(4 < 4 ? 0 : 3)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[4]}10{else}30{endif} X290 Z0.2 F{if filament_multitool_ramming[4]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X260 E9 F800 ; continue purging and wipe the nozzle\nG0 X{260 - 3} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{260 - 3 * 2} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[4]} F2400 ; retract\n{e_retracted[4] = 1.5 * retract_length[4]} ; update slicer internal retract variable\nG92 E0 ; reset extruder position\n\nM104 S{(idle_temperature[4] == 0 ? (first_layer_temperature[4] + standby_temperature_delta) : (idle_temperature[4]))} T4\n{endif}\n;\n; purge initial tool\n;\nG1 F{travel_speed * 60}\nM109 T{initial_tool} S{first_layer_temperature[initial_tool]}\nT{initial_tool}; pick the tool\nG92 E0 ; reset extruder position\n\nG0 X{(initial_tool == 0 ? 0 : (initial_tool == 1 ? 120 : (initial_tool == 2 ? 180 : 300)))} Y{(initial_tool < 4 ? 0 : 3)} Z10 F{(travel_speed * 60)} ; move close to the sheet's edge\nG0 E{if filament_multitool_ramming[initial_tool]}10{else}30{endif} X{(initial_tool == 0 ? 0 : (initial_tool == 1 ? 120 : (initial_tool == 2 ? 180 : 300))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 10)} Z0.2 F{if filament_multitool_ramming[initial_tool]}500{else}170{endif} ; purge while moving towards the sheet\nG0 X{(initial_tool == 0 ? 0 : (initial_tool == 1 ? 120 : (initial_tool == 2 ? 180 : 300))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40)} E9 F800 ; continue purging and wipe the nozzle\nG0 X{(initial_tool == 0 ? 0 : (initial_tool == 1 ? 120 : (initial_tool == 2 ? 180 : 300))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3)} Z{0.05} F{8000} ; wipe, move close to the bed\nG0 X{(initial_tool == 0 ? 0 : (initial_tool == 1 ? 120 : (initial_tool == 2 ? 180 : 300))) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 40) + ((initial_tool == 0 or initial_tool == 2 ? 1 : -1) * 3 * 2)} Z0.2 F{8000} ; wipe, move quickly away from the bed\nG1 E{- 1.5 * retract_length[initial_tool]} F2400 ; retract\n{e_retracted[initial_tool] = 1.5 * retract_length[initial_tool]}\nG92 E0 ; reset extruder position\n", + "scan_first_layer": "0", "nozzle_type": "undefine", "auxiliary_fan": "0" diff --git a/resources/profiles/FLSun.json b/resources/profiles/FLSun.json index 7b658ca355..851f1a0c2e 100644 --- a/resources/profiles/FLSun.json +++ b/resources/profiles/FLSun.json @@ -1,226 +1,306 @@ -{ - "name": "FLSun", - "version": "02.01.01.00", - "force_update": "0", - "description": "FLSun configurations", - "machine_model_list": [ - { - "name": "FLSun Q5", - "sub_path": "machine/FLSun Q5.json" - }, - { - "name": "FLSun QQ-S Pro", - "sub_path": "machine/FLSun QQ-S Pro.json" - }, - { - "name": "FLSun Super Racer (SR)", - "sub_path": "machine/FLSun SR.json" - }, - { - "name": "FLSun V400", - "sub_path": "machine/FLSun V400.json" - }, - { - "name": "FLSun S1", - "sub_path": "machine/FLSun S1.json" - }, - { - "name": "FLSun T1", - "sub_path": "machine/FLSun T1.json" - } - ], - "process_list": [ - { - "name": "fdm_process_common", - "sub_path": "process/fdm_process_common.json" - }, - { - "name": "0.08mm Fine @FLSun Q5", - "sub_path": "process/0.08mm Fine @FLSun Q5.json" - }, - { - "name": "0.08mm Fine @FLSun QQSPro", - "sub_path": "process/0.08mm Fine @FLSun QQSPro.json" - }, - { - "name": "0.08mm Fine @FLSun SR", - "sub_path": "process/0.08mm Fine @FLSun SR.json" - }, - { - "name": "0.16mm Optimal @FLSun Q5", - "sub_path": "process/0.16mm Optimal @FLSun Q5.json" - }, - { - "name": "0.16mm Optimal @FLSun QQSPro", - "sub_path": "process/0.16mm Optimal @FLSun QQSPro.json" - }, - { - "name": "0.16mm Optimal @FLSun SR", - "sub_path": "process/0.16mm Optimal @FLSun SR.json" - }, - { - "name": "0.20mm Standard @FLSun Q5", - "sub_path": "process/0.20mm Standard @FLSun Q5.json" - }, - { - "name": "0.20mm Standard @FLSun QQSPro", - "sub_path": "process/0.20mm Standard @FLSun QQSPro.json" - }, - { - "name": "0.20mm Standard @FLSun SR", - "sub_path": "process/0.20mm Standard @FLSun SR.json" - }, - { - "name": "0.20mm Standard @FLSun V400", - "sub_path": "process/0.20mm Standard @FLSun V400.json" - }, - { - "name": "0.20mm Standard @FLSun S1", - "sub_path": "process/0.20mm Standard @FLSun S1.json" - }, - { - "name": "0.20mm Standard @FLSun T1", - "sub_path": "process/0.20mm Standard @FLSun T1.json" - }, - { - "name": "0.24mm Draft @FLSun Q5", - "sub_path": "process/0.24mm Draft @FLSun Q5.json" - }, - { - "name": "0.24mm Draft @FLSun QQSPro", - "sub_path": "process/0.24mm Draft @FLSun QQSPro.json" - }, - { - "name": "0.24mm Draft @FLSun SR", - "sub_path": "process/0.24mm Draft @FLSun SR.json" - }, - { - "name": "0.30mm Extra Draft @FLSun Q5", - "sub_path": "process/0.30mm Extra Draft @FLSun Q5.json" - }, - { - "name": "0.30mm Extra Draft @FLSun QQSPro", - "sub_path": "process/0.30mm Extra Draft @FLSun QQSPro.json" - }, - { - "name": "0.30mm Extra Draft @FLSun SR", - "sub_path": "process/0.30mm Extra Draft @FLSun SR.json" - } - ], - "filament_list": [ - { - "name": "fdm_filament_common", - "sub_path": "filament/fdm_filament_common.json" - }, - { - "name": "fdm_filament_pla", - "sub_path": "filament/fdm_filament_pla.json" - }, - { - "name": "fdm_filament_tpu", - "sub_path": "filament/fdm_filament_tpu.json" - }, - { - "name": "fdm_filament_pet", - "sub_path": "filament/fdm_filament_pet.json" - }, - { - "name": "fdm_filament_abs", - "sub_path": "filament/fdm_filament_abs.json" - }, - { - "name": "fdm_filament_pc", - "sub_path": "filament/fdm_filament_pc.json" - }, - { - "name": "fdm_filament_asa", - "sub_path": "filament/fdm_filament_asa.json" - }, - { - "name": "fdm_filament_pva", - "sub_path": "filament/fdm_filament_pva.json" - }, - { - "name": "fdm_filament_pa", - "sub_path": "filament/fdm_filament_pa.json" - }, - { - "name": "FLSun Generic PLA", - "sub_path": "filament/FLSun Generic PLA.json" - }, - { - "name": "FLSun Generic PLA-CF", - "sub_path": "filament/FLSun Generic PLA-CF.json" - }, - { - "name": "FLSun Generic PETG", - "sub_path": "filament/FLSun Generic PETG.json" - }, - { - "name": "FLSun Generic ABS", - "sub_path": "filament/FLSun Generic ABS.json" - }, - { - "name": "FLSun Generic TPU", - "sub_path": "filament/FLSun Generic TPU.json" - }, - { - "name": "FLSun Generic ASA", - "sub_path": "filament/FLSun Generic ASA.json" - }, - { - "name": "FLSun Generic PC", - "sub_path": "filament/FLSun Generic PC.json" - }, - { - "name": "FLSun Generic PVA", - "sub_path": "filament/FLSun Generic PVA.json" - }, - { - "name": "FLSun Generic PA", - "sub_path": "filament/FLSun Generic PA.json" - }, - { - "name": "FLSun Generic PA-CF", - "sub_path": "filament/FLSun Generic PA-CF.json" - }, - { - "name": "FLSun Generic PLA-HS-S1", - "sub_path": "filament/FLSun Generic PLA-HS-S1.json" - }, - { - "name": "FLSun Generic PLA-HS-T1", - "sub_path": "filament/FLSun Generic PLA-HS-T1.json" - } - ], - "machine_list": [ - { - "name": "fdm_machine_common", - "sub_path": "machine/fdm_machine_common.json" - }, - { - "name": "FLSun Q5 0.4 nozzle", - "sub_path": "machine/FLSun Q5 0.4 nozzle.json" - }, - { - "name": "FLSun QQ-S Pro 0.4 nozzle", - "sub_path": "machine/FLSun QQ-S Pro 0.4 nozzle.json" - }, - { - "name": "FLSun Super Racer 0.4 nozzle", - "sub_path": "machine/FLSun SR 0.4 nozzle.json" - }, - { - "name": "FLSun V400 0.4 nozzle", - "sub_path": "machine/FLSun V400 0.4 nozzle.json" - }, - { - "name": "FLSun T1 0.4 nozzle", - "sub_path": "machine/FLSun T1 0.4 nozzle.json" - }, - { - "name": "FLSun S1 0.4 nozzle", - "sub_path": "machine/FLSun S1 0.4 nozzle.json" - } - ] -} \ No newline at end of file +{ + "name": "FLSun", + "version": "02.01.01.00", + "force_update": "0", + "description": "FLSun configurations", + "machine_model_list": [ + { + "name": "FLSun Q5", + "sub_path": "machine/FLSun Q5.json" + }, + { + "name": "FLSun QQ-S Pro", + "sub_path": "machine/FLSun QQ-S Pro.json" + }, + { + "name": "FLSun Super Racer (SR)", + "sub_path": "machine/FLSun SR.json" + }, + { + "name": "FLSun V400", + "sub_path": "machine/FLSun V400.json" + }, + { + "name": "FLSun T1", + "sub_path": "machine/FLSun T1.json" + }, + { + "name": "FLSun S1", + "sub_path": "machine/FLSun S1.json" + } + ], + "process_list": [ + { + "name": "fdm_process_common", + "sub_path": "process/fdm_process_common.json" + }, + { + "name": "0.08mm Fine @FLSun Q5", + "sub_path": "process/0.08mm Fine @FLSun Q5.json" + }, + { + "name": "0.08mm Fine @FLSun QQSPro", + "sub_path": "process/0.08mm Fine @FLSun QQSPro.json" + }, + { + "name": "0.08mm Fine @FLSun SR", + "sub_path": "process/0.08mm Fine @FLSun SR.json" + }, + { + "name": "0.12mm Fine @FLSun T1", + "sub_path": "process/0.12mm Fine @FLSun T1.json" + }, + { + "name": "0.12mm Fine @FLSun S1", + "sub_path": "process/0.12mm Fine @FLSun S1.json" + }, + { + "name": "0.16mm Optimal @FLSun Q5", + "sub_path": "process/0.16mm Optimal @FLSun Q5.json" + }, + { + "name": "0.16mm Optimal @FLSun QQSPro", + "sub_path": "process/0.16mm Optimal @FLSun QQSPro.json" + }, + { + "name": "0.16mm Optimal @FLSun SR", + "sub_path": "process/0.16mm Optimal @FLSun SR.json" + }, + { + "name": "0.16mm Optimal @FLSun T1", + "sub_path": "process/0.16mm Optimal @FLSun T1.json" + }, + { + "name": "0.16mm Optimal @FLSun S1", + "sub_path": "process/0.16mm Optimal @FLSun S1.json" + }, + { + "name": "0.20mm Standard @FLSun Q5", + "sub_path": "process/0.20mm Standard @FLSun Q5.json" + }, + { + "name": "0.20mm Standard @FLSun QQSPro", + "sub_path": "process/0.20mm Standard @FLSun QQSPro.json" + }, + { + "name": "0.20mm Standard @FLSun SR", + "sub_path": "process/0.20mm Standard @FLSun SR.json" + }, + { + "name": "0.20mm Standard @FLSun V400", + "sub_path": "process/0.20mm Standard @FLSun V400.json" + }, + { + "name": "0.20mm Standard @FLSun T1", + "sub_path": "process/0.20mm Standard @FLSun T1.json" + }, + { + "name": "0.20mm Standard @FLSun S1", + "sub_path": "process/0.20mm Standard @FLSun S1.json" + }, + { + "name": "0.24mm Draft @FLSun Q5", + "sub_path": "process/0.24mm Draft @FLSun Q5.json" + }, + { + "name": "0.24mm Draft @FLSun QQSPro", + "sub_path": "process/0.24mm Draft @FLSun QQSPro.json" + }, + { + "name": "0.24mm Draft @FLSun SR", + "sub_path": "process/0.24mm Draft @FLSun SR.json" + }, + { + "name": "0.24mm Draft @FLSun T1", + "sub_path": "process/0.24mm Draft @FLSun T1.json" + }, + { + "name": "0.24mm Draft @FLSun S1", + "sub_path": "process/0.24mm Draft @FLSun S1.json" + }, + { + "name": "0.30mm Extra Draft @FLSun Q5", + "sub_path": "process/0.30mm Extra Draft @FLSun Q5.json" + }, + { + "name": "0.30mm Extra Draft @FLSun QQSPro", + "sub_path": "process/0.30mm Extra Draft @FLSun QQSPro.json" + }, + { + "name": "0.30mm Extra Draft @FLSun SR", + "sub_path": "process/0.30mm Extra Draft @FLSun SR.json" + }, + { + "name": "0.30mm Extra Draft @FLSun T1", + "sub_path": "process/0.30mm Extra Draft @FLSun T1.json" + }, + { + "name": "0.30mm Extra Draft @FLSun S1", + "sub_path": "process/0.30mm Extra Draft @FLSun S1.json" + } + ], + "filament_list": [ + { + "name": "fdm_filament_common", + "sub_path": "filament/fdm_filament_common.json" + }, + { + "name": "fdm_filament_pla", + "sub_path": "filament/fdm_filament_pla.json" + }, + { + "name": "fdm_filament_tpu", + "sub_path": "filament/fdm_filament_tpu.json" + }, + { + "name": "fdm_filament_pet", + "sub_path": "filament/fdm_filament_pet.json" + }, + { + "name": "fdm_filament_abs", + "sub_path": "filament/fdm_filament_abs.json" + }, + { + "name": "fdm_filament_pc", + "sub_path": "filament/fdm_filament_pc.json" + }, + { + "name": "fdm_filament_asa", + "sub_path": "filament/fdm_filament_asa.json" + }, + { + "name": "fdm_filament_pva", + "sub_path": "filament/fdm_filament_pva.json" + }, + { + "name": "fdm_filament_pa", + "sub_path": "filament/fdm_filament_pa.json" + }, + { + "name": "FLSun Generic PLA", + "sub_path": "filament/FLSun Generic PLA.json" + }, + { + "name": "FLSun Generic PLA-CF", + "sub_path": "filament/FLSun Generic PLA-CF.json" + }, + { + "name": "FLSun Generic PETG", + "sub_path": "filament/FLSun Generic PETG.json" + }, + { + "name": "FLSun Generic ABS", + "sub_path": "filament/FLSun Generic ABS.json" + }, + { + "name": "FLSun Generic TPU", + "sub_path": "filament/FLSun Generic TPU.json" + }, + { + "name": "FLSun Generic ASA", + "sub_path": "filament/FLSun Generic ASA.json" + }, + { + "name": "FLSun Generic PC", + "sub_path": "filament/FLSun Generic PC.json" + }, + { + "name": "FLSun Generic PVA", + "sub_path": "filament/FLSun Generic PVA.json" + }, + { + "name": "FLSun Generic PA", + "sub_path": "filament/FLSun Generic PA.json" + }, + { + "name": "FLSun Generic PA-CF", + "sub_path": "filament/FLSun Generic PA-CF.json" + }, + { + "name": "FLSun T1 PLA High Speed", + "sub_path": "filament/FLSun T1 PLA High Speed.json" + }, + { + "name": "FLSun S1 PLA High Speed", + "sub_path": "filament/FLSun S1 PLA High Speed.json" + }, + { + "name": "FLSun T1 PLA Silk", + "sub_path": "filament/FLSun T1 PLA Silk.json" + }, + { + "name": "FLSun S1 PLA Silk", + "sub_path": "filament/FLSun S1 PLA Silk.json" + }, + { + "name": "FLSun T1 PLA Generic", + "sub_path": "filament/FLSun T1 PLA Generic.json" + }, + { + "name": "FLSun S1 PLA Generic", + "sub_path": "filament/FLSun S1 PLA Generic.json" + }, + { + "name": "FLSun T1 PETG", + "sub_path": "filament/FLSun T1 PETG.json" + }, + { + "name": "FLSun S1 PETG", + "sub_path": "filament/FLSun S1 PETG.json" + }, + { + "name": "FLSun T1 ASA", + "sub_path": "filament/FLSun T1 ASA.json" + }, + { + "name": "FLSun S1 ASA", + "sub_path": "filament/FLSun S1 ASA.json" + }, + { + "name": "FLSun T1 TPU", + "sub_path": "filament/FLSun T1 TPU.json" + }, + { + "name": "FLSun S1 TPU", + "sub_path": "filament/FLSun S1 TPU.json" + }, + { + "name": "FLSun T1 ABS", + "sub_path": "filament/FLSun T1 ABS.json" + }, + { + "name": "FLSun S1 ABS", + "sub_path": "filament/FLSun S1 ABS.json" + } + ], + "machine_list": [ + { + "name": "fdm_machine_common", + "sub_path": "machine/fdm_machine_common.json" + }, + { + "name": "FLSun Q5 0.4 nozzle", + "sub_path": "machine/FLSun Q5 0.4 nozzle.json" + }, + { + "name": "FLSun QQ-S Pro 0.4 nozzle", + "sub_path": "machine/FLSun QQ-S Pro 0.4 nozzle.json" + }, + { + "name": "FLSun Super Racer 0.4 nozzle", + "sub_path": "machine/FLSun SR 0.4 nozzle.json" + }, + { + "name": "FLSun V400 0.4 nozzle", + "sub_path": "machine/FLSun V400 0.4 nozzle.json" + }, + { + "name": "FLSun T1 0.4 nozzle", + "sub_path": "machine/FLSun T1 0.4 nozzle.json" + }, + { + "name": "FLSun S1 0.4 nozzle", + "sub_path": "machine/FLSun S1 0.4 nozzle.json" + } + ] +} diff --git a/resources/profiles/FLSun/FLSun S1_cover.png b/resources/profiles/FLSun/FLSun S1_cover.png index d5c49294bb..a1e43c2a50 100644 Binary files a/resources/profiles/FLSun/FLSun S1_cover.png and b/resources/profiles/FLSun/FLSun S1_cover.png differ diff --git a/resources/profiles/FLSun/FLSun T1_cover.png b/resources/profiles/FLSun/FLSun T1_cover.png index 5ee7fb0f12..37435793c0 100644 Binary files a/resources/profiles/FLSun/FLSun T1_cover.png and b/resources/profiles/FLSun/FLSun T1_cover.png differ diff --git a/resources/profiles/FLSun/FLSun_S1_buildplate_texture.png b/resources/profiles/FLSun/FLSun_S1_buildplate_texture.png new file mode 100644 index 0000000000..81f375fce9 Binary files /dev/null and b/resources/profiles/FLSun/FLSun_S1_buildplate_texture.png differ diff --git a/resources/profiles/FLSun/FLSun_T1_buildplate_texture.png b/resources/profiles/FLSun/FLSun_T1_buildplate_texture.png new file mode 100644 index 0000000000..a080ed71d5 Binary files /dev/null and b/resources/profiles/FLSun/FLSun_T1_buildplate_texture.png differ diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-S1.json b/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-S1.json deleted file mode 100644 index b1a01576e7..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-S1.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFH99", - "setting_id": "GFSA04", - "name": "FLSun Generic PLA-HS-S1", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ - "1.1" - ], - "filament_type": [ - "PLA-HS" - ], - "filament_max_volumetric_speed": [ - "110" - ], - "slow_down_layer_time": [ - "1" - ], - "compatible_printers": [ - "FLSun S1 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-T1.json b/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-T1.json deleted file mode 100644 index 2f0ea5402c..0000000000 --- a/resources/profiles/FLSun/filament/FLSun Generic PLA-HS-T1.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "type": "filament", - "filament_id": "GFL99", - "setting_id": "GFSA04", - "name": "FLSun Generic PLA-HS-T1", - "from": "system", - "instantiation": "true", - "inherits": "fdm_filament_pla", - "filament_flow_ratio": [ - "0.95" - ], - "filament_max_volumetric_speed": [ - "60" - ], - "slow_down_layer_time": [ - "100" - ], - "compatible_printers": [ - "FLSun T1 0.4 nozzle" - ] -} \ No newline at end of file diff --git a/resources/profiles/FLSun/filament/FLSun S1 ABS.json b/resources/profiles/FLSun/filament/FLSun S1 ABS.json new file mode 100644 index 0000000000..9dc8efb7d4 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun S1 ABS.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "FLSun S1 ABS", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic ABS", + "fan_max_speed": ["50"], + "fan_min_speed": ["10"], + "filament_density" : "1.05", + "filament_flow_ratio" : "0.95", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["0"], + "fan_cooling_layer_time": ["30"], + "filament_cost": ["0"], + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["90"], + "hot_plate_temp_initial_layer": ["90"], + "nozzle_temperature": ["280"], + "nozzle_temperature_initial_layer": ["280"], + "nozzle_temperature_range_low": ["240"], + "nozzle_temperature_range_high": ["300"], + "overhang_fan_speed": ["50"], + "slow_down_layer_time": ["12"], + "slow_down_min_speed": ["30"], + "temperature_vitrification": ["100"], + "filament_max_volumetric_speed": ["20"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun S1 ASA.json b/resources/profiles/FLSun/filament/FLSun S1 ASA.json new file mode 100644 index 0000000000..a08d6ed9f4 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun S1 ASA.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "filament_id": "GFB98", + "setting_id": "GFSA04", + "name": "FLSun S1 ASA", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic ASA", + "fan_max_speed": ["50"], + "fan_min_speed": ["35"], + "filament_density" : "1.05", + "filament_flow_ratio" : "0.95", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["0"], + "fan_cooling_layer_time": ["35"], + "filament_cost": ["0"], + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["90"], + "hot_plate_temp_initial_layer": ["90"], + "nozzle_temperature": ["280"], + "nozzle_temperature_initial_layer": ["280"], + "nozzle_temperature_range_low": ["240"], + "nozzle_temperature_range_high": ["300"], + "overhang_fan_speed": ["35"], + "slow_down_layer_time": ["2"], + "slow_down_min_speed": ["80"], + "temperature_vitrification": ["100"], + "filament_max_volumetric_speed": ["25"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun S1 PETG.json b/resources/profiles/FLSun/filament/FLSun S1 PETG.json new file mode 100644 index 0000000000..b0bd5de241 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun S1 PETG.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSA04", + "name": "FLSun S1 PETG", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic PETG", + "fan_max_speed": ["60"], + "fan_min_speed": ["50"], + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["100"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["0"], + "full_fan_speed_layer": ["2"], + "hot_plate_temp": ["80"], + "hot_plate_temp_initial_layer": ["80"], + "nozzle_temperature": ["260"], + "nozzle_temperature_initial_layer": ["260"], + "nozzle_temperature_range_low": ["230"], + "nozzle_temperature_range_high": ["270"], + "overhang_fan_speed": ["35"], + "slow_down_layer_time": ["2"], + "slow_down_min_speed": ["30"], + "temperature_vitrification": ["70"], + "filament_max_volumetric_speed": ["15"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json b/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json new file mode 100644 index 0000000000..0fe334a390 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun S1 PLA Generic.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "FLSun S1 PLA Generic", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic PLA", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["100"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["0"], + "filament_density" : "1.32", + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["60"], + "hot_plate_temp_initial_layer": ["60"], + "nozzle_temperature": ["240"], + "nozzle_temperature_initial_layer": ["240"], + "nozzle_temperature_range_low": ["190"], + "nozzle_temperature_range_high": ["240"], + "overhang_fan_speed": ["35"], + "slow_down_layer_time": ["1"], + "slow_down_min_speed": ["80"], + "filament_max_volumetric_speed": ["60"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json b/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json new file mode 100644 index 0000000000..613d5ae908 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun S1 PLA High Speed.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "FLSun S1 PLA High Speed", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic PLA", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["100"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["0"], + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["60"], + "hot_plate_temp_initial_layer": ["60"], + "nozzle_temperature": ["230"], + "nozzle_temperature_initial_layer": ["230"], + "nozzle_temperature_range_low": ["190"], + "nozzle_temperature_range_high": ["240"], + "overhang_fan_speed": ["35"], + "slow_down_layer_time": ["1"], + "slow_down_min_speed": ["80"], + "filament_max_volumetric_speed": ["110"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json b/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json new file mode 100644 index 0000000000..2a08316092 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun S1 PLA Silk.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "FLSun S1 PLA Silk", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic PLA", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["100"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["0"], + "filament_density" : "1.32", + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["60"], + "hot_plate_temp_initial_layer": ["60"], + "nozzle_temperature": ["240"], + "nozzle_temperature_initial_layer": ["240"], + "nozzle_temperature_range_low": ["190"], + "nozzle_temperature_range_high": ["240"], + "overhang_fan_speed": ["35"], + "slow_down_layer_time": ["1"], + "slow_down_min_speed": ["80"], + "filament_max_volumetric_speed": ["25"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun S1 TPU.json b/resources/profiles/FLSun/filament/FLSun S1 TPU.json new file mode 100644 index 0000000000..d6013af73b --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun S1 TPU.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSA04", + "name": "FLSun S1 TPU", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic TPU", + "fan_max_speed": ["100"], + "fan_min_speed": ["100"], + "filament_density" : "1.22", + "filament_flow_ratio" : "1", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "close_fan_the_first_x_layers": ["1"], + "during_print_exhaust_fan_speed": ["100"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["0"], + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["35"], + "hot_plate_temp_initial_layer": ["35"], + "nozzle_temperature": ["240"], + "nozzle_temperature_initial_layer": ["240"], + "nozzle_temperature_range_low": ["200"], + "nozzle_temperature_range_high": ["250"], + "overhang_fan_speed": ["100"], + "slow_down_layer_time": ["8"], + "slow_down_min_speed": ["20"], + "temperature_vitrification": ["30"], + "filament_max_volumetric_speed": ["3.5"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun T1 ABS.json b/resources/profiles/FLSun/filament/FLSun T1 ABS.json new file mode 100644 index 0000000000..aa6c0b25e0 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun T1 ABS.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "filament_id": "GFB99", + "setting_id": "GFSA04", + "name": "FLSun T1 ABS", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic ABS", + "fan_max_speed": ["50"], + "fan_min_speed": ["10"], + "filament_density" : "1.05", + "filament_flow_ratio" : "0.95", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["0"], + "fan_cooling_layer_time": ["30"], + "filament_cost": ["0"], + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["90"], + "hot_plate_temp_initial_layer": ["90"], + "nozzle_temperature": ["280"], + "nozzle_temperature_initial_layer": ["280"], + "nozzle_temperature_range_low": ["240"], + "nozzle_temperature_range_high": ["300"], + "overhang_fan_speed": ["50"], + "slow_down_layer_time": ["12"], + "slow_down_min_speed": ["30"], + "temperature_vitrification": ["100"], + "filament_max_volumetric_speed": ["20"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun T1 ASA.json b/resources/profiles/FLSun/filament/FLSun T1 ASA.json new file mode 100644 index 0000000000..307917f630 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun T1 ASA.json @@ -0,0 +1,34 @@ +{ + "type": "filament", + "filament_id": "GFB98", + "setting_id": "GFSA04", + "name": "FLSun T1 ASA", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic ASA", + "fan_max_speed": ["50"], + "fan_min_speed": ["35"], + "filament_density" : "1.05", + "filament_flow_ratio" : "0.95", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["0"], + "fan_cooling_layer_time": ["35"], + "filament_cost": ["0"], + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["90"], + "hot_plate_temp_initial_layer": ["90"], + "nozzle_temperature": ["280"], + "nozzle_temperature_initial_layer": ["280"], + "nozzle_temperature_range_low": ["240"], + "nozzle_temperature_range_high": ["300"], + "overhang_fan_speed": ["35"], + "slow_down_layer_time": ["2"], + "slow_down_min_speed": ["80"], + "temperature_vitrification": ["100"], + "filament_max_volumetric_speed": ["25"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun T1 PETG.json b/resources/profiles/FLSun/filament/FLSun T1 PETG.json new file mode 100644 index 0000000000..fa55fe27e8 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun T1 PETG.json @@ -0,0 +1,32 @@ +{ + "type": "filament", + "filament_id": "GFG99", + "setting_id": "GFSA04", + "name": "FLSun T1 PETG", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic PETG", + "fan_max_speed": ["60"], + "fan_min_speed": ["50"], + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["100"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["0"], + "full_fan_speed_layer": ["2"], + "hot_plate_temp": ["80"], + "hot_plate_temp_initial_layer": ["80"], + "nozzle_temperature": ["260"], + "nozzle_temperature_initial_layer": ["260"], + "nozzle_temperature_range_low": ["230"], + "nozzle_temperature_range_high": ["270"], + "overhang_fan_speed": ["35"], + "slow_down_layer_time": ["2"], + "slow_down_min_speed": ["30"], + "temperature_vitrification": ["70"], + "filament_max_volumetric_speed": ["15"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json b/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json new file mode 100644 index 0000000000..2c418b2401 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun T1 PLA Generic.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "FLSun T1 PLA Generic", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic PLA", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["100"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["0"], + "filament_density" : "1.32", + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["60"], + "hot_plate_temp_initial_layer": ["60"], + "nozzle_temperature": ["240"], + "nozzle_temperature_initial_layer": ["240"], + "nozzle_temperature_range_low": ["190"], + "nozzle_temperature_range_high": ["240"], + "overhang_fan_speed": ["35"], + "slow_down_layer_time": ["1"], + "slow_down_min_speed": ["80"], + "filament_max_volumetric_speed": ["60"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json b/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json new file mode 100644 index 0000000000..6f48058ca3 --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun T1 PLA High Speed.json @@ -0,0 +1,29 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "FLSun T1 PLA High Speed", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic PLA", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["100"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["0"], + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["60"], + "hot_plate_temp_initial_layer": ["60"], + "nozzle_temperature": ["230"], + "nozzle_temperature_initial_layer": ["230"], + "nozzle_temperature_range_low": ["190"], + "nozzle_temperature_range_high": ["240"], + "overhang_fan_speed": ["35"], + "slow_down_layer_time": ["1"], + "slow_down_min_speed": ["80"], + "filament_max_volumetric_speed": ["60"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json b/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json new file mode 100644 index 0000000000..56fa05286c --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun T1 PLA Silk.json @@ -0,0 +1,30 @@ +{ + "type": "filament", + "filament_id": "GFL99", + "setting_id": "GFSA04", + "name": "FLSun T1 PLA Silk", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic PLA", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "during_print_exhaust_fan_speed": ["100"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["0"], + "filament_density" : "1.32", + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["60"], + "hot_plate_temp_initial_layer": ["60"], + "nozzle_temperature": ["240"], + "nozzle_temperature_initial_layer": ["240"], + "nozzle_temperature_range_low": ["190"], + "nozzle_temperature_range_high": ["240"], + "overhang_fan_speed": ["35"], + "slow_down_layer_time": ["1"], + "slow_down_min_speed": ["80"], + "filament_max_volumetric_speed": ["25"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/filament/FLSun T1 TPU.json b/resources/profiles/FLSun/filament/FLSun T1 TPU.json new file mode 100644 index 0000000000..d704dd036c --- /dev/null +++ b/resources/profiles/FLSun/filament/FLSun T1 TPU.json @@ -0,0 +1,35 @@ +{ + "type": "filament", + "filament_id": "GFU99", + "setting_id": "GFSA04", + "name": "FLSun T1 TPU", + "from": "system", + "instantiation": "true", + "inherits": "FLSun Generic TPU", + "fan_max_speed": ["100"], + "fan_min_speed": ["100"], + "filament_density" : "1.22", + "filament_flow_ratio" : "1", + "activate_air_filtration": ["1"], + "complete_print_exhaust_fan_speed": ["0"], + "close_fan_the_first_x_layers": ["1"], + "during_print_exhaust_fan_speed": ["100"], + "fan_cooling_layer_time": ["100"], + "filament_cost": ["0"], + "full_fan_speed_layer": ["3"], + "hot_plate_temp": ["35"], + "hot_plate_temp_initial_layer": ["35"], + "nozzle_temperature": ["240"], + "nozzle_temperature_initial_layer": ["240"], + "nozzle_temperature_range_low": ["200"], + "nozzle_temperature_range_high": ["250"], + "overhang_fan_speed": ["100"], + "slow_down_layer_time": ["8"], + "slow_down_min_speed": ["20"], + "temperature_vitrification": ["30"], + "filament_max_volumetric_speed": ["3.5"], + "dont_slow_down_outer_wall": ["1"], + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ] +} diff --git a/resources/profiles/FLSun/flsun_T1_buildplate_model.stl b/resources/profiles/FLSun/flsun_T1_buildplate_model.stl index 5702cb464f..75c1694404 100644 Binary files a/resources/profiles/FLSun/flsun_T1_buildplate_model.stl and b/resources/profiles/FLSun/flsun_T1_buildplate_model.stl differ diff --git a/resources/profiles/FLSun/flsun_T1_buildplate_texture.svg b/resources/profiles/FLSun/flsun_T1_buildplate_texture.svg deleted file mode 100644 index a90e5aa342..0000000000 --- a/resources/profiles/FLSun/flsun_T1_buildplate_texture.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/profiles/FLSun/flsun_s1_buildplate_model.stl b/resources/profiles/FLSun/flsun_s1_buildplate_model.stl index 5702cb464f..5197d985ad 100644 Binary files a/resources/profiles/FLSun/flsun_s1_buildplate_model.stl and b/resources/profiles/FLSun/flsun_s1_buildplate_model.stl differ diff --git a/resources/profiles/FLSun/flsun_s1_buildplate_texture.svg b/resources/profiles/FLSun/flsun_s1_buildplate_texture.svg deleted file mode 100644 index 082fc11ee9..0000000000 --- a/resources/profiles/FLSun/flsun_s1_buildplate_texture.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/resources/profiles/FLSun/machine/FLSun S1 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun S1 0.4 nozzle.json index 940d7a6530..9a7b7fdc0c 100644 --- a/resources/profiles/FLSun/machine/FLSun S1 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun S1 0.4 nozzle.json @@ -1,100 +1,178 @@ { - "type": "machine", - "setting_id": "GM003", - "name": "FLSun S1 0.4 nozzle", - "from": "system", - "instantiation": "true", - "inherits": "fdm_machine_common", - "printer_model": "FLSun S1", - "default_print_profile": "0.20mm PLA_HS_S1_FLSUN @FLSUN", - "gcode_flavor": "klipper", - "nozzle_diameter": [ - "0.4" - ], - "bed_exclude_area": [ - "0x0" - ], - "printable_area": [ - "159.392x13.945", - "157.57x27.7838", - "154.549x41.4112", - "150.351x54.7234", - "145.01x67.6191", - "138.564x80.0002", - "131.065x91.7725", - "122.567x102.846", - "113.137x113.137", - "102.846x122.567", - "91.7725x131.065", - "80.0003x138.564", - "67.6191x145.01", - "54.7234x150.351", - "41.4112x154.549", - "27.7838x157.57", - "13.945x159.392", - "9.79721e-15x160", - "-13.945x159.392", - "-27.7838x157.57", - "-41.4112x154.549", - "-54.7234x150.351", - "-67.6191x145.01", - "-80.0002x138.564", - "-91.7725x131.065", - "-102.846x122.567", - "-113.137x113.137", - "-122.567x102.846", - "-131.065x91.7725", - "-138.564x80.0003", - "-145.01x67.6191", - "-150.351x54.7234", - "-154.549x41.4112", - "-157.57x27.7838", - "-159.392x13.945", - "-160x1.95944e-14", - "-159.392x-13.945", - "-157.57x-27.7838", - "-154.549x-41.4112", - "-150.351x-54.7234", - "-145.01x-67.6191", - "-138.564x-80.0003", - "-131.065x-91.7725", - "-122.567x-102.846", - "-113.137x-113.137", - "-102.846x-122.567", - "-91.7725x-131.065", - "-80.0003x-138.564", - "-67.6191x-145.01", - "-54.7234x-150.351", - "-41.4112x-154.549", - "-27.7838x-157.57", - "-13.945x-159.392", - "-2.93916e-14x-160", - "13.945x-159.392", - "27.7838x-157.57", - "41.4112x-154.549", - "54.7234x-150.351", - "67.6191x-145.01", - "80.0002x-138.564", - "91.7725x-131.065", - "102.846x-122.567", - "113.137x-113.137", - "122.567x-102.846", - "131.065x-91.7725", - "138.564x-80.0002", - "145.01x-67.6191", - "150.351x-54.7234", - "154.549x-41.4112", - "157.57x-27.7838", - "159.392x-13.945", - "160x-3.91888e-14" - ], - "printable_height": "430", - "machine_end_gcode": "M107 T0\nM104 S0\nM104 S0 T1\nM140 S0\nG92 E0\nG91\nG1 Z+0.5 F6000\nG28 \nG90 ;absolute positioning", - "machine_start_gcode": "G21\nG90\nM82\nG28 ; home all axes\nM140 S[first_layer_bed_temperature] is_AB\nM104 S[first_layer_temperature] T0\nG1 F3000 Z1\nG1 X-155 Y0 Z0.4\nM107 T0\nM109 S[first_layer_temperature] T0\nM190 S[first_layer_bed_temperature] is_AB\nG92 E0\nG3 X0 Y-155 I155 Z0.3 E30 F2000\nG92 E0\nSET_TMC_CURRENT STEPPER=extruder CURRENT=0.8", - "layer_change_gcode": "", - "machine_pause_gcode": "M600", - "scan_first_layer": "0", - "nozzle_type": "hardened_steel", - "auxiliary_fan": "0" -} - + "type": "machine", + "setting_id": "GM003", + "name": "FLSun S1 0.4 nozzle", + "from": "system", + "instantiation": "true", + "inherits": "fdm_machine_common", + "printer_model": "FLSun S1", + "default_print_profile": "0.20mm Standard @FLSun S1", + "gcode_flavor": "klipper", + "printer_structure": "delta", + "nozzle_diameter": [ + "0.4" + ], + "bed_exclude_area": [ + "0x0" + ], + "thumbnails": [ + "48x48/PNG, 300x300/PNG" + ], + "deretraction_speed": [ + "80" + ], + "max_layer_height": [ + "0.3" + ], + "retract_before_wipe": [ + "30%" + ], + "retract_length_toolchange": [ + "1" + ], + "retract_restart_extra": [ + "-0.05" + ], + "retract_restart_extra_toolchange": [ + "-0.05" + ], + "retraction_length": [ + "1" + ], + "retraction_minimum_travel": [ + "2" + ], + "retraction_speed": [ + "80" + ], + "machine_max_acceleration_e": [ + "40000" + ], + "machine_max_acceleration_extruding": [ + "40000" + ], + "machine_max_acceleration_retracting": [ + "40000" + ], + "machine_max_acceleration_x": [ + "40000" + ], + "machine_max_acceleration_y": [ + "40000" + ], + "machine_max_acceleration_z": [ + "40000" + ], + "machine_max_jerk_e": [ + "100" + ], + "machine_max_jerk_x": [ + "20000" + ], + "machine_max_jerk_y": [ + "20000" + ], + "machine_max_jerk_z": [ + "10000" + ], + "machine_max_speed_e": [ + "1200" + ], + "machine_max_speed_x": [ + "1200" + ], + "machine_max_speed_y": [ + "1200" + ], + "machine_max_speed_z": [ + "1200" + ], + "printable_area": [ + "159.391x13.9449", + "157.569x27.7837", + "154.548x41.411", + "150.351x54.7232", + "145.009x67.6189", + "138.564x80", + "131.064x91.7722", + "122.567x102.846", + "113.137x113.137", + "102.846x122.567", + "91.7722x131.064", + "80x138.564", + "67.6189x145.009", + "54.7232x150.351", + "41.411x154.548", + "27.7837x157.569", + "13.9449x159.391", + "9.79717e-15x160", + "-13.9449x159.391", + "-27.7837x157.569", + "-41.411x154.548", + "-54.7232x150.351", + "-67.6189x145.009", + "-80x138.564", + "-91.7722x131.064", + "-102.846x122.567", + "-113.137x113.137", + "-122.567x102.846", + "-131.064x91.7722", + "-138.564x80", + "-145.009x67.6189", + "-150.351x54.7232", + "-154.548x41.411", + "-157.569x27.7837", + "-159.391x13.9449", + "-160x1.95943e-14", + "-159.391x-13.9449", + "-157.569x-27.7837", + "-154.548x-41.411", + "-150.351x-54.7232", + "-145.009x-67.6189", + "-138.564x-80", + "-131.064x-91.7722", + "-122.567x-102.846", + "-113.137x-113.137", + "-102.846x-122.567", + "-91.7722x-131.064", + "-80x-138.564", + "-67.6189x-145.009", + "-54.7232x-150.351", + "-41.411x-154.548", + "-27.7837x-157.569", + "-13.9449x-159.391", + "-2.93915e-14x-160", + "13.9449x-159.391", + "27.7837x-157.569", + "41.411x-154.548", + "54.7232x-150.351", + "67.6189x-145.009", + "80x-138.564", + "91.7722x-131.064", + "102.846x-122.567", + "113.137x-113.137", + "122.567x-102.846", + "131.064x-91.7722", + "138.564x-80", + "145.009x-67.6189", + "150.351x-54.7232", + "154.548x-41.411", + "157.569x-27.7837", + "159.391x-13.9449", + "160x-3.91887e-14" + ], + "support_air_filtration": "1", + "printable_height": "430", + "machine_end_gcode": "M107 T0\nM104 S0\nM140 S0\nM104 S0 T1\nG92 E0\nG91\nG1 E-1 F2100\nG1 Z+0.5 F6000\nG28\nG90", + "machine_start_gcode": "G90\nM82\nG28\n{if (first_layer_print_min[0] > 100 || first_layer_print_max[0] > 100 || first_layer_print_min[1] > 100 || first_layer_print_max[1] > 100 || first_layer_print_min[0] < -100 || first_layer_print_max[0] < -100 || first_layer_print_min[1] < -100 || first_layer_print_max[1] < -100)}M140 S[first_layer_bed_temperature] A1 B1{else}M140 S[first_layer_bed_temperature] A1 B0{endif}\nM104 S[first_layer_temperature] T0\nM107 T0\nM109 S[first_layer_temperature] T0\n{if (first_layer_print_min[0] > 100 || first_layer_print_max[0] > 100 || first_layer_print_min[1] > 100 || first_layer_print_max[1] > 100 || first_layer_print_min[0] < -100 || first_layer_print_max[0] < -100 || first_layer_print_min[1] < -100 || first_layer_print_max[1] < -100)}M190 S[first_layer_bed_temperature] A1 B1{else}M190 S[first_layer_bed_temperature] A1 B0{endif}\nG1 Z150 F6000\nG1 X-160 Y0 Z0.4 F4000\nG92 E0\nG3 X0 Y-160 I160 J0 Z0.3 E30 F2000\nG1 Z2 F2000\nG92 E0\nSET_TMC_CURRENT STEPPER=extruder CURRENT=0.8", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", + "layer_change_gcode": "", + "support_chamber_temp_control": "0", + "scan_first_layer": "0", + "nozzle_type": "hardened_steel", + "adaptive_bed_mesh_margin": "0", + "emit_machine_limits_to_gcode": "0", + "auxiliary_fan": "0" + } + \ No newline at end of file diff --git a/resources/profiles/FLSun/machine/FLSun S1.json b/resources/profiles/FLSun/machine/FLSun S1.json index bb824ef906..99a240d128 100644 --- a/resources/profiles/FLSun/machine/FLSun S1.json +++ b/resources/profiles/FLSun/machine/FLSun S1.json @@ -1,12 +1,12 @@ { - "type": "machine_model", - "name": "FLSun S1", - "model_id": "FLSun_S1", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "FLSun", - "bed_model": "flsun_s1_buildplate_model.stl", - "bed_texture": "flsun_s1_buildplate_texture.svg", - "hotend_model": "", - "default_materials": "FLSun Generic PLA-HS-S1" + "type": "machine_model", + "name": "FLSun S1", + "model_id": "FLSun_S1", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "FLSun", + "bed_model": "FLSun_S1_buildplate_model.stl", + "bed_texture": "FLSun_S1_buildplate_texture.png", + "hotend_model": "", + "default_materials": "FLSun S1 PLA High Speed;FLSun S1 PLA Silk;FLSun S1 PLA Generic;FLSun S1 PETG;FLSun S1 ASA;FLSun S1 TPU;FLSun S1 ABS" } diff --git a/resources/profiles/FLSun/machine/FLSun T1 0.4 nozzle.json b/resources/profiles/FLSun/machine/FLSun T1 0.4 nozzle.json index fe098bd2bc..9a8c9c283f 100644 --- a/resources/profiles/FLSun/machine/FLSun T1 0.4 nozzle.json +++ b/resources/profiles/FLSun/machine/FLSun T1 0.4 nozzle.json @@ -6,14 +6,87 @@ "instantiation": "true", "inherits": "fdm_machine_common", "printer_model": "FLSun T1", - "default_print_profile": "0.20mm PLA_HS_T1_FLSUN @FLSUN", + "default_print_profile": "0.20mm Standard @FLSun T1", "gcode_flavor": "klipper", + "printer_structure": "delta", "nozzle_diameter": [ "0.4" ], "bed_exclude_area": [ "0x0" ], + "thumbnails": [ + "48x48/PNG, 300x300/PNG" + ], + "deretraction_speed": [ + "70" + ], + "max_layer_height": [ + "0.3" + ], + "retract_before_wipe": [ + "30%" + ], + "retract_length_toolchange": [ + "1" + ], + "retract_restart_extra": [ + "-0.05" + ], + "retract_restart_extra_toolchange": [ + "-0.05" + ], + "retraction_length": [ + "1" + ], + "retraction_minimum_travel": [ + "2" + ], + "retraction_speed": [ + "70" + ], + "machine_max_acceleration_e": [ + "30000" + ], + "machine_max_acceleration_extruding": [ + "30000" + ], + "machine_max_acceleration_retracting": [ + "30000" + ], + "machine_max_acceleration_x": [ + "30000" + ], + "machine_max_acceleration_y": [ + "30000" + ], + "machine_max_acceleration_z": [ + "30000" + ], + "machine_max_jerk_e": [ + "100" + ], + "machine_max_jerk_x": [ + "20000" + ], + "machine_max_jerk_y": [ + "20000" + ], + "machine_max_jerk_z": [ + "10000" + ], + "machine_max_speed_e": [ + "1000" + ], + "machine_max_speed_x": [ + "1000" + ], + "machine_max_speed_y": [ + "1000" + ], + "machine_max_speed_z": [ + "1000" + ], "printable_area": [ "129.505x11.3302", "128.025x22.5743", @@ -88,13 +161,18 @@ "129.505x-11.3302", "130x-3.18408e-14" ], + "support_air_filtration": "1", "printable_height": "330", - "machine_end_gcode": "M107 T0\nM104 S0\nM104 S0 T1\nM140 S0\nG92 E0\nG91\nG1 Z+0.5 F6000\nG28 \nG90 ;absolute positioning\nTIMELAPSE_RENDER", - "machine_start_gcode": "G21\nG90\nM82\nG28 ; home all axes\nM140 S[first_layer_bed_temperature]\nM104 S[first_layer_temperature] T0\nG1 F3000 Z1\nG1 X-125 Y0 Z0.4\nM109 S[first_layer_temperature] T0\nM190 S[first_layer_bed_temperature]\nM107 T0\nG92 E0\nG3 X0 Y-125 I125 Z0.3 E30 F2000\nG92 E0\nSET_TMC_CURRENT STEPPER=extruder CURRENT=0.8", + "machine_end_gcode": "M107 T0\nM104 S0\nM104 S0 T1\nM140 S0\nG92 E0\nG91\nG1 E-1 F2100\nG1 Z+0.5 F6000\nG28\nG90", + "machine_start_gcode": "G21\nG90\nM82\nG28\nM140 S[first_layer_bed_temperature]\nM104 S[first_layer_temperature] T0\nM109 S[first_layer_temperature] T0\nM190 S[first_layer_bed_temperature]\nG1 Z150 F3000\nG1 X-130 Y0 Z0.4\nM107 T0\nG92 E0\nG3 X0 Y-130 I130 J0 Z0.3 E30 F2000\nG1 Z2 F2000\nG92 E0\nSET_TMC_CURRENT STEPPER=extruder CURRENT=0.8", + "change_filament_gcode": "PAUSE", + "machine_pause_gcode": "PAUSE", "layer_change_gcode": "", - "machine_pause_gcode": "M600", + "support_chamber_temp_control": "0", "scan_first_layer": "0", "nozzle_type": "hardened_steel", + "adaptive_bed_mesh_margin": "0", + "emit_machine_limits_to_gcode": "0", "auxiliary_fan": "0" } diff --git a/resources/profiles/FLSun/machine/FLSun T1.json b/resources/profiles/FLSun/machine/FLSun T1.json index 65ea1a3737..663970ea87 100644 --- a/resources/profiles/FLSun/machine/FLSun T1.json +++ b/resources/profiles/FLSun/machine/FLSun T1.json @@ -1,12 +1,12 @@ { - "type": "machine_model", - "name": "FLSun T1", - "model_id": "FLSun_T1", - "nozzle_diameter": "0.4", - "machine_tech": "FFF", - "family": "FLSun", - "bed_model": "flsun_T1_buildplate_model.stl", - "bed_texture": "flsun_T1_buildplate_texture.svg", - "hotend_model": "", - "default_materials": "FLSun Generic PLA-HS-T1" + "type": "machine_model", + "name": "FLSun T1", + "model_id": "FLSun_T1", + "nozzle_diameter": "0.4", + "machine_tech": "FFF", + "family": "FLSun", + "bed_model": "FLSun_T1_buildplate_model.stl", + "bed_texture": "FLSun_T1_buildplate_texture.png", + "hotend_model": "", + "default_materials": "FLSun T1 PLA High Speed;FLSun T1 PLA Silk;FLSun T1 PLA Generic;FLSun T1 PETG;FLSun T1 ASA;FLSun T1 TPU;FLSun T1 ABS" } diff --git a/resources/profiles/FLSun/process/0.12mm Fine @FLSun S1.json b/resources/profiles/FLSun/process/0.12mm Fine @FLSun S1.json new file mode 100644 index 0000000000..6a4b71cd37 --- /dev/null +++ b/resources/profiles/FLSun/process/0.12mm Fine @FLSun S1.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @FLSun S1", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", + "layer_height": "0.12", + "bottom_shell_layers": "7", + "bottom_shell_thickness": "0.84", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "5000", + "default_acceleration": "32000", + "default_jerk": "200", + "elefant_foot_compensation": "0.15", + "gap_infill_speed": "450", + "infill_jerk": "600", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "12000", + "initial_layer_infill_speed": "105", + "initial_layer_jerk": "20", + "initial_layer_speed": "80", + "initial_layer_travel_speed": "400", + "inner_wall_acceleration": "22000", + "inner_wall_jerk": "150", + "inner_wall_speed": "550", + "internal_solid_infill_acceleration": "20000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "500", + "internal_bridge_speed": "200", + "is_custom_defined": "0", + "line_width": "0.42", + "only_one_wall_top": "1", + "outer_wall_acceleration": "10000", + "outer_wall_jerk": "20", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "400", + "overhang_1_4_speed": "200", + "overhang_2_4_speed": "150", + "overhang_3_4_speed": "100", + "overhang_4_4_speed": "50", + "skirt_speed": "80", + "sparse_infill_acceleration": "20000", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "800", + "support_interface_speed": "100", + "support_line_width": "0.42", + "support_speed": "350", + "support_type": "tree(auto)", + "support_bottom_z_distance": "0.12", + "support_threshold_angle": "20", + "support_top_z_distance": "0.12", + "top_shell_layers": "7", + "top_surface_acceleration": "12000", + "top_surface_jerk": "20", + "top_surface_line_width": "0.40", + "top_surface_speed": "250", + "top_shell_thickness": "0.84", + "travel_acceleration": "32000", + "travel_jerk": "600", + "travel_speed": "1200", + "wall_generator": "classic", + "wall_loops": "2", + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ], + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.12mm Fine @FLSun T1.json b/resources/profiles/FLSun/process/0.12mm Fine @FLSun T1.json new file mode 100644 index 0000000000..74e7a2616f --- /dev/null +++ b/resources/profiles/FLSun/process/0.12mm Fine @FLSun T1.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.12mm Fine @FLSun T1", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", + "layer_height": "0.12", + "bottom_shell_layers": "7", + "bottom_shell_thickness": "0.84", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "5000", + "default_acceleration": "30000", + "default_jerk": "200", + "elefant_foot_compensation": "0.15", + "gap_infill_speed": "450", + "infill_jerk": "500", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "10000", + "initial_layer_infill_speed": "105", + "initial_layer_jerk": "20", + "initial_layer_speed": "80", + "initial_layer_travel_speed": "400", + "inner_wall_acceleration": "15000", + "inner_wall_jerk": "150", + "inner_wall_speed": "550", + "internal_solid_infill_acceleration": "15000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "500", + "internal_bridge_speed": "200", + "is_custom_defined": "0", + "line_width": "0.42", + "only_one_wall_top": "1", + "outer_wall_acceleration": "10000", + "outer_wall_jerk": "20", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "400", + "overhang_1_4_speed": "200", + "overhang_2_4_speed": "150", + "overhang_3_4_speed": "100", + "overhang_4_4_speed": "50", + "skirt_speed": "80", + "sparse_infill_acceleration": "15000", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "600", + "support_interface_speed": "100", + "support_line_width": "0.42", + "support_speed": "350", + "support_type": "tree(auto)", + "support_bottom_z_distance": "0.12", + "support_threshold_angle": "20", + "support_top_z_distance": "0.12", + "top_shell_layers": "7", + "top_surface_acceleration": "10000", + "top_surface_jerk": "20", + "top_surface_line_width": "0.40", + "top_surface_speed": "250", + "top_shell_thickness": "0.84", + "travel_acceleration": "20000", + "travel_jerk": "500", + "travel_speed": "1000", + "wall_generator": "classic", + "wall_loops": "2", + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ], + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun S1.json b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun S1.json new file mode 100644 index 0000000000..88bd17f7e3 --- /dev/null +++ b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun S1.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @FLSun S1", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", + "layer_height": "0.16", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0.96", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "5000", + "default_acceleration": "32000", + "default_jerk": "200", + "elefant_foot_compensation": "0.15", + "gap_infill_speed": "400", + "infill_jerk": "600", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "12000", + "initial_layer_infill_speed": "105", + "initial_layer_jerk": "20", + "initial_layer_speed": "80", + "initial_layer_travel_speed": "400", + "inner_wall_acceleration": "22000", + "inner_wall_jerk": "150", + "inner_wall_speed": "500", + "internal_solid_infill_acceleration": "20000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "500", + "internal_bridge_speed": "200", + "is_custom_defined": "0", + "line_width": "0.42", + "only_one_wall_top": "1", + "outer_wall_acceleration": "10000", + "outer_wall_jerk": "20", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "400", + "overhang_1_4_speed": "200", + "overhang_2_4_speed": "150", + "overhang_3_4_speed": "100", + "overhang_4_4_speed": "50", + "skirt_speed": "80", + "sparse_infill_acceleration": "20000", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "800", + "support_interface_speed": "100", + "support_line_width": "0.42", + "support_speed": "350", + "support_type": "tree(auto)", + "support_bottom_z_distance": "0.16", + "support_threshold_angle": "25", + "support_top_z_distance": "0.16", + "top_shell_layers": "6", + "top_surface_acceleration": "12000", + "top_surface_jerk": "20", + "top_surface_line_width": "0.40", + "top_surface_speed": "250", + "top_shell_thickness": "0.96", + "travel_acceleration": "32000", + "travel_jerk": "600", + "travel_speed": "1200", + "wall_generator": "classic", + "wall_loops": "2", + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ], + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.16mm Optimal @FLSun T1.json b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun T1.json new file mode 100644 index 0000000000..1f406fe36c --- /dev/null +++ b/resources/profiles/FLSun/process/0.16mm Optimal @FLSun T1.json @@ -0,0 +1,69 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.16mm Optimal @FLSun T1", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", + "layer_height": "0.16", + "bottom_shell_layers": "6", + "bottom_shell_thickness": "0.96", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "5000", + "default_acceleration": "30000", + "default_jerk": "200", + "elefant_foot_compensation": "0.15", + "gap_infill_speed": "400", + "infill_jerk": "500", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "10000", + "initial_layer_infill_speed": "105", + "initial_layer_jerk": "20", + "initial_layer_speed": "80", + "initial_layer_travel_speed": "400", + "inner_wall_acceleration": "15000", + "inner_wall_jerk": "150", + "inner_wall_speed": "500", + "internal_solid_infill_acceleration": "15000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "500", + "internal_bridge_speed": "200", + "is_custom_defined": "0", + "line_width": "0.42", + "only_one_wall_top": "1", + "outer_wall_acceleration": "10000", + "outer_wall_jerk": "20", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "400", + "overhang_1_4_speed": "200", + "overhang_2_4_speed": "150", + "overhang_3_4_speed": "100", + "overhang_4_4_speed": "50", + "skirt_speed": "80", + "sparse_infill_acceleration": "15000", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "600", + "support_interface_speed": "100", + "support_line_width": "0.42", + "support_speed": "350", + "support_type": "tree(auto)", + "support_bottom_z_distance": "0.16", + "support_threshold_angle": "25", + "support_top_z_distance": "0.16", + "top_shell_layers": "6", + "top_surface_acceleration": "10000", + "top_surface_jerk": "20", + "top_surface_line_width": "0.40", + "top_surface_speed": "250", + "top_shell_thickness": "0.96", + "travel_acceleration": "20000", + "travel_jerk": "500", + "travel_speed": "1000", + "wall_generator": "classic", + "wall_loops": "2", + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ], + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun S1.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun S1.json index 0d528e7387..a772514af3 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun S1.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun S1.json @@ -1,30 +1,64 @@ { "type": "process", "setting_id": "GP004", - "name": "0.20mm PLA_HS_S1_FLSUN @FLSUN", + "name": "0.20mm Standard @FLSun S1", "from": "system", "instantiation": "true", "inherits": "fdm_process_common", - "outer_wall_speed": "400", - "inner_wall_speed": "500", - "sparse_infill_speed": "800", - "internal_solid_infill_speed": "500", - "default_acceleration": "30000", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0.8", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "5000", + "default_acceleration": "32000", "default_jerk": "200", - "gap_infill_speed": "400", - "initial_layer_acceleration": "5000", - "initial_layer_infill_speed": "80", - "initial_layer_speed": "50", + "elefant_foot_compensation": "0.15", + "gap_infill_speed": "350", + "infill_jerk": "600", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "12000", + "initial_layer_infill_speed": "105", + "initial_layer_jerk": "20", + "initial_layer_speed": "80", + "initial_layer_travel_speed": "400", "inner_wall_acceleration": "22000", + "inner_wall_jerk": "150", + "inner_wall_speed": "500", + "internal_solid_infill_acceleration": "20000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "500", + "internal_bridge_speed": "200", "is_custom_defined": "0", - "outer_wall_acceleration": "8000", - "overhang_2_4_speed": "1234", + "line_width": "0.42", + "only_one_wall_top": "1", + "outer_wall_acceleration": "10000", + "outer_wall_jerk": "20", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "400", + "overhang_1_4_speed": "200", + "overhang_2_4_speed": "150", + "overhang_3_4_speed": "100", + "overhang_4_4_speed": "50", + "skirt_speed": "80", + "sparse_infill_acceleration": "20000", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "800", + "support_interface_speed": "100", + "support_line_width": "0.42", + "support_speed": "350", + "support_type": "tree(auto)", + "top_shell_layers": "5", "top_surface_acceleration": "12000", - "top_surface_speed": "400", + "top_surface_jerk": "20", + "top_surface_line_width": "0.40", + "top_surface_speed": "250", "travel_acceleration": "32000", + "travel_jerk": "600", "travel_speed": "1200", + "wall_generator": "classic", + "wall_loops": "2", "compatible_printers": [ "FLSun S1 0.4 nozzle" ], - "exclude_object": "1" + "exclude_object": "1" } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.20mm Standard @FLSun T1.json b/resources/profiles/FLSun/process/0.20mm Standard @FLSun T1.json index 90caef323d..90c63838e0 100644 --- a/resources/profiles/FLSun/process/0.20mm Standard @FLSun T1.json +++ b/resources/profiles/FLSun/process/0.20mm Standard @FLSun T1.json @@ -1,30 +1,64 @@ { "type": "process", "setting_id": "GP004", - "name": "0.20mm PLA_HS_T1_FLSUN @FLSUN", + "name": "0.20mm Standard @FLSun T1", "from": "system", "instantiation": "true", "inherits": "fdm_process_common", - "outer_wall_speed": "120", - "inner_wall_speed": "260", - "sparse_infill_speed": "400", - "internal_solid_infill_speed": "260", - "default_acceleration": "8000", - "default_jerk": "20", - "gap_infill_speed": "250", - "initial_layer_acceleration": "1000", - "initial_layer_infill_speed": "60", - "initial_layer_speed": "30", - "inner_wall_acceleration": "8000", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0.8", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "5000", + "default_acceleration": "30000", + "default_jerk": "200", + "elefant_foot_compensation": "0.15", + "gap_infill_speed": "350", + "infill_jerk": "500", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "10000", + "initial_layer_infill_speed": "105", + "initial_layer_jerk": "20", + "initial_layer_speed": "80", + "initial_layer_travel_speed": "400", + "inner_wall_acceleration": "15000", + "inner_wall_jerk": "150", + "inner_wall_speed": "500", + "internal_solid_infill_acceleration": "15000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "500", + "internal_bridge_speed": "200", "is_custom_defined": "0", - "outer_wall_acceleration": "8000", - "overhang_1_4_speed": "80", - "top_surface_acceleration": "12000", - "top_surface_speed": "300", + "line_width": "0.42", + "only_one_wall_top": "1", + "outer_wall_acceleration": "10000", + "outer_wall_jerk": "20", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "400", + "overhang_1_4_speed": "200", + "overhang_2_4_speed": "150", + "overhang_3_4_speed": "100", + "overhang_4_4_speed": "50", + "skirt_speed": "80", + "sparse_infill_acceleration": "15000", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "600", + "support_interface_speed": "100", + "support_line_width": "0.42", + "support_speed": "350", + "support_type": "tree(auto)", + "top_shell_layers": "5", + "top_surface_acceleration": "10000", + "top_surface_jerk": "20", + "top_surface_line_width": "0.40", + "top_surface_speed": "250", "travel_acceleration": "20000", - "travel_speed": "800", + "travel_jerk": "500", + "travel_speed": "1000", + "wall_generator": "classic", + "wall_loops": "2", "compatible_printers": [ "FLSun T1 0.4 nozzle" ], - "exclude_object": "1" + "exclude_object": "1" } \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.24mm Draft @FLSun S1.json b/resources/profiles/FLSun/process/0.24mm Draft @FLSun S1.json new file mode 100644 index 0000000000..0376014755 --- /dev/null +++ b/resources/profiles/FLSun/process/0.24mm Draft @FLSun S1.json @@ -0,0 +1,65 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @FLSun S1", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0.8", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "5000", + "default_acceleration": "32000", + "default_jerk": "200", + "elefant_foot_compensation": "0.15", + "gap_infill_speed": "330", + "infill_jerk": "600", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "12000", + "initial_layer_infill_speed": "105", + "initial_layer_jerk": "20", + "initial_layer_speed": "80", + "initial_layer_travel_speed": "400", + "inner_wall_acceleration": "22000", + "inner_wall_jerk": "150", + "inner_wall_speed": "450", + "internal_solid_infill_acceleration": "20000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "450", + "internal_bridge_speed": "200", + "is_custom_defined": "0", + "line_width": "0.42", + "only_one_wall_top": "1", + "outer_wall_acceleration": "10000", + "outer_wall_jerk": "20", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "400", + "overhang_1_4_speed": "200", + "overhang_2_4_speed": "150", + "overhang_3_4_speed": "100", + "overhang_4_4_speed": "50", + "skirt_speed": "80", + "sparse_infill_acceleration": "20000", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "750", + "support_interface_speed": "100", + "support_line_width": "0.42", + "support_speed": "350", + "support_type": "tree(auto)", + "support_threshold_angle": "35", + "top_shell_layers": "5", + "top_surface_acceleration": "12000", + "top_surface_jerk": "20", + "top_surface_line_width": "0.40", + "top_surface_speed": "250", + "travel_acceleration": "32000", + "travel_jerk": "600", + "travel_speed": "1200", + "wall_generator": "classic", + "wall_loops": "2", + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ], + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.24mm Draft @FLSun T1.json b/resources/profiles/FLSun/process/0.24mm Draft @FLSun T1.json new file mode 100644 index 0000000000..a75bd2c3fc --- /dev/null +++ b/resources/profiles/FLSun/process/0.24mm Draft @FLSun T1.json @@ -0,0 +1,65 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.24mm Draft @FLSun T1", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", + "bottom_shell_layers": "5", + "bottom_shell_thickness": "0.8", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "5000", + "default_acceleration": "30000", + "default_jerk": "200", + "elefant_foot_compensation": "0.15", + "gap_infill_speed": "330", + "infill_jerk": "500", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "10000", + "initial_layer_infill_speed": "105", + "initial_layer_jerk": "20", + "initial_layer_speed": "80", + "initial_layer_travel_speed": "400", + "inner_wall_acceleration": "15000", + "inner_wall_jerk": "150", + "inner_wall_speed": "450", + "internal_solid_infill_acceleration": "15000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "450", + "internal_bridge_speed": "200", + "is_custom_defined": "0", + "line_width": "0.42", + "only_one_wall_top": "1", + "outer_wall_acceleration": "10000", + "outer_wall_jerk": "20", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "400", + "overhang_1_4_speed": "200", + "overhang_2_4_speed": "150", + "overhang_3_4_speed": "100", + "overhang_4_4_speed": "50", + "skirt_speed": "80", + "sparse_infill_acceleration": "15000", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "550", + "support_interface_speed": "100", + "support_line_width": "0.42", + "support_speed": "350", + "support_type": "tree(auto)", + "support_threshold_angle": "35", + "top_shell_layers": "5", + "top_surface_acceleration": "10000", + "top_surface_jerk": "20", + "top_surface_line_width": "0.40", + "top_surface_speed": "250", + "travel_acceleration": "20000", + "travel_jerk": "500", + "travel_speed": "1000", + "wall_generator": "classic", + "wall_loops": "2", + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ], + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun S1.json b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun S1.json new file mode 100644 index 0000000000..6232a5b7f3 --- /dev/null +++ b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun S1.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Extra Draft @FLSun S1", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", + "layer_height": "0.3", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "1.2", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "5000", + "default_acceleration": "32000", + "default_jerk": "200", + "elefant_foot_compensation": "0.15", + "gap_infill_speed": "300", + "infill_jerk": "600", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "12000", + "initial_layer_infill_speed": "105", + "initial_layer_jerk": "20", + "initial_layer_speed": "80", + "initial_layer_travel_speed": "400", + "inner_wall_acceleration": "22000", + "inner_wall_jerk": "150", + "inner_wall_speed": "450", + "internal_solid_infill_acceleration": "20000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "450", + "internal_bridge_speed": "200", + "is_custom_defined": "0", + "line_width": "0.42", + "only_one_wall_top": "1", + "outer_wall_acceleration": "10000", + "outer_wall_jerk": "20", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "400", + "overhang_1_4_speed": "200", + "overhang_2_4_speed": "150", + "overhang_3_4_speed": "100", + "overhang_4_4_speed": "50", + "skirt_speed": "80", + "sparse_infill_acceleration": "20000", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "650", + "support_interface_speed": "100", + "support_line_width": "0.42", + "support_speed": "350", + "support_type": "tree(auto)", + "support_threshold_angle": "40", + "top_shell_layers": "4", + "top_shell_thickness": "1.2", + "top_surface_acceleration": "12000", + "top_surface_jerk": "20", + "top_surface_line_width": "0.40", + "top_surface_speed": "250", + "travel_acceleration": "32000", + "travel_jerk": "600", + "travel_speed": "1200", + "wall_generator": "classic", + "wall_loops": "2", + "compatible_printers": [ + "FLSun S1 0.4 nozzle" + ], + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun T1.json b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun T1.json new file mode 100644 index 0000000000..9c14d74651 --- /dev/null +++ b/resources/profiles/FLSun/process/0.30mm Extra Draft @FLSun T1.json @@ -0,0 +1,67 @@ +{ + "type": "process", + "setting_id": "GP004", + "name": "0.30mm Extra Draft @FLSun T1", + "from": "system", + "instantiation": "true", + "inherits": "fdm_process_common", + "layer_height": "0.3", + "bottom_shell_layers": "4", + "bottom_shell_thickness": "1.2", + "bottom_surface_pattern": "monotonicline", + "bridge_acceleration": "5000", + "default_acceleration": "30000", + "default_jerk": "200", + "elefant_foot_compensation": "0.15", + "gap_infill_speed": "300", + "infill_jerk": "500", + "infill_wall_overlap": "15%", + "initial_layer_acceleration": "10000", + "initial_layer_infill_speed": "105", + "initial_layer_jerk": "20", + "initial_layer_speed": "80", + "initial_layer_travel_speed": "400", + "inner_wall_acceleration": "15000", + "inner_wall_jerk": "150", + "inner_wall_speed": "450", + "internal_solid_infill_acceleration": "15000", + "internal_solid_infill_line_width": "0.42", + "internal_solid_infill_speed": "450", + "internal_bridge_speed": "200", + "is_custom_defined": "0", + "line_width": "0.42", + "only_one_wall_top": "1", + "outer_wall_acceleration": "10000", + "outer_wall_jerk": "20", + "outer_wall_line_width": "0.42", + "outer_wall_speed": "400", + "overhang_1_4_speed": "200", + "overhang_2_4_speed": "150", + "overhang_3_4_speed": "100", + "overhang_4_4_speed": "50", + "skirt_speed": "80", + "sparse_infill_acceleration": "15000", + "sparse_infill_density": "10%", + "sparse_infill_pattern": "gyroid", + "sparse_infill_speed": "500", + "support_interface_speed": "100", + "support_line_width": "0.42", + "support_speed": "350", + "support_type": "tree(auto)", + "support_threshold_angle": "40", + "top_shell_layers": "4", + "top_shell_thickness": "1.2", + "top_surface_acceleration": "10000", + "top_surface_jerk": "20", + "top_surface_line_width": "0.40", + "top_surface_speed": "250", + "travel_acceleration": "20000", + "travel_jerk": "500", + "travel_speed": "1000", + "wall_generator": "classic", + "wall_loops": "2", + "compatible_printers": [ + "FLSun T1 0.4 nozzle" + ], + "exclude_object": "1" +} \ No newline at end of file diff --git a/resources/profiles_template/Template/filament/filament_sbs_template.json b/resources/profiles_template/Template/filament/filament_sbs_template.json new file mode 100644 index 0000000000..2cc7bd22c6 --- /dev/null +++ b/resources/profiles_template/Template/filament/filament_sbs_template.json @@ -0,0 +1,168 @@ +{ + "type": "filament", + "name": "Generic SBS template", + "instantiation": "false", + "activate_air_filtration": [ + "0" + ], + "additional_cooling_fan_speed": [ + "40" + ], + "chamber_temperatures": [ + "0" + ], + "close_fan_the_first_x_layers": [ + "3" + ], + "complete_print_exhaust_fan_speed": [ + "70" + ], + "cool_plate_temp": [ + "70" + ], + "cool_plate_temp_initial_layer": [ + "70" + ], + "during_print_exhaust_fan_speed": [ + "70" + ], + "eng_plate_temp": [ + "70" + ], + "eng_plate_temp_initial_layer": [ + "70" + ], + "fan_cooling_layer_time": [ + "100" + ], + "fan_max_speed": [ + "40" + ], + "fan_min_speed": [ + "0" + ], + "filament_cost": [ + "15" + ], + "filament_density": [ + "1.02" + ], + "filament_deretraction_speed": [ + "nil" + ], + "filament_diameter": [ + "1.75" + ], + "filament_flow_ratio": [ + "0.98" + ], + "filament_is_support": [ + "0" + ], + "filament_max_volumetric_speed": [ + "23" + ], + "filament_minimal_purge_on_wipe_tower": [ + "15" + ], + "filament_retract_before_wipe": [ + "nil" + ], + "filament_retract_restart_extra": [ + "nil" + ], + "filament_retract_when_changing_layer": [ + "nil" + ], + "filament_retraction_length": [ + "nil" + ], + "filament_retraction_minimum_travel": [ + "nil" + ], + "filament_retraction_speed": [ + "nil" + ], + "filament_settings_id": [ + "" + ], + "filament_soluble": [ + "0" + ], + "filament_type": [ + "SBS" + ], + "filament_vendor": [ + "Generic" + ], + "filament_wipe": [ + "nil" + ], + "filament_wipe_distance": [ + "nil" + ], + "filament_z_hop": [ + "nil" + ], + "filament_z_hop_types": [ + "nil" + ], + "full_fan_speed_layer": [ + "0" + ], + "hot_plate_temp": [ + "5705" + ], + "hot_plate_temp_initial_layer": [ + "70" + ], + "nozzle_temperature": [ + "235" + ], + "nozzle_temperature_initial_layer": [ + "235" + ], + "nozzle_temperature_range_low": [ + "215" + ], + "nozzle_temperature_range_high": [ + "250" + ], + "overhang_fan_speed": [ + "100" + ], + "overhang_fan_threshold": [ + "50%" + ], + "reduce_fan_stop_start_freq": [ + "0" + ], + "required_nozzle_HRC": [ + "3" + ], + "slow_down_for_layer_cooling": [ + "1" + ], + "slow_down_layer_time": [ + "4" + ], + "slow_down_min_speed": [ + "20" + ], + "temperature_vitrification": [ + "70" + ], + "textured_plate_temp": [ + "70" + ], + "textured_plate_temp_initial_layer": [ + "70" + ], + "compatible_printers": [], + "filament_start_gcode": [ + "; filament start gcode\n{if (bed_temperature[current_extruder] >45)||(bed_temperature_initial_layer[current_extruder] >45)}M106 P3 S255\n{elsif(bed_temperature[current_extruder] >35)||(bed_temperature_initial_layer[current_extruder] >35)}M106 P3 S180\n{endif}\n\n{if activate_air_filtration[current_extruder] && support_air_filtration}\nM106 P3 S{during_print_exhaust_fan_speed_num[current_extruder]} \n{endif}" + ], + "filament_end_gcode": [ + "; filament end gcode \nM106 P3 S0\n" + ] +} \ No newline at end of file diff --git a/src/BaseException.cpp b/src/BaseException.cpp index 705ac8f8c1..2443ebe4bb 100644 --- a/src/BaseException.cpp +++ b/src/BaseException.cpp @@ -358,7 +358,7 @@ void CBaseException::ShowExceptionInformation() OutputString(_T("Exception Flag :0x%x "), m_pEp->ExceptionRecord->ExceptionFlags); OutputString(_T("NumberParameters :%ld \n"), m_pEp->ExceptionRecord->NumberParameters); - for (unsigned int i = 0; i < m_pEp->ExceptionRecord->NumberParameters; i++) + for (int i = 0; i < m_pEp->ExceptionRecord->NumberParameters; i++) { OutputString(_T("Param %d :0x%x \n"), i, m_pEp->ExceptionRecord->ExceptionInformation[i]); } diff --git a/src/OrcaSlicer.cpp b/src/OrcaSlicer.cpp index 71c39d874c..bb52a0aea1 100644 --- a/src/OrcaSlicer.cpp +++ b/src/OrcaSlicer.cpp @@ -1190,8 +1190,9 @@ int CLI::run(int argc, char **argv) //BBS: add plate data related logic PlateDataPtrs plate_data_src; std::vector plate_obj_size_infos; + int arrange_option; int plate_to_slice = 0, filament_count = 0, duplicate_count = 0, real_duplicate_count = 0; - bool first_file = true, is_bbl_3mf = false, need_arrange = true, up_config_to_date = false, normative_check = true, duplicate_single_object = false, use_first_fila_as_default = false, minimum_save = false, enable_timelapse = false; + bool first_file = true, is_bbl_3mf = false, need_arrange = true, has_thumbnails = false, up_config_to_date = false, normative_check = true, duplicate_single_object = false, use_first_fila_as_default = false, minimum_save = false, enable_timelapse = false; bool allow_rotations = true, skip_modified_gcodes = false, avoid_extrusion_cali_region = false, skip_useless_pick = false, allow_newer_file = false; Semver file_version; std::map orients_requirement; @@ -1545,7 +1546,7 @@ int CLI::run(int argc, char **argv) { ModelObject* object = model.objects[obj_index]; - for (int clone_index = 1; clone_index < clone_count; clone_index++) + for (unsigned int clone_index = 1; clone_index < clone_count; clone_index++) { ModelObject* newObj = model.add_object(*object); newObj->name = object->name +"_"+ std::to_string(clone_index+1); @@ -1618,7 +1619,7 @@ int CLI::run(int argc, char **argv) } } catch (std::exception& e) { - boost::nowide::cerr << "construct_assemble_list: " << e.what() << std::endl; + boost::nowide::cerr << construct_assemble_list << ": " << e.what() << std::endl; record_exit_reson(outfile_dir, CLI_DATA_FILE_ERROR, 0, cli_errors[CLI_DATA_FILE_ERROR], sliced_info); flush_and_exit(CLI_DATA_FILE_ERROR); } @@ -2102,7 +2103,7 @@ int CLI::run(int argc, char **argv) record_exit_reson(outfile_dir, CLI_INVALID_PARAMS, 0, cli_errors[CLI_INVALID_PARAMS], sliced_info); flush_and_exit(CLI_INVALID_PARAMS); } - for (int index = 0; index < filament_count; index ++) + for (unsigned int index = 0; index < filament_count; index ++) { std::string file = uptodate_filaments[index]; DynamicPrintConfig config; @@ -2219,7 +2220,7 @@ int CLI::run(int argc, char **argv) } //upwards check - bool process_compatible = false, /* machine_upwards = false, */ machine_switch = false; + bool process_compatible = false, machine_upwards = false, machine_switch = false; BOOST_LOG_TRIVIAL(info) << boost::format("current printer %1%, new printer %2%, current process %3%, new process %4%")%current_printer_name %new_printer_name %current_process_name %new_process_name; BOOST_LOG_TRIVIAL(info) << boost::format("current printer inherits %1%, new printer inherits %2%, current process inherits %3%, new process inherits %4%") %current_printer_system_name %new_printer_system_name %current_process_system_name %new_process_system_name; @@ -2289,7 +2290,7 @@ int CLI::run(int argc, char **argv) for (int index = 0; index < upward_compatible_printers.size(); index++) { if (upward_compatible_printers[index] == new_printer_system_name) { process_compatible = true; - // machine_upwards = true; + machine_upwards = true; BOOST_LOG_TRIVIAL(info) << boost::format("new printer is upward_compatible"); break; } @@ -2899,8 +2900,7 @@ int CLI::run(int argc, char **argv) for (auto& model : m_models) for (ModelObject* o : model.objects) { - /* ModelObject* new_object = */ - m.add_object(*o); + ModelObject* new_object = m.add_object(*o); //BOOST_LOG_TRIVIAL(info) << "object "<name <<", id :" << o->id().id << "\n"; //orients_requirement.emplace(new_object->id().id, orients_requirement[o->id().id]); //orients_requirement.erase(o->id().id); @@ -3343,6 +3343,7 @@ int CLI::run(int argc, char **argv) BOOST_LOG_TRIVIAL(info) << boost::format("downward_check: all failed, size %1%")%downward_check_size; break; } + Slic3r::GUI::PartPlate* cur_plate = (Slic3r::GUI::PartPlate *)partplate_list.get_plate(index); Vec3d size = plate_obj_size_infos[index].obj_bbox.size(); for (int index2 = 0; index2 < downward_check_size; index2 ++) @@ -3392,6 +3393,7 @@ int CLI::run(int argc, char **argv) } // Loop through transform options. + bool user_center_specified = false; Points beds = get_bed_shape(m_print_config); ArrangeParams arrange_cfg; @@ -3415,6 +3417,7 @@ int CLI::run(int argc, char **argv) ModelObject* new_object = m.add_object(); new_object->name = _u8L("Assembly"); new_object->add_instance(); + int idx = 0; for (auto& model : m_models) for (ModelObject* o : model.objects) { for (auto volume : o->volumes) { @@ -3516,6 +3519,7 @@ int CLI::run(int argc, char **argv) } } } else if (opt_key == "center") { + user_center_specified = true; for (auto &model : m_models) { model.add_default_instances(); // this affects instances: @@ -3815,6 +3819,7 @@ int CLI::run(int argc, char **argv) { //do arrange for plate ArrangePolygons selected, unselected; + Model& model = m_models[0]; arrange_cfg = ArrangeParams(); // reset all params get_print_sequence(cur_plate, m_print_config, arrange_cfg.is_seq_print); @@ -3840,6 +3845,7 @@ int CLI::run(int argc, char **argv) if (!arrange_cfg.is_seq_print && assemble_plate.filaments_count > 1) { //prepare the wipe tower + int plate_count = partplate_list.get_plate_count(); auto printer_structure_opt = m_print_config.option>("printer_structure"); const float tower_brim_width = m_print_config.option("prime_tower_width", true)->value; @@ -4225,6 +4231,7 @@ int CLI::run(int argc, char **argv) //float depth = v * (filaments_cnt - 1) / (layer_height * w); Vec3d wipe_tower_size = cur_plate->estimate_wipe_tower_size(m_print_config, w, v, filaments_cnt); + Vec3d plate_origin = cur_plate->get_origin(); int plate_width, plate_depth, plate_height; partplate_list.get_plate_size(plate_width, plate_depth, plate_height); float depth = wipe_tower_size(1); @@ -4603,7 +4610,7 @@ int CLI::run(int argc, char **argv) } // loop through action options - bool export_to_3mf = false, load_slicedata = false, export_slicedata = false; + bool export_to_3mf = false, load_slicedata = false, export_slicedata = false, export_slicedata_error = false; bool no_check = false; std::string export_3mf_file, load_slice_data_dir, export_slice_data_dir, export_stls_dir; std::vector calibration_thumbnails; @@ -5092,6 +5099,7 @@ int CLI::run(int argc, char **argv) int ret = print->export_cached_data(plate_dir, with_space); if (ret) { BOOST_LOG_TRIVIAL(error) << "plate "<< index+1<< ": export Slicing data error, ret=" << ret; + export_slicedata_error = true; if (fs::exists(plate_dir)) fs::remove_all(plate_dir); record_exit_reson(outfile_dir, ret, index+1, cli_errors[ret], sliced_info); @@ -5218,7 +5226,8 @@ int CLI::run(int argc, char **argv) bool need_regenerate_top_thumbnail = oriented_or_arranged || regenerate_thumbnails; bool need_create_thumbnail_group = false, need_create_no_light_group = false, need_create_top_group = false; - // get color for platedata + // get type and color for platedata + auto* filament_types = dynamic_cast(m_print_config.option("filament_type")); const ConfigOptionStrings* filament_color = dynamic_cast(m_print_config.option("filament_colour")); auto* filament_id = dynamic_cast(m_print_config.option("filament_ids")); const ConfigOptionFloats* nozzle_diameter_option = dynamic_cast(m_print_config.option("nozzle_diameter")); diff --git a/src/admesh/connect.cpp b/src/admesh/connect.cpp index 4cf78f076a..30a199120d 100644 --- a/src/admesh/connect.cpp +++ b/src/admesh/connect.cpp @@ -216,7 +216,7 @@ private: // This is a match. Record result in neighbors list. match_neighbors(edge, *link->next); // Delete the matched edge from the list. - // HashEdge *temp = link->next; + HashEdge *temp = link->next; link->next = link->next->next; // pool.destroy(temp); #ifndef NDEBUG diff --git a/src/admesh/normals.cpp b/src/admesh/normals.cpp index 02fb16bb80..f74ba01b6d 100644 --- a/src/admesh/normals.cpp +++ b/src/admesh/normals.cpp @@ -193,7 +193,7 @@ void stl_fix_normal_directions(stl_file *stl) norm_sw[facet_num] = 1; // Record this one as being fixed. ++ checked; } - // stl_normal *temp = head->next; // Delete this facet from the list. + stl_normal *temp = head->next; // Delete this facet from the list. head->next = head->next->next; // pool.destroy(temp); } else { // If we ran out of facets to fix: All of the facets in this part have been fixed. diff --git a/src/imgui/imgui_widgets.cpp b/src/imgui/imgui_widgets.cpp index 054312cfc0..ded72f4178 100644 --- a/src/imgui/imgui_widgets.cpp +++ b/src/imgui/imgui_widgets.cpp @@ -768,9 +768,11 @@ bool ImGui::BBLButtonEx(const char* label, const ImVec2& size_arg, ImGuiButtonFl bool hovered, held; bool pressed = ButtonBehavior(bb, id, &hovered, &held, flags); + bool b_hover = false; if (hovered) { PushStyleColor(ImGuiCol_Text,GetColorU32(ImGuiCol_CheckMark)); + b_hover = true; } // Render @@ -4165,6 +4167,8 @@ bool ImGui::BBLInputScalar(const char *label, ImGuiDataType data_type, void *p_d const ImRect frame_bb(window->DC.CursorPos, window->DC.CursorPos + ImVec2(w, label_size.y + style.FramePadding.y * 2.0f)); // Tabbing or CTRL-clicking on Drag turns it into an InputText const bool hovered = ItemHoverable(frame_bb, id); + // We are only allowed to access the state if we are already the active widget. + ImGuiInputTextState *state = GetInputTextState(id); bool push_color_count = 0; if (hovered || g.ActiveId == id) { @@ -6294,9 +6298,9 @@ bool ImGui::ColorButton(const char* desc_id, const ImVec4& col, ImGuiColorEditFl RenderFrameBorder(bb.Min, bb.Max, rounding); else #ifdef __APPLE__ - window->DrawList->AddRect(bb.Min - ImVec2(3, 3), bb.Max + ImVec2(3, 3), GetColorU32(ImGuiCol_FrameBg), rounding * 2,0,4.0f);; // Color button are often in need of some sort of border + window->DrawList->AddRect(bb.Min - ImVec2(3, 3), bb.Max + ImVec2(3, 3), GetColorU32(ImGuiCol_FrameBg), rounding * 2,NULL,4.0f);; // Color button are often in need of some sort of border #else - window->DrawList->AddRect(bb.Min - ImVec2(2, 2), bb.Max + ImVec2(2, 2), GetColorU32(ImGuiCol_FrameBg), rounding * 2,0,3.0f); // Color button are often in need of some sort of border + window->DrawList->AddRect(bb.Min - ImVec2(2, 2), bb.Max + ImVec2(2, 2), GetColorU32(ImGuiCol_FrameBg), rounding * 2,NULL,3.0f); // Color button are often in need of some sort of border #endif } @@ -7093,6 +7097,7 @@ bool ImGui::BBLImageSelectable(ImTextureID user_texture_id, const ImVec2& size_a // Text stays at the submission position, but bounding box may be extended on both sides const float arrow_size = (flags & ImGuiComboFlags_NoArrowButton) ? 0.0f : GetFrameHeight(); + const ImVec2 text_min = ImVec2(pos.x + arrow_size, pos.y); const ImVec2 text_max(min_x + size.x, pos.y + size.y); // Selectables are meant to be tightly packed together with no click-gap, so we extend their box to cover spacing between selectable. @@ -7204,6 +7209,7 @@ bool ImGui::BBLImageSelectable(ImTextureID user_texture_id, const ImVec2& size_a if (flags & ImGuiSelectableFlags_Disabled) PushStyleColor(ImGuiCol_Text, style.Colors[ImGuiCol_TextDisabled]); // Render + const ImU32 col = GetColorU32((held && hovered) ? ImGuiCol_ButtonActive : hovered ? ImGuiCol_ButtonHovered : ImGuiCol_Button); ImVec2 p_min = bb.Min + ImVec2(style.ItemInnerSpacing.x, (bb.Max.y - bb.Min.y - font_size.y) / 2); ImVec2 p_max = p_min + font_size; window->DrawList->AddImage(user_texture_id, p_min, p_max, uv0, uv1, selected || (held && hovered) ? GetColorU32(ImVec4(1.f, 1.f, 1.f, 1.f)) : GetColorU32(tint_col)); diff --git a/src/imguizmo/ImGuizmo.cpp b/src/imguizmo/ImGuizmo.cpp index 0f717395f9..1acf8b63e4 100644 --- a/src/imguizmo/ImGuizmo.cpp +++ b/src/imguizmo/ImGuizmo.cpp @@ -2807,6 +2807,7 @@ namespace IMGUIZMO_NAMESPACE { static bool isDraging = false; static bool isClicking = false; + static bool isInside = false; static vec_t interpolationUp; static vec_t interpolationDir; static int interpolationFrames = 0; @@ -3054,6 +3055,7 @@ namespace IMGUIZMO_NAMESPACE LookAt(&newEye.x, &camTarget.x, &newUp.x, view); viewUpdated = true; } + isInside = gContext.mbMouseOver && ImRect(position, position + size).Contains(io.MousePos); if (io.MouseDown[0] && (fabsf(io.MouseDelta[0]) || fabsf(io.MouseDelta[1])) && isClicking) { diff --git a/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp b/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp index 4f8cf964b9..ab5f7678fd 100644 --- a/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp +++ b/src/libnest2d/include/libnest2d/geometry_traits_nfp.hpp @@ -182,6 +182,7 @@ inline TPoint referenceVertex(const RawShape& sh) template inline NfpResult nfpInnerRectBed(const RawBox &bed, const RawShape &other) { using Vertex = TPoint; + using Edge = _Segment; namespace sl = shapelike; auto sbox = sl::boundingBox(other); diff --git a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp index ebe3da6c5d..65a3344b04 100644 --- a/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp +++ b/src/libnest2d/include/libnest2d/placers/nfpplacer.hpp @@ -1119,6 +1119,7 @@ private: for (const Item& item : items_) { if (!item.is_virt_object) { extruders.insert(item.extrude_ids.begin(), item.extrude_ids.end()); } } + bool need_wipe_tower = extruders.size() > 1; std::vector objs,excludes; for (const Item &item : items_) { diff --git a/src/libslic3r/AppConfig.cpp b/src/libslic3r/AppConfig.cpp index 054a09c4f7..7d114b45fc 100644 --- a/src/libslic3r/AppConfig.cpp +++ b/src/libslic3r/AppConfig.cpp @@ -18,7 +18,9 @@ #include #include #include +#include #include +#include #include #include #include diff --git a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp index 6e344daf58..b57c84d639 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategy.cpp @@ -1,6 +1,7 @@ //Copyright (c) 2022 Ultimaker B.V. //CuraEngine is released under the terms of the AGPLv3 or higher. +#include #include "BeadingStrategy.hpp" #include "Point.hpp" diff --git a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp index c42ef3d2f3..97acd271ac 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/BeadingStrategyFactory.cpp @@ -9,6 +9,7 @@ #include "RedistributeBeadingStrategy.hpp" #include "OuterWallInsetBeadingStrategy.hpp" +#include #include namespace Slic3r::Arachne diff --git a/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp b/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp index 93ffdfb750..2b4dda0272 100644 --- a/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp +++ b/src/libslic3r/Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp @@ -3,6 +3,7 @@ #include "RedistributeBeadingStrategy.hpp" +#include #include namespace Slic3r::Arachne diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp index 9278fb49b7..19d49c3e12 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidation.cpp @@ -1595,6 +1595,7 @@ SkeletalTrapezoidation::edge_t* SkeletalTrapezoidation::getQuadMaxRedgeTo(edge_t void SkeletalTrapezoidation::propagateBeadingsUpward(std::vector& upward_quad_mids, ptr_vector_t& node_beadings) { + const auto _central_filter_dist = central_filter_dist(); for (auto upward_quad_mids_it = upward_quad_mids.rbegin(); upward_quad_mids_it != upward_quad_mids.rend(); ++upward_quad_mids_it) { edge_t* upward_edge = *upward_quad_mids_it; @@ -1611,7 +1612,7 @@ void SkeletalTrapezoidation::propagateBeadingsUpward(std::vector& upwar { // Only propagate to places where there is place continue; } - assert((upward_edge->from->data.distance_to_boundary != upward_edge->to->data.distance_to_boundary || shorter_then(upward_edge->to->p - upward_edge->from->p, central_filter_dist())) && "zero difference R edges should always be central"); + assert((upward_edge->from->data.distance_to_boundary != upward_edge->to->data.distance_to_boundary || shorter_then(upward_edge->to->p - upward_edge->from->p, _central_filter_dist)) && "zero difference R edges should always be central"); coord_t length = (upward_edge->to->p - upward_edge->from->p).cast().norm(); BeadingPropagation upper_beading = lower_beading; upper_beading.dist_to_bottom_source += length; diff --git a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp index e19fbc209b..c49340ec59 100644 --- a/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp +++ b/src/libslic3r/Arachne/SkeletalTrapezoidationGraph.cpp @@ -8,6 +8,9 @@ #include +#include "utils/linearAlg2D.hpp" +#include "../Line.hpp" + namespace Slic3r::Arachne { diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp index b671b80735..ac7b88af83 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.cpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.cpp @@ -4,6 +4,7 @@ #include #include "ExtrusionLine.hpp" +#include "linearAlg2D.hpp" #include "../../VariableWidth.hpp" namespace Slic3r::Arachne diff --git a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp index ab68eb129b..ee783fbeba 100644 --- a/src/libslic3r/Arachne/utils/ExtrusionLine.hpp +++ b/src/libslic3r/Arachne/utils/ExtrusionLine.hpp @@ -245,6 +245,15 @@ static inline Polygon to_polygon(const ExtrusionLine &line) return out; } +static Points to_points(const ExtrusionLine &extrusion_line) +{ + Points points; + points.reserve(extrusion_line.junctions.size()); + for (const ExtrusionJunction &junction : extrusion_line.junctions) + points.emplace_back(junction.p); + return points; +} + #if 0 static BoundingBox get_extents(const ExtrusionLine &extrusion_line) { @@ -272,15 +281,6 @@ static BoundingBox get_extents(const std::vector &extrusi return bbox; } -static Points to_points(const ExtrusionLine &extrusion_line) -{ - Points points; - points.reserve(extrusion_line.junctions.size()); - for (const ExtrusionJunction &junction : extrusion_line.junctions) - points.emplace_back(junction.p); - return points; -} - static std::vector to_points(const std::vector &extrusion_lines) { std::vector points; diff --git a/src/libslic3r/Arachne/utils/SquareGrid.cpp b/src/libslic3r/Arachne/utils/SquareGrid.cpp index 856eb5968b..ae89965795 100644 --- a/src/libslic3r/Arachne/utils/SquareGrid.cpp +++ b/src/libslic3r/Arachne/utils/SquareGrid.cpp @@ -2,6 +2,7 @@ //CuraEngine is released under the terms of the AGPLv3 or higher. #include "SquareGrid.hpp" +#include "../../Point.hpp" using namespace Slic3r::Arachne; diff --git a/src/libslic3r/Arrange.cpp b/src/libslic3r/Arrange.cpp index f9559ede24..d82997aaa9 100644 --- a/src/libslic3r/Arrange.cpp +++ b/src/libslic3r/Arrange.cpp @@ -199,19 +199,23 @@ void update_selected_items_axis_align(ArrangePolygons& selected, const DynamicPr } if (std::abs(a00) > EPSILON) { - double db1_2, db1_6, db1_12, db1_24; - double m00, m10, m01, m20, m11, m02; + double db1_2, db1_6, db1_12, db1_24, db1_20, db1_60; + double m00, m10, m01, m20, m11, m02, m30, m21, m12, m03; if (a00 > 0) { db1_2 = 0.5; db1_6 = 0.16666666666666666666666666666667; db1_12 = 0.083333333333333333333333333333333; db1_24 = 0.041666666666666666666666666666667; + db1_20 = 0.05; + db1_60 = 0.016666666666666666666666666666667; } else { db1_2 = -0.5; db1_6 = -0.16666666666666666666666666666667; db1_12 = -0.083333333333333333333333333333333; db1_24 = -0.041666666666666666666666666666667; + db1_20 = -0.05; + db1_60 = -0.016666666666666666666666666666667; } m00 = a00 * db1_2; m10 = a10 * db1_6; @@ -219,6 +223,10 @@ void update_selected_items_axis_align(ArrangePolygons& selected, const DynamicPr m20 = a20 * db1_12; m11 = a11 * db1_24; m02 = a02 * db1_12; + m30 = a30 * db1_20; + m21 = a21 * db1_60; + m12 = a12 * db1_60; + m03 = a03 * db1_20; double cx = m10 / m00; double cy = m01 / m00; diff --git a/src/libslic3r/BlacklistedLibraryCheck.cpp b/src/libslic3r/BlacklistedLibraryCheck.cpp index 2c9bf9b8e9..938f542497 100644 --- a/src/libslic3r/BlacklistedLibraryCheck.cpp +++ b/src/libslic3r/BlacklistedLibraryCheck.cpp @@ -1,5 +1,6 @@ #include "BlacklistedLibraryCheck.hpp" +#include #include #ifdef WIN32 diff --git a/src/libslic3r/Brim.cpp b/src/libslic3r/Brim.cpp index 089761cd18..9690a92d00 100644 --- a/src/libslic3r/Brim.cpp +++ b/src/libslic3r/Brim.cpp @@ -576,6 +576,7 @@ double getadhesionCoeff(const PrintObject* printObject) auto& insts = printObject->instances(); auto objectVolumes = insts[0].model_instance->get_object()->volumes; + auto print = printObject->print(); std::vector extrudersFirstLayer; auto firstLayerRegions = printObject->layers().front()->regions(); if (!firstLayerRegions.empty()) { @@ -1583,6 +1584,7 @@ static void make_inner_brim(const Print& print, const ConstPrintObjectPtrs& top_ //BBS: generate out brim by offseting ExPolygons 'islands_area_ex' Polygons tryExPolygonOffset(const ExPolygons islandAreaEx, const Print& print) { + const auto scaled_resolution = scaled(print.config().resolution.value); Polygons loops; ExPolygons islands_ex; Flow flow = print.brim_flow(); @@ -1657,6 +1659,7 @@ void make_brim(const Print& print, PrintTryCancel try_cancel, Polygons& islands_ std::map brimAreaMap; std::map supportBrimAreaMap; Flow flow = print.brim_flow(); + const auto scaled_resolution = scaled(print.config().resolution.value); ExPolygons islands_area_ex = outer_inner_brim_area(print, float(flow.scaled_spacing()), brimAreaMap, supportBrimAreaMap, objPrintVec, printExtruders); diff --git a/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp b/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp index e5038df54b..5963b29109 100644 --- a/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp +++ b/src/libslic3r/CSGMesh/ModelToCSGMesh.hpp @@ -28,7 +28,7 @@ bool model_to_csgmesh(const ModelObject &mo, { bool do_positives = parts_to_include & mpartsPositive; bool do_negatives = parts_to_include & mpartsNegative; - // bool do_drillholes = parts_to_include & mpartsDrillHoles; + bool do_drillholes = parts_to_include & mpartsDrillHoles; bool do_splits = parts_to_include & mpartsDoSplits; bool has_splitable_volume = false; diff --git a/src/libslic3r/Clipper2Utils.cpp b/src/libslic3r/Clipper2Utils.cpp index 92acd5e385..5793900a5b 100644 --- a/src/libslic3r/Clipper2Utils.cpp +++ b/src/libslic3r/Clipper2Utils.cpp @@ -23,7 +23,7 @@ Clipper2Lib::Paths64 Slic3rPoints_to_Paths64(const std::vector& in) { Clipper2Lib::Paths64 out; out.reserve(in.size()); - for (const T item: in) { + for (const T& item: in) { Clipper2Lib::Path64 path; path.reserve(item.size()); for (const Slic3r::Point& point : item.points) diff --git a/src/libslic3r/Config.cpp b/src/libslic3r/Config.cpp index d74e5ef3bd..e826bb4c5b 100644 --- a/src/libslic3r/Config.cpp +++ b/src/libslic3r/Config.cpp @@ -775,9 +775,10 @@ ConfigSubstitutions ConfigBase::load(const std::string &file, ForwardCompatibili //BBS: add json support ConfigSubstitutions ConfigBase::load_from_json(const std::string &file, ForwardCompatibilitySubstitutionRule compatibility_rule, std::map& key_values, std::string& reason) { + int ret = 0; ConfigSubstitutionContext substitutions_ctxt(compatibility_rule); - load_from_json(file, substitutions_ctxt, true, key_values, reason); + ret = load_from_json(file, substitutions_ctxt, true, key_values, reason); return std::move(substitutions_ctxt.substitutions); } diff --git a/src/libslic3r/Emboss.cpp b/src/libslic3r/Emboss.cpp index 13d494d949..82015c4827 100644 --- a/src/libslic3r/Emboss.cpp +++ b/src/libslic3r/Emboss.cpp @@ -334,8 +334,8 @@ bool Emboss::divide_segments_for_close_point(ExPolygons &expolygons, double dist const Points &poly_pts = poly.points; const Point &line_a = poly_pts[id.point_index]; const Point &line_b = (!ids.is_last_point(id)) ? poly_pts[id.point_index + 1] : poly_pts.front(); - assert(line_a == lines[index].a.cast()); - assert(line_b == lines[index].b.cast()); + assert(line_a == lines[index].a.cast()); + assert(line_b == lines[index].b.cast()); if (p == line_a || p == line_b) continue; divs.emplace_back(p, index); diff --git a/src/libslic3r/ExtrusionEntityCollection.cpp b/src/libslic3r/ExtrusionEntityCollection.cpp index 3383d0de34..9a37ff3ac1 100644 --- a/src/libslic3r/ExtrusionEntityCollection.cpp +++ b/src/libslic3r/ExtrusionEntityCollection.cpp @@ -2,6 +2,7 @@ #include "ShortestPath.hpp" #include #include +#include namespace Slic3r { diff --git a/src/libslic3r/Fill/FillConcentric.cpp b/src/libslic3r/Fill/FillConcentric.cpp index 93a54a0739..f7fe82ad5f 100644 --- a/src/libslic3r/Fill/FillConcentric.cpp +++ b/src/libslic3r/Fill/FillConcentric.cpp @@ -9,6 +9,20 @@ namespace Slic3r { +template +int stagger_seam_index(int ind, LINE_T line) +{ + Point const *point = &line.points[ind]; + double dist = 0; + while (dist < 0.5 / SCALING_FACTOR) { + ind = (ind + 1) % line.points.size(); + Point const &next = line.points[ind]; + dist += point->distance_to(next); + point = &next; + }; + return ind; +} + void FillConcentric::_fill_surface_single( const FillParams ¶ms, unsigned int thickness_layers, @@ -42,7 +56,7 @@ void FillConcentric::_fill_surface_single( size_t iPathFirst = polylines_out.size(); Point last_pos(0, 0); for (const Polygon &loop : loops) { - polylines_out.emplace_back(loop.split_at_index(last_pos.nearest_point_index(loop.points))); + polylines_out.emplace_back(loop.split_at_index(stagger_seam_index(last_pos.nearest_point_index(loop.points), loop))); last_pos = polylines_out.back().last_point(); } @@ -110,7 +124,7 @@ void FillConcentric::_fill_surface_single(const FillParams& params, ThickPolyline thick_polyline = Arachne::to_thick_polyline(*extrusion); if (extrusion->is_closed) - thick_polyline.start_at_index(last_pos.nearest_point_index(thick_polyline.points)); + thick_polyline.start_at_index(stagger_seam_index(last_pos.nearest_point_index(thick_polyline.points), thick_polyline)); thick_polylines_out.emplace_back(std::move(thick_polyline)); last_pos = thick_polylines_out.back().last_point(); } diff --git a/src/libslic3r/Fill/FillConcentricInternal.cpp b/src/libslic3r/Fill/FillConcentricInternal.cpp index 1deb99183a..d565992ea1 100644 --- a/src/libslic3r/Fill/FillConcentricInternal.cpp +++ b/src/libslic3r/Fill/FillConcentricInternal.cpp @@ -1,3 +1,6 @@ +#include "../ClipperUtils.hpp" +#include "../ExPolygon.hpp" +#include "../Surface.hpp" #include "../VariableWidth.hpp" #include "Arachne/WallToolPaths.hpp" diff --git a/src/libslic3r/Fill/FillCrossHatch.cpp b/src/libslic3r/Fill/FillCrossHatch.cpp index 7b9f96fa78..10f421bef3 100644 --- a/src/libslic3r/Fill/FillCrossHatch.cpp +++ b/src/libslic3r/Fill/FillCrossHatch.cpp @@ -1,5 +1,6 @@ #include "../ClipperUtils.hpp" #include "../ShortestPath.hpp" +#include "../Surface.hpp" #include #include "FillCrossHatch.hpp" @@ -64,6 +65,7 @@ static Polylines generate_transform_pattern(double inprogress, int direction, co odd_poly.points.reserve(num_of_cycle * one_cycle.size()); // replicate to odd line + Point translate = Point(0, 0); for (size_t i = 0; i < num_of_cycle; i++) { Polyline odd_points; odd_points = Polyline(one_cycle); @@ -150,6 +152,7 @@ static Polylines generate_infill_layers(coordf_t z_height, double repeat_ratio, coordf_t period = trans_layer_size + repeat_layer_size; coordf_t remains = z_height - std::floor(z_height / period) * period; coordf_t trans_z = remains - repeat_layer_size; // put repeat layer first. + coordf_t repeat_z = remains; int phase = fmod(z_height, period * 2) - (period - 1); // add epsilon int direction = phase <= 0 ? -1 : 1; diff --git a/src/libslic3r/Fill/Lightning/Generator.cpp b/src/libslic3r/Fill/Lightning/Generator.cpp index a0cbe2b21e..bf1142ee45 100644 --- a/src/libslic3r/Fill/Lightning/Generator.cpp +++ b/src/libslic3r/Fill/Lightning/Generator.cpp @@ -4,6 +4,7 @@ #include "Generator.hpp" #include "TreeNode.hpp" +#include "../../ClipperUtils.hpp" #include "../../Layer.hpp" #include "../../Print.hpp" @@ -34,7 +35,7 @@ static std::string get_svg_filename(std::string layer_nr_or_z, std::string tag rand_init = true; } - // int rand_num = rand() % 1000000; + int rand_num = rand() % 1000000; //makedir("./SVG"); std::string prefix = "./SVG/"; std::string suffix = ".svg"; diff --git a/src/libslic3r/FlushVolCalc.cpp b/src/libslic3r/FlushVolCalc.cpp index c135b93948..29cbcbe401 100644 --- a/src/libslic3r/FlushVolCalc.cpp +++ b/src/libslic3r/FlushVolCalc.cpp @@ -1,4 +1,5 @@ #include +#include #include "slic3r/Utils/ColorSpaceConvert.hpp" #include "FlushVolCalc.hpp" diff --git a/src/libslic3r/Format/3mf.cpp b/src/libslic3r/Format/3mf.cpp index 20007ee579..894de0549b 100644 --- a/src/libslic3r/Format/3mf.cpp +++ b/src/libslic3r/Format/3mf.cpp @@ -298,6 +298,7 @@ bool PrusaFileParser::check_3mf_from_prusa(const std::string filename) const std::string model_file = "3D/3dmodel.model"; int model_file_index = mz_zip_reader_locate_file(&archive, model_file.c_str(), nullptr, 0); if (model_file_index != -1) { + int depth = 0; m_parser = XML_ParserCreate(nullptr); XML_SetUserData(m_parser, (void *) this); XML_SetElementHandler(m_parser, start_element_handler, nullptr); diff --git a/src/libslic3r/Format/OBJ.cpp b/src/libslic3r/Format/OBJ.cpp index f9a19d7a1b..abaae3692b 100644 --- a/src/libslic3r/Format/OBJ.cpp +++ b/src/libslic3r/Format/OBJ.cpp @@ -100,6 +100,7 @@ bool load_obj(const char *path, TriangleMesh *meshptr, ObjInfo& obj_info, std::s obj_info.is_single_mtl = data.usemtls.size() == 1 && mtl_data.new_mtl_unmap.size() == 1; obj_info.face_colors.reserve(num_faces + num_quads); } + bool has_color = data.has_vertex_color; for (size_t i = 0; i < num_vertices; ++ i) { size_t j = i * OBJ_VERTEX_LENGTH; its.vertices.emplace_back(data.coordinates[j], data.coordinates[j + 1], data.coordinates[j + 2]); diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 191246af74..90f4536b95 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -878,6 +878,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool extract_object_model() { mz_zip_archive archive; + mz_zip_archive_file_stat stat; mz_zip_zero_struct(&archive); if (!open_zip_reader(&archive, zip_path)) { @@ -1616,9 +1617,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) } else { _extract_xml_from_archive(archive, sub_rels, _handle_start_relationships_element, _handle_end_relationships_element); + int index = 0; #if 0 - int index = 0; for (auto path : m_sub_model_paths) { if (proFn) { proFn(IMPORT_STAGE_READ_FILES, ++index, 3 + m_sub_model_paths.size(), cb_cancel); @@ -2218,6 +2219,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _BBS_3MF_Importer::_extract_from_archive(mz_zip_archive& archive, std::string const & path, std::function extract, bool restore) { + mz_uint num_entries = mz_zip_reader_get_num_files(&archive); mz_zip_archive_file_stat stat; std::string path2 = path; if (path2.front() == '/') path2 = path2.substr(1); @@ -3317,9 +3319,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) // Adjust backup object/volume id std::istringstream iss(m_curr_object->uuid); int backup_id; - // bool need_replace = false; + bool need_replace = false; if (iss >> std::hex >> backup_id) { - // need_replace = (m_curr_object->id != backup_id); + need_replace = (m_curr_object->id != backup_id); m_curr_object->id = backup_id; } if (!m_curr_object->components.empty()) @@ -4620,7 +4622,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) its.vertices.assign(sub_object->geometry.vertices.begin(), sub_object->geometry.vertices.end()); // BBS - for (const std::string prop_str : sub_object->geometry.face_properties) { + for (const std::string& prop_str : sub_object->geometry.face_properties) { FaceProperty face_prop; face_prop.from_string(prop_str); its.properties.push_back(face_prop); @@ -4992,9 +4994,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (is_bbl_3mf && boost::ends_with(current_object->uuid, OBJECT_UUID_SUFFIX) && top_importer->m_load_restore) { std::istringstream iss(current_object->uuid); int backup_id; - // bool need_replace = false; + bool need_replace = false; if (iss >> std::hex >> backup_id) { - // need_replace = (current_object->id != backup_id); + need_replace = (current_object->id != backup_id); current_object->id = backup_id; } //if (need_replace) @@ -5989,6 +5991,8 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) auto src_gcode_file = plate_data->gcode_file; boost::filesystem::ifstream ifs(src_gcode_file, std::ios::binary); std::string buf(64 * 1024, 0); + const std::size_t & size = boost::filesystem::file_size(src_gcode_file); + std::size_t left_size = size; while (ifs) { ifs.read(buf.data(), buf.size()); int read_bytes = ifs.gcount(); @@ -6226,6 +6230,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) bool _BBS_3MF_Exporter::_add_bbox_file_to_archive(mz_zip_archive& archive, const PlateBBoxData& id_bboxes, int index) { + bool res = false; nlohmann::json j; id_bboxes.to_json(j); std::string out = j.dump(); @@ -6615,6 +6620,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) auto iter = objects_data.find(objects[i]); ObjectToObjectDataMap objects_data2; objects_data2.insert(*iter); + auto & object = *iter->second.object; mz_zip_archive archive; mz_zip_zero_struct(&archive); mz_zip_writer_init_heap(&archive, 0, 1024 * 1024); @@ -7531,7 +7537,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) if (!m_skip_model && instance_size > 0) { - for (int j = 0; j < instance_size; ++j) + for (unsigned int j = 0; j < instance_size; ++j) { stream << " <" << INSTANCE_TAG << ">\n"; int obj_id = plate_data->objects_and_instances[j].first; diff --git a/src/libslic3r/Format/svg.cpp b/src/libslic3r/Format/svg.cpp index ed170cf570..4a96274b99 100644 --- a/src/libslic3r/Format/svg.cpp +++ b/src/libslic3r/Format/svg.cpp @@ -113,6 +113,9 @@ double get_profile_area(std::vector> profile_line_poin double area = 0; for (auto line_points : profile_line_points) { + bool flag = true; + if (line_points.second.Y() < line_points.first.Y()) flag = false; + area += (line_points.second.X() + line_points.first.X() - 2 * min_x) * (line_points.second.Y() - line_points.first.Y()) / 2; } @@ -134,6 +137,8 @@ bool get_svg_profile(const char *path, std::vector &element_infos, int name_index = 1; for (NSVGshape *shape = svg_data->shapes; shape; shape = shape->next) { + char * id = shape->id; + int interpolation_precision = 10; // Number of interpolation points float step = 1.0f / float(interpolation_precision - 1); @@ -379,6 +384,7 @@ bool load_svg(const char *path, Model *model, std::string &message) ModelObject *new_object = model->add_object(); // new_object->name ? new_object->input_file = path; + auto stage_unit3 = stl.size() / LOAD_STEP_STAGE_UNIT_NUM + 1; for (size_t i = 0; i < stl.size(); i++) { // BBS: maybe mesh is empty from step file. Don't add if (stl[i].stats.number_of_facets > 0) { diff --git a/src/libslic3r/GCode.cpp b/src/libslic3r/GCode.cpp index fc29347f9a..0fa6bbcbba 100644 --- a/src/libslic3r/GCode.cpp +++ b/src/libslic3r/GCode.cpp @@ -116,6 +116,7 @@ static std::vector get_path_of_change_filament(const Print& print) if (excluse_area.size() != 4) return out_points; + double cutter_area_x = excluse_area[2].x() + 2; double cutter_area_y = excluse_area[2].y() + 2; double start_x_position = start_point.x(); @@ -2491,6 +2492,7 @@ void GCode::_do_export(Print& print, GCodeOutputStream &file, ThumbnailsGenerato m_avoid_crossing_perimeters.use_external_mp_once(); // BBS. change tool before moving to origin point. if (m_writer.need_toolchange(initial_extruder_id)) { + const PrintObjectConfig& object_config = object.config(); coordf_t initial_layer_print_height = print.config().initial_layer_print_height.value; file.write(this->set_extruder(initial_extruder_id, initial_layer_print_height, true)); prime_extruder = true; @@ -3275,17 +3277,14 @@ namespace ProcessLayer const PrintConfig &config) { std::string gcode; + // BBS + bool single_filament_print = config.filament_diameter.size() == 1; if (custom_gcode != nullptr) { // Extruder switches are processed by LayerTools, they should be filtered out. assert(custom_gcode->type != CustomGCode::ToolChange); CustomGCode::Type gcode_type = custom_gcode->type; - - //BBS: inserting color gcode is removed -#if 0 - // BBS - bool single_filament_print = config.filament_diameter.size() == 1; bool color_change = gcode_type == CustomGCode::ColorChange; bool tool_change = gcode_type == CustomGCode::ToolChange; // Tool Change is applied as Color Change for a single extruder printer only. @@ -3297,7 +3296,8 @@ namespace ProcessLayer m600_extruder_before_layer = custom_gcode->extruder - 1; else if (gcode_type == CustomGCode::PausePrint) pause_print_msg = custom_gcode->extra; - + //BBS: inserting color gcode is removed +#if 0 // we should add or not colorprint_change in respect to nozzle_diameter count instead of really used extruders count if (color_change || tool_change) { @@ -3360,8 +3360,8 @@ namespace Skirt { { // Prime all extruders printing over the 1st layer over the skirt lines. size_t n_loops = print.skirt().entities.size(); - // size_t n_tools = layer_tools.extruders.size(); - // size_t lines_per_extruder = (n_loops + n_tools - 1) / n_tools; + size_t n_tools = layer_tools.extruders.size(); + size_t lines_per_extruder = (n_loops + n_tools - 1) / n_tools; // BBS. Extrude skirt with first extruder if min_skirt_length is zero //ORCA: Always extrude skirt with first extruder, independantly of if the minimum skirt length is zero or not. The code below @@ -3717,8 +3717,7 @@ LayerResult GCode::process_layer( Skirt::make_skirt_loops_per_extruder_other_layers(print, layer_tools, m_skirt_done); // BBS: get next extruder according to flush and soluble - // Orca: Left unused due to removed code below -/* auto get_next_extruder = [&](int current_extruder,const std::vector&extruders) { + auto get_next_extruder = [&](int current_extruder,const std::vector&extruders) { std::vector flush_matrix(cast(m_config.flush_volumes_matrix.values)); const unsigned int number_of_extruders = (unsigned int)(sqrt(flush_matrix.size()) + EPSILON); // Extract purging volumes for each extruder pair: @@ -3736,7 +3735,7 @@ LayerResult GCode::process_layer( } } return next_extruder; - }; */ + }; if (m_config.enable_overhang_speed && !m_config.overhang_speed_classic) { for (const auto &layer_to_print : layers) { @@ -4494,8 +4493,7 @@ std::string GCode::extrude_loop(ExtrusionLoop loop, std::string description, dou float seam_overhang = std::numeric_limits::lowest(); if (!m_config.spiral_mode && description == "perimeter") { assert(m_layer != nullptr); - bool is_outer_wall_first = m_config.wall_sequence == WallSequence::OuterInner; - m_seam_placer.place_seam(m_layer, loop, is_outer_wall_first, this->last_pos(), seam_overhang); + m_seam_placer.place_seam(m_layer, loop, this->last_pos(), seam_overhang); } else loop.split_at(last_pos, false); @@ -4871,8 +4869,8 @@ std::string GCode::extrude_support(const ExtrusionEntityCollection &support_fill std::string gcode; if (! support_fills.entities.empty()) { - // const double support_speed = m_config.support_speed.value; - // const double support_interface_speed = m_config.get_abs_value("support_interface_speed"); + const double support_speed = m_config.support_speed.value; + const double support_interface_speed = m_config.get_abs_value("support_interface_speed"); for (const ExtrusionEntity *ee : support_fills.entities) { ExtrusionRole role = ee->role(); assert(role == erSupportMaterial || role == erSupportMaterialInterface || role == erSupportTransition); @@ -6041,6 +6039,7 @@ bool GCode::needs_retraction(const Polyline &travel, ExtrusionRole role, LiftTyp for (int i = 0; i < m_config.z_hop.size(); i++) max_z_hop = std::max(max_z_hop, (float)m_config.z_hop.get_at(i)); float travel_len_thresh = scale_(max_z_hop / tan(this->writer().extruder()->travel_slope())); + float accum_len = 0.f; Polyline clipped_travel; clipped_travel.append(Polyline(travel.points[0], travel.points[1])); @@ -6142,6 +6141,7 @@ std::string GCode::retract(bool toolchange, bool is_last_retraction, LiftType li } if (needs_lift && can_lift) { + size_t extruder_id = m_writer.extruder()->id(); gcode += m_writer.lift(!m_spiral_vase ? lift_type : LiftType::NormalLift); } diff --git a/src/libslic3r/GCode/ConflictChecker.cpp b/src/libslic3r/GCode/ConflictChecker.cpp index 8b8e43aea2..fb69372a9a 100644 --- a/src/libslic3r/GCode/ConflictChecker.cpp +++ b/src/libslic3r/GCode/ConflictChecker.cpp @@ -28,6 +28,7 @@ inline Grids line_rasterization(const Line &line, int64_t xdist = scale_(1), int Point rayStart = line.a; Point rayEnd = line.b; IndexPair currentVoxel = point_map_grid_index(rayStart, xdist, ydist); + IndexPair firstVoxel = currentVoxel; IndexPair lastVoxel = point_map_grid_index(rayEnd, xdist, ydist); Point ray = rayEnd - rayStart; diff --git a/src/libslic3r/GCode/GCodeProcessor.cpp b/src/libslic3r/GCode/GCodeProcessor.cpp index c8d61bc488..852bebda31 100644 --- a/src/libslic3r/GCode/GCodeProcessor.cpp +++ b/src/libslic3r/GCode/GCodeProcessor.cpp @@ -392,8 +392,10 @@ void GCodeProcessor::TimeProcessor::reset() extruder_unloaded = true; machine_envelope_processing_enabled = false; machine_limits = MachineEnvelopeConfig(); - filament_load_times = std::vector(); - filament_unload_times = std::vector(); + filament_load_times = 0.0f; + filament_unload_times = 0.0f; + machine_tool_change_time = 0.0f; + for (size_t i = 0; i < static_cast(PrintEstimatedStatistics::ETimeMode::Count); ++i) { machines[i].reset(); @@ -1115,23 +1117,9 @@ void GCodeProcessor::apply_config(const PrintConfig& config) // Filament load / unload times are not specific to a firmware flavor. Let anybody use it if they find it useful. // As of now the fields are shown at the UI dialog in the same combo box as the ramming values, so they // are considered to be active for the single extruder multi-material printers only. - if(s_IsBBLPrinter){ - // BBL printers use machine_load_filament_time and machine_unload_filament_time - m_time_processor.filament_load_times.resize(1); - m_time_processor.filament_load_times[0] = static_cast(config.machine_load_filament_time.value); - m_time_processor.filament_unload_times.resize(1); - m_time_processor.filament_unload_times[0] = static_cast(config.machine_unload_filament_time.value); - } else { - // for non-BBL printers use the filament_load_time and filament_unload_time - m_time_processor.filament_load_times.resize(config.filament_load_time.values.size()); - for (size_t i = 0; i < config.filament_load_time.values.size(); ++i) { - m_time_processor.filament_load_times[i] = static_cast(config.filament_load_time.values[i]); - } - m_time_processor.filament_unload_times.resize(config.filament_unload_time.values.size()); - for (size_t i = 0; i < config.filament_unload_time.values.size(); ++i) { - m_time_processor.filament_unload_times[i] = static_cast(config.filament_unload_time.values[i]); - } - } + m_time_processor.filament_load_times = static_cast(config.machine_load_filament_time.value); + m_time_processor.filament_unload_times = static_cast(config.machine_unload_filament_time.value); + m_time_processor.machine_tool_change_time = static_cast(config.machine_tool_change_time.value); for (size_t i = 0; i < static_cast(PrintEstimatedStatistics::ETimeMode::Count); ++i) { float max_acceleration = get_option_value(m_time_processor.machine_limits.machine_max_acceleration_extruding, i); @@ -1352,36 +1340,18 @@ void GCodeProcessor::apply_config(const DynamicPrintConfig& config) m_extruder_temps.resize(m_result.extruders_count); - if(s_IsBBLPrinter){ - // BBL printers use machine_load_filament_time and machine_unload_filament_time - const ConfigOptionFloat* machine_load_filament_time = config.option("machine_load_filament_time"); - if (machine_load_filament_time != nullptr){ - m_time_processor.filament_load_times.resize(1); - m_time_processor.filament_load_times[0] = static_cast(machine_load_filament_time->value); - } + const ConfigOptionFloat* machine_load_filament_time = config.option("machine_load_filament_time"); + if (machine_load_filament_time != nullptr) + m_time_processor.filament_load_times = static_cast(machine_load_filament_time->value); + + const ConfigOptionFloat* machine_unload_filament_time = config.option("machine_unload_filament_time"); + if (machine_unload_filament_time != nullptr) + m_time_processor.filament_unload_times = static_cast(machine_unload_filament_time->value); + + const ConfigOptionFloat* machine_tool_change_time = config.option("machine_tool_change_time"); + if (machine_tool_change_time != nullptr) + m_time_processor.machine_tool_change_time = static_cast(machine_tool_change_time->value); - const ConfigOptionFloat* machine_unload_filament_time = config.option("machine_unload_filament_time"); - if (machine_unload_filament_time != nullptr){ - m_time_processor.filament_unload_times.resize(1); - m_time_processor.filament_unload_times[0] = static_cast(machine_unload_filament_time->value); - } - } else { - // non-BBL printers use filament_load_time and filament_unload_time - const ConfigOptionFloats* filament_load_time = config.option("filament_load_time"); - if (filament_load_time != nullptr) { - m_time_processor.filament_load_times.resize(filament_load_time->values.size()); - for (size_t i = 0; i < filament_load_time->values.size(); ++i) { - m_time_processor.filament_load_times[i] = static_cast(filament_load_time->values[i]); - } - } - const ConfigOptionFloats* filament_unload_time = config.option("filament_unload_time"); - if (filament_unload_time != nullptr) { - m_time_processor.filament_unload_times.resize(filament_unload_time->values.size()); - for (size_t i = 0; i < filament_unload_time->values.size(); ++i) { - m_time_processor.filament_unload_times[i] = static_cast(filament_unload_time->values[i]); - } - } - } if (m_flavor == gcfMarlinLegacy || m_flavor == gcfMarlinFirmware || m_flavor == gcfKlipper) { const ConfigOptionFloats* machine_max_acceleration_x = config.option("machine_max_acceleration_x"); @@ -3481,6 +3451,7 @@ void GCodeProcessor::process_G2_G3(const GCodeReader::GCodeLine& line) arc_length = ((int)line.p()) * 2 * PI * (start_point - m_arc_center).norm(); //BBS: Attention! arc_onterpolation does not support P mode while P is not 1. arc_interpolation(start_point, end_point, m_arc_center, (m_move_path_type == EMovePathType::Arc_move_ccw)); + float radian = ArcSegment::calc_arc_radian(start_point, end_point, m_arc_center, (m_move_path_type == EMovePathType::Arc_move_ccw)); Vec3f start_dir = Circle::calc_tangential_vector(start_point, m_arc_center, (m_move_path_type == EMovePathType::Arc_move_ccw)); Vec3f end_dir = Circle::calc_tangential_vector(end_point, m_arc_center, (m_move_path_type == EMovePathType::Arc_move_ccw)); @@ -4373,6 +4344,7 @@ void GCodeProcessor::process_T(const std::string_view command) float extra_time = get_filament_unload_time(static_cast(m_last_extruder_id)); m_time_processor.extruder_unloaded = false; extra_time += get_filament_load_time(static_cast(m_extruder_id)); + extra_time += m_time_processor.machine_tool_change_time; simulate_st_synchronize(extra_time); } @@ -5277,32 +5249,14 @@ void GCodeProcessor::set_travel_acceleration(PrintEstimatedStatistics::ETimeMode float GCodeProcessor::get_filament_load_time(size_t extruder_id) { - if (s_IsBBLPrinter) { - // BBL printers - // BBS: change load time to machine config and all extruder has same value - return m_time_processor.extruder_unloaded ? 0.0f : m_time_processor.filament_load_times[0]; - } else { - // non-BBL printers - return (m_time_processor.filament_load_times.empty() || m_time_processor.extruder_unloaded) ? - 0.0f : - ((extruder_id < m_time_processor.filament_load_times.size()) ? m_time_processor.filament_load_times[extruder_id] : - m_time_processor.filament_load_times.front()); - } + //BBS: change load time to machine config and all extruder has same value + return m_time_processor.extruder_unloaded ? 0.0f : m_time_processor.filament_load_times; } float GCodeProcessor::get_filament_unload_time(size_t extruder_id) { - if (s_IsBBLPrinter) { - // BBL printers - // BBS: change unload time to machine config and all extruder has same value - return m_time_processor.extruder_unloaded ? 0.0f : m_time_processor.filament_unload_times[0]; - } else { - // non-BBL printers - return (m_time_processor.filament_unload_times.empty() || m_time_processor.extruder_unloaded) ? - 0.0f : - ((extruder_id < m_time_processor.filament_unload_times.size()) ? m_time_processor.filament_unload_times[extruder_id] : - m_time_processor.filament_unload_times.front()); - } + //BBS: change unload time to machine config and all extruder has same value + return m_time_processor.extruder_unloaded ? 0.0f : m_time_processor.filament_unload_times; } //BBS diff --git a/src/libslic3r/GCode/GCodeProcessor.hpp b/src/libslic3r/GCode/GCodeProcessor.hpp index 976f4541c5..da47cea688 100644 --- a/src/libslic3r/GCode/GCodeProcessor.hpp +++ b/src/libslic3r/GCode/GCodeProcessor.hpp @@ -492,8 +492,10 @@ class Print; bool machine_envelope_processing_enabled; MachineEnvelopeConfig machine_limits; // Additional load / unload times for a filament exchange sequence. - std::vector filament_load_times; - std::vector filament_unload_times; + float filament_load_times; + float filament_unload_times; + //Orca: time for tool change + float machine_tool_change_time; bool disable_m73; std::array(PrintEstimatedStatistics::ETimeMode::Count)> machines; diff --git a/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp b/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp index 3043e091b5..776091adfb 100644 --- a/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp +++ b/src/libslic3r/GCode/RetractWhenCrossingPerimeters.cpp @@ -1,5 +1,6 @@ #include "../ClipperUtils.hpp" #include "../Layer.hpp" +#include "../Polyline.hpp" #include "RetractWhenCrossingPerimeters.hpp" diff --git a/src/libslic3r/GCode/SeamPlacer.cpp b/src/libslic3r/GCode/SeamPlacer.cpp index e447d12d87..6927cb554b 100644 --- a/src/libslic3r/GCode/SeamPlacer.cpp +++ b/src/libslic3r/GCode/SeamPlacer.cpp @@ -1486,7 +1486,7 @@ void SeamPlacer::init(const Print &print, std::function throw_if_can } } -void SeamPlacer::place_seam(const Layer *layer, ExtrusionLoop &loop, bool external_first, +void SeamPlacer::place_seam(const Layer *layer, ExtrusionLoop &loop, const Point &last_pos, float& overhang) const { using namespace SeamPlacerImpl; const PrintObject *po = layer->object(); diff --git a/src/libslic3r/GCode/SeamPlacer.hpp b/src/libslic3r/GCode/SeamPlacer.hpp index a8a04cc672..8a973d0d8a 100644 --- a/src/libslic3r/GCode/SeamPlacer.hpp +++ b/src/libslic3r/GCode/SeamPlacer.hpp @@ -143,7 +143,7 @@ public: void init(const Print &print, std::function throw_if_canceled_func); - void place_seam(const Layer *layer, ExtrusionLoop &loop, bool external_first, const Point &last_pos, float& overhang) const; + void place_seam(const Layer *layer, ExtrusionLoop &loop, const Point &last_pos, float& overhang) const; private: void gather_seam_candidates(const PrintObject *po, const SeamPlacerImpl::GlobalModelInfo &global_model_info); void calculate_candidates_visibility(const PrintObject *po, diff --git a/src/libslic3r/GCode/ToolOrdering.cpp b/src/libslic3r/GCode/ToolOrdering.cpp index 1f2aa13e7f..0abeedd58e 100644 --- a/src/libslic3r/GCode/ToolOrdering.cpp +++ b/src/libslic3r/GCode/ToolOrdering.cpp @@ -325,6 +325,7 @@ ToolOrdering::ToolOrdering(const Print &print, unsigned int first_extruder, bool std::vector ToolOrdering::generate_first_layer_tool_order(const Print& print) { std::vector tool_order; + int initial_extruder_id = -1; std::map min_areas_per_extruder; for (auto object : print.objects()) { @@ -353,6 +354,7 @@ std::vector ToolOrdering::generate_first_layer_tool_order(const Pr } } + double max_minimal_area = 0.; for (auto ape : min_areas_per_extruder) { auto iter = tool_order.begin(); for (; iter != tool_order.end(); iter++) { @@ -385,6 +387,7 @@ std::vector ToolOrdering::generate_first_layer_tool_order(const Pr std::vector ToolOrdering::generate_first_layer_tool_order(const PrintObject& object) { std::vector tool_order; + int initial_extruder_id = -1; std::map min_areas_per_extruder; auto first_layer = object.get_layer(0); for (auto layerm : first_layer->regions()) { @@ -409,6 +412,7 @@ std::vector ToolOrdering::generate_first_layer_tool_order(const Pr } } + double max_minimal_area = 0.; for (auto ape : min_areas_per_extruder) { auto iter = tool_order.begin(); for (; iter != tool_order.end(); iter++) { diff --git a/src/libslic3r/GCode/WipeTower.cpp b/src/libslic3r/GCode/WipeTower.cpp index f18afb5d30..39c603a470 100644 --- a/src/libslic3r/GCode/WipeTower.cpp +++ b/src/libslic3r/GCode/WipeTower.cpp @@ -1072,6 +1072,8 @@ void WipeTower::toolchange_Wipe( const float target_speed = is_first_layer() ? std::min(m_first_layer_speed * 60.f, 4800.f) : 4800.f; float wipe_speed = 0.33f * target_speed; + float start_y = writer.y(); + #if 0 // if there is less than 2.5*m_perimeter_width to the edge, advance straightaway (there is likely a blob anyway) if ((m_left_to_right ? xr-writer.x() : writer.x()-xl) < 2.5f*m_perimeter_width) { @@ -1130,6 +1132,8 @@ void WipeTower::toolchange_Wipe( m_left_to_right = !m_left_to_right; } + float end_y = writer.y(); + // We may be going back to the model - wipe the nozzle. If this is followed // by finish_layer, this wipe path will be overwritten. //writer.add_wipe_point(writer.x(), writer.y()) @@ -1418,6 +1422,7 @@ void WipeTower::plan_tower() // If wipe tower height is between the current and next member, set the min_depth as linear interpolation between them auto next_height_to_depth = *iter; if (next_height_to_depth.first > m_wipe_tower_height) { + float height_base = curr_height_to_depth.first; float height_diff = next_height_to_depth.first - curr_height_to_depth.first; float min_depth_base = curr_height_to_depth.second; float depth_diff = next_height_to_depth.second - curr_height_to_depth.second; diff --git a/src/libslic3r/Geometry.cpp b/src/libslic3r/Geometry.cpp index 62385a5018..54dcb14cca 100644 --- a/src/libslic3r/Geometry.cpp +++ b/src/libslic3r/Geometry.cpp @@ -4,14 +4,21 @@ #include "ClipperUtils.hpp" #include "ExPolygon.hpp" #include "Line.hpp" +#include "clipper.hpp" +#include #include #include +#include +#include +#include +#include #include #include #include #include #include +#include #if defined(_MSC_VER) && defined(__clang__) #define BOOST_NO_CXX17_HDR_STRING_VIEW diff --git a/src/libslic3r/Geometry/Circle.cpp b/src/libslic3r/Geometry/Circle.cpp index d7279c3b1b..6796671954 100644 --- a/src/libslic3r/Geometry/Circle.cpp +++ b/src/libslic3r/Geometry/Circle.cpp @@ -1,5 +1,7 @@ #include "Circle.hpp" +#include "../Polygon.hpp" + #include #include #include diff --git a/src/libslic3r/Geometry/Voronoi.cpp b/src/libslic3r/Geometry/Voronoi.cpp index f9ab6a6945..58923b9ada 100644 --- a/src/libslic3r/Geometry/Voronoi.cpp +++ b/src/libslic3r/Geometry/Voronoi.cpp @@ -2,6 +2,7 @@ #include "libslic3r/Arachne/utils/PolygonsSegmentIndex.hpp" #include "libslic3r/Geometry/VoronoiUtils.hpp" +#include "libslic3r/Geometry/VoronoiUtilsCgal.hpp" #include "libslic3r/MultiMaterialSegmentation.hpp" #include diff --git a/src/libslic3r/JumpPointSearch.cpp b/src/libslic3r/JumpPointSearch.cpp index a3b078127b..f8ef2ff100 100644 --- a/src/libslic3r/JumpPointSearch.cpp +++ b/src/libslic3r/JumpPointSearch.cpp @@ -1,18 +1,26 @@ #include "JumpPointSearch.hpp" #include "BoundingBox.hpp" +#include "ExPolygon.hpp" #include "Point.hpp" #include "libslic3r/AStar.hpp" #include "libslic3r/KDTreeIndirect.hpp" +#include "libslic3r/Polygon.hpp" #include "libslic3r/Polyline.hpp" #include "libslic3r/libslic3r.h" +#include +#include +#include #include #include #include #include #include +#include #include #include +#include + //#define DEBUG_FILES #ifdef DEBUG_FILES #include "libslic3r/SVG.hpp" diff --git a/src/libslic3r/Line.cpp b/src/libslic3r/Line.cpp index 51c84a16f7..7e75d56322 100644 --- a/src/libslic3r/Line.cpp +++ b/src/libslic3r/Line.cpp @@ -1,7 +1,9 @@ #include "Geometry.hpp" #include "Line.hpp" +#include "Polyline.hpp" #include #include +#include namespace Slic3r { diff --git a/src/libslic3r/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp index 3cd0771962..779d5a042b 100644 --- a/src/libslic3r/MeshBoolean.cpp +++ b/src/libslic3r/MeshBoolean.cpp @@ -201,12 +201,12 @@ indexed_triangle_set cgal_to_indexed_triangle_set(const _Mesh &cgalmesh) const auto &vertices = cgalmesh.vertices(); int vsize = int(vertices.size()); - for (auto &vi : vertices) { + for (const auto &vi : vertices) { auto &v = cgalmesh.point(vi); // Don't ask... its.vertices.emplace_back(to_vec3f(v)); } - for (auto &face : faces) { + for (const auto &face : faces) { auto vtc = cgalmesh.vertices_around_face(cgalmesh.halfedge(face)); int i = 0; @@ -330,7 +330,7 @@ void segment(CGALMesh& src, std::vector& dst, double smoothing_alpha = // fill holes typedef boost::graph_traits<_EpicMesh>::halfedge_descriptor halfedge_descriptor; -// typedef boost::graph_traits<_EpicMesh>::vertex_descriptor vertex_descriptor; + typedef boost::graph_traits<_EpicMesh>::vertex_descriptor vertex_descriptor; std::vector border_cycles; CGAL::Polygon_mesh_processing::extract_boundary_cycles(out, std::back_inserter(border_cycles)); for (halfedge_descriptor h : border_cycles) @@ -693,7 +693,7 @@ bool do_boolean_single(McutMesh &srcMesh, const McutMesh &cutMesh, const std::st McutMesh outMesh; int N_vertices = 0; // traversal of all connected components - for (unsigned int n = 0; n < numConnComps; ++n) { + for (int n = 0; n < numConnComps; ++n) { // query the data of each connected component from MCUT McConnectedComponent connComp = connectedComponents[n]; diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index ad63a21ee6..63be317b6d 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -442,7 +442,7 @@ ModelObject* Model::add_object(const ModelObject &other) this->objects.push_back(new_object); // BBS: backup if (need_backup) { - if (other.get_model()) { + if (auto model = other.get_model()) { auto iter = object_backup_id_map.find(other.id().id); if (iter != object_backup_id_map.end()) { object_backup_id_map.emplace(new_object->id().id, iter->second); @@ -2615,7 +2615,7 @@ size_t ModelVolume::split(unsigned int max_extruders) size_t ivolume = std::find(this->object->volumes.begin(), this->object->volumes.end(), this) - this->object->volumes.begin(); const std::string name = this->name; - // unsigned int extruder_counter = 0; + unsigned int extruder_counter = 0; const Vec3d offset = this->get_offset(); for (TriangleMesh &mesh : meshes) { @@ -2930,6 +2930,9 @@ bool Model::obj_import_vertex_color_deal(const std::vector &verte std::cout << "error"; } }; + auto calc_tri_area = [](const Vec3f &v0, const Vec3f &v1, const Vec3f &v2) { + return std::abs((v0 - v1).cross(v0 - v2).norm()) / 2; + }; auto volume = obj->volumes[0]; volume->config.set("extruder", first_extruder_id); auto face_count = volume->mesh().its.indices.size(); @@ -3029,6 +3032,7 @@ bool Model::obj_import_face_color_deal(const std::vector &face_fi volume->mmu_segmentation_facets.reserve(face_count); if (volume->mesh().its.indices.size() != face_filament_ids.size()) { return false; } for (size_t i = 0; i < volume->mesh().its.indices.size(); i++) { + auto face = volume->mesh().its.indices[i]; auto filament_id = face_filament_ids[i]; if (filament_id <= 1) { continue; } std::string result; @@ -3534,7 +3538,7 @@ void check_model_ids_validity(const Model &model) for (const ModelInstance *model_instance : model_object->instances) check(model_instance->id()); } - for (const auto mm : model.materials) { + for (const auto& mm : model.materials) { check(mm.second->id()); check(mm.second->config.id()); } diff --git a/src/libslic3r/ModelArrange.cpp b/src/libslic3r/ModelArrange.cpp index f1f926fe6d..477509e69e 100644 --- a/src/libslic3r/ModelArrange.cpp +++ b/src/libslic3r/ModelArrange.cpp @@ -167,6 +167,7 @@ ArrangePolygon get_instance_arrange_poly(ModelInstance* instance, const Slic3r:: auto support_type_ptr = obj->get_config_value>(config, "support_type"); auto support_type = support_type_ptr->value; auto enable_support = supp_type_ptr->getBool(); + int support_int = support_type_ptr->getInt(); if (enable_support && (support_type == stNormalAuto || support_type == stNormal)) ap.brim_width = 6.0; diff --git a/src/libslic3r/MultiMaterialSegmentation.cpp b/src/libslic3r/MultiMaterialSegmentation.cpp index c0476de6d9..4fe0d6b4b1 100644 --- a/src/libslic3r/MultiMaterialSegmentation.cpp +++ b/src/libslic3r/MultiMaterialSegmentation.cpp @@ -338,6 +338,7 @@ static std::vector> get_all_next_arcs( if (arc.type == MMU_Graph::ARC_TYPE::BORDER && arc.color != color) continue; + Vec2d arc_line = graph.nodes[arc.to_idx].point - graph.nodes[arc.from_idx].point; next_continue_arc.emplace_back(&arc); all_next_arcs.emplace_back(next_continue_arc); } @@ -1285,6 +1286,7 @@ static void cut_segmented_layers(const std::vector &input_exp const std::function &throw_on_cancel_callback) { BOOST_LOG_TRIVIAL(debug) << "MM segmentation - cutting segmented layers in parallel - begin"; + const float interlocking_cut_width = interlocking_depth > 0.f ? std::max(cut_width - interlocking_depth, 0.f) : 0.f; tbb::parallel_for(tbb::blocked_range(0, segmented_regions.size()), [&segmented_regions, &input_expolygons, &cut_width, &interlocking_depth, &throw_on_cancel_callback](const tbb::blocked_range &range) { for (size_t layer_idx = range.begin(); layer_idx < range.end(); ++layer_idx) { diff --git a/src/libslic3r/MultiPoint.cpp b/src/libslic3r/MultiPoint.cpp index 0076300ea6..3cdae34105 100644 --- a/src/libslic3r/MultiPoint.cpp +++ b/src/libslic3r/MultiPoint.cpp @@ -370,6 +370,59 @@ Points MultiPoint::concave_hull_2d(const Points& pts, const double tolerence) } +//Orca: Distancing function used by IOI wall ordering algorithm for arachne +/** + * @brief Calculates the squared distance between a point and a line segment defined by two points. + * + * @param p The point. + * @param v The starting point of the line segment. + * @param w The ending point of the line segment. + * @return double The squared distance between the point and the line segment. + */ + double MultiPoint::squaredDistanceToLineSegment(const Point& p, const Point& v, const Point& w) { + // Calculate the squared length of the line segment + double l2 = (v - w).squaredNorm(); + // If the segment is a single point, return the squared distance to that point + if (l2 == 0.0) return (p - v).squaredNorm(); + // Project point p onto the line defined by v and w, and clamp the projection to the segment + double t = std::max(0.0, std::min(1.0, ((p - v).dot(w - v)) / l2)); + // Compute the projection point + Point projection{v.x() + t * (w.x() - v.x()), v.y() + t * (w.y() - v.y())}; + // Return the squared distance between the point and the projection + return (p - projection).squaredNorm(); +} + +//Orca: Distancing function used by IOI wall ordering algorithm for arachne +/** + * @brief Calculates the minimum distance between two lines defined by sets of points. + * + * @param A The first set of points defining a polyline. + * @param B The second set of points defining a polyline. + * @return double The minimum distance between the two polylines. + */ + double MultiPoint::minimumDistanceBetweenLinesDefinedByPoints(const Points& A, const Points& B) { + double min_distance = std::numeric_limits::infinity(); + + // Calculate the minimum distance between segments in A and points in B + for (size_t i = 0; i < A.size() - 1; ++i) { + for (const auto& b : B) { + double distance = squaredDistanceToLineSegment(b, A[i], A[i + 1]); + min_distance = std::min(min_distance, std::sqrt(distance)); + } + } + + // Calculate the minimum distance between segments in B and points in A + for (size_t i = 0; i < B.size() - 1; ++i) { + for (const auto& a : A) { + double distance = squaredDistanceToLineSegment(a, B[i], B[i + 1]); + min_distance = std::min(min_distance, std::sqrt(distance)); + } + } + + return min_distance; +} + + void MultiPoint3::translate(double x, double y) { for (Vec3crd &p : points) { diff --git a/src/libslic3r/MultiPoint.hpp b/src/libslic3r/MultiPoint.hpp index 4c1f9049ed..b6f74e5c88 100644 --- a/src/libslic3r/MultiPoint.hpp +++ b/src/libslic3r/MultiPoint.hpp @@ -98,6 +98,9 @@ public: static Points _douglas_peucker(const Points &points, const double tolerance); static Points visivalingam(const Points& pts, const double tolerance); static Points concave_hull_2d(const Points& pts, const double tolerence); + + //Orca: Distancing function used by IOI wall ordering algorithm for arachne + static double minimumDistanceBetweenLinesDefinedByPoints(const Points& A, const Points& B); inline auto begin() { return points.begin(); } inline auto begin() const { return points.begin(); } @@ -105,6 +108,10 @@ public: inline auto end() const { return points.end(); } inline auto cbegin() const { return points.begin(); } inline auto cend() const { return points.end(); } + +private: + //Orca: Distancing function used by IOI wall ordering algorithm for arachne + static double squaredDistanceToLineSegment(const Point& p, const Point& v, const Point& w); }; class MultiPoint3 diff --git a/src/libslic3r/Orient.cpp b/src/libslic3r/Orient.cpp index 2fcbb6389a..ce448fc7e6 100644 --- a/src/libslic3r/Orient.cpp +++ b/src/libslic3r/Orient.cpp @@ -138,6 +138,8 @@ public: auto cost_items = get_features(orientation, params.min_volume); + float unprintability = target_function(cost_items, params.min_volume); + results[orientation] = cost_items; BOOST_LOG_TRIVIAL(info) << std::fixed << std::setprecision(4) << "orientation:" << orientation.transpose() << ", cost:" << std::fixed << std::setprecision(4) << cost_items.field_values(); @@ -228,10 +230,10 @@ public: { std::unordered_map alignments; // init to 0 - for (Eigen::Index i = 0; i < areas_.size(); i++) + for (size_t i = 0; i < areas_.size(); i++) alignments.insert(std::pair(normals_.row(i), 0)); // cumulate areas - for (Eigen::Index i = 0; i < areas_.size(); i++) + for (size_t i = 0; i < areas_.size(); i++) { alignments[normals_.row(i)] += areas_(i); } @@ -255,11 +257,11 @@ public: Vec3f n1 = { 0, 0, 0 }; std::vector current_areas = {0, 0}; // init to 0 - for (Eigen::Index i = 0; i < areas_.size(); i++) { + for (size_t i = 0; i < areas_.size(); i++) { alignments_.insert(std::pair(quantize_normals_.row(i), std::pair(current_areas, n1))); } // cumulate areas - for (Eigen::Index i = 0; i < areas_.size(); i++) + for (size_t i = 0; i < areas_.size(); i++) { alignments_[quantize_normals_.row(i)].first[1] += areas_(i); if (areas_(i) > alignments_[quantize_normals_.row(i)].first[0]){ @@ -337,7 +339,7 @@ public: z_max_hull.resize(mesh_convex_hull.facets_count(), 1); its = mesh_convex_hull.its; - for (Eigen::Index i = 0; i < z_max_hull.rows(); i++) + for (size_t i = 0; i < z_max_hull.rows(); i++) { float z0 = its.get_vertex(i,0).dot(orientation); float z1 = its.get_vertex(i,1).dot(orientation); @@ -391,7 +393,7 @@ public: // filter overhang Eigen::VectorXf normal_projection(normals.rows(), 1);// = this->normals.dot(orientation); - for (Eigen::Index i = 0; i < normals.rows(); i++) + for (size_t i = 0; i < normals.rows(); i++) { normal_projection(i) = normals.row(i).dot(orientation); } @@ -457,6 +459,7 @@ public: cost = params.TAR_A * (overhang + params.TAR_B) + params.RELATIVE_F * (/*costs.volume/100*/overhang*params.TAR_C + params.TAR_D + params.TAR_LAF * costs.area_laf * params.use_low_angle_face) / (params.TAR_D + params.CONTOUR_F * costs.contour + params.BOTTOM_F * bottom + params.BOTTOM_HULL_F * bottom_hull + params.TAR_E * overhang + params.TAR_PROJ_AREA * costs.area_projected); } else { + float overhang = costs.overhang; cost = params.RELATIVE_F * (costs.overhang * params.TAR_C + params.TAR_D + params.TAR_LAF * costs.area_laf * params.use_low_angle_face) / (params.TAR_D + params.CONTOUR_F * costs.contour + params.BOTTOM_F * bottom + params.BOTTOM_HULL_F * bottom_hull + params.TAR_PROJ_AREA * costs.area_projected); } cost += (costs.bottom < params.BOTTOM_MIN) * 100;// +(costs.height_to_bottom_hull_ratio > params.height_to_bottom_hull_ratio_MIN) * 110; diff --git a/src/libslic3r/PerimeterGenerator.cpp b/src/libslic3r/PerimeterGenerator.cpp index 941cdf8f42..d37ff7f1d6 100644 --- a/src/libslic3r/PerimeterGenerator.cpp +++ b/src/libslic3r/PerimeterGenerator.cpp @@ -242,10 +242,12 @@ static std::deque split_polyline_by_degree(const Polyline &p Polyline right; Polyline temp_copy = polyline_with_insert_points; + size_t poly_size = polyline_with_insert_points.size(); // BBS: merge degree in limited range //find first degee base double degree_base = int(points_overhang[points_overhang.size() - 1] / min_degree_gap) * min_degree_gap + min_degree_gap; degree_base = degree_base > max_overhang_degree ? max_overhang_degree : degree_base; + double short_poly_len = 0; for (int point_idx = points_overhang.size() - 2; point_idx > 0; --point_idx) { double degree = points_overhang[point_idx]; @@ -938,6 +940,7 @@ static ExtrusionEntityCollection traverse_extrusions(const PerimeterGenerator& p if (perimeter_generator.config->overhang_speed_classic && perimeter_generator.config->enable_overhang_speed && perimeter_generator.config->fuzzy_skin == FuzzySkinType::None) { + Flow flow = is_external ? perimeter_generator.ext_perimeter_flow : perimeter_generator.perimeter_flow; std::map> clipper_serise; std::map recognization_paths; @@ -2250,6 +2253,7 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim if (!unsupported.empty()) { //only consider the part that can be bridged (really, by the bridge algorithm) //first, separate into islands (ie, each ExPlolygon) + int numploy = 0; //only consider the bottom layer that intersect unsupported, to be sure it's only on our island. ExPolygonCollection lower_island(support); //a detector per island @@ -2367,6 +2371,7 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim //ExPolygons no_bridge = diff_ex(offset_ex(unbridgeable, ext_perimeter_width * 3 / 2), last); //bridges_temp = diff_ex(bridges_temp, no_bridge); coordf_t offset_to_do = bridged_infill_margin; + bool first = true; unbridgeable = diff_ex(unbridgeable, offset_ex(bridges_temp, ext_perimeter_width)); while (offset_to_do > ext_perimeter_width * 1.5) { unbridgeable = offset2_ex(unbridgeable, -ext_perimeter_width / 4, ext_perimeter_width * 2.25, ClipperLib::jtSquare); @@ -2374,6 +2379,7 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim bridges_temp = offset_ex(bridges_temp, ext_perimeter_width, ClipperLib::jtMiter, 6.); unbridgeable = diff_ex(unbridgeable, offset_ex(bridges_temp, ext_perimeter_width)); offset_to_do -= ext_perimeter_width; + first = false; } unbridgeable = offset_ex(unbridgeable, ext_perimeter_width + offset_to_do, ClipperLib::jtSquare); bridges_temp = diff_ex(bridges_temp, unbridgeable); @@ -2436,6 +2442,166 @@ void PerimeterGenerator::process_no_bridge(Surfaces& all_surfaces, coord_t perim } } +// ORCA: +// Inner Outer Inner wall ordering mode perimeter order optimisation functions +/** + * @brief Finds all perimeters touching a given set of reference lines, given as indexes. + * + * @param entities The list of PerimeterGeneratorArachneExtrusion entities. + * @param referenceIndices A set of indices representing the reference points. + * @param threshold_external The distance threshold to consider for proximity for a reference perimeter with inset index 0 + * @param threshold_internal The distance threshold to consider for proximity for a reference perimeter with inset index 1+ + * @param considered_inset_idx What perimeter inset index are we searching for (eg. if we are searching for first internal perimeters proximate to the current reference perimeter, this value should be set to 1 etc). + * @return std::vector A vector of indices representing the touching perimeters. + */ +std::vector findAllTouchingPerimeters(const std::vector& entities, const std::unordered_set& referenceIndices, size_t threshold_external, size_t threshold_internal , size_t considered_inset_idx) { + std::unordered_set touchingIndices; + + for (const int refIdx : referenceIndices) { + const auto& referenceEntity = entities[refIdx]; + Points referencePoints = Arachne::to_points(*referenceEntity.extrusion); + for (size_t i = 0; i < entities.size(); ++i) { + // Skip already considered references and the reference entity + if (referenceIndices.count(i) > 0) continue; + const auto& entity = entities[i]; + if (entity.extrusion->inset_idx == 0) continue; // Ignore inset index 0 (external) perimeters from the re-ordering even if they are touching + + if (entity.extrusion->inset_idx != considered_inset_idx) { // Find Inset index perimeters that match the requested inset index + continue; // skip if they dont match + } + + Points points = Arachne::to_points(*entity.extrusion); + double distance = MultiPoint::minimumDistanceBetweenLinesDefinedByPoints(referencePoints, points); + // Add to touchingIndices if within threshold distance + size_t threshold=0; + if(referenceEntity.extrusion->inset_idx == 0) + threshold = threshold_external; + else + threshold = threshold_internal; + if (distance <= threshold) { + touchingIndices.insert(i); + } + } + } + return std::vector(touchingIndices.begin(), touchingIndices.end()); +} + +/** + * @brief Reorders perimeters based on proximity to the reference perimeter + * + * This approach finds all perimeters touching the external perimeter first and then finds all perimeters touching these new ones until none are left + * It ensures a level-by-level traversal, similar to BFS in graph theory. + * + * @param entities The list of PerimeterGeneratorArachneExtrusion entities. + * @param referenceIndex The index of the reference perimeter. + * @param threshold_external The distance threshold to consider for proximity for a reference perimeter with inset index 0 + * @param threshold_internal The distance threshold to consider for proximity for a reference perimeter with inset index 1+ + * @return std::vector The reordered list of perimeters based on proximity. + */ +std::vector reorderPerimetersByProximity(std::vector entities, size_t threshold_external, size_t threshold_internal) { + std::vector reordered; + std::unordered_set includedIndices; + + // Function to reorder perimeters starting from a given reference index + auto reorderFromReference = [&](int referenceIndex) { + std::unordered_set firstLevelIndices; + firstLevelIndices.insert(referenceIndex); + + // Find first level touching perimeters + std::vector firstLevelTouchingIndices = findAllTouchingPerimeters(entities, firstLevelIndices, threshold_external, threshold_internal, 1); + // Bring the largest first level perimeter to the front + // The longest first neighbour is most likely the dominant proximate perimeter + // hence printing it immediately after the external perimeter should speed things up + if (!firstLevelTouchingIndices.empty()) { + auto maxIt = std::max_element(firstLevelTouchingIndices.begin(), firstLevelTouchingIndices.end(), [&entities](int a, int b) { + return entities[a].extrusion->getLength() < entities[b].extrusion->getLength(); + }); + std::iter_swap(maxIt, firstLevelTouchingIndices.end() - 1); + } + // Insert first level perimeters into reordered list + reordered.push_back(entities[referenceIndex]); + includedIndices.insert(referenceIndex); + + for (int idx : firstLevelTouchingIndices) { + if (includedIndices.count(idx) == 0) { + reordered.push_back(entities[idx]); + includedIndices.insert(idx); + } + } + + // Loop through all inset indices above 1 + size_t currentInsetIndex = 2; + while (true) { + std::unordered_set currentLevelIndices(firstLevelTouchingIndices.begin(), firstLevelTouchingIndices.end()); + std::vector currentLevelTouchingIndices = findAllTouchingPerimeters(entities, currentLevelIndices, threshold_external, threshold_internal, currentInsetIndex); + + // Break if no more touching perimeters are found + if (currentLevelTouchingIndices.empty()) { + break; + } + + // Exclude any already included indices from the current level touching indices + currentLevelTouchingIndices.erase( + std::remove_if(currentLevelTouchingIndices.begin(), currentLevelTouchingIndices.end(), + [&](int idx) { return includedIndices.count(idx) > 0; }), + currentLevelTouchingIndices.end()); + + // Bring the largest current level perimeter to the end + if (!currentLevelTouchingIndices.empty()) { + auto maxIt = std::max_element(currentLevelTouchingIndices.begin(), currentLevelTouchingIndices.end(), [&entities](int a, int b) { + return entities[a].extrusion->getLength() < entities[b].extrusion->getLength(); + }); + std::iter_swap(maxIt, currentLevelTouchingIndices.begin()); + } + + // Insert current level perimeters into reordered list + for (int idx : currentLevelTouchingIndices) { + if (includedIndices.count(idx) == 0) { + reordered.push_back(entities[idx]); + includedIndices.insert(idx); + } + } + + // Prepare for the next level + firstLevelTouchingIndices = currentLevelTouchingIndices; + currentInsetIndex++; + } + }; + + // Loop through all perimeters and reorder starting from each inset index 0 perimeter + for (size_t refIdx = 0; refIdx < entities.size(); ++refIdx) { + if (entities[refIdx].extrusion->inset_idx == 0 && includedIndices.count(refIdx) == 0) { + reorderFromReference(refIdx); + } + } + + // Append any remaining entities that were not included + for (size_t i = 0; i < entities.size(); ++i) { + if (includedIndices.count(i) == 0) { + reordered.push_back(entities[i]); + } + } + + return reordered; +} + +/** + * @brief Reorders the vector to bring external perimeter (i.e. paths with inset index 0) that are also contours (i.e. external facing lines) to the front. + * + * This function uses a stable partition to move all external perimeter contour elements to the front of the vector, + * while maintaining the relative order of non-contour elements. + * + * @param ordered_extrusions The vector of PerimeterGeneratorArachneExtrusion to reorder. + */ +void bringContoursToFront(std::vector& ordered_extrusions) { + std::stable_partition(ordered_extrusions.begin(), ordered_extrusions.end(), [](const PerimeterGeneratorArachneExtrusion& extrusion) { + return (extrusion.extrusion->is_contour() && extrusion.extrusion->inset_idx==0); + }); +} +// ORCA: +// Inner Outer Inner wall ordering mode perimeter order optimisation functions ended + + // Thanks, Cura developers, for implementing an algorithm for generating perimeters with variable width (Arachne) that is based on the paper // "A framework for adaptive width control of dense contour-parallel toolpaths in fused deposition modeling" void PerimeterGenerator::process_arachne() @@ -2738,39 +2904,22 @@ void PerimeterGenerator::process_arachne() int arr_i, arr_j = 0; // indexes to run through the walls in the for loops int outer, first_internal, second_internal, max_internal, current_perimeter; // allocate index values - // Initiate reorder sequence to bring any index 1 (first internal) perimeters ahead of any second internal perimeters - // Leaving these out of order will result in print defects on the external wall as they will be extruded prior to any - // external wall. To do the re-ordering, we are creating two extrusion arrays - reordered_extrusions which will contain - // the reordered extrusions and skipped_extrusions will contain the ones that were skipped in the scan - std::vector reordered_extrusions, skipped_extrusions; - bool found_second_internal = false; // helper variable to indicate the start of a new island + // To address any remaining scenarios where the outer perimeter contour is not first on the list as arachne sometimes reorders the perimeters when clustering + // for OI mode that is used the basis for IOI + bringContoursToFront(ordered_extrusions); + std::vector reordered_extrusions; + + // Get searching thresholds. For an external perimeter we take the middle of the external perimeter width, split it in two, add the spacing to the internal perimeter and add half the internal perimeter width. + // This should get us to the middle of the internal perimeter. We then scale by 10% up for safety margin. + coord_t threshold_external = (this->ext_perimeter_flow.scaled_width()/2+this->ext_perimeter_flow.scaled_spacing()+this->perimeter_flow.scaled_width()/2) * 1.1; + // For the intenal perimeter threshold, the distance is the perimeter width plus the spacing, scaled by 10% for safety margin. + coord_t threshold_internal = (this->perimeter_flow.scaled_width()+this->perimeter_flow.scaled_spacing()) * 1.1; + + // Re-order extrusions based on distance + // Alorithm will aggresively optimise for the appearance of the outermost perimeter + ordered_extrusions = reorderPerimetersByProximity(ordered_extrusions,threshold_external,threshold_internal ); + reordered_extrusions = ordered_extrusions; // copy them into the reordered extrusions vector to allow for IOI operations to be performed below without altering the base ordered extrusions list. - for(auto extrusion_to_reorder : ordered_extrusions){ //scan the perimeters to reorder - switch (extrusion_to_reorder.extrusion->inset_idx) { - case 0: // external perimeter - if(found_second_internal){ //new island - move skipped extrusions to reordered array - for(auto extrusion_skipped : skipped_extrusions) - reordered_extrusions.emplace_back(extrusion_skipped); - skipped_extrusions.clear(); - } - reordered_extrusions.emplace_back(extrusion_to_reorder); - break; - case 1: // first internal perimeter - reordered_extrusions.emplace_back(extrusion_to_reorder); - break; - default: // second internal+ perimeter -> put them in the skipped extrusions array - skipped_extrusions.emplace_back(extrusion_to_reorder); - found_second_internal = true; - break; - } - } - if(ordered_extrusions.size()>reordered_extrusions.size()){ - // we didnt find any more islands, so lets move the remaining skipped perimeters to the reordered extrusions list. - for(auto extrusion_skipped : skipped_extrusions) - reordered_extrusions.emplace_back(extrusion_skipped); - skipped_extrusions.clear(); - } - // Now start the sandwich mode wall re-ordering using the reordered_extrusions as the basis // scan to find the external perimeter, first internal, second internal and last perimeter in the island. // We then advance the position index to move to the second island and continue until there are no more @@ -2800,7 +2949,8 @@ void PerimeterGenerator::process_arachne() } break; } - if(outer >-1 && first_internal>-1 && second_internal>-1 && reordered_extrusions[arr_i].extrusion->inset_idx == 0){ // found a new external perimeter after we've found all three perimeters to re-order -> this means we entered a new island. + if(outer >-1 && first_internal>-1 && reordered_extrusions[arr_i].extrusion->inset_idx == 0){ // found a new external perimeter after we've found at least a first internal perimeter to re-order. + // This means we entered a new island. arr_i=arr_i-1; //step back one perimeter max_internal = arr_i; // new maximum internal perimeter is now this as we have found a new external perimeter, hence a new island. break; // exit the for loop @@ -2808,7 +2958,7 @@ void PerimeterGenerator::process_arachne() } // printf("Layer ID %d, Outer index %d, inner index %d, second inner index %d, maximum internal perimeter %d \n",layer_id,outer,first_internal,second_internal, max_internal); - if (outer > -1 && first_internal > -1 && second_internal > -1) { // found perimeters to re-order? + if (outer > -1 && first_internal > -1 && second_internal > -1) { // found all three perimeters to re-order? If not the perimeters will be processed outside in. std::vector inner_outer_extrusions; // temporary array to hold extrusions for reordering inner_outer_extrusions.reserve(max_internal - position + 1); // reserve array containing the number of perimeters before a new island. Variables are array indexes hence need to add +1 to convert to position allocations // printf("Allocated array size %d, max_internal index %d, start position index %d \n",max_internal-position+1,max_internal,position); @@ -2828,8 +2978,7 @@ void PerimeterGenerator::process_arachne() for(arr_j = position; arr_j <= max_internal; ++arr_j) // replace perimeter array with the new re-ordered array ordered_extrusions[arr_j] = inner_outer_extrusions[arr_j-position]; - } else - break; + } // go to the next perimeter from the current position to continue scanning for external walls in the same island position = arr_i + 1; } diff --git a/src/libslic3r/Polygon.cpp b/src/libslic3r/Polygon.cpp index 1d93458166..5d3d643349 100644 --- a/src/libslic3r/Polygon.cpp +++ b/src/libslic3r/Polygon.cpp @@ -355,6 +355,8 @@ Polygon Polygon::transform(const Transform3d& trafo) const if (vertices_count == 0) return dstpoly; + unsigned int data_size = 3 * vertices_count * sizeof(float); + Eigen::MatrixXd src(3, vertices_count); for (size_t i = 0; i < vertices_count; i++) { diff --git a/src/libslic3r/Polyline.cpp b/src/libslic3r/Polyline.cpp index 8a650c926b..b30564f3c1 100644 --- a/src/libslic3r/Polyline.cpp +++ b/src/libslic3r/Polyline.cpp @@ -51,6 +51,7 @@ void Polyline::reverse() // removes the given distance from the end of the polyline void Polyline::clip_end(double distance) { + bool last_point_inserted = false; size_t remove_after_index = MultiPoint::size(); while (distance > 0) { Vec2d last_point = this->last_point().cast(); @@ -64,6 +65,7 @@ void Polyline::clip_end(double distance) double lsqr = v.squaredNorm(); if (lsqr > distance * distance) { this->points.emplace_back((last_point + v * (distance / sqrt(lsqr))).cast()); + last_point_inserted = true; break; } distance -= sqrt(lsqr); diff --git a/src/libslic3r/Preset.cpp b/src/libslic3r/Preset.cpp index dcbe87b9e9..cbab85b88a 100644 --- a/src/libslic3r/Preset.cpp +++ b/src/libslic3r/Preset.cpp @@ -340,7 +340,7 @@ void Preset::normalize(DynamicPrintConfig &config) static_cast(opt)->resize(n, defaults.option(key)); } // The following keys are mandatory for the UI, but they are not part of FullPrintConfig, therefore they are handled separately. - for (const std::string &key : { "filament_settings_id" }) { + for (const std::string key : { "filament_settings_id" }) { auto *opt = config.option(key, false); assert(opt == nullptr || opt->type() == coStrings); if (opt != nullptr && opt->type() == coStrings) @@ -841,8 +841,8 @@ static std::vector s_Preset_filament_options { "nozzle_temperature_range_low", "nozzle_temperature_range_high", //SoftFever "enable_pressure_advance", "pressure_advance","adaptive_pressure_advance","adaptive_pressure_advance_model","adaptive_pressure_advance_overhangs", "adaptive_pressure_advance_bridges","chamber_temperature", "filament_shrink", "support_material_interface_fan_speed", "filament_notes" /*,"filament_seam_gap"*/, - "filament_loading_speed", "filament_loading_speed_start", "filament_load_time", - "filament_unloading_speed", "filament_unloading_speed_start", "filament_unload_time", "filament_toolchange_delay", "filament_cooling_moves", "filament_stamping_loading_speed", "filament_stamping_distance", + "filament_loading_speed", "filament_loading_speed_start", + "filament_unloading_speed", "filament_unloading_speed_start", "filament_toolchange_delay", "filament_cooling_moves", "filament_stamping_loading_speed", "filament_stamping_distance", "filament_cooling_initial_speed", "filament_cooling_final_speed", "filament_ramming_parameters", "filament_multitool_ramming", "filament_multitool_ramming_volume", "filament_multitool_ramming_flow", "activate_chamber_temp_control", "filament_long_retractions_when_cut","filament_retraction_distances_when_cut", "idle_temperature" @@ -865,11 +865,9 @@ static std::vector s_Preset_printer_options { "nozzle_height", "default_print_profile", "inherits", "silent_mode", - // BBS - "scan_first_layer", "machine_load_filament_time", "machine_unload_filament_time","time_cost", "machine_pause_gcode", "template_custom_gcode", + "scan_first_layer", "machine_load_filament_time", "machine_unload_filament_time", "machine_tool_change_time", "time_cost", "machine_pause_gcode", "template_custom_gcode", "nozzle_type", "nozzle_hrc","auxiliary_fan", "nozzle_volume","upward_compatible_machine", "z_hop_types", "travel_slope", "retract_lift_enforce","support_chamber_temp_control","support_air_filtration","printer_structure", "best_object_pos","head_wrap_detect_zone", - //SoftFever "host_type", "print_host", "printhost_apikey", "bbl_use_printhost", "print_host_webui", "printhost_cafile","printhost_port","printhost_authorization_type", @@ -1572,6 +1570,7 @@ bool PresetCollection::load_user_preset(std::string name, std::map presets_loaded; + int count = 0; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(" enter, name %1% , total value counts %2%")%name %preset_values.size(); diff --git a/src/libslic3r/PresetBundle.cpp b/src/libslic3r/PresetBundle.cpp index a6f55a9bfe..92a8069e6e 100644 --- a/src/libslic3r/PresetBundle.cpp +++ b/src/libslic3r/PresetBundle.cpp @@ -1853,7 +1853,7 @@ void PresetBundle::export_selections(AppConfig &config) // BBS void PresetBundle::set_num_filaments(unsigned int n, std::string new_color) { - size_t old_filament_count = this->filament_presets.size(); + int old_filament_count = this->filament_presets.size(); if (n > old_filament_count && old_filament_count != 0) filament_presets.resize(n, filament_presets.back()); else { @@ -1867,7 +1867,7 @@ void PresetBundle::set_num_filaments(unsigned int n, std::string new_color) //BBS set new filament color to new_color if (old_filament_count < n) { if (!new_color.empty()) { - for (size_t i = old_filament_count; i < n; i++) { + for (int i = old_filament_count; i < n; i++) { filament_color->values[i] = new_color; } } @@ -2054,7 +2054,7 @@ bool PresetBundle::check_filament_temp_equation_by_printer_type_and_nozzle_for_m //BBS: check whether this is the only edited filament bool PresetBundle::is_the_only_edited_filament(unsigned int filament_index) { - size_t n = this->filament_presets.size(); + int n = this->filament_presets.size(); if (filament_index >= n) return false; @@ -2117,6 +2117,7 @@ DynamicPrintConfig PresetBundle::full_fff_config() const // BBS size_t num_filaments = this->filament_presets.size(); + auto* extruder_diameter = dynamic_cast(out.option("nozzle_diameter")); // Collect the "compatible_printers_condition" and "inherits" values over all presets (print, filaments, printers) into a single vector. std::vector compatible_printers_condition; std::vector compatible_prints_condition; @@ -2479,7 +2480,7 @@ void PresetBundle::load_config_file_config(const std::string &name_or_path, bool std::vector filament_ids = std::move(config.option("filament_ids", true)->values); std::vector print_compatible_printers = std::move(config.option("print_compatible_printers", true)->values); //BBS: add different settings check logic - // bool has_different_settings_to_system = config.option("different_settings_to_system")?true:false; + bool has_different_settings_to_system = config.option("different_settings_to_system")?true:false; std::vector different_values = std::move(config.option("different_settings_to_system", true)->values); std::string &compatible_printers_condition = Preset::compatible_printers_condition(config); std::string &compatible_prints_condition = Preset::compatible_prints_condition(config); diff --git a/src/libslic3r/Print.cpp b/src/libslic3r/Print.cpp index 702214eca5..03f76fe3a3 100644 --- a/src/libslic3r/Print.cpp +++ b/src/libslic3r/Print.cpp @@ -831,6 +831,7 @@ StringObjectException Print::sequential_print_clearance_valid(const Print &print for (int i = k+1; i < print_instance_count; i++) { + auto& p = print_instance_with_bounding_box[i].print_instance; auto bbox2 = print_instance_with_bounding_box[i].bounding_box; auto py1 = bbox2.min.y(); auto py2 = bbox2.max.y(); @@ -1401,30 +1402,32 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* const ConfigOptionDef* bed_type_def = print_config_def.get("curr_bed_type"); assert(bed_type_def != nullptr); - if (is_BBL_printer()) { + if (is_BBL_printer()) { const t_config_enum_values* bed_type_keys_map = bed_type_def->enum_keys_map; - const ConfigOptionInts* bed_temp_opt = m_config.option(get_bed_temp_key(m_config.curr_bed_type)); for (unsigned int extruder_id : extruders) { - int curr_bed_temp = bed_temp_opt->get_at(extruder_id); - if (curr_bed_temp == 0 && bed_type_keys_map != nullptr) { - std::string bed_type_name; - for (auto item : *bed_type_keys_map) { - if (item.second == m_config.curr_bed_type) { - bed_type_name = item.first; - break; + const ConfigOptionInts* bed_temp_opt = m_config.option(get_bed_temp_key(m_config.curr_bed_type)); + for (unsigned int extruder_id : extruders) { + int curr_bed_temp = bed_temp_opt->get_at(extruder_id); + if (curr_bed_temp == 0 && bed_type_keys_map != nullptr) { + std::string bed_type_name; + for (auto item : *bed_type_keys_map) { + if (item.second == m_config.curr_bed_type) { + bed_type_name = item.first; + break; + } } - } - StringObjectException except; - except.string = Slic3r::format(L("Plate %d: %s does not support filament %s"), this->get_plate_index() + 1, L(bed_type_name), extruder_id + 1); - except.string += "\n"; - except.type = STRING_EXCEPT_FILAMENT_NOT_MATCH_BED_TYPE; - except.params.push_back(std::to_string(this->get_plate_index() + 1)); - except.params.push_back(L(bed_type_name)); - except.params.push_back(std::to_string(extruder_id+1)); - except.object = nullptr; - return except; - } + StringObjectException except; + except.string = Slic3r::format(L("Plate %d: %s does not support filament %s"), this->get_plate_index() + 1, L(bed_type_name), extruder_id + 1); + except.string += "\n"; + except.type = STRING_EXCEPT_FILAMENT_NOT_MATCH_BED_TYPE; + except.params.push_back(std::to_string(this->get_plate_index() + 1)); + except.params.push_back(L(bed_type_name)); + except.params.push_back(std::to_string(extruder_id+1)); + except.object = nullptr; + return except; + } + } } } @@ -1441,7 +1444,7 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* } return warning_key; }; - /* auto check_motion_ability_region_setting = [&](const std::vector& keys_to_check, double limit) -> std::string { + auto check_motion_ability_region_setting = [&](const std::vector& keys_to_check, double limit) -> std::string { std::string warning_key; for (const auto& key : keys_to_check) { if (m_default_region_config.get_abs_value(key) > limit) { @@ -1450,7 +1453,7 @@ StringObjectException Print::validate(StringObjectException *warning, Polygons* } } return warning_key; - }; */ + }; std::string warning_key; // check jerk @@ -2463,7 +2466,7 @@ FilamentTempType Print::get_filament_temp_type(const std::string& filament_type) in.close(); BOOST_LOG_TRIVIAL(error) << __FUNCTION__ << ": parse " << file_path.string() << " got a nlohmann::detail::parse_error, reason = " << err.what(); filament_temp_type_map[HighTempFilamentStr] = {"ABS","ASA","PC","PA","PA-CF","PA-GF","PA6-CF","PET-CF","PPS","PPS-CF","PPA-GF","PPA-CF","ABS-Aero","ABS-GF"}; - filament_temp_type_map[LowTempFilamentStr] = {"PLA","TPU","PLA-CF","PLA-AERO","PVA","BVOH"}; + filament_temp_type_map[LowTempFilamentStr] = {"PLA","TPU","PLA-CF","PLA-AERO","PVA","BVOH","SBS"}; filament_temp_type_map[HighLowCompatibleFilamentStr] = { "HIPS","PETG","PCTG","PE","PP","EVA","PE-CF","PP-CF","PP-GF","PHA"}; } } @@ -2666,7 +2669,7 @@ void Print::_make_wipe_tower() for (auto &layer_tools : m_wipe_tower_data.tool_ordering.layer_tools()) { // for all layers if (!layer_tools.has_wipe_tower) continue; - // bool first_layer = &layer_tools == &m_wipe_tower_data.tool_ordering.front(); + bool first_layer = &layer_tools == &m_wipe_tower_data.tool_ordering.front(); wipe_tower.plan_toolchange((float) layer_tools.print_z, (float) layer_tools.wipe_tower_layer_height, current_extruder_id, current_extruder_id); @@ -2922,7 +2925,7 @@ DynamicConfig PrintStatistics::config() const DynamicConfig PrintStatistics::placeholders() { DynamicConfig config; - for (const std::string &key : { + for (const std::string key : { "print_time", "normal_print_time", "silent_print_time", "used_filament", "extruded_volume", "total_cost", "total_weight", "initial_tool", "total_toolchanges", "total_wipe_tower_cost", "total_wipe_tower_filament"}) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index 089ca62c20..232ff029eb 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -817,12 +817,22 @@ void PrintConfigDef::init_fff_params() def = this->add("gap_fill_target", coEnum); def->label = L("Apply gap fill"); def->category = L("Strength"); - def->tooltip = L("Enables gap fill for the selected surfaces. The minimum gap length that will be filled can be controlled " + def->tooltip = L("Enables gap fill for the selected solid surfaces. The minimum gap length that will be filled can be controlled " "from the filter out tiny gaps option below.\n\n" "Options:\n" - "1. Everywhere: Applies gap fill to top, bottom and internal solid surfaces\n" - "2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces only\n" - "3. Nowhere: Disables gap fill\n"); + "1. Everywhere: Applies gap fill to top, bottom and internal solid surfaces for maximum strength\n" + "2. Top and Bottom surfaces: Applies gap fill to top and bottom surfaces only, balancing print speed, " + "reducing potential over extrusion in the solid infill and making sure the top and bottom surfaces have " + "no pin hole gaps\n" + "3. Nowhere: Disables gap fill for all solid infill areas. \n\n" + "Note that if using the classic perimeter generator, gap fill may also be generated between perimeters, " + "if a full width line cannot fit between them. That perimeter gap fill is not controlled by this setting. \n\n" + "If you would like all gap fill, including the classic perimeter generated one, removed, " + "set the filter out tiny gaps value to a large number, like 999999. \n\n" + "However this is not advised, as gap fill between perimeters is contributing to the model's strength. " + "For models where excessive gap fill is generated between perimeters, a better option would be to " + "switch to the arachne wall generator and use this option to control whether the cosmetic top and " + "bottom surface gap fill is generated"); def->enum_keys_map = &ConfigOptionEnum::get_enum_values(); def->enum_values.push_back("everywhere"); def->enum_values.push_back("topbottom"); @@ -1822,7 +1832,7 @@ void PrintConfigDef::init_fff_params() def = this->add("machine_load_filament_time", coFloat); def->label = L("Filament load time"); - def->tooltip = L("Time to load new filament when switch filament. For statistics only"); + def->tooltip = L("Time to load new filament when switch filament. It's usually applicable for single-extruder multi-material machines. For tool changers or multi-tool machines, it's typically 0. For statistics only"); def->sidetext = L("s"); def->min = 0; def->mode = comAdvanced; @@ -1830,12 +1840,21 @@ void PrintConfigDef::init_fff_params() def = this->add("machine_unload_filament_time", coFloat); def->label = L("Filament unload time"); - def->tooltip = L("Time to unload old filament when switch filament. For statistics only"); + def->tooltip = L("Time to unload old filament when switch filament. It's usually applicable for single-extruder multi-material machines. For tool changers or multi-tool machines, it's typically 0. For statistics only"); def->sidetext = L("s"); def->min = 0; def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0.0)); + def = this->add("machine_tool_change_time", coFloat); + def->label = L("Tool change time"); + def->tooltip = L("Time taken to switch tools. It's usually applicable for tool changers or multi-tool machines. For single-extruder multi-material machines, it's typically 0. For statistics only"); + def->sidetext = L("s"); + def->min = 0; + def->mode = comAdvanced; + def->set_default_value(new ConfigOptionFloat { 0. }); + + def = this->add("filament_diameter", coFloats); def->label = L("Diameter"); def->tooltip = L("Filament diameter is used to calculate extrusion in gcode, so it's important and should be accurate"); @@ -1982,14 +2001,6 @@ void PrintConfigDef::init_fff_params() def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloats { 3.4 }); - def = this->add("filament_load_time", coFloats); - def->label = L("Filament load time"); - def->tooltip = L("Time for the printer firmware (or the Multi Material Unit 2.0) to load a new filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."); - def->sidetext = L("s"); - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloats { 0. }); - def = this->add("filament_ramming_parameters", coStrings); def->label = L("Ramming parameters"); def->tooltip = L("This string is edited by RammingDialog and contains ramming specific parameters."); @@ -1997,14 +2008,6 @@ void PrintConfigDef::init_fff_params() def->set_default_value(new ConfigOptionStrings { "120 100 6.6 6.8 7.2 7.6 7.9 8.2 8.7 9.4 9.9 10.0|" " 0.05 6.6 0.45 6.8 0.95 7.8 1.45 8.3 1.95 9.7 2.45 10 2.95 7.6 3.45 7.6 3.95 7.6 4.45 7.6 4.95 7.6" }); - def = this->add("filament_unload_time", coFloats); - def->label = L("Filament unload time"); - def->tooltip = L("Time for the printer firmware (or the Multi Material Unit 2.0) to unload a filament during a tool change (when executing the T code). This time is added to the total print time by the G-code time estimator."); - def->sidetext = L("s"); - def->min = 0; - def->mode = comAdvanced; - def->set_default_value(new ConfigOptionFloats { 0. }); - def = this->add("filament_multitool_ramming", coBools); def->label = L("Enable ramming for multitool setups"); def->tooltip = L("Perform ramming when using multitool printer (i.e. when the 'Single Extruder Multimaterial' in Printer Settings is unchecked). " @@ -2077,6 +2080,7 @@ void PrintConfigDef::init_fff_params() def->enum_values.push_back("PPS-CF"); def->enum_values.push_back("PVA"); def->enum_values.push_back("PVB"); + def->enum_values.push_back("SBS"); def->enum_values.push_back("TPU"); def->mode = comSimple; def->set_default_value(new ConfigOptionStrings { "PLA" }); @@ -2545,7 +2549,8 @@ void PrintConfigDef::init_fff_params() def = this->add("filter_out_gap_fill", coFloat); def->label = L("Filter out tiny gaps"); def->category = L("Layers and Perimeters"); - def->tooltip = L("Filter out gaps smaller than the threshold specified"); + def->tooltip = L("Don't print gap fill with a length is smaller than the threshold specified (in mm). This setting applies to top, " + "bottom and solid infill and, if using the classic perimeter generator, to wall gap fill. "); def->sidetext = L("mm"); def->mode = comAdvanced; def->set_default_value(new ConfigOptionFloat(0)); @@ -5335,11 +5340,11 @@ void PrintConfigDef::init_extruder_option_keys() "retraction_length", "retraction_minimum_travel", "retraction_speed", + "travel_slope", "wipe", "wipe_distance", "z_hop", - "z_hop_types", - "travel_slope" + "z_hop_types" }; assert(std::is_sorted(m_extruder_retract_keys.begin(), m_extruder_retract_keys.end())); } @@ -6146,7 +6151,7 @@ void PrintConfigDef::handle_legacy(t_config_option_key &opt_key, std::string &va "z_hop_type", "z_lift_type", "bed_temperature_difference","long_retraction_when_cut", "retraction_distance_when_cut", "extruder_type", - "internal_bridge_support_thickness","extruder_clearance_max_radius", "top_area_threshold", "reduce_wall_solid_infill" + "internal_bridge_support_thickness","extruder_clearance_max_radius", "top_area_threshold", "reduce_wall_solid_infill","filament_load_time","filament_unload_time" }; if (ignore.find(opt_key) != ignore.end()) { diff --git a/src/libslic3r/PrintConfig.hpp b/src/libslic3r/PrintConfig.hpp index 000559b765..015befbd9f 100644 --- a/src/libslic3r/PrintConfig.hpp +++ b/src/libslic3r/PrintConfig.hpp @@ -1119,15 +1119,13 @@ PRINT_CONFIG_CLASS_DEFINE( ((ConfigOptionFloat, parking_pos_retraction)) ((ConfigOptionFloat, extra_loading_move)) ((ConfigOptionFloat, machine_load_filament_time)) + ((ConfigOptionFloat, machine_tool_change_time)) ((ConfigOptionFloat, machine_unload_filament_time)) ((ConfigOptionFloats, filament_loading_speed)) ((ConfigOptionFloats, filament_loading_speed_start)) - ((ConfigOptionFloats, filament_load_time)) ((ConfigOptionFloats, filament_unloading_speed)) ((ConfigOptionFloats, filament_unloading_speed_start)) ((ConfigOptionFloats, filament_toolchange_delay)) - // Orca todo: consolidate with machine_load_filament_time - ((ConfigOptionFloats, filament_unload_time)) ((ConfigOptionInts, filament_cooling_moves)) ((ConfigOptionFloats, filament_cooling_initial_speed)) ((ConfigOptionFloats, filament_minimal_purge_on_wipe_tower)) diff --git a/src/libslic3r/PrintObject.cpp b/src/libslic3r/PrintObject.cpp index 30b267c151..8674c1a4ea 100644 --- a/src/libslic3r/PrintObject.cpp +++ b/src/libslic3r/PrintObject.cpp @@ -680,6 +680,7 @@ void PrintObject::estimate_curled_extrusions() [](const PrintRegion *region) { return region->config().enable_overhang_speed.getBool(); })) { // Estimate curling of support material and add it to the malformaition lines of each layer + float support_flow_width = support_material_flow(this, this->config().layer_height).width(); SupportSpotsGenerator::Params params{this->print()->m_config.filament_type.values, float(this->print()->default_object_config().inner_wall_acceleration.getFloat()), this->config().raft_layers.getInt(), this->config().brim_type.value, @@ -2951,16 +2952,16 @@ struct POProfiler void PrintObject::generate_support_preview() { - // POProfiler profiler; + POProfiler profiler; - // boost::posix_time::ptime ts1 = boost::posix_time::microsec_clock::local_time(); + boost::posix_time::ptime ts1 = boost::posix_time::microsec_clock::local_time(); this->slice(); - // boost::posix_time::ptime ts2 = boost::posix_time::microsec_clock::local_time(); - // profiler.duration1 = (ts2 - ts1).total_milliseconds(); + boost::posix_time::ptime ts2 = boost::posix_time::microsec_clock::local_time(); + profiler.duration1 = (ts2 - ts1).total_milliseconds(); this->generate_support_material(); - // boost::posix_time::ptime ts3 = boost::posix_time::microsec_clock::local_time(); - // profiler.duration2 = (ts3 - ts2).total_milliseconds(); + boost::posix_time::ptime ts3 = boost::posix_time::microsec_clock::local_time(); + profiler.duration2 = (ts3 - ts2).total_milliseconds(); } void PrintObject::update_slicing_parameters() @@ -3670,6 +3671,7 @@ template void PrintObject::remove_bridges_from_contacts( SupportNecessaryType PrintObject::is_support_necessary() { + static const double super_overhang_area_threshold = SQ(scale_(5.0)); const double cantilevel_dist_thresh = scale_(6); #if 0 double threshold_rad = (m_config.support_threshold_angle.value < EPSILON ? 30 : m_config.support_threshold_angle.value + 1) * M_PI / 180.; diff --git a/src/libslic3r/PrintObjectSlice.cpp b/src/libslic3r/PrintObjectSlice.cpp index fd467e076f..98f7d8b20e 100644 --- a/src/libslic3r/PrintObjectSlice.cpp +++ b/src/libslic3r/PrintObjectSlice.cpp @@ -151,8 +151,8 @@ static std::vector slice_volumes_inner( params_base.mode_below = params_base.mode; // BBS - // const size_t num_extruders = print_config.filament_diameter.size(); - // const bool is_mm_painted = num_extruders > 1 && std::any_of(model_volumes.cbegin(), model_volumes.cend(), [](const ModelVolume *mv) { return mv->is_mm_painted(); }); + const size_t num_extruders = print_config.filament_diameter.size(); + const bool is_mm_painted = num_extruders > 1 && std::any_of(model_volumes.cbegin(), model_volumes.cend(), [](const ModelVolume *mv) { return mv->is_mm_painted(); }); // BBS: don't do size compensation when slice volume. // Will handle contour and hole size compensation seperately later. //const auto extra_offset = is_mm_painted ? 0.f : std::max(0.f, float(print_object_config.xy_contour_compensation.value)); @@ -336,8 +336,7 @@ static std::vector> slices_to_regions( }; // BBS - // Orca: unused -/* auto trim_overlap = [](ExPolygons& expolys_a, ExPolygons& expolys_b) { + auto trim_overlap = [](ExPolygons& expolys_a, ExPolygons& expolys_b) { ExPolygons trimming_a; ExPolygons trimming_b; @@ -362,7 +361,7 @@ static std::vector> slices_to_regions( expolys_a = diff_ex(expolys_a, trimming_a); expolys_b = diff_ex(expolys_b, trimming_b); - }; */ + }; std::vector temp_slices; for (size_t zs_complex_idx = range.begin(); zs_complex_idx < range.end(); ++ zs_complex_idx) { diff --git a/src/libslic3r/Shape/TextShape.cpp b/src/libslic3r/Shape/TextShape.cpp index 58df800a51..dce731af19 100644 --- a/src/libslic3r/Shape/TextShape.cpp +++ b/src/libslic3r/Shape/TextShape.cpp @@ -99,6 +99,8 @@ std::vector init_occt_fonts() static bool TextToBRep(const char* text, const char* font, const float theTextHeight, Font_FontAspect& theFontAspect, TopoDS_Shape& theShape, double& text_width) { + Standard_Integer anArgIt = 1; + Standard_CString aName = "text_shape"; Standard_CString aText = text; Font_BRepFont aFont; diff --git a/src/libslic3r/ShortEdgeCollapse.cpp b/src/libslic3r/ShortEdgeCollapse.cpp index f19ff9f22e..3397daf55c 100644 --- a/src/libslic3r/ShortEdgeCollapse.cpp +++ b/src/libslic3r/ShortEdgeCollapse.cpp @@ -2,6 +2,7 @@ #include "libslic3r/NormalUtils.hpp" #include +#include #include #include diff --git a/src/libslic3r/ShortestPath.hpp b/src/libslic3r/ShortestPath.hpp index 5a34ef23c1..158608f364 100644 --- a/src/libslic3r/ShortestPath.hpp +++ b/src/libslic3r/ShortestPath.hpp @@ -29,7 +29,7 @@ template inline void reorder_by_shortest_traverse(std::vector &po { Points start_point; start_point.reserve(polylines_out.size()); - for (const T contour : polylines_out) start_point.push_back(contour.points.front()); + for (const T& contour : polylines_out) start_point.push_back(contour.points.front()); std::vector order = chain_points(start_point); diff --git a/src/libslic3r/SlicesToTriangleMesh.cpp b/src/libslic3r/SlicesToTriangleMesh.cpp index 5740665ae2..3b55cf066b 100644 --- a/src/libslic3r/SlicesToTriangleMesh.cpp +++ b/src/libslic3r/SlicesToTriangleMesh.cpp @@ -1,5 +1,8 @@ +#include + #include "SlicesToTriangleMesh.hpp" +//#include "libslic3r/MTUtils.hpp" #include "libslic3r/Execution/ExecutionTBB.hpp" #include "libslic3r/ClipperUtils.hpp" #include "libslic3r/Tesselate.hpp" diff --git a/src/libslic3r/Support/OrganicSupport.cpp b/src/libslic3r/Support/OrganicSupport.cpp index 5543f76fd5..05e515d94e 100644 --- a/src/libslic3r/Support/OrganicSupport.cpp +++ b/src/libslic3r/Support/OrganicSupport.cpp @@ -1,6 +1,12 @@ #include "OrganicSupport.hpp" #include "SupportCommon.hpp" + +#include "../AABBTreeLines.hpp" +#include "../ClipperUtils.hpp" +#include "../Polygon.hpp" +#include "../Polyline.hpp" #include "../MutablePolygon.hpp" +#include "../TriangleMeshSlicer.hpp" #include diff --git a/src/libslic3r/Support/SupportParameters.cpp b/src/libslic3r/Support/SupportParameters.cpp index 4af36e05ae..8508206cb9 100644 --- a/src/libslic3r/Support/SupportParameters.cpp +++ b/src/libslic3r/Support/SupportParameters.cpp @@ -1,4 +1,6 @@ #include "../Print.hpp" +#include "../PrintConfig.hpp" +#include "../Slicing.hpp" #include "SupportParameters.hpp" namespace Slic3r::FFFSupport { diff --git a/src/libslic3r/SupportMaterial.cpp b/src/libslic3r/SupportMaterial.cpp index e1c6c97cc1..b022607bf7 100644 --- a/src/libslic3r/SupportMaterial.cpp +++ b/src/libslic3r/SupportMaterial.cpp @@ -338,7 +338,7 @@ static std::string get_svg_filename(std::string layer_nr_or_z, std::string tag rand_init = true; } - // int rand_num = rand() % 1000000; + int rand_num = rand() % 1000000; //makedir("./SVG"); std::string prefix = "./SVG/"; std::string suffix = ".svg"; @@ -1554,6 +1554,7 @@ static inline ExPolygons detect_overhangs( double thresh_angle = object_config.support_threshold_angle.value > 0 ? object_config.support_threshold_angle.value + 1 : 0; thresh_angle = std::min(thresh_angle, 89.); // BBS should be smaller than 90 const double threshold_rad = Geometry::deg2rad(thresh_angle); + const coordf_t max_bridge_length = scale_(object_config.max_bridge_length.value); const bool bridge_no_support = object_config.bridge_no_support.value; const coordf_t xy_expansion = scale_(object_config.support_expansion.value); @@ -1576,6 +1577,7 @@ static inline ExPolygons detect_overhangs( { // Generate overhang / contact_polygons for non-raft layers. const Layer &lower_layer = *layer.lower_layer; + const bool has_enforcer = !annotations.enforcers_layers.empty() && !annotations.enforcers_layers[layer_id].empty(); // Can't directly use lower_layer.lslices, or we'll miss some very sharp tails. // Filter out areas whose diameter that is smaller than extrusion_width. Do not use offset2() for this purpose! // FIXME if there are multiple regions with different extrusion width, the following code may not be right. @@ -1687,6 +1689,7 @@ static inline ExPolygons detect_overhangs( // check cantilever if (layer.lower_layer) { for (ExPolygon& poly : overhang_areas) { + float fw = float(layer.regions().front()->flow(frExternalPerimeter).scaled_width()); auto cluster_boundary_ex = intersection_ex(poly, offset_ex(layer.lower_layer->lslices, scale_(0.5))); Polygons cluster_boundary = to_polygons(cluster_boundary_ex); if (cluster_boundary.empty()) continue; @@ -1731,6 +1734,7 @@ static inline std::tuple detect_contacts( Polygons enforcer_polygons; // BBS. + const bool auto_normal_support = object_config.support_type.value == stNormalAuto; const bool buildplate_only = !annotations.buildplate_covered.empty(); float no_interface_offset = 0.f; @@ -1744,6 +1748,8 @@ static inline std::tuple detect_contacts( // Generate overhang / contact_polygons for non-raft layers. const Layer& lower_layer = *layer.lower_layer; const bool has_enforcer = !annotations.enforcers_layers.empty() && !annotations.enforcers_layers[layer_id].empty(); + const ExPolygons& lower_layer_expolys = lower_layer.lslices; + const ExPolygons& lower_layer_sharptails = lower_layer.sharp_tails; // Cache support trimming polygons derived from lower layer polygons, possible merged with "on build plate only" trimming polygons. auto slices_margin_update = @@ -2181,6 +2187,7 @@ struct OverhangCluster { static OverhangCluster* add_overhang(std::vector& clusters, ExPolygon* overhang, int layer_nr, coordf_t offset_scaled) { OverhangCluster* cluster = nullptr; + bool found = false; for (int i = 0; i < clusters.size(); i++) { auto cluster_i = &clusters[i]; if (cluster_i->intersects(*overhang, layer_nr)) { @@ -3539,13 +3546,13 @@ std::pair 1. // Contact layer needs a base_interface layer, therefore run the following block if support_interface_top_layers > 0, has soluble support and extruders are different. -// bool soluble_interface_non_soluble_base = -// // Zero z-gap between the overhangs and the support interface. -// m_slicing_params.soluble_interface && -// // Interface extruder soluble. -// m_object_config->support_interface_filament.value > 0 && m_print_config->filament_soluble.get_at(m_object_config->support_interface_filament.value - 1) && -// // Base extruder: Either "print with active extruder" not soluble. -// (m_object_config->support_filament.value == 0 || ! m_print_config->filament_soluble.get_at(m_object_config->support_filament.value - 1)); + bool soluble_interface_non_soluble_base = + // Zero z-gap between the overhangs and the support interface. + m_slicing_params.soluble_interface && + // Interface extruder soluble. + m_object_config->support_interface_filament.value > 0 && m_print_config->filament_soluble.get_at(m_object_config->support_interface_filament.value - 1) && + // Base extruder: Either "print with active extruder" not soluble. + (m_object_config->support_filament.value == 0 || ! m_print_config->filament_soluble.get_at(m_object_config->support_filament.value - 1)); bool snug_supports = m_object_config->support_style.value == smsSnug; // BBS: if support interface and support base do not use the same filament, add a base layer to improve their adhesion bool differnt_support_interface_filament = m_object_config->support_interface_filament.value != m_object_config->support_filament.value; @@ -4621,6 +4628,7 @@ void PrintObjectSupportMaterial::generate_toolpaths( if (object_layer != nullptr) { float biggest_bridge_area = 0.f; + const Polygons& top_contact_polys = top_contact_layer.polygons_to_extrude(); for (auto layerm : object_layer->regions()) { for (auto bridge_surface : layerm->fill_surfaces.filter_by_type(stBottomBridge)) { float bs_area = bridge_surface->area(); diff --git a/src/libslic3r/TreeSupport.cpp b/src/libslic3r/TreeSupport.cpp index 364e1f37eb..dc4f9998ff 100644 --- a/src/libslic3r/TreeSupport.cpp +++ b/src/libslic3r/TreeSupport.cpp @@ -5,6 +5,7 @@ #include "Print.hpp" #include "Layer.hpp" #include "Fill/FillBase.hpp" +#include "Fill/FillConcentric.hpp" #include "CurveAnalyzer.hpp" #include "SVG.hpp" #include "ShortestPath.hpp" @@ -12,6 +13,7 @@ #include #include +#include #include #define _L(s) Slic3r::I18N::translate(s) @@ -467,6 +469,7 @@ static bool move_inside_expolys(const ExPolygons& polygons, Point& from, double Point ret = from; std::vector valid_pts; double bestDist2 = std::numeric_limits::max(); + unsigned int bestPoly = NO_INDEX; bool is_already_on_correct_side_of_boundary = false; // whether [from] is already on the right side of the boundary Point inward_dir; for (unsigned int poly_idx = 0; poly_idx < polygons.size(); poly_idx++) @@ -479,7 +482,7 @@ static bool move_inside_expolys(const ExPolygons& polygons, Point& from, double // because we compare with vsize2_with_unscale here (no division by zero), we also need to compare by vsize2_with_unscale inside the loop // to avoid integer rounding edge cases bool projected_p_beyond_prev_segment = dot_with_unscale(p1 - p0, from - p0) >= vsize2_with_unscale(p1 - p0); - for(const Point p2 : poly.contour.points) + for(const Point& p2 : poly.contour.points) { // X = A + Normal(B-A) * (((B-A) dot_with_unscale (P-A)) / VSize(B-A)); // = A + (B-A) * ((B-A) dot_with_unscale (P-A)) / VSize2(B-A); @@ -507,6 +510,7 @@ static bool move_inside_expolys(const ExPolygons& polygons, Point& from, double if (dist2 < bestDist2) { bestDist2 = dist2; + bestPoly = poly_idx; if (distance == 0) { ret = x; } else { @@ -543,6 +547,7 @@ static bool move_inside_expolys(const ExPolygons& polygons, Point& from, double if (dist2 < bestDist2) { bestDist2 = dist2; + bestPoly = poly_idx; if (distance == 0) { ret = x; } else { @@ -627,6 +632,7 @@ static bool is_inside_ex(const ExPolygons &polygons, const Point &pt) static bool move_out_expolys(const ExPolygons& polygons, Point& from, double distance, double max_move_distance) { + Point from0 = from; ExPolygons polys_dilated = union_ex(offset_ex(polygons, scale_(distance))); Point pt = projection_onto(polys_dilated, from);// find_closest_ex(from, polys_dilated); Point outward_dir = pt - from; @@ -728,12 +734,16 @@ void TreeSupport::detect_overhangs(bool detect_first_sharp_tail_only) const coordf_t extrusion_width = config.get_abs_value("line_width", nozzle_diameter); const coordf_t extrusion_width_scaled = scale_(extrusion_width); const coordf_t max_bridge_length = scale_(config.max_bridge_length.value); + const bool bridge_no_support = max_bridge_length > 0; const bool support_critical_regions_only = config.support_critical_regions_only.value; const bool config_remove_small_overhangs = config.support_remove_small_overhang.value; const int enforce_support_layers = config.enforce_support_layers.value; const double area_thresh_well_supported = SQ(scale_(6)); const double length_thresh_well_supported = scale_(6); static const double sharp_tail_max_support_height = 16.f; + // a region is considered well supported if the number of layers below it exceeds this threshold + const int thresh_layers_below = 10 / config.layer_height; + double obj_height = m_object->size().z(); // +1 makes the threshold inclusive double thresh_angle = config.support_threshold_angle.value > EPSILON ? config.support_threshold_angle.value + 1 : 30; thresh_angle = std::min(thresh_angle, 89.); // should be smaller than 90 @@ -1396,6 +1406,7 @@ void TreeSupport::generate_toolpaths() const PrintObjectConfig &object_config = m_object->config(); coordf_t support_extrusion_width = m_support_params.support_extrusion_width; coordf_t nozzle_diameter = print_config.nozzle_diameter.get_at(object_config.support_filament - 1); + coordf_t layer_height = object_config.layer_height.value; const size_t wall_count = object_config.tree_support_wall_count.value; // Check if set to zero, use default if so. @@ -1409,6 +1420,8 @@ void TreeSupport::generate_toolpaths() coordf_t interface_density = std::min(1., m_support_material_interface_flow.spacing() / interface_spacing); coordf_t bottom_interface_density = std::min(1., m_support_material_interface_flow.spacing() / bottom_interface_spacing); + const coordf_t branch_radius = object_config.tree_support_branch_diameter.value / 2; + const coordf_t branch_radius_scaled = scale_(branch_radius); if (m_object->support_layers().empty()) return; @@ -1424,11 +1437,11 @@ void TreeSupport::generate_toolpaths() if (m_object->support_layer_count() > m_raft_layers) { const SupportLayer *ts_layer = m_object->get_support_layer(m_raft_layers); - for (const ExPolygon expoly : ts_layer->floor_areas) + for (const ExPolygon& expoly : ts_layer->floor_areas) raft_areas.push_back(expoly); - for (const ExPolygon expoly : ts_layer->roof_areas) + for (const ExPolygon& expoly : ts_layer->roof_areas) raft_areas.push_back(expoly); - for (const ExPolygon expoly : ts_layer->base_areas) + for (const ExPolygon& expoly : ts_layer->base_areas) raft_areas.push_back(expoly); } @@ -2113,6 +2126,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no const bool with_lightning_infill = m_support_params.base_fill_pattern == ipLightning; coordf_t support_extrusion_width = m_support_params.support_extrusion_width; + const size_t wall_count = config.tree_support_wall_count.value; const PrintObjectConfig& object_config = m_object->config(); BOOST_LOG_TRIVIAL(info) << "draw_circles for object: " << m_object->model_object()->name; @@ -2363,7 +2377,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no ExPolygons& base_areas = ts_layer->base_areas; int layer_nr_lower = layer_nr - 1; - for (;layer_nr_lower >= 0; layer_nr_lower--) { + for (layer_nr_lower; layer_nr_lower >= 0; layer_nr_lower--) { if (!m_object->get_support_layer(layer_nr_lower + m_raft_layers)->area_groups.empty()) break; } if (layer_nr_lower <= 0) continue; @@ -2453,7 +2467,7 @@ void TreeSupport::draw_circles(const std::vector>& contact_no if (ts_layer->area_groups.empty()) continue; int layer_nr_lower = layer_nr - 1; - for (;layer_nr_lower >= 0; layer_nr_lower--) { + for (layer_nr_lower; layer_nr_lower >= 0; layer_nr_lower--) { if (!m_object->get_support_layer(layer_nr_lower + m_raft_layers)->area_groups.empty()) break; } if (layer_nr_lower < 0) continue; @@ -2568,10 +2582,15 @@ void TreeSupport::drop_nodes(std::vector>& contact_nodes) const coordf_t radius_sample_resolution = m_ts_data->m_radius_sample_resolution; const bool support_on_buildplate_only = config.support_on_build_plate_only.value; const size_t bottom_interface_layers = config.support_interface_bottom_layers.value; + const size_t top_interface_layers = config.support_interface_top_layers.value; float DO_NOT_MOVER_UNDER_MM = is_slim ? 0 : 5; // do not move contact points under 5mm const auto nozzle_diameter = m_object->print()->config().nozzle_diameter.get_at(m_object->config().support_interface_filament-1); const auto support_line_width = config.support_line_width.get_abs_value(nozzle_diameter); + auto get_branch_angle = [this,&config](coordf_t radius) { + if (config.tree_support_branch_angle.value < 30.0) return config.tree_support_branch_angle.value; + return (radius - MIN_BRANCH_RADIUS) / (MAX_BRANCH_RADIUS - MIN_BRANCH_RADIUS) * (config.tree_support_branch_angle.value - 30.0) + 30.0; + }; auto get_max_move_dist = [this, &config, branch_radius, tip_layers, diameter_angle_scale_factor, wall_count, support_extrusion_width, support_line_width](const Node *node, int power = 1) { double move_dist = node->max_move_dist; if (node->max_move_dist == 0) { @@ -3183,6 +3202,7 @@ void TreeSupport::adjust_layer_heights(std::vector>& contact_ const coordf_t layer_height = config.layer_height.value; const coordf_t max_layer_height = m_slicing_params.max_layer_height; const size_t bot_intf_layers = config.support_interface_bottom_layers.value; + const size_t top_intf_layers = config.support_interface_top_layers.value; // if already using max layer height, no need to adjust if (layer_height == max_layer_height) return; @@ -3304,6 +3324,7 @@ std::vector TreeSupport::plan_layer_heights(std::vector #include #include +#include namespace Slic3r { diff --git a/src/libslic3r/TriangulateWall.cpp b/src/libslic3r/TriangulateWall.cpp index 133ca8236c..b8746ef0d2 100644 --- a/src/libslic3r/TriangulateWall.cpp +++ b/src/libslic3r/TriangulateWall.cpp @@ -1,5 +1,5 @@ -//#include "TriangulateWall.hpp" -//#include "MTUtils.hpp" +#include "TriangulateWall.hpp" +#include "MTUtils.hpp" namespace Slic3r { diff --git a/src/libslic3r/Triangulation.cpp b/src/libslic3r/Triangulation.cpp index 782553e2a7..f290442bf1 100644 --- a/src/libslic3r/Triangulation.cpp +++ b/src/libslic3r/Triangulation.cpp @@ -1,10 +1,6 @@ #include "Triangulation.hpp" #include "IntersectionPoints.hpp" - -#ifndef _WIN32 -// On linux and macOS, this include is required #include -#endif // _WIN32 #include #include #include diff --git a/src/libslic3r/calib.cpp b/src/libslic3r/calib.cpp index a00c8dd904..44b44160ed 100644 --- a/src/libslic3r/calib.cpp +++ b/src/libslic3r/calib.cpp @@ -471,9 +471,8 @@ std::string CalibPressureAdvanceLine::print_pa_lines(double start_x, double star const double e_per_mm = CalibPressureAdvance::e_per_mm(m_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, print_flow_ratio); - // Orca: Unused due to skip drawing indicator lines - // const double thin_e_per_mm = CalibPressureAdvance::e_per_mm(m_thin_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, - // print_flow_ratio); + const double thin_e_per_mm = CalibPressureAdvance::e_per_mm(m_thin_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, + print_flow_ratio); const double number_e_per_mm = CalibPressureAdvance::e_per_mm(m_number_line_width, m_height_layer, m_nozzle_diameter, filament_diameter, print_flow_ratio); diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index d7a4a653e7..733ac626f4 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -3,12 +3,19 @@ #include #include +#include #include #include #include "format.hpp" +#include "Platform.hpp" +#include "Time.hpp" #include "libslic3r.h" +#ifdef __APPLE__ +#include "MacUtils.hpp" +#endif + #ifdef WIN32 #include #include @@ -25,7 +32,6 @@ #ifdef __APPLE__ #include #include - #include "MacUtils.hpp" #endif #ifdef __linux__ #include @@ -33,7 +39,6 @@ #include #include #include - #include "Platform.hpp" #endif #endif @@ -1484,6 +1489,8 @@ bool bbl_calc_md5(std::string &filename, std::string &md5_out) MD5_Init(&ctx); boost::nowide::ifstream ifs(filename, std::ios::binary); std::string buf(64 * 1024, 0); + const std::size_t & size = boost::filesystem::file_size(filename); + std::size_t left_size = size; while (ifs) { ifs.read(buf.data(), buf.size()); int read_bytes = ifs.gcount(); diff --git a/src/qhull/CMakeLists.txt b/src/qhull/CMakeLists.txt index 6f0e090dc7..06e430f6f0 100644 --- a/src/qhull/CMakeLists.txt +++ b/src/qhull/CMakeLists.txt @@ -19,7 +19,11 @@ if(Qhull_FOUND) message(STATUS "Using qhull from system.") if(SLIC3R_STATIC) slic3r_remap_configs("Qhull::qhullcpp;Qhull::qhullstatic_r" RelWithDebInfo Release) - target_link_libraries(qhull INTERFACE Qhull::qhullcpp Qhull::qhullstatic_r) + if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") + target_link_libraries(qhull INTERFACE Qhull::qhullcpp_d Qhull::qhullstatic_rd) + else() + target_link_libraries(qhull INTERFACE Qhull::qhullcpp Qhull::qhullstatic_r) + endif() else() slic3r_remap_configs("Qhull::qhullcpp;Qhull::qhull_r" RelWithDebInfo Release) target_link_libraries(qhull INTERFACE Qhull::qhullcpp Qhull::qhull_r) diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index e58b5c7eff..86ab5d2239 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -241,7 +241,7 @@ float GLVolume::last_explosion_ratio = 1.0; void GLVolume::set_render_color() { - // bool outside = is_outside || is_below_printbed(); + bool outside = is_outside || is_below_printbed(); if (force_native_color || force_neutral_color) { #ifdef ENABBLE_OUTSIDE_COLOR @@ -859,6 +859,7 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab return; GLShaderProgram* sink_shader = GUI::wxGetApp().get_shader("flat"); + GLShaderProgram* edges_shader = GUI::wxGetApp().get_shader("flat"); if (type == ERenderType::Transparent) { glsafe(::glEnable(GL_BLEND)); @@ -1022,6 +1023,7 @@ bool GLVolumeCollection::check_outside_state(const BuildVolume &build_volume, Mo GUI::PartPlate* curr_plate = GUI::wxGetApp().plater()->get_partplate_list().get_selected_plate(); const Pointfs& pp_bed_shape = curr_plate->get_shape(); BuildVolume plate_build_volume(pp_bed_shape, build_volume.printable_height()); + const std::vector& exclude_areas = curr_plate->get_exclude_areas(); for (GLVolume* volume : this->volumes) { diff --git a/src/slic3r/GUI/AMSMaterialsSetting.cpp b/src/slic3r/GUI/AMSMaterialsSetting.cpp index b4c5e95646..f44dc19917 100644 --- a/src/slic3r/GUI/AMSMaterialsSetting.cpp +++ b/src/slic3r/GUI/AMSMaterialsSetting.cpp @@ -331,6 +331,7 @@ void AMSMaterialsSetting::create_panel_kn(wxWindow* parent) kn_val_sizer->Add(m_input_k_val, 0, wxALL | wxEXPAND | wxALIGN_CENTER_VERTICAL, FromDIP(0)); // n params input + wxBoxSizer* n_sizer = new wxBoxSizer(wxHORIZONTAL); m_n_param = new wxStaticText(parent, wxID_ANY, _L("Factor N"), wxDefaultPosition, wxDefaultSize, 0); m_n_param->SetFont(::Label::Body_13); m_n_param->SetForegroundColour(wxColour(50, 58, 61)); @@ -356,7 +357,7 @@ void AMSMaterialsSetting::paintEvent(wxPaintEvent &evt) { auto size = GetSize(); wxPaintDC dc(this); - dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#000000")), 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(StateColor::darkModeColorFor(wxColour("#000000")), 1, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); dc.DrawRectangle(0, 0, size.x, size.y); } diff --git a/src/slic3r/GUI/AmsMappingPopup.cpp b/src/slic3r/GUI/AmsMappingPopup.cpp index 41abe5a471..492926b952 100644 --- a/src/slic3r/GUI/AmsMappingPopup.cpp +++ b/src/slic3r/GUI/AmsMappingPopup.cpp @@ -366,6 +366,7 @@ void MaterialItem::doRender(wxDC &dc) wxString out_txt = m_msg; wxString count_txt = ""; + int new_line_pos = 0; for (int i = 0; i < m_msg.length(); i++) { auto text_size = m_warning_text->GetTextExtent(count_txt); @@ -401,6 +402,7 @@ void AmsMapingPopup::on_left_down(wxMouseEvent &evt) auto pos = ClientToScreen(evt.GetPosition()); for (MappingItem *item : m_mapping_item_list) { auto p_rect = item->ClientToScreen(wxPoint(0, 0)); + auto left = item->GetSize(); if (pos.x > p_rect.x && pos.y > p_rect.y && pos.x < (p_rect.x + item->GetSize().x) && pos.y < (p_rect.y + item->GetSize().y)) { if (item->m_tray_data.type == TrayType::NORMAL && !is_match_material(item->m_tray_data.filament_type)) return; @@ -1522,6 +1524,9 @@ void AmsRMGroup::on_mouse_move(wxMouseEvent& evt) std::string tray_name = iter->first; wxColour tray_color = iter->second; + int x = size.x / 2; + int y = size.y / 2; + int radius = size.x / 2; endAngle += ev_angle; if (click_angle >= startAngle && click_angle < endAngle) { diff --git a/src/slic3r/GUI/Auxiliary.cpp b/src/slic3r/GUI/Auxiliary.cpp index 5bc3280e75..8d338edc21 100644 --- a/src/slic3r/GUI/Auxiliary.cpp +++ b/src/slic3r/GUI/Auxiliary.cpp @@ -989,7 +989,7 @@ void AuxiliaryPanel::create_folder(wxString name) fs::path bfs_path((m_root_dir + "/" + folder_name).ToStdWstring()); if (fs::exists(bfs_path)) { try { - fs::remove_all(bfs_path); + bool is_done = fs::remove_all(bfs_path); } catch (...) { BOOST_LOG_TRIVIAL(error) << "Failed removing the auxiliary directory " << m_root_dir.c_str(); } diff --git a/src/slic3r/GUI/AuxiliaryDataViewModel.cpp b/src/slic3r/GUI/AuxiliaryDataViewModel.cpp index cad5cf5455..50368b8544 100644 --- a/src/slic3r/GUI/AuxiliaryDataViewModel.cpp +++ b/src/slic3r/GUI/AuxiliaryDataViewModel.cpp @@ -337,7 +337,7 @@ wxDataViewItemArray AuxiliaryModel::ImportFile(AuxiliaryModelNode* sel, wxArrayS dir_path += "\\" + src_bfs_path.filename().generic_wstring(); boost::system::error_code ec; - if (!fs::copy_file(src_bfs_path, fs::path(dir_path.ToStdWstring()), fs::copy_options::overwrite_existing, ec)) + if (!fs::copy_file(src_bfs_path, fs::path(dir_path.ToStdWstring()), fs::copy_option::overwrite_if_exists, ec)) continue; // Update model data diff --git a/src/slic3r/GUI/BBLStatusBar.cpp b/src/slic3r/GUI/BBLStatusBar.cpp index b0d3513f59..7c3d640d6e 100644 --- a/src/slic3r/GUI/BBLStatusBar.cpp +++ b/src/slic3r/GUI/BBLStatusBar.cpp @@ -3,6 +3,8 @@ #include #include #include +#include +#include #include "GUI_App.hpp" diff --git a/src/slic3r/GUI/BBLTopbar.cpp b/src/slic3r/GUI/BBLTopbar.cpp index 30d4878ddf..0bf251d729 100644 --- a/src/slic3r/GUI/BBLTopbar.cpp +++ b/src/slic3r/GUI/BBLTopbar.cpp @@ -230,7 +230,7 @@ void BBLTopbar::Init(wxFrame* parent) this->AddSpacer(FromDIP(10)); wxBitmap save_bitmap = create_scaled_bitmap("topbar_save", nullptr, TOPBAR_ICON_SIZE); - this->AddTool(wxID_SAVE, "", save_bitmap); + wxAuiToolBarItem* save_btn = this->AddTool(wxID_SAVE, "", save_bitmap); this->AddSpacer(FromDIP(10)); @@ -278,7 +278,7 @@ void BBLTopbar::Init(wxFrame* parent) this->AddSpacer(FromDIP(4)); wxBitmap iconize_bitmap = create_scaled_bitmap("topbar_min", nullptr, TOPBAR_ICON_SIZE); - this->AddTool(wxID_ICONIZE_FRAME, "", iconize_bitmap); + wxAuiToolBarItem* iconize_btn = this->AddTool(wxID_ICONIZE_FRAME, "", iconize_bitmap); this->AddSpacer(FromDIP(4)); @@ -294,7 +294,7 @@ void BBLTopbar::Init(wxFrame* parent) this->AddSpacer(FromDIP(4)); wxBitmap close_bitmap = create_scaled_bitmap("topbar_close", nullptr, TOPBAR_ICON_SIZE); - this->AddTool(wxID_CLOSE_FRAME, "", close_bitmap); + wxAuiToolBarItem* close_btn = this->AddTool(wxID_CLOSE_FRAME, "", close_bitmap); Realize(); // m_toolbar_h = this->GetSize().GetHeight(); @@ -466,6 +466,7 @@ void BBLTopbar::UpdateToolbarWidth(int width) } void BBLTopbar::Rescale() { + int em = em_unit(this); wxAuiToolBarItem* item; /*item = this->FindTool(ID_LOGO); @@ -495,7 +496,7 @@ void BBLTopbar::Rescale() { item->SetBitmap(create_scaled_bitmap("calib_sf", nullptr, TOPBAR_ICON_SIZE)); item->SetDisabledBitmap(create_scaled_bitmap("calib_sf_inactive", nullptr, TOPBAR_ICON_SIZE)); - // item = this->FindTool(ID_TITLE); + item = this->FindTool(ID_TITLE); /*item = this->FindTool(ID_PUBLISH); item->SetBitmap(create_scaled_bitmap("topbar_publish", this, TOPBAR_ICON_SIZE)); @@ -547,14 +548,14 @@ void BBLTopbar::OnCloseFrame(wxAuiToolBarEvent& event) void BBLTopbar::OnMouseLeftDClock(wxMouseEvent& mouse) { + wxPoint mouse_pos = ::wxGetMousePosition(); // check whether mouse is not on any tool item if (this->FindToolByCurrentPosition() != NULL && this->FindToolByCurrentPosition() != m_title_item) { mouse.Skip(); return; } -#ifdef __WXMSW__ - wxPoint mouse_pos = ::wxGetMousePosition(); +#ifdef __W1XMSW__ ::PostMessage((HWND) m_frame->GetHandle(), WM_NCLBUTTONDBLCLK, HTCAPTION, MAKELPARAM(mouse_pos.x, mouse_pos.y)); return; #endif // __WXMSW__ @@ -636,6 +637,7 @@ void BBLTopbar::OnMouseLeftDown(wxMouseEvent& event) void BBLTopbar::OnMouseLeftUp(wxMouseEvent& event) { + wxPoint mouse_pos = ::wxGetMousePosition(); if (HasCapture()) { ReleaseMouse(); diff --git a/src/slic3r/GUI/BackgroundSlicingProcess.cpp b/src/slic3r/GUI/BackgroundSlicingProcess.cpp index 1f6c9e4b94..ca8c7a1663 100644 --- a/src/slic3r/GUI/BackgroundSlicingProcess.cpp +++ b/src/slic3r/GUI/BackgroundSlicingProcess.cpp @@ -5,9 +5,13 @@ #include "format.hpp" #include +#include +#include // For zipped archive creation +#include #include +#include #include @@ -16,18 +20,23 @@ #include "libslic3r/SLAPrint.hpp" #include "libslic3r/Utils.hpp" #include "libslic3r/GCode/PostProcessor.hpp" +#include "libslic3r/Format/SL1.hpp" #include "libslic3r/Thread.hpp" #include "libslic3r/libslic3r.h" #include #include +#include #include #include #include +#include #include "I18N.hpp" //#include "RemovableDriveManager.hpp" +#include "slic3r/GUI/Plater.hpp" + namespace Slic3r { bool SlicingProcessCompletedEvent::critical_error() const diff --git a/src/slic3r/GUI/BindDialog.cpp b/src/slic3r/GUI/BindDialog.cpp index 28360f0d7a..134d91e7c5 100644 --- a/src/slic3r/GUI/BindDialog.cpp +++ b/src/slic3r/GUI/BindDialog.cpp @@ -67,6 +67,7 @@ PingCodeBindDialog::PingCodeBindDialog(Plater* plater /*= nullptr*/) SetIcon(wxIcon(encode_path(icon_path.c_str()), wxBITMAP_TYPE_ICO)); SetBackgroundColour(*wxWHITE); + wxBoxSizer* m_sizer_main = new wxBoxSizer(wxVERTICAL); auto m_line_top = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxSize(-1, 1), wxTAB_TRAVERSAL); m_line_top->SetBackgroundColour(wxColour(166, 169, 170)); diff --git a/src/slic3r/GUI/CalibrationPanel.cpp b/src/slic3r/GUI/CalibrationPanel.cpp index 94a3186721..9a16c13322 100644 --- a/src/slic3r/GUI/CalibrationPanel.cpp +++ b/src/slic3r/GUI/CalibrationPanel.cpp @@ -226,7 +226,7 @@ SelectMObjectPopup::SelectMObjectPopup(wxWindow* parent) m_refresh_timer = new wxTimer(); m_refresh_timer->SetOwner(this); Bind(EVT_UPDATE_USER_MLIST, &SelectMObjectPopup::update_machine_list, this); - Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); + Bind(wxEVT_TIMER, &SelectMObjectPopup::on_timer, this); Bind(EVT_DISSMISS_MACHINE_LIST, &SelectMObjectPopup::on_dissmiss_win, this); } @@ -265,7 +265,7 @@ void SelectMObjectPopup::Popup(wxWindow* WXUNUSED(focus)) } } - on_timer(); + wxPostEvent(this, wxTimerEvent()); PopupWindow::Popup(); } @@ -304,7 +304,7 @@ bool SelectMObjectPopup::Show(bool show) { return PopupWindow::Show(show); } -void SelectMObjectPopup::on_timer() +void SelectMObjectPopup::on_timer(wxTimerEvent& event) { BOOST_LOG_TRIVIAL(trace) << "SelectMObjectPopup on_timer"; wxGetApp().reset_to_active(); @@ -459,7 +459,7 @@ CalibrationPanel::CalibrationPanel(wxWindow* parent, wxWindowID id, const wxPoin Layout(); init_timer(); - Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); + Bind(wxEVT_TIMER, &CalibrationPanel::on_timer, this); } void CalibrationPanel::init_tabpanel() { @@ -502,10 +502,10 @@ void CalibrationPanel::init_timer() m_refresh_timer = new wxTimer(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(REFRESH_INTERVAL); - on_timer(); + wxPostEvent(this, wxTimerEvent()); } -void CalibrationPanel::on_timer() { +void CalibrationPanel::on_timer(wxTimerEvent& event) { update_all(); } @@ -644,7 +644,7 @@ bool CalibrationPanel::Show(bool show) { m_refresh_timer->Stop(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(REFRESH_INTERVAL); - on_timer(); + wxPostEvent(this, wxTimerEvent()); DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (dev) { @@ -670,6 +670,9 @@ bool CalibrationPanel::Show(bool show) { void CalibrationPanel::on_printer_clicked(wxMouseEvent& event) { + auto mouse_pos = ClientToScreen(event.GetPosition()); + wxPoint rect = m_side_tools->ClientToScreen(wxPoint(0, 0)); + if (!m_side_tools->is_in_interval()) { wxPoint pos = m_side_tools->ClientToScreen(wxPoint(0, 0)); pos.y += m_side_tools->GetRect().height; diff --git a/src/slic3r/GUI/CalibrationPanel.hpp b/src/slic3r/GUI/CalibrationPanel.hpp index 7b56abd8e7..a993ff2886 100644 --- a/src/slic3r/GUI/CalibrationPanel.hpp +++ b/src/slic3r/GUI/CalibrationPanel.hpp @@ -94,7 +94,7 @@ private: private: void OnLeftUp(wxMouseEvent& event); - void on_timer(); + void on_timer(wxTimerEvent& event); void update_user_devices(); void on_dissmiss_win(wxCommandEvent& event); }; @@ -117,7 +117,7 @@ public: protected: void init_tabpanel(); void init_timer(); - void on_timer(); + void on_timer(wxTimerEvent& event); int last_status; diff --git a/src/slic3r/GUI/CalibrationWizard.cpp b/src/slic3r/GUI/CalibrationWizard.cpp index 6280c96402..f6cbbc3065 100644 --- a/src/slic3r/GUI/CalibrationWizard.cpp +++ b/src/slic3r/GUI/CalibrationWizard.cpp @@ -1126,6 +1126,7 @@ void FlowRateWizard::on_cali_save() } std::string old_preset_name; + CalibrationPresetPage* preset_page = (static_cast(preset_step->page)); std::map selected_filaments = get_cached_selected_filament(curr_obj); if (!selected_filaments.empty()) { old_preset_name = selected_filaments.begin()->second->name; @@ -1172,6 +1173,7 @@ void FlowRateWizard::on_cali_save() return; std::string old_preset_name; + CalibrationPresetPage* preset_page = (static_cast(preset_step->page)); std::map selected_filaments = get_cached_selected_filament(curr_obj); if (!selected_filaments.empty()) { old_preset_name = selected_filaments.begin()->second->name; @@ -1441,6 +1443,7 @@ void MaxVolumetricSpeedWizard::on_cali_save() std::string old_preset_name; std::string new_preset_name; + CalibrationPresetPage *preset_page = (static_cast(preset_step->page)); std::map selected_filaments = get_cached_selected_filament(curr_obj); if (!selected_filaments.empty()) { old_preset_name = selected_filaments.begin()->second->name; diff --git a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp index f972d22988..482ce61a12 100644 --- a/src/slic3r/GUI/CalibrationWizardPresetPage.cpp +++ b/src/slic3r/GUI/CalibrationWizardPresetPage.cpp @@ -790,6 +790,7 @@ wxString CalibrationPresetPage::format_text(wxString& m_msg) wxString out_txt = m_msg; wxString count_txt = ""; + int new_line_pos = 0; for (int i = 0; i < m_msg.length(); i++) { auto text_size = m_statictext_printer_msg->GetTextExtent(count_txt); diff --git a/src/slic3r/GUI/ConfigManipulation.cpp b/src/slic3r/GUI/ConfigManipulation.cpp index 9893ee5efc..02c82e06bb 100644 --- a/src/slic3r/GUI/ConfigManipulation.cpp +++ b/src/slic3r/GUI/ConfigManipulation.cpp @@ -282,6 +282,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con } double sparse_infill_density = config->option("sparse_infill_density")->value; + auto timelapse_type = config->opt_enum("timelapse_type"); if (!is_plate_config && config->opt_bool("spiral_mode") && @@ -297,6 +298,7 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con { DynamicPrintConfig new_conf = *config; auto answer = show_spiral_mode_settings_dialog(is_object_config); + bool support = true; if (answer == wxID_YES) { new_conf.set_key_value("wall_loops", new ConfigOptionInt(1)); new_conf.set_key_value("top_shell_layers", new ConfigOptionInt(0)); @@ -308,6 +310,8 @@ void ConfigManipulation::update_print_fff_config(DynamicPrintConfig* config, con new_conf.set_key_value("wall_direction", new ConfigOptionEnum(WallDirection::Auto)); new_conf.set_key_value("timelapse_type", new ConfigOptionEnum(tlTraditional)); sparse_infill_density = 0; + timelapse_type = TimelapseType::tlTraditional; + support = false; } else { new_conf.set_key_value("spiral_mode", new ConfigOptionBool(false)); @@ -511,11 +515,6 @@ void ConfigManipulation::toggle_print_fff_options(DynamicPrintConfig *config, co apply(config, &new_conf); } - // Orca: Hide the filter out tiny gaps field when gap fill target is nowhere as no gap fill will be applied. - bool have_gap_fill = config->opt_enum("gap_fill_target") != gftNowhere; - toggle_line("filter_out_gap_fill", have_gap_fill); - - bool have_perimeters = config->opt_int("wall_loops") > 0; for (auto el : { "extra_perimeters_on_overhangs", "ensure_vertical_shell_thickness", "detect_thin_wall", "detect_overhang_wall", "seam_position", "staggered_inner_seams", "wall_sequence", "outer_wall_line_width", diff --git a/src/slic3r/GUI/ConfigWizard.cpp b/src/slic3r/GUI/ConfigWizard.cpp index fd00db7f78..1768d8cd47 100644 --- a/src/slic3r/GUI/ConfigWizard.cpp +++ b/src/slic3r/GUI/ConfigWizard.cpp @@ -2438,7 +2438,7 @@ bool ConfigWizard::priv::apply_config(AppConfig *app_config, PresetBundle *prese header = _L_PLURAL("A new vendor was installed and one of its printers will be activated", "New vendors were installed and one of theirs printers will be activated", install_bundles.size()); // Decide whether to create snapshot based on run_reason and the reset profile checkbox - /*bool snapshot = true; + bool snapshot = true; Snapshot::Reason snapshot_reason = Snapshot::SNAPSHOT_UPGRADE; switch (run_reason) { case ConfigWizard::RR_DATA_EMPTY: @@ -2456,7 +2456,7 @@ bool ConfigWizard::priv::apply_config(AppConfig *app_config, PresetBundle *prese snapshot = false; snapshot_reason = Snapshot::SNAPSHOT_USER; break; - }*/ + } //BBS: remove snapshot logic /*if (snapshot && ! take_config_snapshot_cancel_on_error(*app_config, snapshot_reason, "", _u8L("Do you want to continue changing the configuration?"))) @@ -2701,7 +2701,8 @@ ConfigWizard::ConfigWizard(wxWindow *parent) //BBS: add BBL as default const auto bbl_it = p->bundles.find("BBL"); wxCHECK_RET(bbl_it != p->bundles.cend(), "Vendor BambooLab not found"); - + const VendorProfile * vendor_bbl = bbl_it->second.vendor_profile; + p->only_sla_mode = false; p->any_sla_selected = p->check_sla_selected(); if (p->only_sla_mode) diff --git a/src/slic3r/GUI/CreatePresetsDialog.cpp b/src/slic3r/GUI/CreatePresetsDialog.cpp index 0166238cab..48dcd07424 100644 --- a/src/slic3r/GUI/CreatePresetsDialog.cpp +++ b/src/slic3r/GUI/CreatePresetsDialog.cpp @@ -277,7 +277,7 @@ static wxArrayString get_exist_vendor_choices(VendorMap& vendors) vendors[users_models.name] = users_models; } - for (const pair &vendor : vendors) { + for (const auto& vendor : vendors) { if (vendor.second.models.empty() || vendor.second.id.empty()) continue; choices.Add(vendor.first); } @@ -315,7 +315,7 @@ static wxBoxSizer *create_preset_tree(wxWindow *parent, std::pair preset : printer_and_preset.second) { wxString preset_name = wxString::FromUTF8(preset->name); - treeCtrl->AppendItem(rootId, preset_name); + wxTreeItemId childId1 = treeCtrl->AppendItem(rootId, preset_name); row++; } @@ -658,11 +658,11 @@ void CreateFilamentPresetDialog::on_dpi_changed(const wxRect &suggested_rect) { bool CreateFilamentPresetDialog::is_check_box_selected() { - for (const std::pair<::CheckBox *, std::pair> &checkbox_preset : m_filament_preset) { + for (const auto& checkbox_preset : m_filament_preset) { if (checkbox_preset.first->GetValue()) { return true; } } - for (const std::pair<::CheckBox *, std::pair> &checkbox_preset : m_machint_filament_preset) { + for (const auto& checkbox_preset : m_machint_filament_preset) { if (checkbox_preset.first->GetValue()) { return true; } } @@ -671,6 +671,8 @@ bool CreateFilamentPresetDialog::is_check_box_selected() wxBoxSizer *CreateFilamentPresetDialog::create_item(FilamentOptionType option_type) { + + wxSizer *item = nullptr; switch (option_type) { case VENDOR: return create_vendor_item(); case TYPE: return create_type_item(); @@ -691,7 +693,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_vendor_item() horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); wxArrayString choices; - for (const wxString &vendor : filament_vendors) { + for (const wxString vendor : filament_vendors) { choices.push_back(vendor); } choices.Sort(); @@ -773,7 +775,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_type_item() horizontal_sizer->Add(optionSizer, 0, wxEXPAND | wxALL | wxALIGN_CENTER_VERTICAL, FromDIP(5)); wxArrayString filament_type; - for (const wxString &filament : m_system_filament_types_set) { + for (const wxString filament : m_system_filament_types_set) { filament_type.Add(filament); } filament_type.Sort(); @@ -1048,7 +1050,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item() if (curr_create_type == m_create_type.base_filament) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":clone filament create type filament "; - for (const std::pair<::CheckBox *, std::pair> &checkbox_preset : m_filament_preset) { + for (const auto& checkbox_preset : m_filament_preset) { if (checkbox_preset.first->GetValue()) { std::string compatible_printer_name = checkbox_preset.second.first; std::vector failures; @@ -1075,7 +1077,7 @@ wxBoxSizer *CreateFilamentPresetDialog::create_button_item() } } else if (curr_create_type == m_create_type.base_filament_preset) { BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << ":clone filament presets create type filament preset"; - for (const std::pair<::CheckBox *, std::pair> &checkbox_preset : m_machint_filament_preset) { + for (const auto& checkbox_preset : m_machint_filament_preset) { if (checkbox_preset.first->GetValue()) { std::string compatible_printer_name = checkbox_preset.second.first; std::vector failures; @@ -1153,7 +1155,7 @@ wxArrayString CreateFilamentPresetDialog::get_filament_preset_choices() } int suffix = 0; - for (const pair> &preset : m_filament_choice_map) { + for (const auto& preset : m_filament_choice_map) { if (preset.second.empty()) continue; std::set preset_name_set; for (Preset* filament_preset : preset.second) { @@ -1750,7 +1752,7 @@ wxBoxSizer *CreatePrinterPresetDialog::create_nozzle_diameter_item(wxWindow *par wxBoxSizer *comboBoxSizer = new wxBoxSizer(wxVERTICAL); m_nozzle_diameter = new ComboBox(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, OPTION_SIZE, 0, nullptr, wxCB_READONLY); wxArrayString nozzle_diameters; - for (const std::string nozzle : nozzle_diameter_vec) { + for (const std::string& nozzle : nozzle_diameter_vec) { nozzle_diameters.Add(nozzle + " mm"); } m_nozzle_diameter->Set(nozzle_diameters); @@ -3090,6 +3092,10 @@ bool CreatePrinterPresetDialog::check_printable_area() { if (x == 0 || y == 0) { return false; } + double x0 = 0.0; + double y0 = 0.0; + double x1 = x; + double y1 = y; if (dx >= x || dy >= y) { return false; } @@ -3893,7 +3899,7 @@ ExportConfigsDialog::ExportCase ExportConfigsDialog::archive_filament_bundle_to_ BOOST_LOG_TRIVIAL(info) << "Filament preset json add successful: " << filament_preset->name; } - for (const std::pair& vendor_name_to_json : vendor_structure) { + for (const auto& vendor_name_to_json : vendor_structure) { json j; std::string printer_vendor = vendor_name_to_json.first; j["vendor"] = printer_vendor; @@ -4627,6 +4633,7 @@ wxBoxSizer *EditFilamentPresetDialog::create_button_sizer() WarningDialog dlg(this, _L("All the filament presets belong to this filament would be deleted. \nIf you are using this filament on your printer, please reset the filament information for that slot."), _L("Delete filament"), wxYES | wxCANCEL | wxCANCEL_DEFAULT | wxCENTRE); int res = dlg.ShowModal(); if (wxID_YES == res) { + PresetBundle *preset_bundle = wxGetApp().preset_bundle; std::set> inherit_preset_names; std::set> root_preset_names; for (std::pair>> printer_and_preset : m_printer_compatible_presets) { diff --git a/src/slic3r/GUI/DailyTips.cpp b/src/slic3r/GUI/DailyTips.cpp index ba4427964e..2e5b99e8b2 100644 --- a/src/slic3r/GUI/DailyTips.cpp +++ b/src/slic3r/GUI/DailyTips.cpp @@ -89,6 +89,7 @@ void DailyTipsDataRenderer::open_wiki() const void DailyTipsDataRenderer::render(const ImVec2& pos, const ImVec2& size) const { + ImGuiWrapper& imgui = *wxGetApp().imgui(); ImGuiWindow* parent_window = ImGui::GetCurrentWindow(); int window_flags = parent_window->Flags; window_flags &= ~ImGuiWindowFlags_NoScrollbar; @@ -189,6 +190,7 @@ void DailyTipsDataRenderer::render_text(const ImVec2& start_pos, const ImVec2& s std::string tips_line = _u8L("For more information, please check out Wiki"); std::string wiki_part_text = _u8L("Wiki"); std::string first_part_text = tips_line.substr(0, tips_line.find(wiki_part_text)); + ImVec2 wiki_part_size = ImGui::CalcTextSize(wiki_part_text.c_str()); ImVec2 first_part_size = ImGui::CalcTextSize(first_part_text.c_str()); //text @@ -198,6 +200,7 @@ void DailyTipsDataRenderer::render_text(const ImVec2& start_pos, const ImVec2& s ImColor HyperColor = ImColor(31, 142, 234, (int)(255 * m_fade_opacity)).Value; ImVec2 wiki_part_rect_min = ImVec2(link_start_pos.x + first_part_size.x, link_start_pos.y); + ImVec2 wiki_part_rect_max = wiki_part_rect_min + wiki_part_size; ImGui::PushStyleColor(ImGuiCol_Text, HyperColor.Value); ImGui::SetCursorScreenPos(wiki_part_rect_min); imgui.text(wiki_part_text.c_str()); @@ -261,6 +264,9 @@ ImVec2 DailyTipsPanel::get_size() void DailyTipsPanel::render() { + ImGuiWrapper& imgui = *wxGetApp().imgui(); + float scale = imgui.get_font_size() / 15.0f; + if (!m_first_enter) { retrieve_data_from_hint_database(HintDataNavigation::Curr); m_first_enter = true; diff --git a/src/slic3r/GUI/DeviceManager.cpp b/src/slic3r/GUI/DeviceManager.cpp index 28a5523b22..a79dd0a027 100644 --- a/src/slic3r/GUI/DeviceManager.cpp +++ b/src/slic3r/GUI/DeviceManager.cpp @@ -1007,17 +1007,17 @@ int MachineObject::ams_filament_mapping(std::vector filaments, std reset_mapping_result(result); try { // try to use ordering ams mapping - // bool order_mapping_result = true; + bool order_mapping_result = true; for (int i = 0; i < filaments.size(); i++) { if (i >= tray_info_list.size()) { - // order_mapping_result = false; + order_mapping_result = false; break; } if (tray_info_list[i].tray_id == -1) { result[i].tray_id = tray_info_list[i].tray_id; } else { if (!tray_info_list[i].type.empty() && tray_info_list[i].type != filaments[i].type) { - // order_mapping_result = false; + order_mapping_result = false; break; } else { result[i].tray_id = tray_info_list[i].tray_id; @@ -1319,6 +1319,7 @@ wxString MachineObject::get_curr_stage() int MachineObject::get_curr_stage_idx() { + int result = -1; for (int i = 0; i < stage_list_info.size(); i++) { if (stage_list_info[i] == stage_curr) { return i; @@ -2348,6 +2349,8 @@ int MachineObject::command_xcam_control(std::string module_name, bool on_off, st int MachineObject::command_xcam_control_ai_monitoring(bool on_off, std::string lvl) { + bool print_halt = (lvl == "never_halt") ? false:true; + xcam_ai_monitoring = on_off; xcam_ai_monitoring_hold_count = HOLD_COUNT_MAX; xcam_ai_monitoring_sensitivity = lvl; @@ -5659,7 +5662,9 @@ void DeviceManager::parse_user_print_info(std::string body) } } } - catch (std::exception&) {} + catch (std::exception& e) { + ; + } } void DeviceManager::update_user_machine_list_info() diff --git a/src/slic3r/GUI/DownloadProgressDialog.cpp b/src/slic3r/GUI/DownloadProgressDialog.cpp index 425c2deb3b..542db08561 100644 --- a/src/slic3r/GUI/DownloadProgressDialog.cpp +++ b/src/slic3r/GUI/DownloadProgressDialog.cpp @@ -128,6 +128,7 @@ wxString DownloadProgressDialog::format_text(wxStaticText* st, wxString str, int wxString out_txt = str; wxString count_txt = ""; + int new_line_pos = 0; for (int i = 0; i < str.length(); i++) { auto text_size = st->GetTextExtent(count_txt); diff --git a/src/slic3r/GUI/ExtrusionCalibration.cpp b/src/slic3r/GUI/ExtrusionCalibration.cpp index eda9da5857..26216edc93 100644 --- a/src/slic3r/GUI/ExtrusionCalibration.cpp +++ b/src/slic3r/GUI/ExtrusionCalibration.cpp @@ -626,6 +626,7 @@ void ExtrusionCalibration::update_combobox_filaments() { m_comboBox_filament->SetValue(wxEmptyString); user_filaments.clear(); + int selection_idx = -1; int filament_index = -1; int curr_selection = -1; wxArrayString filament_items; diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 58c123fb18..4347e18cc3 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -1944,6 +1944,7 @@ void PointCtrl::BUILD() y_textctrl->Bind(wxEVT_KILL_FOCUS, ([this](wxEvent& e) { e.Skip(); propagate_value(y_textctrl); }), y_textctrl->GetId()); // // recast as a wxWindow to fit the calling convention + window = dynamic_cast(x_input); sizer = dynamic_cast(temp); x_textctrl->SetToolTip(get_tooltip_text(X+", "+Y)); diff --git a/src/slic3r/GUI/Field.hpp b/src/slic3r/GUI/Field.hpp index ef1b6024b0..3b974b7ad0 100644 --- a/src/slic3r/GUI/Field.hpp +++ b/src/slic3r/GUI/Field.hpp @@ -506,6 +506,7 @@ public: TextInput* x_input{nullptr}; TextInput* y_input{nullptr}; + wxWindow* window{nullptr}; void BUILD() override; bool value_was_changed(wxTextCtrl* win); // Propagate value from field to the OptionGroupe and Config after kill_focus/ENTER @@ -524,7 +525,7 @@ public: x_textctrl->Disable(); y_textctrl->Disable(); } wxSizer* getSizer() override { return sizer; } - wxWindow* getWindow() override { return dynamic_cast(x_textctrl); } + wxWindow* getWindow() override { return window; } }; class StaticText : public Field { diff --git a/src/slic3r/GUI/FileArchiveDialog.cpp b/src/slic3r/GUI/FileArchiveDialog.cpp index 689b31598d..2cd84b6acd 100644 --- a/src/slic3r/GUI/FileArchiveDialog.cpp +++ b/src/slic3r/GUI/FileArchiveDialog.cpp @@ -2,6 +2,7 @@ #include "I18N.hpp" #include "GUI_App.hpp" +#include "GUI.hpp" #include "MainFrame.hpp" #include "ExtraRenderers.hpp" #include "format.hpp" diff --git a/src/slic3r/GUI/GCodeViewer.cpp b/src/slic3r/GUI/GCodeViewer.cpp index b35ade0be4..0d649b9a6a 100644 --- a/src/slic3r/GUI/GCodeViewer.cpp +++ b/src/slic3r/GUI/GCodeViewer.cpp @@ -1447,6 +1447,9 @@ void GCodeViewer::_render_calibration_thumbnail_internal(ThumbnailData& thumbnai //shader->set_uniform("emission_factor", 0.0f); } else { + switch (buffer.render_primitive_type) { + default: break; + } int uniform_color = shader->get_uniform_location("uniform_color"); auto it_path = buffer.render_paths.begin(); for (unsigned int ibuffer_id = 0; ibuffer_id < static_cast(buffer.indices.size()); ++ibuffer_id) { @@ -1744,10 +1747,10 @@ void GCodeViewer::update_layers_slider_mode() // true -> single-extruder printer profile OR // multi-extruder printer profile , but whole model is printed by only one extruder // false -> multi-extruder printer profile , and model is printed by several extruders - // bool one_extruder_printed_model = true; + bool one_extruder_printed_model = true; // extruder used for whole model for multi-extruder printer profile - // int only_extruder = -1; + int only_extruder = -1; // BBS if (wxGetApp().filaments_cnt() > 1) { @@ -1770,10 +1773,10 @@ void GCodeViewer::update_layers_slider_mode() return true; }; - // if (is_one_extruder_printed_model()) - // only_extruder = extruder; - // else - // one_extruder_printed_model = false; + if (is_one_extruder_printed_model()) + only_extruder = extruder; + else + one_extruder_printed_model = false; } } @@ -3244,6 +3247,12 @@ void GCodeViewer::refresh_render_paths(bool keep_sequential_current_first, bool return in_layers_range(path.sub_paths.front().first.s_id) && in_layers_range(path.sub_paths.back().last.s_id); }; + //BBS + auto is_extruder_in_layer_range = [this](const Path& path, size_t extruder_id) { + return path.extruder_id == extruder_id; + }; + + auto is_travel_in_layers_range = [this](size_t path_id, size_t min_id, size_t max_id) { const TBuffer& buffer = m_buffers[buffer_id(EMoveType::Travel)]; if (path_id >= buffer.paths.size()) @@ -4088,6 +4097,7 @@ void GCodeViewer::render_all_plates_stats(const std::vector support_used_filaments_g_all_plates; float total_time_all_plates = 0.0f; float total_cost_all_plates = 0.0f; + bool show_detailed_statistics_page = false; struct ColumnData { enum { Model = 1, @@ -4389,6 +4399,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv const float icon_size = ImGui::GetTextLineHeight() * 0.7; //BBS GUI refactor //const float percent_bar_size = 2.0f * ImGui::GetTextLineHeight(); + const float percent_bar_size = 0; bool imperial_units = wxGetApp().app_config->get("use_inches") == "1"; ImDrawList* draw_list = ImGui::GetWindowDrawList(); @@ -4500,6 +4511,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv append_range_item(0, range.min, decimals); } else { + const float step_size = range.step_size(); for (int i = static_cast(Range_Colors.size()) - 1; i >= 0; --i) { append_range_item(i, range.get_value_at_step(i), decimals); } @@ -4548,7 +4560,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv return ret; }; - /*auto color_print_ranges = [this](unsigned char extruder_id, const std::vector& custom_gcode_per_print_z) { + auto color_print_ranges = [this](unsigned char extruder_id, const std::vector& custom_gcode_per_print_z) { std::vector>> ret; ret.reserve(custom_gcode_per_print_z.size()); @@ -4577,7 +4589,27 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv } return ret; - };*/ + }; + + auto upto_label = [](double z) { + char buf[64]; + ::sprintf(buf, "%.2f", z); + return _u8L("up to") + " " + std::string(buf) + " " + _u8L("mm"); + }; + + auto above_label = [](double z) { + char buf[64]; + ::sprintf(buf, "%.2f", z); + return _u8L("above") + " " + std::string(buf) + " " + _u8L("mm"); + }; + + auto fromto_label = [](double z1, double z2) { + char buf1[64]; + ::sprintf(buf1, "%.2f", z1); + char buf2[64]; + ::sprintf(buf2, "%.2f", z2); + return _u8L("from") + " " + std::string(buf1) + " " + _u8L("to") + " " + std::string(buf2) + " " + _u8L("mm"); + }; auto role_time_and_percent = [time_mode](ExtrusionRole role) { auto it = std::find_if(time_mode.roles_times.begin(), time_mode.roles_times.end(), [role](const std::pair& item) { return role == item.first; }); @@ -5074,7 +5106,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ImGuiWindow* window = ImGui::GetCurrentWindow(); const ImRect separator(ImVec2(window->Pos.x + window_padding * 3, window->DC.CursorPos.y), ImVec2(window->Pos.x + window->Size.x - window_padding * 3, window->DC.CursorPos.y + 1.0f)); ImGui::ItemSize(ImVec2(0.0f, 0.0f)); - ImGui::ItemAdd(separator, 0); + const bool item_visible = ImGui::ItemAdd(separator, 0); window->DrawList->AddLine(separator.Min, ImVec2(separator.Max.x, separator.Min.y), ImGui::GetColorU32(ImGuiCol_Separator)); std::vector> columns_offsets; @@ -5196,7 +5228,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv return items; }; - /*auto append_color_change = [&imgui](const ColorRGBA& color1, const ColorRGBA& color2, const std::array& offsets, const Times& times) { + auto append_color_change = [&imgui](const ColorRGBA& color1, const ColorRGBA& color2, const std::array& offsets, const Times& times) { imgui.text(_u8L("Color change")); ImGui::SameLine(); @@ -5213,9 +5245,9 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ImGui::SameLine(offsets[0]); imgui.text(short_time(get_time_dhms(times.second - times.first))); - };*/ + }; - /*auto append_print = [&imgui, imperial_units](const ColorRGBA& color, const std::array& offsets, const Times& times, std::pair used_filament) { + auto append_print = [&imgui, imperial_units](const ColorRGBA& color, const std::array& offsets, const Times& times, std::pair used_filament) { imgui.text(_u8L("Print")); ImGui::SameLine(); @@ -5241,7 +5273,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv ::sprintf(buffer, "%.2f g", used_filament.second); imgui.text(buffer); } - };*/ + }; PartialTimes partial_times = generate_partial_times(time_mode.custom_gcode_times, m_print_statistics.volumes_per_color_change); if (!partial_times.empty()) { @@ -5348,7 +5380,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv // } //} -/* auto any_option_available = [this]() { + auto any_option_available = [this]() { auto available = [this](EMoveType type) { const TBuffer& buffer = m_buffers[buffer_id(type)]; return buffer.visible && buffer.has_data(); @@ -5361,7 +5393,7 @@ void GCodeViewer::render_legend(float &legend_height, int canvas_width, int canv available(EMoveType::Tool_change) || available(EMoveType::Unretract) || available(EMoveType::Seam); - };*/ + }; //auto add_option = [this, append_item](EMoveType move_type, EOptionsColors color, const std::string& text) { // const TBuffer& buffer = m_buffers[buffer_id(move_type)]; diff --git a/src/slic3r/GUI/GLCanvas3D.cpp b/src/slic3r/GUI/GLCanvas3D.cpp index b334bdf67e..6365b88a26 100644 --- a/src/slic3r/GUI/GLCanvas3D.cpp +++ b/src/slic3r/GUI/GLCanvas3D.cpp @@ -2773,7 +2773,7 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re ModelInstanceEPrintVolumeState state; const bool contained_min_one = m_volumes.check_outside_state(m_bed.build_volume(), &state); const bool partlyOut = (state == ModelInstanceEPrintVolumeState::ModelInstancePVS_Partly_Outside); - // const bool fullyOut = (state == ModelInstanceEPrintVolumeState::ModelInstancePVS_Fully_Outside); + const bool fullyOut = (state == ModelInstanceEPrintVolumeState::ModelInstancePVS_Fully_Outside); _set_warning_notification(EWarning::ObjectClashed, partlyOut); //BBS: turn off the warning when fully outside @@ -4080,12 +4080,12 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt) // Set focus in order to remove it from sidebar fields if (m_canvas != nullptr) { // Only set focus, if the top level window of this canvas is active. -// auto p = dynamic_cast(evt.GetEventObject()); -// while (p->GetParent()) -// p = p->GetParent(); -// auto *top_level_wnd = dynamic_cast(p); -// if (top_level_wnd && top_level_wnd->IsActive() && !wxGetApp().get_side_menu_popup_status()) - // m_canvas->SetFocus(); + auto p = dynamic_cast(evt.GetEventObject()); + while (p->GetParent()) + p = p->GetParent(); + auto *top_level_wnd = dynamic_cast(p); + if (top_level_wnd && top_level_wnd->IsActive() && !wxGetApp().get_side_menu_popup_status()) + ;// m_canvas->SetFocus(); m_mouse.position = pos.cast(); m_tooltip_enabled = false; // 1) forces a frame render to ensure that m_hover_volume_idxs is updated even when the user right clicks while @@ -5093,6 +5093,7 @@ std::vector GLCanvas3D::get_empty_cells(const Vec2f start_point, const Ve } for (size_t i = 0; i < m_model->objects.size(); ++i) { ModelObject* model_object = m_model->objects[i]; + auto id = model_object->id().id; ModelInstance* model_instance0 = model_object->instances.front(); Polygon hull_2d = model_object->convex_hull_2d(Geometry::assemble_transform({ 0.0, 0.0, model_instance0->get_offset().z() }, model_instance0->get_rotation(), model_instance0->get_scaling_factor(), model_instance0->get_mirror())); @@ -5363,6 +5364,7 @@ void GLCanvas3D::update_sequential_clearance() for (int i = k+1; i < bounding_box_count; i++) { + Polygon& next_convex = convex_and_bounding_boxes[i].hull_polygon; BoundingBox& next_bbox = convex_and_bounding_boxes[i].bounding_box; auto py1 = next_bbox.min.y(); auto py2 = next_bbox.max.y(); @@ -5423,6 +5425,7 @@ bool GLCanvas3D::_render_orient_menu(float left, float right, float bottom, floa ImGuiWrapper* imgui = wxGetApp().imgui(); auto canvas_w = float(get_canvas_size().get_width()); + auto canvas_h = float(get_canvas_size().get_height()); //BBS: GUI refactor: move main toolbar to the right //original use center as {0.0}, and top is (canvas_h/2), bottom is (-canvas_h/2), also plus inv_camera //now change to left_up as {0,0}, and top is 0, bottom is canvas_h @@ -5431,7 +5434,6 @@ bool GLCanvas3D::_render_orient_menu(float left, float right, float bottom, floa ImGuiWrapper::push_toolbar_style(get_scale()); imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.5f, 0.0f); #else - auto canvas_h = float(get_canvas_size().get_height()); const float x = canvas_w - m_main_toolbar.get_width(); const float y = 0.5f * canvas_h - top * float(wxGetApp().plater()->get_camera().get_zoom()); imgui->set_next_window_pos(x, y, ImGuiCond_Always, 1.0f, 0.0f); @@ -5446,13 +5448,13 @@ bool GLCanvas3D::_render_orient_menu(float left, float right, float bottom, floa PrinterTechnology ptech = current_printer_technology(); bool settings_changed = false; - // float angle_min = 45.f; + float angle_min = 45.f; std::string angle_key = "overhang_angle", rot_key = "enable_rotation"; std::string key_min_area = "min_area"; std::string postfix = "_fff"; if (ptech == ptSLA) { - // angle_min = 45.f; + angle_min = 45.f; postfix = "_sla"; } @@ -5508,6 +5510,7 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo ImGuiWrapper *imgui = wxGetApp().imgui(); auto canvas_w = float(get_canvas_size().get_width()); + auto canvas_h = float(get_canvas_size().get_height()); //BBS: GUI refactor: move main toolbar to the right //original use center as {0.0}, and top is (canvas_h/2), bottom is (-canvas_h/2), also plus inv_camera //now change to left_up as {0,0}, and top is 0, bottom is canvas_h @@ -5515,8 +5518,8 @@ bool GLCanvas3D::_render_arrange_menu(float left, float right, float bottom, flo float left_pos = m_main_toolbar.get_item("arrange")->render_left_pos; const float x = (1 + left_pos) * canvas_w / 2; imgui->set_next_window_pos(x, m_main_toolbar.get_height(), ImGuiCond_Always, 0.0f, 0.0f); + #else - auto canvas_h = float(get_canvas_size().get_height()); const float x = canvas_w - m_main_toolbar.get_width(); const float y = 0.5f * canvas_h - top * float(wxGetApp().plater()->get_camera().get_zoom()); imgui->set_next_window_pos(x, y, ImGuiCond_Always, 1.0f, 0.0f); @@ -8096,13 +8099,16 @@ void GLCanvas3D::_render_return_toolbar() const ImVec2 button_icon_size = ImVec2(font_size * 1.3, font_size * 1.3); ImGuiWrapper& imgui = *wxGetApp().imgui(); + Size cnv_size = get_canvas_size(); + auto canvas_w = float(cnv_size.get_width()); + auto canvas_h = float(cnv_size.get_height()); + float window_width = real_size.x + button_icon_size.x + imgui.scaled(2.0f); + float window_height = button_icon_size.y + imgui.scaled(2.0f); float window_pos_x = 30.0f + (is_collapse_toolbar_on_left() ? (get_collapse_toolbar_width() + 5.f) : 0); float window_pos_y = 14.0f; imgui.set_next_window_pos(window_pos_x, window_pos_y, ImGuiCond_Always, 0, 0); #ifdef __WINDOWS__ - float window_width = real_size.x + button_icon_size.x + imgui.scaled(2.0f); - float window_height = button_icon_size.y + imgui.scaled(2.0f); imgui.set_next_window_size(window_width, window_height, ImGuiCond_Always); #endif @@ -8116,6 +8122,9 @@ void GLCanvas3D::_render_return_toolbar() const imgui.begin(_L("Assembly Return"), ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_NoBackground | ImGuiWindowFlags_NoMove | ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoCollapse); + float button_width = 20; + float button_height = 20; + ImVec2 size = ImVec2(button_width, button_height); // Size of the image we want to make visible ImVec2 uv0 = ImVec2(0.0f, 0.0f); ImVec2 uv1 = ImVec2(1.0f, 1.0f); @@ -8391,11 +8400,11 @@ void GLCanvas3D::_render_assemble_control() const ImGui::SameLine(window_padding.x + 2 * text_size_x + slider_width + item_spacing * 7 + value_size); ImGui::PushItemWidth(slider_width); - imgui->bbl_slider_float_style("##ratio_slider", &m_explosion_ratio, 1.0f, 3.0f, "%1.2f"); + bool explosion_slider_changed = imgui->bbl_slider_float_style("##ratio_slider", &m_explosion_ratio, 1.0f, 3.0f, "%1.2f"); ImGui::SameLine(window_padding.x + 2 * text_size_x + 2 * slider_width + item_spacing * 8 + value_size); ImGui::PushItemWidth(value_size); - ImGui::BBLDragFloat("##ratio_input", &m_explosion_ratio, 0.1f, 1.0f, 3.0f, "%1.2f"); + bool explosion_input_changed = ImGui::BBLDragFloat("##ratio_input", &m_explosion_ratio, 0.1f, 1.0f, 3.0f, "%1.2f"); } imgui->end(); @@ -8425,6 +8434,7 @@ void GLCanvas3D::_render_assemble_info() const auto canvas_h = float(get_canvas_size().get_height()); float space_size = imgui->get_style_scaling() * 8.0f; float caption_max = imgui->calc_text_size(_L("Total Volume:")).x + 3 * space_size; + char buf[3][64]; ImGuiIO& io = ImGui::GetIO(); ImFont* font = io.Fonts->Fonts[0]; diff --git a/src/slic3r/GUI/GLTexture.cpp b/src/slic3r/GUI/GLTexture.cpp index be0b402653..79cbb77370 100644 --- a/src/slic3r/GUI/GLTexture.cpp +++ b/src/slic3r/GUI/GLTexture.cpp @@ -470,6 +470,7 @@ void GLTexture::reset() bool GLTexture::generate_from_text_string(const std::string& text_str, wxFont &font, wxColor background, wxColor foreground) { + int w,h,hl; return generate_from_text(text_str, font, background, foreground); } diff --git a/src/slic3r/GUI/GLToolbar.cpp b/src/slic3r/GUI/GLToolbar.cpp index 6b14f3cf2f..be97e52e84 100644 --- a/src/slic3r/GUI/GLToolbar.cpp +++ b/src/slic3r/GUI/GLToolbar.cpp @@ -1466,6 +1466,7 @@ void GLToolbar::render_vertical(const GLCanvas3D& parent) int tex_width, tex_height; if (item->is_action_with_text_image()) { float scaled_text_size = m_layout.text_size * m_layout.scale * inv_cnv_w; + float scaled_text_width = item->get_extra_size_ratio() * icons_size_x; float scaled_text_border = 2.5 * m_layout.scale * inv_cnv_h; float scaled_text_height = icons_size_y / 2.0f; item->render_text(left, left + scaled_text_size, top - scaled_text_border - scaled_text_height, top - scaled_text_border); diff --git a/src/slic3r/GUI/GUI.cpp b/src/slic3r/GUI/GUI.cpp index 9d4e394213..841c5fcd21 100644 --- a/src/slic3r/GUI/GUI.cpp +++ b/src/slic3r/GUI/GUI.cpp @@ -547,7 +547,7 @@ void desktop_open_datadir_folder() #endif } -void desktop_open_any_folder( const std::string path ) +void desktop_open_any_folder( const std::string& path ) { // Execute command to open a file explorer, platform dependent. // FIXME: The const_casts aren't needed in wxWidgets 3.1, remove them when we upgrade. @@ -558,7 +558,14 @@ void desktop_open_any_folder( const std::string path ) #elif __APPLE__ openFolderForFile(from_u8(path)); #else - const char *argv[] = {"xdg-open", path.data(), nullptr}; + + // Orca#6449: Open containing dir instead of opening the file directly. + std::string new_path = path; + boost::filesystem::path p(new_path); + if (!fs::is_directory(p)) { + new_path = p.parent_path().string(); + } + const char* argv[] = {"xdg-open", new_path.data(), nullptr}; // Check if we're running in an AppImage container, if so, we need to remove AppImage's env vars, // because they may mess up the environment expected by the file manager. diff --git a/src/slic3r/GUI/GUI.hpp b/src/slic3r/GUI/GUI.hpp index 765406583f..db8cf06a61 100644 --- a/src/slic3r/GUI/GUI.hpp +++ b/src/slic3r/GUI/GUI.hpp @@ -83,7 +83,7 @@ extern void login(); // Ask the destop to open the datadir using the default file explorer. extern void desktop_open_datadir_folder(); // Ask the destop to open one folder -extern void desktop_open_any_folder(const std::string path); +extern void desktop_open_any_folder(const std::string& path); } // namespace GUI } // namespace Slic3r diff --git a/src/slic3r/GUI/GUI_App.cpp b/src/slic3r/GUI/GUI_App.cpp index 7dc8f10271..eb5ae0c38a 100644 --- a/src/slic3r/GUI/GUI_App.cpp +++ b/src/slic3r/GUI/GUI_App.cpp @@ -301,6 +301,7 @@ public: memDC.SetTextForeground(StateColor::darkModeColorFor(wxColour(144, 144, 144))); int width = bitmap.GetWidth(); int text_height = memDC.GetTextExtent(text).GetHeight(); + int text_width = memDC.GetTextExtent(text).GetWidth(); wxRect text_rect(wxPoint(0, m_action_line_y_position), wxPoint(width, m_action_line_y_position + text_height)); memDC.DrawLabel(text, text_rect, wxALIGN_CENTER); @@ -962,7 +963,7 @@ void GUI_App::post_init() // Neither wxShowEvent nor wxWindowCreateEvent work reliably. if (this->preset_updater) { // G-Code Viewer does not initialize preset_updater. CallAfter([this] { - this->config_wizard_startup(); + bool cw_showed = this->config_wizard_startup(); std::string http_url = get_http_url(app_config->get_country_code()); std::string language = GUI::into_u8(current_language_code()); @@ -1025,7 +1026,8 @@ void GUI_App::post_init() try { std::time_t lw_t = boost::filesystem::last_write_time(temp_path) ; files_vec.push_back({ lw_t, temp_path.filename().string() }); - } catch (std::exception&) {} + } catch (const std::exception &ex) { + } } std::sort(files_vec.begin(), files_vec.end(), []( std::pair &a, std::pair &b) { @@ -1315,6 +1317,7 @@ int GUI_App::download_plugin(std::string name, std::string package_name, Install .on_complete([&pro_fn, tmp_path, target_file_path](std::string body, unsigned status) { BOOST_LOG_TRIVIAL(info) << "[download_plugin 2] completed"; bool cancel = false; + int percent = 0; fs::fstream file(tmp_path, std::ios::out | std::ios::binary | std::ios::trunc); file.write(body.c_str(), body.size()); file.close(); @@ -1924,13 +1927,8 @@ void GUI_App::init_app_config() boost::filesystem::create_directory(data_dir_path); } - // Change current directory of application - auto path = encode_path((Slic3r::data_dir() + "/log").c_str()); -#ifdef _WIN32 - _chdir(path.c_str()); -#else - chdir(path.c_str()); -#endif + // Change current dirtory of application + chdir(encode_path((Slic3r::data_dir() + "/log").c_str()).c_str()); } else { m_datadir_redefined = true; } @@ -3367,7 +3365,7 @@ if (res) { mainframe->refresh_plugin_tips(); // BBS: remove SLA related message } - } catch (std::exception&) { + } catch (std::exception &e) { // wxMessageBox(e.what(), "", MB_OK); } } @@ -3381,7 +3379,9 @@ void GUI_App::ShowDownNetPluginDlg() { return; DownloadProgressDialog dlg(_L("Downloading Bambu Network Plug-in")); dlg.ShowModal(); - } catch (std::exception&) {} + } catch (std::exception &e) { + ; + } } void GUI_App::ShowUserLogin(bool show) @@ -3396,7 +3396,9 @@ void GUI_App::ShowUserLogin(bool show) login_dlg = new ZUserLogin(); } login_dlg->ShowModal(); - } catch (std::exception&) {} + } catch (std::exception &e) { + ; + } } else { if (login_dlg) login_dlg->EndModal(wxID_OK); @@ -3416,7 +3418,7 @@ void GUI_App::ShowOnlyFilament() { // BBS: remove SLA related message } - } catch (std::exception&) { + } catch (std::exception &e) { // wxMessageBox(e.what(), "", MB_OK); } } @@ -3828,10 +3830,10 @@ std::string GUI_App::handle_web_request(std::string cmd) auto keyCode = key_event_node.get("key"); auto ctrlKey = key_event_node.get("ctrl"); auto shiftKey = key_event_node.get("shift"); + auto cmdKey = key_event_node.get("cmd"); wxKeyEvent e(wxEVT_CHAR_HOOK); #ifdef __APPLE__ - auto cmdKey = key_event_node.get("cmd"); e.SetControlDown(cmdKey); e.SetRawControlDown(ctrlKey); #else @@ -4787,6 +4789,8 @@ void GUI_App::start_sync_user_preset(bool with_progress_dlg) }); } + unsigned int http_code = 200; + /* get list witch need to be deleted*/ std::vector delete_cache_presets = get_delete_cache_presets_lock(); for (auto it = delete_cache_presets.begin(); it != delete_cache_presets.end();) { @@ -5470,7 +5474,7 @@ void GUI_App::show_ip_address_enter_dialog_handler(wxCommandEvent& evt) void GUI_App::open_preferences(size_t open_on_tab, const std::string& highlight_option) { - // bool app_layout_changed = false; + bool app_layout_changed = false; { // the dialog needs to be destroyed before the call to recreate_GUI() // or sometimes the application crashes into wxDialogBase() destructor @@ -6503,6 +6507,8 @@ static bool del_win_registry(HKEY hkeyHive, const wchar_t *pszVar, const wchar_t return false; if (!bDidntExist) { + DWORD dwDisposition; + HKEY hkey; iRC = ::RegDeleteKeyExW(hkeyHive, pszVar, KEY_ALL_ACCESS, 0); if (iRC == ERROR_SUCCESS) { return true; diff --git a/src/slic3r/GUI/GUI_AuxiliaryList.cpp b/src/slic3r/GUI/GUI_AuxiliaryList.cpp index 5e0d0dcd21..1fa5b194ec 100644 --- a/src/slic3r/GUI/GUI_AuxiliaryList.cpp +++ b/src/slic3r/GUI/GUI_AuxiliaryList.cpp @@ -3,6 +3,8 @@ #include "I18N.hpp" #include "wxExtensions.hpp" +#include + #include "GUI_App.hpp" #include "Plater.hpp" #include "libslic3r/Model.hpp" diff --git a/src/slic3r/GUI/GUI_Factories.cpp b/src/slic3r/GUI/GUI_Factories.cpp index 4ac0af51e4..ee19b25497 100644 --- a/src/slic3r/GUI/GUI_Factories.cpp +++ b/src/slic3r/GUI/GUI_Factories.cpp @@ -711,9 +711,9 @@ wxMenuItem* MenuFactory::append_menu_item_settings(wxMenu* menu_) // Create new items for settings popupmenu -// if (printer_technology() == ptFFF || -// (menu->GetMenuItems().size() > 0 && !menu->GetMenuItems().back()->IsSeparator())) - // menu->SetFirstSeparator(); + if (printer_technology() == ptFFF || + (menu->GetMenuItems().size() > 0 && !menu->GetMenuItems().back()->IsSeparator())) + ;// menu->SetFirstSeparator(); // detect itemm for adding of the setting ObjectList* object_list = obj_list(); @@ -1341,7 +1341,7 @@ void MenuFactory::create_extra_object_menu() m_object_menu.AppendSeparator(); // Set filament insert menu item here // Set Printable - append_menu_item_printable(&m_object_menu); + wxMenuItem* menu_item_printable = append_menu_item_printable(&m_object_menu); append_menu_item_per_object_process(&m_object_menu); // Enter per object parameters append_menu_item_per_object_settings(&m_object_menu); @@ -1496,6 +1496,8 @@ void MenuFactory::create_plate_menu() // arrange objects on current plate append_menu_item(menu, wxID_ANY, _L("Arrange"), _L("arrange current plate"), [](wxCommandEvent&) { + PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); + assert(plate); plater()->set_prepare_state(Job::PREPARE_STATE_MENU); plater()->arrange(); }, "", nullptr, @@ -1508,6 +1510,8 @@ void MenuFactory::create_plate_menu() append_menu_item( menu, wxID_ANY, _L("Reload All"), _L("reload all from disk"), [](wxCommandEvent&) { + PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); + assert(plate); plater()->set_prepare_state(Job::PREPARE_STATE_MENU); plater()->reload_all_from_disk(); }, @@ -1516,6 +1520,8 @@ void MenuFactory::create_plate_menu() // orient objects on current plate append_menu_item(menu, wxID_ANY, _L("Auto Rotate"), _L("auto rotate current plate"), [](wxCommandEvent&) { + PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); + assert(plate); //BBS TODO call auto rotate for current plate plater()->set_prepare_state(Job::PREPARE_STATE_MENU); plater()->orient(); @@ -1800,7 +1806,7 @@ void MenuFactory::append_menu_item_clone(wxMenu* menu) void MenuFactory::append_menu_item_simplify(wxMenu* menu) { - append_menu_item(menu, wxID_ANY, _L("Simplify Model"), "", + wxMenuItem* menu_item = append_menu_item(menu, wxID_ANY, _L("Simplify Model"), "", [](wxCommandEvent&) { obj_list()->simplify(); }, "", menu, []() {return plater()->can_simplify(); }, m_parent); } @@ -1913,16 +1919,16 @@ void MenuFactory::append_menu_item_change_filament(wxMenu* menu) wxMenu* extruder_selection_menu = new wxMenu(); const wxString& name = sels.Count() == 1 ? names[0] : names[1]; - // int initial_extruder = -1; // negative value for multiple object/part selection - // if (sels.Count() == 1) { - // const ModelConfig& config = obj_list()->get_item_config(sels[0]); - // // BBS - // const auto sel_vol = obj_list()->get_selected_model_volume(); - // if (sel_vol && sel_vol->type() == ModelVolumeType::PARAMETER_MODIFIER) - // initial_extruder = config.has("extruder") ? config.extruder() : 0; - // else - // initial_extruder = config.has("extruder") ? config.extruder() : 1; - // } + int initial_extruder = -1; // negative value for multiple object/part selection + if (sels.Count() == 1) { + const ModelConfig& config = obj_list()->get_item_config(sels[0]); + // BBS + const auto sel_vol = obj_list()->get_selected_model_volume(); + if (sel_vol && sel_vol->type() == ModelVolumeType::PARAMETER_MODIFIER) + initial_extruder = config.has("extruder") ? config.extruder() : 0; + else + initial_extruder = config.has("extruder") ? config.extruder() : 1; + } // BBS bool has_modifier = false; @@ -1963,6 +1969,7 @@ void MenuFactory::append_menu_item_change_filament(wxMenu* menu) void MenuFactory::append_menu_item_set_printable(wxMenu* menu) { + const Selection& selection = plater()->canvas3D()->get_selection(); bool all_printable = true; ObjectList* list = obj_list(); wxDataViewItemArray sels; @@ -1970,6 +1977,7 @@ void MenuFactory::append_menu_item_set_printable(wxMenu* menu) for (wxDataViewItem item : sels) { ItemType type = list->GetModel()->GetItemType(item); + bool check; if (type != itInstance && type != itObject) continue; else { @@ -2012,8 +2020,8 @@ void MenuFactory::append_menu_item_locked(wxMenu* menu) }, "", nullptr, []() { return true; }, m_parent); m_parent->Bind(wxEVT_UPDATE_UI, [](wxUpdateUIEvent& evt) { - // PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); - // assert(plate); + PartPlate* plate = plater()->get_partplate_list().get_selected_plate(); + assert(plate); //bool check = plate->is_locked(); //evt.Check(check); plater()->set_current_canvas_as_dirty(); @@ -2049,6 +2057,8 @@ void MenuFactory::append_menu_item_plate_name(wxMenu *menu) m_parent->Bind( wxEVT_UPDATE_UI, [](wxUpdateUIEvent &evt) { + PartPlate *plate = plater()->get_partplate_list().get_selected_plate(); + assert(plate); plater()->set_current_canvas_as_dirty(); }, item->GetId()); diff --git a/src/slic3r/GUI/GUI_ObjectList.cpp b/src/slic3r/GUI/GUI_ObjectList.cpp index d7d083f35f..30846abf51 100644 --- a/src/slic3r/GUI/GUI_ObjectList.cpp +++ b/src/slic3r/GUI/GUI_ObjectList.cpp @@ -713,6 +713,7 @@ void ObjectList::update_plate_values_for_items() Unselect(item); bool is_old_parent_expanded = IsExpanded(old_parent); + bool is_expanded = IsExpanded(item); m_objects_model->OnPlateChange(plate_idx, item); if (is_old_parent_expanded) Expand(old_parent); @@ -738,6 +739,7 @@ void ObjectList::object_config_options_changed(const ObjectVolumeID& ov_id) if (ov_id.object == nullptr) return; + ModelObjectPtrs& objects = wxGetApp().model().objects; ModelObject* mo = ov_id.object; ModelVolume* mv = ov_id.volume; @@ -844,6 +846,8 @@ void ObjectList::update_filament_colors() void ObjectList::update_name_column_width() const { wxSize client_size = this->GetClientSize(); + bool p_vbar = this->GetParent()->HasScrollbar(wxVERTICAL); + bool p_hbar = this->GetParent()->HasScrollbar(wxHORIZONTAL); auto em = em_unit(const_cast(this)); // BBS: walkaround for wxDataViewCtrl::HasScrollbar() does not return correct status @@ -932,6 +936,7 @@ void ObjectList::update_name_in_model(const wxDataViewItem& item) const if (m_objects_model->GetItemType(item) & itPlate) { std::string name = m_objects_model->GetName(item).ToUTF8().data(); int plate_idx = -1; + const ItemType type0 = m_objects_model->GetItemType(item, plate_idx); if (plate_idx >= 0) { auto plate = wxGetApp().plater()->get_partplate_list().get_plate(plate_idx); if (plate->get_plate_name() != name) { @@ -1346,7 +1351,8 @@ void ObjectList::show_context_menu(const bool evt_context_menu) plater->SetPlateIndexByRightMenuInLeftUI(-1); if (type & itPlate) { int plate_idx = -1; - if (plate_idx >= 0) { + const ItemType type0 = m_objects_model->GetItemType(item, plate_idx); + if (plate_idx >= 0) { plater->SetPlateIndexByRightMenuInLeftUI(plate_idx); } } @@ -2000,7 +2006,7 @@ void ObjectList::load_modifier(const wxArrayString& input_files, ModelObject& mo try { model = Model::read_from_file(input_file, nullptr, nullptr, LoadStrategy::LoadModel); } - catch (std::exception&) { + catch (std::exception& e) { // auto msg = _L("Error!") + " " + input_file + " : " + e.what() + "."; auto msg = _L("Error!") + " " + _L("Failed to get the model data in the current file."); show_error(parent, msg); @@ -2899,7 +2905,7 @@ void ObjectList::boolean() new_object->config.assign_config(object->config); if (new_object->instances.empty()) new_object->add_instance(); - new_object->add_volume(mesh); + ModelVolume* new_volume = new_object->add_volume(mesh); // BBS: ensure on bed but no need to ensure locate in the center around origin new_object->ensure_on_bed(); @@ -2946,9 +2952,9 @@ DynamicPrintConfig ObjectList::get_default_layer_config(const int obj_idx) wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_float("layer_height"); config.set_key_value("layer_height",new ConfigOptionFloat(layer_height)); // BBS - // int extruder = object(obj_idx)->config.has("extruder") ? - // object(obj_idx)->config.opt_int("extruder") : - // wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_float("extruder"); + int extruder = object(obj_idx)->config.has("extruder") ? + object(obj_idx)->config.opt_int("extruder") : + wxGetApp().preset_bundle->prints.get_edited_preset().config.opt_float("extruder"); config.set_key_value("extruder", new ConfigOptionInt(0)); return config; @@ -3170,8 +3176,8 @@ void ObjectList::part_selection_changed() bool update_and_show_settings = false; bool update_and_show_layers = false; - // bool enable_manipulation{true}; Orca: Removed because not used - // bool disable_ss_manipulation{false}; Orca: Removed because not used + bool enable_manipulation{true}; + bool disable_ss_manipulation{false}; bool disable_ununiform_scale{false}; const auto item = GetSelection(); @@ -3179,7 +3185,7 @@ void ObjectList::part_selection_changed() og_name = _L("Cut Connectors information"); update_and_show_manipulations = true; - // enable_manipulation = false; + enable_manipulation = false; disable_ununiform_scale = true; } else if (item && (m_objects_model->GetItemType(item) & itPlate)) { @@ -3196,7 +3202,7 @@ void ObjectList::part_selection_changed() obj_idx = selection.get_object_idx(); ModelObject *object = (*m_objects)[obj_idx]; m_config = &object->config; - // disable_ss_manipulation = object->is_cut(); + disable_ss_manipulation = object->is_cut(); } else { og_name = _L("Group manipulation"); @@ -3205,17 +3211,17 @@ void ObjectList::part_selection_changed() update_and_show_manipulations = !selection.is_single_full_instance(); if (int obj_idx = selection.get_object_idx(); obj_idx >= 0) { - // if (selection.is_any_volume() || selection.is_any_modifier()) - // enable_manipulation = !(*m_objects)[obj_idx]->is_cut(); - // else // if (item && m_objects_model->GetItemType(item) == itInstanceRoot) - // disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); + if (selection.is_any_volume() || selection.is_any_modifier()) + enable_manipulation = !(*m_objects)[obj_idx]->is_cut(); + else // if (item && m_objects_model->GetItemType(item) == itInstanceRoot) + disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); } else { wxDataViewItemArray sels; GetSelections(sels); if (selection.is_single_full_object() || selection.is_multiple_full_instance()) { - // int obj_idx = m_objects_model->GetObjectIdByItem(sels.front()); - // disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); + int obj_idx = m_objects_model->GetObjectIdByItem(sels.front()); + disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); } else if (selection.is_mixed() || selection.is_multiple_full_object()) { std::map> cut_objects; @@ -3234,7 +3240,7 @@ void ObjectList::part_selection_changed() // check if selected cut objects are "full selected" for (auto cut_object : cut_objects) if (cut_object.first.check_sum() != cut_object.second.size()) { - // disable_ss_manipulation = true; + disable_ss_manipulation = true; break; } disable_ununiform_scale = !cut_objects.empty(); @@ -3282,7 +3288,7 @@ void ObjectList::part_selection_changed() // BBS: select object to edit config m_config = &(*m_objects)[obj_idx]->config; update_and_show_settings = true; - // disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); + disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); } } else { @@ -3310,8 +3316,8 @@ void ObjectList::part_selection_changed() m_config = &(*m_objects)[obj_idx]->volumes[volume_id]->config; update_and_show_settings = true; - // const ModelVolume *volume = (*m_objects)[obj_idx]->volumes[volume_id]; - // enable_manipulation = !((*m_objects)[obj_idx]->is_cut() && (volume->is_cut_connector() || volume->is_model_part())); + const ModelVolume *volume = (*m_objects)[obj_idx]->volumes[volume_id]; + enable_manipulation = !((*m_objects)[obj_idx]->is_cut() && (volume->is_cut_connector() || volume->is_model_part())); } else if (type & itInstance) { og_name = _L("Instance manipulation"); @@ -3319,7 +3325,7 @@ void ObjectList::part_selection_changed() // fill m_config by object's values m_config = &(*m_objects)[obj_idx]->config; - // disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); + disable_ss_manipulation = (*m_objects)[obj_idx]->is_cut(); } else if (type & (itLayerRoot | itLayer)) { og_name = type & itLayerRoot ? _L("Height ranges") : _L("Settings for height range"); @@ -3362,7 +3368,7 @@ void ObjectList::part_selection_changed() if (printer_technology() == ptSLA) update_and_show_layers = false; else if (update_and_show_layers) { - //wxGetApp().obj_layers()->get_og()->set_name(" " + og_name + " "); + ;//wxGetApp().obj_layers()->get_og()->set_name(" " + og_name + " "); } update_min_height(); @@ -3394,6 +3400,7 @@ wxDataViewItem ObjectList::add_settings_item(wxDataViewItem parent_item, const D return ret; const bool is_object_settings = m_objects_model->GetItemType(parent_item) == itObject; + const bool is_volume_settings = m_objects_model->GetItemType(parent_item) == itVolume; const bool is_layer_settings = m_objects_model->GetItemType(parent_item) == itLayer; if (!is_object_settings) { ModelVolumeType volume_type = m_objects_model->GetVolumeType(parent_item); @@ -4682,6 +4689,8 @@ void ObjectList::select_item(const ObjectVolumeID& ov_id) void ObjectList::select_items(const std::vector& ov_ids) { + ModelObjectPtrs& objects = wxGetApp().model().objects; + wxDataViewItemArray sel_items; for (auto ov_id : ov_ids) { if (ov_id.object == nullptr) @@ -5686,7 +5695,7 @@ void ObjectList::set_extruder_for_selected_items(const int extruder) void ObjectList::on_plate_added(PartPlate* part_plate) { - m_objects_model->AddPlate(part_plate); + wxDataViewItem plate_item = m_objects_model->AddPlate(part_plate); } void ObjectList::on_plate_deleted(int plate_idx) diff --git a/src/slic3r/GUI/GUI_ObjectSettings.cpp b/src/slic3r/GUI/GUI_ObjectSettings.cpp index a0e0da3ea5..09ca8c64a8 100644 --- a/src/slic3r/GUI/GUI_ObjectSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectSettings.cpp @@ -205,7 +205,7 @@ bool ObjectSettings::update_settings_list() bool is_object_settings = false; bool is_volume_settings = false; bool is_layer_range_settings = false; - // bool is_layer_root = false; + bool is_layer_root = false; ModelObject * parent_object = nullptr; for (auto item : items) { auto type = objects_model->GetItemType(item); @@ -255,9 +255,9 @@ bool ObjectSettings::update_settings_list() t_layer_height_range height_range = objects_model->GetLayerRangeByItem(item); object_configs.emplace( (ObjectBase*)(&object->layer_config_ranges.at(height_range)), &object->layer_config_ranges.at(height_range) ); } - // else if (type == itLayerRoot) { - // is_layer_root = true; - // } + else if (type == itLayerRoot) { + is_layer_root = true; + } } auto tab_plate = dynamic_cast(wxGetApp().get_plate_tab()); diff --git a/src/slic3r/GUI/GUI_ObjectTable.cpp b/src/slic3r/GUI/GUI_ObjectTable.cpp index 7bc925e284..56c1550c46 100644 --- a/src/slic3r/GUI/GUI_ObjectTable.cpp +++ b/src/slic3r/GUI/GUI_ObjectTable.cpp @@ -280,6 +280,7 @@ wxGridActivationResult GridCellFilamentsEditor::TryActivate(int row, int col, wx { ObjectGridTable *table = dynamic_cast(grid->GetTable()); ObjectGridTable::ObjectGridCol* grid_col = table->get_grid_col(col); + ObjectGridTable::ObjectGridRow* grid_row = table->get_grid_row(row - 1); if ( actSource.GetOrigin() == wxGridActivationSource::Key ) { const wxKeyEvent& key_event = actSource.GetKeyEvent(); @@ -315,6 +316,7 @@ void GridCellFilamentsEditor::DoActivate(int row, int col, wxGrid* grid) if (m_cached_value != -1) { ObjectGridTable *table = dynamic_cast(grid->GetTable()); ObjectGridTable::ObjectGridCol* grid_col = table->get_grid_col(col); + ObjectGridTable::ObjectGridRow* grid_row = table->get_grid_row(row - 1); if (m_cached_value <= grid_col->choice_count) { wxString choice = grid_col->choices[m_cached_value-1]; table->SetValue(row, col, choice); @@ -330,6 +332,7 @@ void GridCellFilamentsRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &d wxRect text_rect = rect; if (table) { + ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); ConfigOptionInt & cur_option = dynamic_cast((*grid_row)[(ObjectGridTable::GridColType) col]); @@ -469,6 +472,7 @@ wxGridActivationResult GridCellChoiceEditor::TryActivate(int row, int col, wxGri { ObjectGridTable * table = dynamic_cast(grid->GetTable()); ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); + ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); if (actSource.GetOrigin() == wxGridActivationSource::Key) { const wxKeyEvent &key_event = actSource.GetKeyEvent(); @@ -501,6 +505,7 @@ void GridCellChoiceEditor::DoActivate(int row, int col, wxGrid *grid) if (m_cached_value != -1) { ObjectGridTable * table = dynamic_cast(grid->GetTable()); ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); + ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); if (m_cached_value <= grid_col->choice_count) { wxString choice = grid_col->choices[m_cached_value - 1]; table->SetValue(row, col, choice); @@ -516,6 +521,7 @@ void GridCellComboBoxRenderer::Draw(wxGrid &grid, wxGridCellAttr &attr, wxDC &dc wxRect text_rect = rect; if (table) { + ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); ConfigOptionInt & cur_option = dynamic_cast((*grid_row)[(ObjectGridTable::GridColType) col]); @@ -555,6 +561,7 @@ wxString GridCellSupportEditor::ms_stringValues[2] = { wxT(""), wxT("") }; void GridCellSupportEditor::DoActivate(int row, int col, wxGrid* grid) { + ObjectGrid* local_table = dynamic_cast(grid); wxGridBlocks cell_array = grid->GetSelectedBlocks(); auto left_col = cell_array.begin()->GetLeftCol(); @@ -684,6 +691,7 @@ void GridCellSupportRenderer::Draw(wxGrid& grid, //wxGridCellBoolRenderer::Draw(grid, attr, dc, rect, row, col, isSelected); ObjectGridTable * table = dynamic_cast(grid.GetTable()); + ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); ConfigOptionBool & cur_option = dynamic_cast((*grid_row)[(ObjectGridTable::GridColType) col]); @@ -883,6 +891,7 @@ void ObjectGrid::OnKeyDown( wxKeyEvent& event ) // see include/wx/defs.h enum wxKeyCode int keyCode = event.GetKeyCode(); int ctrlMask = wxMOD_CONTROL; + int shiftMask = wxMOD_SHIFT; // Coordinates of the selected block to copy to clipboard. wxGridBlockCoords selection; wxTextDataObject text_data; @@ -1535,6 +1544,7 @@ void ObjectGridTable::SetValue( int row, int col, const wxString& value ) return; ObjectGridRow* grid_row = m_grid_data[row - 1]; ObjectGridCol* grid_col = m_col_data[col]; + ObjectList* obj_list = wxGetApp().obj_list(); if (grid_col->type == coEnum) { int enum_value = 0; for (int i = 0; i < grid_col->choice_count; i++) @@ -1802,6 +1812,9 @@ wxString ObjectGridTable::convert_filament_string(int index, wxString& filament_ void ObjectGridTable::init_cols(ObjectGrid *object_grid) { + const float font_size = 1.5f * wxGetApp().em_unit(); + + // printable for object ObjectGridCol *col = new ObjectGridCol(coBool, "printable", ObjectGridTable::category_all, true, false, true, false, wxALIGN_CENTRE); col->size = object_grid->GetTextExtent(L("Printable")).x; @@ -1897,6 +1910,7 @@ void ObjectGridTable::init_cols(ObjectGrid *object_grid) col = new ObjectGridCol(coFloat, "inner_wall_speed_reset", L("Speed"), false, true, false, false, wxALIGN_LEFT); m_col_data.push_back(col); + return; } void ObjectGridTable::construct_object_configs(ObjectGrid *object_grid) @@ -1915,8 +1929,8 @@ void ObjectGridTable::construct_object_configs(ObjectGrid *object_grid) int object_count = m_panel->m_model->objects.size(); PartPlateList& partplate_list = m_panel->m_plater->get_partplate_list(); DynamicPrintConfig& global_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; - // const DynamicPrintConfig* plater_config = m_panel->m_plater->config(); - // const DynamicPrintConfig& filament_config = *plater_config; + const DynamicPrintConfig* plater_config = m_panel->m_plater->config(); + const DynamicPrintConfig& filament_config = *plater_config; for (int i = 0; i < object_count; i++) { @@ -2812,7 +2826,7 @@ int ObjectTablePanel::init_filaments_and_colors() BOOST_LOG_TRIVIAL(warning) << __FUNCTION__ << boost::format(", invalid color count:%1%, extruder count: %2%") %color_count %m_filaments_count; } - int i = 0; + unsigned int i = 0; ColorRGB rgb; while (i < m_filaments_count) { const std::string& txt_color = global_config->opt_string("filament_colour", i); @@ -3018,6 +3032,7 @@ void ObjectTablePanel::load_data() { ObjectGridTable::ObjectGridCol *grid_col = m_object_grid_table->get_grid_col(i); if (grid_col->size > 0) { + int fit_size1 = m_object_grid->GetColSize(i); m_object_grid->SetColSize(i, grid_col->size); } } @@ -3158,7 +3173,7 @@ void ObjectTablePanel::OnRowSize( wxGridSizeEvent& ev) g_dialog_max_height =(panel_size.GetHeight() > g_max_size_from_parent.GetHeight())?g_max_size_from_parent.GetHeight():panel_size.GetHeight(); this->SetMaxSize(wxSize(g_dialog_max_width, g_dialog_max_height)); - // wxSize current_size = GetParent()->GetSize(); + wxSize current_size = GetParent()->GetSize(); //if (current_size.GetHeight() < g_dialog_max_height) GetParent()->SetMaxSize(wxSize(g_dialog_max_width, g_dialog_max_height)); GetParent()->SetSize(wxSize(g_dialog_max_width, g_dialog_max_height)); @@ -3172,7 +3187,7 @@ void ObjectTablePanel::OnColSize( wxGridSizeEvent& ev) g_dialog_max_height =(panel_size.GetHeight() > g_max_size_from_parent.GetHeight())?g_max_size_from_parent.GetHeight():panel_size.GetHeight(); this->SetMaxSize(wxSize(g_dialog_max_width, g_dialog_max_height)); - // wxSize current_size = GetParent()->GetSize(); + wxSize current_size = GetParent()->GetSize(); //if (current_size.GetWidth() < g_dialog_max_width) GetParent()->SetMaxSize(wxSize(g_dialog_max_width, g_dialog_max_height)); GetParent()->SetSize(wxSize(g_dialog_max_width, g_dialog_max_height)); @@ -3456,6 +3471,8 @@ void GridCellTextEditor::SetSize(const wxRect &rect) { wxGridCellTextEditor::Set void GridCellTextEditor::BeginEdit(int row, int col, wxGrid *grid) { ObjectGridTable * table = dynamic_cast(grid->GetTable()); + ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); + ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); auto val = table->GetValue(row, col); @@ -3489,6 +3506,10 @@ void GridCellTextEditor::BeginEdit(int row, int col, wxGrid *grid) bool GridCellTextEditor::EndEdit(int row, int col, const wxGrid *grid, const wxString &WXUNUSED(oldval), wxString *newval) { + ObjectGridTable * table = dynamic_cast(grid->GetTable()); + ObjectGridTable::ObjectGridCol *grid_col = table->get_grid_col(col); + ObjectGridTable::ObjectGridRow *grid_row = table->get_grid_row(row - 1); + wxCHECK_MSG(m_control, false, "wxGridCellTextEditor must be created first!"); const wxString value = Text()->GetTextCtrl()->GetValue(); diff --git a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp index 5e9dfd0f64..10578be691 100644 --- a/src/slic3r/GUI/GUI_ObjectTableSettings.cpp +++ b/src/slic3r/GUI/GUI_ObjectTableSettings.cpp @@ -108,6 +108,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ //SettingsFactory::Bundle cat_options = SettingsFactory::get_bundle(&config->get(), is_object); std::map> cat_options; std::vector category_settings = SettingsFactory::get_visible_options(category, !is_object); + bool display_multiple = false; auto is_option_modified = [this](std::string key) { ConfigOption* config_option1 = m_origin_config.option(key); ConfigOption* config_option2 = m_current_config.option(key); @@ -146,6 +147,7 @@ bool ObjectTableSettings::update_settings_list(bool is_object, bool is_multiple_ else it1 = cat_options.erase(it1); } + display_multiple = true; } else { cat_options.emplace(category, category_settings); diff --git a/src/slic3r/GUI/GUI_Preview.cpp b/src/slic3r/GUI/GUI_Preview.cpp index f87f277ac8..25b333e281 100644 --- a/src/slic3r/GUI/GUI_Preview.cpp +++ b/src/slic3r/GUI/GUI_Preview.cpp @@ -6,6 +6,7 @@ #include "GUI_App.hpp" #include "GUI.hpp" #include "I18N.hpp" +#include "3DScene.hpp" #include "BackgroundSlicingProcess.hpp" #include "OpenGLManager.hpp" #include "GLCanvas3D.hpp" @@ -14,11 +15,19 @@ #include "MainFrame.hpp" #include "format.hpp" +#include +#include #include #include +#include +#include +#include +#include +#include // this include must follow the wxWidgets ones or it won't compile on Windows -> see http://trac.wxwidgets.org/ticket/2421 #include "libslic3r/Print.hpp" +#include "libslic3r/SLAPrint.hpp" #include "NotificationManager.hpp" #ifdef _WIN32 @@ -533,6 +542,7 @@ void Preview::update_layers_slider_from_canvas(wxKeyEvent &event) const auto key = event.GetKeyCode(); IMSlider *m_layers_slider = m_canvas->get_gcode_viewer().get_layers_slider(); + IMSlider *m_moves_slider = m_canvas->get_gcode_viewer().get_moves_slider(); if (key == 'L') { if(!m_layers_slider->switch_one_layer_mode()) event.Skip(); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp index c9c324222d..bee454af28 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoEmboss.cpp @@ -3057,7 +3057,7 @@ bool GLGizmoEmboss::choose_font_by_wxdialog() } #endif // ALLOW_ADD_FONT_BY_OS_SELECTOR -#if defined(ALLOW_ADD_FONT_BY_FILE) || defined(ALLOW_DEBUG_MODE) +#if defined ALLOW_ADD_FONT_BY_FILE or defined ALLOW_DEBUG_MODE namespace priv { static std::string get_file_name(const std::string &file_path) { @@ -3693,6 +3693,7 @@ GuiCfg create_gui_configuration() cfg.height_of_volume_type_selector = separator_height + line_height_with_spacing + input_height; int max_style_image_width = static_cast(std::round(cfg.max_style_name_width/2 - 2 * style.FramePadding.x)); + int max_style_image_height = static_cast(std::round(input_height)); cfg.max_style_image_size = Vec2i32(max_style_image_width, line_height); cfg.face_name_size = Vec2i32(cfg.input_width, line_height_with_spacing); cfg.face_name_texture_offset_x = cfg.face_name_size.x() + space; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp index 220032826a..338a5d8161 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoFdmSupports.cpp @@ -245,10 +245,17 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l const float gap_fill_slider_left = m_imgui->calc_text_size(m_desc.at("gap_fill")).x + m_imgui->scaled(1.5f); const float highlight_slider_left = m_imgui->calc_text_size(m_desc.at("highlight_by_angle")).x + m_imgui->scaled(1.5f); const float reset_button_slider_left = m_imgui->calc_text_size(m_desc.at("reset_direction")).x + m_imgui->scaled(1.5f) + ImGui::GetStyle().FramePadding.x * 2; + const float on_overhangs_only_width = m_imgui->calc_text_size(m_desc["on_overhangs_only"]).x + m_imgui->scaled(1.5f); + const float remove_btn_width = m_imgui->calc_text_size(m_desc.at("remove_all")).x + m_imgui->scaled(1.5f); + const float filter_btn_width = m_imgui->calc_text_size(m_desc.at("perform")).x + m_imgui->scaled(1.5f); const float gap_area_txt_width = m_imgui->calc_text_size(m_desc.at("gap_area")).x + m_imgui->scaled(1.5f); const float smart_fill_angle_txt_width = m_imgui->calc_text_size(m_desc.at("smart_fill_angle")).x + m_imgui->scaled(1.5f); + const float buttons_width = remove_btn_width + filter_btn_width + m_imgui->scaled(1.5f); const float empty_button_width = m_imgui->calc_button_size("").x; + const float tips_width = m_imgui->calc_text_size(_L("Auto support threshold angle: ") + " 90 ").x + m_imgui->scaled(1.5f); + const float minimal_slider_width = m_imgui->scaled(4.f); + float caption_max = 0.f; float total_text_max = 0.f; for (const auto &t : std::array{"enforce", "block", "remove", "cursor_size", "clipping_of_view"}) { @@ -265,6 +272,8 @@ void GLGizmoFdmSupports::on_render_input_window(float x, float y, float bottom_l const float sliders_width = m_imgui->scaled(7.0f); const float drag_left_width = ImGui::GetStyle().WindowPadding.x + sliders_left_width + sliders_width - space_size; + float drag_pos_times = 0.7; + ImGui::AlignTextToFramePadding(); m_imgui->text(m_desc.at("tool_type")); std::array tool_ids = { ImGui::CircleButtonIcon, ImGui::SphereButtonIcon, ImGui::FillButtonIcon, ImGui::GapFillIcon }; @@ -688,6 +697,7 @@ wxString GLGizmoFdmSupports::handle_snapshot_action_name(bool shift_down, GLGizm void GLGizmoFdmSupports::init_print_instance() { const PrintObject* print_object = NULL; + PrintInstance print_instance = { 0 }; const Print *print = m_parent.fff_print(); if (!m_c->selection_info() || (m_print_instance.print_object)) diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp index cb791597e6..ee9c779464 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMeshBoolean.cpp @@ -138,6 +138,8 @@ void GLGizmoMeshBoolean::on_render() BoundingBoxf3 src_bb; BoundingBoxf3 tool_bb; + const ModelObject* mo = m_c->selection_info()->model_object(); + const ModelInstance* mi = mo->instances[m_parent.get_selection().get_instance_idx()]; const Selection& selection = m_parent.get_selection(); const Selection::IndicesList& idxs = selection.get_volume_idxs(); for (unsigned int i : idxs) { @@ -161,12 +163,16 @@ void GLGizmoMeshBoolean::on_set_state() if (m_state == EState::On) { m_src.reset(); m_tool.reset(); + bool m_diff_delete_input = false; + bool m_inter_delete_input = false; m_operation_mode = MeshBooleanOperation::Union; m_selecting_state = MeshBooleanSelectingState::SelectSource; } else if (m_state == EState::Off) { m_src.reset(); m_tool.reset(); + bool m_diff_delete_input = false; + bool m_inter_delete_input = false; m_operation_mode = MeshBooleanOperation::Undef; m_selecting_state = MeshBooleanSelectingState::Undef; wxGetApp().notification_manager()->close_plater_warning_notification(warning_text); diff --git a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp index 4193ba885f..3167266a5e 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoMmuSegmentation.cpp @@ -403,6 +403,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott const float filter_btn_width = m_imgui->calc_text_size(m_desc.at("perform")).x + m_imgui->scaled(1.f); const float buttons_width = remove_btn_width + filter_btn_width + m_imgui->scaled(1.f); const float minimal_slider_width = m_imgui->scaled(4.f); + const float color_button_width = m_imgui->calc_text_size(std::string_view{""}).x + m_imgui->scaled(1.75f); float caption_max = 0.f; float total_text_max = 0.f; @@ -443,6 +444,7 @@ void GLGizmoMmuSegmentation::on_render_input_window(float x, float y, float bott float start_pos_x = ImGui::GetCursorPos().x; const ImVec2 max_label_size = ImGui::CalcTextSize("99", NULL, true); + const float item_spacing = m_imgui->scaled(0.8f); size_t n_extruder_colors = std::min((size_t)EnforcerBlockerType::ExtruderMax, m_extruders_colors.size()); for (int extruder_idx = 0; extruder_idx < n_extruder_colors; extruder_idx++) { const ColorRGBA &extruder_color = m_extruders_colors[extruder_idx]; diff --git a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp index cf512cd88e..2dbf7778e0 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmoPainterBase.cpp @@ -527,10 +527,21 @@ std::vector GLGizmoPainterBase::get_pr if (m_rr.mesh_id == -1) return hit_triangles_by_mesh; + ProjectedMousePosition mesh_hit_point = { m_rr.hit, m_rr.mesh_id, m_rr.facet }; float z_bot_world= (trafo_matrices[m_rr.mesh_id] * Vec3d(m_rr.hit(0), m_rr.hit(1), m_rr.hit(2))).z(); float z_top_world = z_bot_world+ m_cursor_height; hit_triangles_by_mesh.push_back({ z_bot_world, m_rr.mesh_id, size_t(m_rr.facet) }); + const Selection& selection = m_parent.get_selection(); + const ModelObject* mo = m_c->selection_info()->model_object(); + const ModelInstance* mi = mo->instances[selection.get_instance_idx()]; + const Transform3d instance_trafo = m_parent.get_canvas_type() == GLCanvas3D::CanvasAssembleView ? + mi->get_assemble_transformation().get_matrix() : + mi->get_transformation().get_matrix(); + const Transform3d instance_trafo_not_translate = m_parent.get_canvas_type() == GLCanvas3D::CanvasAssembleView ? + mi->get_assemble_transformation().get_matrix_no_offset() : + mi->get_transformation().get_matrix_no_offset(); + for (int mesh_idx = 0; mesh_idx < part_volumes.size(); mesh_idx++) { if (mesh_idx == m_rr.mesh_id) continue; @@ -701,6 +712,7 @@ bool GLGizmoPainterBase::gizmo_event(SLAGizmoEventType action, const Vec2d& mous // The mouse button click detection is enabled when there is a valid hit. // Missing the object entirely // shall not capture the mouse. + const bool dragging_while_painting = (action == SLAGizmoEventType::Dragging && m_button_down != Button::None); if (mesh_idx != -1 && m_button_down == Button::None) m_button_down = ((action == SLAGizmoEventType::LeftDown) ? Button::Left : Button::Right); @@ -1051,7 +1063,7 @@ void GLGizmoPainterBase::on_set_state() if (m_state == On && m_old_state != On) { // the gizmo was just turned on on_opening(); - // const Selection& selection = m_parent.get_selection(); + const Selection& selection = m_parent.get_selection(); //Camera& camera = wxGetApp().plater()->get_camera(); //Vec3d rotate_target = selection.get_bounding_box().center(); //rotate_target(2) = 0.f; diff --git a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp index cf8b560198..319c5c75f2 100644 --- a/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp +++ b/src/slic3r/GUI/Gizmos/GLGizmosManager.cpp @@ -186,7 +186,7 @@ bool GLGizmosManager::init() // Order of gizmos in the vector must match order in EType! //BBS: GUI refactor: add obj manipulation m_gizmos.clear(); - // unsigned int sprite_id = 0; + unsigned int sprite_id = 0; m_gizmos.emplace_back(new GLGizmoMove3D(m_parent, m_is_dark ? "toolbar_move_dark.svg" : "toolbar_move.svg", EType::Move, &m_object_manipulation)); m_gizmos.emplace_back(new GLGizmoRotate3D(m_parent, m_is_dark ? "toolbar_rotate_dark.svg" : "toolbar_rotate.svg", EType::Rotate, &m_object_manipulation)); m_gizmos.emplace_back(new GLGizmoScale3D(m_parent, m_is_dark ? "toolbar_scale_dark.svg" : "toolbar_scale.svg", EType::Scale, &m_object_manipulation)); @@ -1042,7 +1042,11 @@ void GLGizmosManager::render_arrow(const GLCanvas3D& parent, EType highlighted_t for (size_t idx : selectable_idxs) { if (idx == highlighted_type) { + int tex_width = m_icons_texture.get_width(); + int tex_height = m_icons_texture.get_height(); unsigned int tex_id = m_arrow_texture.get_id(); + float inv_tex_width = (tex_width != 0.0f) ? 1.0f / tex_width : 0.0f; + float inv_tex_height = (tex_height != 0.0f) ? 1.0f / tex_height : 0.0f; const float left_uv = 0.0f; const float right_uv = 1.0f; diff --git a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp index 57934b149d..a1490ebc70 100644 --- a/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp +++ b/src/slic3r/GUI/Gizmos/GizmoObjectManipulation.cpp @@ -591,6 +591,7 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper, float World_size = imgui_wrapper->calc_text_size(position_title).x + space_size; float caption_max = std::max(position_size, World_size) + 2 * space_size; + float end_text_size = imgui_wrapper->calc_text_size(this->m_new_unit_string).x; // position Vec3d original_position; @@ -600,6 +601,8 @@ void GizmoObjectManipulation::do_render_move_window(ImGuiWrapper *imgui_wrapper, original_position = this->m_new_position; Vec3d display_position = m_buffered_position; + // Rotation + Vec3d rotation = this->m_buffered_rotation; float unit_size = imgui_wrapper->calc_text_size(MAX_SIZE).x + space_size; int index = 1; int index_unit = 1; @@ -705,6 +708,13 @@ void GizmoObjectManipulation::do_render_rotate_window(ImGuiWrapper *imgui_wrappe float caption_max = std::max(position_size, World_size) + 2 * space_size; float end_text_size = imgui_wrapper->calc_text_size(this->m_new_unit_string).x; + // position + Vec3d original_position; + if (this->m_imperial_units) + original_position = this->m_new_position * this->mm_to_in; + else + original_position = this->m_new_position; + Vec3d display_position = m_buffered_position; // Rotation Vec3d rotation = this->m_buffered_rotation; @@ -825,7 +835,10 @@ void GizmoObjectManipulation::do_render_scale_input_window(ImGuiWrapper* imgui_w Vec3d scale = m_buffered_scale; Vec3d display_size = m_buffered_size; + Vec3d display_position = m_buffered_position; + float unit_size = imgui_wrapper->calc_text_size(MAX_SIZE).x + space_size; + bool imperial_units = this->m_imperial_units; int index = 2; int index_unit = 1; diff --git a/src/slic3r/GUI/HintNotification.cpp b/src/slic3r/GUI/HintNotification.cpp index a102f400e2..c431e0fafb 100644 --- a/src/slic3r/GUI/HintNotification.cpp +++ b/src/slic3r/GUI/HintNotification.cpp @@ -499,7 +499,8 @@ HintData* HintDatabase::get_hint(HintDataNavigation nav) m_hint_id = get_next_hint_id(); if(nav == HintDataNavigation::Prev) m_hint_id = get_prev_hint_id(); -// if (nav == HintDataNavigation::Curr) + if (nav == HintDataNavigation::Curr) + ; if (nav == HintDataNavigation::Random) init_random_hint_id(); } diff --git a/src/slic3r/GUI/IMSlider.cpp b/src/slic3r/GUI/IMSlider.cpp index 538166f1d8..a0f15066b1 100644 --- a/src/slic3r/GUI/IMSlider.cpp +++ b/src/slic3r/GUI/IMSlider.cpp @@ -231,7 +231,7 @@ void IMSlider::SetTicksValues(const Info &custom_gcode_per_print_z) static bool last_spiral_vase_status = false; - // const bool was_empty = m_ticks.empty(); + const bool was_empty = m_ticks.empty(); m_ticks.ticks.clear(); const std::vector &heights = custom_gcode_per_print_z.gcodes; @@ -240,9 +240,9 @@ void IMSlider::SetTicksValues(const Info &custom_gcode_per_print_z) if (tick >= 0) m_ticks.ticks.emplace(TickCode{tick, h.type, h.extruder, h.color, h.extra}); } -// if (!was_empty && m_ticks.empty()) + if (!was_empty && m_ticks.empty()) // Switch to the "Feature type"/"Tool" from the very beginning of a new object slicing after deleting of the old one - // post_ticks_changed_event(); + ;// post_ticks_changed_event(); if (m_ticks.has_tick_with_code(ToolChange) && !m_can_change_color) { if (!wxGetApp().plater()->only_gcode_mode() && !wxGetApp().plater()->using_exported_file()) @@ -1034,6 +1034,8 @@ bool IMSlider::vertical_slider(const char* str_id, int* higher_value, int* lower context.IO.MouseClicked[0]) m_show_menu = false; + ImVec2 bar_center = higher_handle.GetCenter(); + // draw ticks draw_ticks(one_slideable_region); // draw colored band diff --git a/src/slic3r/GUI/ImGuiWrapper.cpp b/src/slic3r/GUI/ImGuiWrapper.cpp index f6ba5270b6..2595d3804d 100644 --- a/src/slic3r/GUI/ImGuiWrapper.cpp +++ b/src/slic3r/GUI/ImGuiWrapper.cpp @@ -182,6 +182,8 @@ int ImGuiWrapper::TOOLBAR_WINDOW_FLAGS = ImGuiWindowFlags_AlwaysAutoResize bool get_data_from_svg(const std::string &filename, unsigned int max_size_px, ThumbnailData &thumbnail_data) { + bool compression_enabled = false; + NSVGimage *image = nsvgParseFromFile(filename.c_str(), "px", 96.0f); if (image == nullptr) { return false; } @@ -234,6 +236,7 @@ bool get_data_from_svg(const std::string &filename, unsigned int max_size_px, Th bool slider_behavior(ImGuiID id, const ImRect& region, const ImS32 v_min, const ImS32 v_max, ImS32* out_value, ImRect* out_handle, ImGuiSliderFlags flags/* = 0*/, const int fixed_value/* = -1*/, const ImVec4& fixed_rect/* = ImRect()*/) { ImGuiContext& context = *GImGui; + ImGuiIO& io = ImGui::GetIO(); const ImGuiAxis axis = (flags & ImGuiSliderFlags_Vertical) ? ImGuiAxis_Y : ImGuiAxis_X; @@ -1790,7 +1793,7 @@ void ImGuiWrapper::search_list(const ImVec2& size_, bool (*items_getter)(int, co ImGui::ListBoxFooter(); - /*auto check_box = [&edited, this](const wxString& label, bool& check) { + auto check_box = [&edited, this](const wxString& label, bool& check) { ImGui::SameLine(); bool ch = check; checkbox(label, ch); @@ -1798,7 +1801,7 @@ void ImGuiWrapper::search_list(const ImVec2& size_, bool (*items_getter)(int, co check = !check; edited = true; } - };*/ + }; ImGui::AlignTextToFramePadding(); @@ -3146,6 +3149,7 @@ bool IMTexture::load_from_svg_file(const std::string& filename, unsigned width, std::vector data(n_pixels * 4, 0); nsvgRasterize(rast, image, 0, 0, scale, data.data(), width, height, width * 4); + bool compress = false; GLint last_texture; unsigned m_image_texture{ 0 }; unsigned char* pixels = (unsigned char*)(&data[0]); diff --git a/src/slic3r/GUI/Jobs/ArrangeJob.cpp b/src/slic3r/GUI/Jobs/ArrangeJob.cpp index f0d82e3d30..6648b0e632 100644 --- a/src/slic3r/GUI/Jobs/ArrangeJob.cpp +++ b/src/slic3r/GUI/Jobs/ArrangeJob.cpp @@ -136,6 +136,7 @@ void ArrangeJob::prepare_selected() { inst_sel[size_t(inst_id)] = true; for (size_t i = 0; i < inst_sel.size(); ++i) { + ModelInstance* mi = mo->instances[i]; ArrangePolygon&& ap = prepare_arrange_polygon(mo->instances[i]); //BBS: partplate_list preprocess //remove the locked plate's instances, neither in selected, nor in un-selected @@ -207,6 +208,7 @@ void ArrangeJob::prepare_all() { ModelObject *mo = model.objects[oidx]; for (size_t i = 0; i < mo->instances.size(); ++i) { + ModelInstance * mi = mo->instances[i]; ArrangePolygon&& ap = prepare_arrange_polygon(mo->instances[i]); //BBS: partplate_list preprocess //remove the locked plate's instances, neither in selected, nor in un-selected @@ -322,6 +324,7 @@ void ArrangeJob::prepare_wipe_tower() wipe_tower_ap.name = "WipeTower"; wipe_tower_ap.is_virt_object = true; wipe_tower_ap.is_wipe_tower = true; + const GLCanvas3D* canvas3D = static_cast(m_plater->canvas3D()); std::set extruder_ids; PartPlateList& ppl = wxGetApp().plater()->get_partplate_list(); @@ -527,6 +530,7 @@ void ArrangeJob::process(Ctl &ctl) auto & partplate_list = m_plater->get_partplate_list(); const Slic3r::DynamicPrintConfig& global_config = wxGetApp().preset_bundle->full_config(); + PresetBundle* preset_bundle = wxGetApp().preset_bundle; const bool is_bbl = wxGetApp().preset_bundle->is_bbl_vendor(); if (is_bbl && params.avoid_extrusion_cali_region && global_config.opt_bool("scan_first_layer")) partplate_list.preprocess_nonprefered_areas(m_unselected, MAX_NUM_PLATES); diff --git a/src/slic3r/GUI/Jobs/FillBedJob.cpp b/src/slic3r/GUI/Jobs/FillBedJob.cpp index d9af3631c7..e594f98ae1 100644 --- a/src/slic3r/GUI/Jobs/FillBedJob.cpp +++ b/src/slic3r/GUI/Jobs/FillBedJob.cpp @@ -127,8 +127,8 @@ void FillBedJob::prepare() m_bedpts = get_bed_shape(*m_plater->config()); - /*auto &objects = m_plater->model().objects; - BoundingBox bedbb = get_extents(m_bedpts); + auto &objects = m_plater->model().objects; + /*BoundingBox bedbb = get_extents(m_bedpts); for (size_t idx = 0; idx < objects.size(); ++idx) if (int(idx) != m_object_idx) @@ -209,7 +209,9 @@ void FillBedJob::process(Ctl &ctl) m_bedpts = get_shrink_bedpts(m_plater->config(), params); auto &partplate_list = m_plater->get_partplate_list(); + auto &print = wxGetApp().plater()->get_partplate_list().get_current_fff_print(); const Slic3r::DynamicPrintConfig& global_config = wxGetApp().preset_bundle->full_config(); + PresetBundle* preset_bundle = wxGetApp().preset_bundle; const bool is_bbl = wxGetApp().preset_bundle->is_bbl_vendor(); if (is_bbl && params.avoid_extrusion_cali_region && global_config.opt_bool("scan_first_layer")) partplate_list.preprocess_nonprefered_areas(m_unselected, MAX_NUM_PLATES); @@ -273,6 +275,8 @@ void FillBedJob::finalize(bool canceled, std::exception_ptr &eptr) int plate_cols = plate_list.get_plate_cols(); int cur_plate = plate_list.get_curr_plate_index(); + size_t inst_cnt = model_object->instances.size(); + int added_cnt = std::accumulate(m_selected.begin(), m_selected.end(), 0, [](int s, auto &ap) { return s + int(ap.priority == 0 && ap.bed_idx == 0); }); diff --git a/src/slic3r/GUI/Jobs/OrientJob.cpp b/src/slic3r/GUI/Jobs/OrientJob.cpp index 27dac69b56..be59225d8d 100644 --- a/src/slic3r/GUI/Jobs/OrientJob.cpp +++ b/src/slic3r/GUI/Jobs/OrientJob.cpp @@ -46,6 +46,7 @@ void OrientJob::prepare_selection(std::vector obj_sel, bool only_one_plate ModelInstance* mi = mo->instances[inst_idx]; OrientMesh&& om = get_orient_mesh(mi); + bool locked = false; if (!only_one_plate) { int plate_index = plate_list.find_instance(oidx, inst_idx); if ((plate_index >= 0)&&(plate_index < plate_list.get_plate_count())) { diff --git a/src/slic3r/GUI/Jobs/PrintJob.cpp b/src/slic3r/GUI/Jobs/PrintJob.cpp index 53fad3dbdd..a54310c234 100644 --- a/src/slic3r/GUI/Jobs/PrintJob.cpp +++ b/src/slic3r/GUI/Jobs/PrintJob.cpp @@ -103,6 +103,9 @@ wxString PrintJob::get_http_error_msg(unsigned int status, std::string body) if (!j["message"].is_null()) message = j["message"].get(); } + switch (status) { + ; + } } catch (...) { ; @@ -134,6 +137,7 @@ void PrintJob::process(Ctl &ctl) wxString error_str; int curr_percent = 10; NetworkAgent* m_agent = wxGetApp().getAgent(); + AppConfig* config = wxGetApp().app_config; if (this->connection_type == "lan") { msg = _u8L("Sending print job over LAN"); @@ -146,9 +150,12 @@ void PrintJob::process(Ctl &ctl) ctl.call_on_main_thread([this] { prepare(); }).wait(); int result = -1; + unsigned int http_code; std::string http_body; + int total_plate_num = plate_data.plate_count; if (!plate_data.is_valid) { + total_plate_num = m_plater->get_partplate_list().get_plate_count(); PartPlate *plate = m_plater->get_partplate_list().get_plate(job_data.plate_idx); if (plate == nullptr) { plate = m_plater->get_partplate_list().get_curr_plate(); @@ -305,7 +312,7 @@ void PrintJob::process(Ctl &ctl) try { stl_design_id = std::stoi(wxGetApp().model().stl_design_id); } - catch (std::exception&) { + catch (const std::exception& e) { stl_design_id = 0; } params.stl_design_id = stl_design_id; @@ -440,7 +447,7 @@ void PrintJob::process(Ctl &ctl) std::string curr_job_id; json job_info_j; try { - job_info_j = json::parse(job_info); + job_info_j.parse(job_info); if (job_info_j.contains("job_id")) { curr_job_id = job_info_j["job_id"].get(); } diff --git a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp index 3fd2b375bf..263273984b 100644 --- a/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp +++ b/src/slic3r/GUI/Jobs/RotoptimizeJob.cpp @@ -57,7 +57,8 @@ void RotoptimizeJob::process(Ctl &ctl) .print_config(&m_default_print_cfg) .statucb([this, &prev_status, &ctl/*, &statustxt*/](int s) { -// if (s > 0 && s < 100) + if (s > 0 && s < 100) + ; // ctl.update_status(prev_status + s / m_selected_object_ids.size(), // statustxt); diff --git a/src/slic3r/GUI/Jobs/SendJob.cpp b/src/slic3r/GUI/Jobs/SendJob.cpp index cb9f87e95a..6566060546 100644 --- a/src/slic3r/GUI/Jobs/SendJob.cpp +++ b/src/slic3r/GUI/Jobs/SendJob.cpp @@ -67,6 +67,9 @@ wxString SendJob::get_http_error_msg(unsigned int status, std::string body) if (!j["message"].is_null()) message = j["message"].get(); } + switch (status) { + ; + } } catch (...) { ; @@ -106,7 +109,9 @@ void SendJob::process(Ctl &ctl) std::string msg; int curr_percent = 10; NetworkAgent* m_agent = wxGetApp().getAgent(); + AppConfig* config = wxGetApp().app_config; int result = -1; + unsigned int http_code; std::string http_body; if (this->connection_type == "lan") { diff --git a/src/slic3r/GUI/KBShortcutsDialog.cpp b/src/slic3r/GUI/KBShortcutsDialog.cpp index 56a575a350..9d368f9e86 100644 --- a/src/slic3r/GUI/KBShortcutsDialog.cpp +++ b/src/slic3r/GUI/KBShortcutsDialog.cpp @@ -183,7 +183,11 @@ void KBShortcutsDialog::fill_shortcuts() // Slice plate { ctrl + "R", L("Slice plate")}, // Send to Print - { ctrl + L("Shift+G"), L("Print plate")}, +#ifdef __APPLE__ + { L("⌘+Shift+G"), L("Print plate")}, +#else + { L("Ctrl+Shift+G"), L("Print plate")}, +#endif // __APPLE // Edit { ctrl + "X", L("Cut") }, @@ -222,9 +226,16 @@ void KBShortcutsDialog::fill_shortcuts() {L("Shift+R"), L("Auto orientates selected objects or all objects.If there are selected objects, it just orientates the selected ones.Otherwise, it will orientates all objects in the current disk.")}, {L("Shift+Tab"), L("Collapse/Expand the sidebar")}, - { ctrl + L("Any arrow"), L("Movement in camera space")}, - { alt + L("Left mouse button"), L("Select a part")}, - { ctrl + L("Left mouse button"), L("Select multiple objects")}, + #ifdef __APPLE__ + {L("⌘+Any arrow"), L("Movement in camera space")}, + {L("⌥+Left mouse button"), L("Select a part")}, + {L("⌘+Left mouse button"), L("Select multiple objects")}, + #else + {L("Ctrl+Any arrow"), L("Movement in camera space")}, + {L("Alt+Left mouse button"), L("Select a part")}, + {L("Ctrl+Left mouse button"), L("Select multiple objects")}, + + #endif {L("Shift+Left mouse button"), L("Select objects by rectangle")}, {L("Arrow Up"), L("Move selection 10 mm in positive Y direction")}, {L("Arrow Down"), L("Move selection 10 mm in negative Y direction")}, @@ -263,8 +274,13 @@ void KBShortcutsDialog::fill_shortcuts() Shortcuts gizmos_shortcuts = { {L("Esc"), L("Deselect all")}, {L("Shift+"), L("Move: press to snap by 1mm")}, - { ctrl + L("Mouse wheel"), L("Support/Color Painting: adjust pen radius")}, - { alt + L("Mouse wheel"), L("Support/Color Painting: adjust section position")}, + #ifdef __APPLE__ + {L("⌘+Mouse wheel"), L("Support/Color Painting: adjust pen radius")}, + {L("⌥+Mouse wheel"), L("Support/Color Painting: adjust section position")}, + #else + {L("Ctrl+Mouse wheel"), L("Support/Color Painting: adjust pen radius")}, + {L("Alt+Mouse wheel"), L("Support/Color Painting: adjust section position")}, + #endif }; m_full_shortcuts.push_back({{_L("Gizmo"), ""}, gizmos_shortcuts}); @@ -295,8 +311,13 @@ void KBShortcutsDialog::fill_shortcuts() { "Tab", L("Switch between Prepare/Preview") }, {L("Shift+Any arrow"), L("Move slider 5x faster")}, {L("Shift+Mouse wheel"), L("Move slider 5x faster")}, - { ctrl + L("Any arrow"), L("Move slider 5x faster")}, - { ctrl + L("Mouse wheel"), L("Move slider 5x faster")}, + #ifdef __APPLE__ + {L("⌘+Any arrow"), L("Move slider 5x faster")}, + {L("⌘+Mouse wheel"), L("Move slider 5x faster")}, + #else + {L("Ctrl+Any arrow"), L("Move slider 5x faster")}, + {L("Ctrl+Mouse wheel"), L("Move slider 5x faster")}, + #endif { L("Home"), L("Horizontal slider - Move to start position")}, { L("End"), L("Horizontal slider - Move to last position")}, }; diff --git a/src/slic3r/GUI/MainFrame.cpp b/src/slic3r/GUI/MainFrame.cpp index af7102fe81..47d7c30e86 100644 --- a/src/slic3r/GUI/MainFrame.cpp +++ b/src/slic3r/GUI/MainFrame.cpp @@ -743,6 +743,7 @@ void MainFrame::update_layout() if (m_layout != ESettingsLayout::Unknown) restore_to_creation(); + ESettingsLayout old_layout = m_layout; m_layout = layout; // From the very beginning the Print settings should be selected @@ -1487,6 +1488,7 @@ bool MainFrame::can_reslice() const wxBoxSizer* MainFrame::create_side_tools() { enable_multi_machine = wxGetApp().is_enable_multi_machine(); + int em = em_unit(); wxBoxSizer* sizer = new wxBoxSizer(wxHORIZONTAL); m_slice_select = eSlicePlate; @@ -1777,7 +1779,7 @@ wxBoxSizer* MainFrame::create_side_tools() aux_btn->Bind(wxEVT_BUTTON, [](auto e) { wxGetApp().sidebar().show_auxiliary_dialog(); }); - sizer->Add(aux_btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 1 * em_unit() / 10); + sizer->Add(aux_btn, 0, wxLEFT | wxALIGN_CENTER_VERTICAL, 1 * em / 10); */ sizer->Add(FromDIP(19), 0, 0, 0, 0); @@ -1922,6 +1924,9 @@ bool MainFrame::get_enable_print_status() void MainFrame::update_side_button_style() { + // BBS + int em = em_unit(); + /*m_slice_btn->SetLayoutStyle(1); m_slice_btn->SetTextLayout(SideButton::EHorizontalOrientation::HO_Center, FromDIP(15)); m_slice_btn->SetMinSize(wxSize(-1, FromDIP(24))); @@ -2183,6 +2188,9 @@ static void add_common_publish_menu_items(wxMenu* publish_menu, MainFrame* mainF return; } + json j; + NetworkAgent* agent = GUI::wxGetApp().getAgent(); + //if (GUI::wxGetApp().plater()->model().objects.empty()) return; wxGetApp().open_publish_page_dialog(); }); @@ -2580,13 +2588,13 @@ void MainFrame::init_menubar_as_editor() //BBS perspective view wxWindowID camera_id_base = wxWindow::NewControlId(int(wxID_CAMERA_COUNT)); - append_menu_radio_item(viewMenu, wxID_CAMERA_PERSPECTIVE + camera_id_base, _L("Use Perspective View"), _L("Use Perspective View"), + auto perspective_item = append_menu_radio_item(viewMenu, wxID_CAMERA_PERSPECTIVE + camera_id_base, _L("Use Perspective View"), _L("Use Perspective View"), [this](wxCommandEvent&) { wxGetApp().app_config->set_bool("use_perspective_camera", true); wxGetApp().update_ui_from_settings(); }, nullptr); //BBS orthogonal view - append_menu_radio_item(viewMenu, wxID_CAMERA_ORTHOGONAL + camera_id_base, _L("Use Orthogonal View"), _L("Use Orthogonal View"), + auto orthogonal_item = append_menu_radio_item(viewMenu, wxID_CAMERA_ORTHOGONAL + camera_id_base, _L("Use Orthogonal View"), _L("Use Orthogonal View"), [this](wxCommandEvent&) { wxGetApp().app_config->set_bool("use_perspective_camera", false); wxGetApp().update_ui_from_settings(); @@ -2661,8 +2669,7 @@ void MainFrame::init_menubar_as_editor() //auto preference_item = new wxMenuItem(parent_menu, OrcaSlicerMenuPreferences + bambu_studio_id_base, _L("Preferences") + "\tCtrl+,", ""); #else wxMenu* parent_menu = m_topbar->GetTopMenu(); - // auto preference_item = - new wxMenuItem(parent_menu, ConfigMenuPreferences + config_id_base, _L("Preferences") + "\t" + ctrl + "P", ""); + auto preference_item = new wxMenuItem(parent_menu, ConfigMenuPreferences + config_id_base, _L("Preferences") + "\t" + ctrl + "P", ""); #endif //auto printer_item = new wxMenuItem(parent_menu, ConfigMenuPrinter + config_id_base, _L("Printer"), ""); @@ -3107,6 +3114,10 @@ void MainFrame::init_menubar_as_gcodeviewer() void MainFrame::update_menubar() { + if (wxGetApp().is_gcode_viewer()) + return; + + const bool is_fff = plater()->printer_technology() == ptFFF; } void MainFrame::reslice_now() @@ -3182,6 +3193,7 @@ void MainFrame::load_config_file() cfiles.push_back(into_u8(file)); m_last_config = file; } + bool update = false; wxGetApp().preset_bundle->import_presets(cfiles, [this](std::string const & name) { ConfigsOverwriteConfirmDialog dlg(this, from_u8(name), false); int res = dlg.ShowModal(); @@ -3751,6 +3763,7 @@ void MainFrame::on_select_default_preset(SimpleEvent& evt) wxICON_INFORMATION); /* get setting list */ + NetworkAgent* agent = wxGetApp().getAgent(); switch ( dialog.ShowModal() ) { case wxID_YES: { diff --git a/src/slic3r/GUI/MediaFilePanel.cpp b/src/slic3r/GUI/MediaFilePanel.cpp index faa694090b..b2032b09ad 100644 --- a/src/slic3r/GUI/MediaFilePanel.cpp +++ b/src/slic3r/GUI/MediaFilePanel.cpp @@ -328,6 +328,7 @@ void MediaFilePanel::SetMachineObject(MachineObject* obj) MessageDialog(this, m, _L("Download failed"), wxOK | wxICON_ERROR).ShowModal(); }); + NetworkAgent* agent = wxGetApp().getAgent(); if (result > 1 || result == 0) { json j; j["code"] = result; @@ -575,7 +576,7 @@ void MediaFilePanel::doAction(size_t index, int action) } else { MessageDialog dlg(this, _L("The .gcode.3mf file contains no G-code data.Please slice it with Orca Slicer and export a new .gcode.3mf file."), wxEmptyString, wxICON_WARNING | wxOK); - dlg.ShowModal(); + auto res = dlg.ShowModal(); } }); diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index da70eeff65..36500f69fa 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -67,7 +67,7 @@ MediaPlayCtrl::MediaPlayCtrl(wxWindow *parent, wxMediaCtrl2 *media_ctrl, const w auto ip = str.find(' ', ik); if (ip == wxString::npos) ip = str.Length(); auto v = str.Mid(ik, ip - ik); - if (strcmp(k, "T:") == 0 && v.Length() == 8) { + if (k == "T:" && v.Length() == 8) { long h = 0,m = 0,s = 0; v.Left(2).ToLong(&h); v.Mid(3, 2).ToLong(&m); @@ -389,7 +389,7 @@ void MediaPlayCtrl::Stop(wxString const &msg) } auto tunnel = m_url.empty() ? "" : into_u8(wxURI(m_url).GetPath()).substr(1); - if (auto n = tunnel.find_first_of("/_"); n != std::string::npos) + if (auto n = tunnel.find_first_of('/_'); n != std::string::npos) tunnel = tunnel.substr(0, n); if (last_state != wxMEDIASTATE_PLAYING && m_failed_code != 0 && m_last_failed_codes.find(m_failed_code) == m_last_failed_codes.end() @@ -734,7 +734,7 @@ bool MediaPlayCtrl::start_stream_service(bool *need_install) auto file_dll = tools_dir + dll; auto file_dll2 = plugins_dir + dll; if (!boost::filesystem::exists(file_dll) || boost::filesystem::last_write_time(file_dll) != boost::filesystem::last_write_time(file_dll2)) - boost::filesystem::copy_file(file_dll2, file_dll, boost::filesystem::copy_options::overwrite_existing); + boost::filesystem::copy_file(file_dll2, file_dll, boost::filesystem::copy_option::overwrite_if_exists); } boost::process::child process_source(file_source, file_url2.ToStdWstring(), boost::process::start_dir(tools_dir), boost::process::windows::create_no_window, diff --git a/src/slic3r/GUI/ModelMall.cpp b/src/slic3r/GUI/ModelMall.cpp index 45833ba80c..f14de1ebf0 100644 --- a/src/slic3r/GUI/ModelMall.cpp +++ b/src/slic3r/GUI/ModelMall.cpp @@ -133,7 +133,7 @@ namespace GUI { } } - catch (std::exception&) { + catch (std::exception& e) { // wxMessageBox(e.what(), "json Exception", MB_OK); } } diff --git a/src/slic3r/GUI/Monitor.cpp b/src/slic3r/GUI/Monitor.cpp index 3bcc0ce224..333f4d3de0 100644 --- a/src/slic3r/GUI/Monitor.cpp +++ b/src/slic3r/GUI/Monitor.cpp @@ -114,7 +114,7 @@ AddMachinePanel::~AddMachinePanel() { m_side_tools->get_panel()->Connect(wxEVT_LEFT_DOWN, wxMouseEventHandler(MonitorPanel::on_printer_clicked), NULL, this); - Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); + Bind(wxEVT_TIMER, &MonitorPanel::on_timer, this); Bind(wxEVT_SIZE, &MonitorPanel::on_size, this); Bind(wxEVT_COMMAND_CHOICE_SELECTED, &MonitorPanel::on_select_printer, this); @@ -160,7 +160,7 @@ MonitorPanel::~MonitorPanel() m_refresh_timer = new wxTimer(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(REFRESH_INTERVAL); - on_timer(); + wxPostEvent(this, wxTimerEvent()); Slic3r::DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev) return; @@ -272,7 +272,7 @@ void MonitorPanel::on_update_all(wxMouseEvent &event) } } -void MonitorPanel::on_timer() + void MonitorPanel::on_timer(wxTimerEvent& event) { if (update_flag) { update_all(); @@ -306,6 +306,9 @@ void MonitorPanel::on_timer() void MonitorPanel::on_printer_clicked(wxMouseEvent &event) { + auto mouse_pos = ClientToScreen(event.GetPosition()); + wxPoint rect = m_side_tools->ClientToScreen(wxPoint(0, 0)); + if (!m_side_tools->is_in_interval()) { wxPoint pos = m_side_tools->ClientToScreen(wxPoint(0, 0)); pos.y += m_side_tools->GetRect().height; @@ -431,6 +434,7 @@ bool MonitorPanel::Show(bool show) wxGetApp().mainframe->SetMinSize(wxGetApp().plater()->GetMinSize()); #endif + NetworkAgent* m_agent = wxGetApp().getAgent(); DeviceManager* dev = Slic3r::GUI::wxGetApp().getDeviceManager(); if (show) { start_update(); @@ -438,7 +442,7 @@ bool MonitorPanel::Show(bool show) m_refresh_timer->Stop(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(REFRESH_INTERVAL); - on_timer(); + wxPostEvent(this, wxTimerEvent()); if (dev) { //set a default machine when obj is null @@ -481,6 +485,7 @@ void MonitorPanel::show_status(int status) if (!m_initialized) return; if (last_status == status)return; if ((last_status & (int)MonitorStatus::MONITOR_CONNECTING) != 0) { + NetworkAgent* agent = wxGetApp().getAgent(); json j; j["dev_id"] = obj ? obj->dev_id : "obj_nullptr"; if ((status & (int)MonitorStatus::MONITOR_DISCONNECTED) != 0) { diff --git a/src/slic3r/GUI/Monitor.hpp b/src/slic3r/GUI/Monitor.hpp index 761b059a0a..8da56ddc3b 100644 --- a/src/slic3r/GUI/Monitor.hpp +++ b/src/slic3r/GUI/Monitor.hpp @@ -133,7 +133,7 @@ public: StatusPanel* get_status_panel() {return m_status_info_panel;}; void select_machine(std::string machine_sn); void on_update_all(wxMouseEvent &event); - void on_timer(); + void on_timer(wxTimerEvent& event); void on_select_printer(wxCommandEvent& event); void on_printer_clicked(wxMouseEvent &event); void on_size(wxSizeEvent &event); diff --git a/src/slic3r/GUI/MonitorBasePanel.cpp b/src/slic3r/GUI/MonitorBasePanel.cpp index 24760577a6..553b8f0993 100644 --- a/src/slic3r/GUI/MonitorBasePanel.cpp +++ b/src/slic3r/GUI/MonitorBasePanel.cpp @@ -6,6 +6,7 @@ /////////////////////////////////////////////////////////////////////////// #include "MonitorBasePanel.h" +#include "Printer/PrinterFileSystem.h" #include "Widgets/Label.hpp" /////////////////////////////////////////////////////////////////////////// @@ -20,7 +21,7 @@ MonitorBasePanel::MonitorBasePanel(wxWindow* parent, wxWindowID id, const wxPoin m_splitter = new wxSplitterWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxSP_3D | wxSP_BORDER); m_splitter->SetSashGravity(0); - m_splitter->SetSashInvisible(); + m_splitter->SetSashSize(0); m_splitter->Connect(wxEVT_IDLE, wxIdleEventHandler(MonitorBasePanel::m_splitterOnIdle), NULL, this); m_splitter->SetMinimumPaneSize(182); @@ -280,7 +281,7 @@ VideoMonitoringBasePanel::~VideoMonitoringBasePanel() // PLEASE DO *NOT* EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// -//#include "MonitorBasePanel.h" +#include "MonitorBasePanel.h" /////////////////////////////////////////////////////////////////////////// using namespace Slic3r::GUI; diff --git a/src/slic3r/GUI/MultiMachine.hpp b/src/slic3r/GUI/MultiMachine.hpp index 04ff304bca..48a6ed4180 100644 --- a/src/slic3r/GUI/MultiMachine.hpp +++ b/src/slic3r/GUI/MultiMachine.hpp @@ -9,16 +9,16 @@ namespace Slic3r { namespace GUI { -#define DEVICE_ITEM_MAX_WIDTH 900 -#define SEND_ITEM_MAX_HEIGHT 30 -#define DEVICE_ITEM_MAX_HEIGHT 50 +#define DEVICE_ITEM_MAX_WIDTH 900 +#define SEND_ITEM_MAX_HEIGHT 30 +#define DEVICE_ITEM_MAX_HEIGHT 50 #define TABLE_HEAR_NORMAL_COLOUR wxColour(238, 238, 238) #define TABLE_HEAD_PRESSED_COLOUR wxColour(150, 150, 150) #define CTRL_BUTTON_NORMAL_COLOUR wxColour(255, 255, 255) #define CTRL_BUTTON_PRESSEN_COLOUR wxColour(150, 150, 150) #define TABLE_HEAD_FONT Label::Body_13 -#define MM_ICON_SIZE FromDIP(16) +#define ICON_SIZE FromDIP(16) class DeviceItem : public wxWindow { diff --git a/src/slic3r/GUI/MultiMachineManagerPage.cpp b/src/slic3r/GUI/MultiMachineManagerPage.cpp index 9a112d32c3..b37810f07f 100644 --- a/src/slic3r/GUI/MultiMachineManagerPage.cpp +++ b/src/slic3r/GUI/MultiMachineManagerPage.cpp @@ -320,7 +320,7 @@ MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) m_table_head_panel->SetBackgroundColour(TABLE_HEAR_NORMAL_COLOUR); m_table_head_sizer = new wxBoxSizer(wxHORIZONTAL); - m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); m_printer_name->SetBackgroundColor(head_bg); m_printer_name->SetFont(TABLE_HEAD_FONT); m_printer_name->SetCornerRadius(0); @@ -343,7 +343,7 @@ MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) }); - m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, MM_ICON_SIZE); + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_task_name->SetFont(TABLE_HEAD_FONT); m_task_name->SetCornerRadius(0); @@ -353,7 +353,7 @@ MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) - m_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); + m_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); m_status->SetBackgroundColor(head_bg); m_status->SetFont(TABLE_HEAD_FONT); m_status->SetCornerRadius(0); @@ -376,7 +376,7 @@ MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) }); - m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, MM_ICON_SIZE, false); + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_action->SetFont(TABLE_HEAD_FONT); m_action->SetCornerRadius(0); @@ -523,7 +523,7 @@ MultiMachineManagerPage::MultiMachineManagerPage(wxWindow* parent) Layout(); Fit(); - Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); + Bind(wxEVT_TIMER, &MultiMachineManagerPage::on_timer, this); } void MultiMachineManagerPage::update_page() @@ -676,7 +676,7 @@ void MultiMachineManagerPage::start_timer() m_flipping_timer->SetOwner(this); m_flipping_timer->Start(1000); - on_timer(); + wxPostEvent(this, wxTimerEvent()); } void MultiMachineManagerPage::update_page_number() @@ -688,7 +688,7 @@ void MultiMachineManagerPage::update_page_number() st_page_number->SetLabel(number); } -void MultiMachineManagerPage::on_timer() +void MultiMachineManagerPage::on_timer(wxTimerEvent& event) { m_flipping_timer->Stop(); if (btn_last_page) diff --git a/src/slic3r/GUI/MultiMachineManagerPage.hpp b/src/slic3r/GUI/MultiMachineManagerPage.hpp index 55eb500540..c1086b4721 100644 --- a/src/slic3r/GUI/MultiMachineManagerPage.hpp +++ b/src/slic3r/GUI/MultiMachineManagerPage.hpp @@ -55,7 +55,7 @@ public: void start_timer(); void update_page_number(); - void on_timer(); + void on_timer(wxTimerEvent& event); void clear_page(); void page_num_enter_evt(); diff --git a/src/slic3r/GUI/MultiMachinePage.cpp b/src/slic3r/GUI/MultiMachinePage.cpp index cb1fea926d..9aed022ba3 100644 --- a/src/slic3r/GUI/MultiMachinePage.cpp +++ b/src/slic3r/GUI/MultiMachinePage.cpp @@ -19,7 +19,7 @@ MultiMachinePage::MultiMachinePage(wxWindow* parent, wxWindowID id, const wxPoin wxGetApp().UpdateDarkUIWin(this); init_timer(); - Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); + Bind(wxEVT_TIMER, &MultiMachinePage::on_timer, this); } MultiMachinePage::~MultiMachinePage() @@ -59,7 +59,7 @@ bool MultiMachinePage::Show(bool show) m_refresh_timer->Stop(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(2000); - on_timer(); + wxPostEvent(this, wxTimerEvent()); } else { m_refresh_timer->Stop(); @@ -97,7 +97,7 @@ void MultiMachinePage::init_timer() //wxPostEvent(this, wxTimerEvent()); } -void MultiMachinePage::on_timer() +void MultiMachinePage::on_timer(wxTimerEvent& event) { m_local_task_manager->update_page(); m_cloud_task_manager->update_page(); diff --git a/src/slic3r/GUI/MultiMachinePage.hpp b/src/slic3r/GUI/MultiMachinePage.hpp index 7e948fa479..0572c30d1b 100644 --- a/src/slic3r/GUI/MultiMachinePage.hpp +++ b/src/slic3r/GUI/MultiMachinePage.hpp @@ -41,7 +41,7 @@ public: void init_tabpanel(); void init_timer(); - void on_timer(); + void on_timer(wxTimerEvent& event); void clear_page(); }; diff --git a/src/slic3r/GUI/MultiTaskManagerPage.cpp b/src/slic3r/GUI/MultiTaskManagerPage.cpp index 3d295eb97c..f2d159a7de 100644 --- a/src/slic3r/GUI/MultiTaskManagerPage.cpp +++ b/src/slic3r/GUI/MultiTaskManagerPage.cpp @@ -4,6 +4,7 @@ #include "GUI_App.hpp" #include "MainFrame.hpp" #include "Widgets/RadioBox.hpp" +#include #include namespace Slic3r { @@ -573,7 +574,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) }); - m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, MM_ICON_SIZE); + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_task_name->SetFont(TABLE_HEAD_FONT); m_task_name->SetCornerRadius(0); @@ -582,7 +583,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) m_task_name->SetCenter(false); m_table_head_sizer->Add(m_task_name, 0, wxALIGN_CENTER_VERTICAL, 0); - m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); m_printer_name->SetBackgroundColor(head_bg); m_printer_name->SetFont(TABLE_HEAD_FONT); m_printer_name->SetCornerRadius(0); @@ -602,7 +603,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); - m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); + m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); m_status->SetBackgroundColor(head_bg); m_status->SetFont(TABLE_HEAD_FONT); m_status->SetCornerRadius(0); @@ -622,7 +623,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_status, 0, wxALIGN_CENTER_VERTICAL, 0); - m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, MM_ICON_SIZE); + m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, ICON_SIZE); m_info->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_info->SetFont(TABLE_HEAD_FONT); m_info->SetCornerRadius(0); @@ -631,7 +632,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) m_info->SetCenter(false); m_table_head_sizer->Add(m_info, 0, wxALIGN_CENTER_VERTICAL, 0); - m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE, false); + m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); m_send_time->SetBackgroundColor(head_bg); m_send_time->SetFont(TABLE_HEAD_FONT); m_send_time->SetCornerRadius(0); @@ -651,7 +652,7 @@ LocalTaskManagerPage::LocalTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_send_time, 0, wxALIGN_CENTER_VERTICAL, 0); - m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, MM_ICON_SIZE, false); + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_action->SetFont(TABLE_HEAD_FONT); m_action->SetCornerRadius(0); @@ -945,7 +946,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) - m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, MM_ICON_SIZE); + m_task_name = new Button(m_table_head_panel, _L("Task Name"), "", wxNO_BORDER, ICON_SIZE); m_task_name->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_task_name->SetFont(TABLE_HEAD_FONT); m_task_name->SetCornerRadius(0); @@ -954,7 +955,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) m_task_name->SetCenter(false); m_table_head_sizer->Add(m_task_name, 0, wxALIGN_CENTER_VERTICAL, 0); - m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); m_printer_name->SetBackgroundColor(head_bg); m_printer_name->SetFont(TABLE_HEAD_FONT); m_printer_name->SetCornerRadius(0); @@ -974,7 +975,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); - m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); + m_status = new Button(m_table_head_panel, _L("Task Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); m_status->SetBackgroundColor(head_bg); m_status->SetFont(TABLE_HEAD_FONT); m_status->SetCornerRadius(0); @@ -994,7 +995,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_status, 0, wxALIGN_CENTER_VERTICAL, 0); - m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, MM_ICON_SIZE); + m_info = new Button(m_table_head_panel, _L("Info"), "", wxNO_BORDER, ICON_SIZE); m_info->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_info->SetFont(TABLE_HEAD_FONT); m_info->SetCornerRadius(0); @@ -1003,7 +1004,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) m_info->SetCenter(false); m_table_head_sizer->Add(m_info, 0, wxALIGN_CENTER_VERTICAL, 0); - m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE, false); + m_send_time = new Button(m_table_head_panel, _L("Sent Time"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); m_send_time->SetBackgroundColor(head_bg); m_send_time->SetFont(TABLE_HEAD_FONT); m_send_time->SetCornerRadius(0); @@ -1023,7 +1024,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) }); m_table_head_sizer->Add(m_send_time, 0, wxALIGN_CENTER_VERTICAL, 0); - m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, MM_ICON_SIZE, false); + m_action = new Button(m_table_head_panel, _L("Actions"), "", wxNO_BORDER, ICON_SIZE, false); m_action->SetBackgroundColor(TABLE_HEAR_NORMAL_COLOUR); m_action->SetFont(TABLE_HEAD_FONT); m_action->SetCornerRadius(0); @@ -1182,7 +1183,7 @@ CloudTaskManagerPage::CloudTaskManagerPage(wxWindow* parent) page_sizer = new wxBoxSizer(wxVERTICAL); page_sizer->Add(m_main_panel, 1, wxALL | wxEXPAND, FromDIP(25)); - Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); + Bind(wxEVT_TIMER, &CloudTaskManagerPage::on_timer, this); wxGetApp().UpdateDarkUIWin(this); @@ -1399,10 +1400,10 @@ void CloudTaskManagerPage::start_timer() m_flipping_timer->SetOwner(this); m_flipping_timer->Start(1000); - on_timer(); + wxPostEvent(this, wxTimerEvent()); } -void CloudTaskManagerPage::on_timer() +void CloudTaskManagerPage::on_timer(wxTimerEvent& event) { m_flipping_timer->Stop(); enable_buttons(true); diff --git a/src/slic3r/GUI/MultiTaskManagerPage.hpp b/src/slic3r/GUI/MultiTaskManagerPage.hpp index b32c670d5e..0f676d06b3 100644 --- a/src/slic3r/GUI/MultiTaskManagerPage.hpp +++ b/src/slic3r/GUI/MultiTaskManagerPage.hpp @@ -135,7 +135,7 @@ public: bool Show(bool show); void update_page_number(); void start_timer(); - void on_timer(); + void on_timer(wxTimerEvent& event); void pause_all(wxCommandEvent& evt); void resume_all(wxCommandEvent& evt); diff --git a/src/slic3r/GUI/Notebook.hpp b/src/slic3r/GUI/Notebook.hpp index 5ef90a9702..7e6e94da3a 100644 --- a/src/slic3r/GUI/Notebook.hpp +++ b/src/slic3r/GUI/Notebook.hpp @@ -194,6 +194,8 @@ public: // check that only the selected page is visible and others are hidden: for (size_t page = 0; page < m_pages.size(); page++) { + wxWindow* win_a = GetPage(page); + wxWindow* win_b = GetPage(n); if (page != n && GetPage(page) != GetPage(n)) { m_pages[page]->Hide(); } diff --git a/src/slic3r/GUI/NotificationManager.cpp b/src/slic3r/GUI/NotificationManager.cpp index 685058bbb3..08ef8c7493 100644 --- a/src/slic3r/GUI/NotificationManager.cpp +++ b/src/slic3r/GUI/NotificationManager.cpp @@ -857,7 +857,7 @@ void NotificationManager::PopNotification::bbl_render_block_notif_buttons(ImGuiW void NotificationManager::PopNotification::bbl_render_block_notif_left_sign(ImGuiWrapper& imgui, const float win_size_x, const float win_size_y, const float win_pos_x, const float win_pos_y) { - // auto window = ImGui::GetCurrentWindow(); + auto window = ImGui::GetCurrentWindow(); //window->DrawList->AddImage(user_texture_id, bb.Min + padding + margin, bb.Max - padding - margin, uv0, uv1, ImGui::GetColorU32(tint_col)); std::wstring text; diff --git a/src/slic3r/GUI/OG_CustomCtrl.cpp b/src/slic3r/GUI/OG_CustomCtrl.cpp index 6fa75d7895..dadde84ebc 100644 --- a/src/slic3r/GUI/OG_CustomCtrl.cpp +++ b/src/slic3r/GUI/OG_CustomCtrl.cpp @@ -405,6 +405,7 @@ void OG_CustomCtrl::OnMotion(wxMouseEvent& event) // Set tooltips with information for each icon // BBS: markdown tip if (!markdowntip.empty()) { + wxWindow* window = GetGrandParent(); assert(focusedLine); wxPoint pos2 = { 250, focusedLine->rect_label.y }; pos2 = ClientToScreen(pos2); diff --git a/src/slic3r/GUI/ObjColorDialog.cpp b/src/slic3r/GUI/ObjColorDialog.cpp index 7ac8d20bd3..648faffbf9 100644 --- a/src/slic3r/GUI/ObjColorDialog.cpp +++ b/src/slic3r/GUI/ObjColorDialog.cpp @@ -1,6 +1,9 @@ #include +#include +//#include "libslic3r/FlushVolCalc.hpp" #include "ObjColorDialog.hpp" #include "BitmapCache.hpp" +#include "GUI.hpp" #include "I18N.hpp" #include "GUI_App.hpp" #include "MsgDialog.hpp" @@ -241,6 +244,7 @@ ObjColorPanel::ObjColorPanel(wxWindow * parent, } //end first cluster //draw ui + auto sizer_width = FromDIP(300); // Create two switched panels with their own sizers m_sizer_simple = new wxBoxSizer(wxVERTICAL); m_page_simple = new wxPanel(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL); @@ -670,6 +674,7 @@ void ObjColorPanel::draw_table() m_scrolledWindow->SetSizer(m_gridsizer); int totalHeight = row_height *(row+1) * 2; m_scrolledWindow->SetVirtualSize(MIN_OBJCOLOR_DIALOG_WIDTH, totalHeight); + auto look = FIX_SCROLL_HEIGTH; if (totalHeight > FIX_SCROLL_HEIGTH) { m_scrolledWindow->SetMinSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, FIX_SCROLL_HEIGTH)); m_scrolledWindow->SetMaxSize(wxSize(MIN_OBJCOLOR_DIALOG_WIDTH, FIX_SCROLL_HEIGTH)); diff --git a/src/slic3r/GUI/OptionsGroup.cpp b/src/slic3r/GUI/OptionsGroup.cpp index febc326dff..936afcacb9 100644 --- a/src/slic3r/GUI/OptionsGroup.cpp +++ b/src/slic3r/GUI/OptionsGroup.cpp @@ -9,8 +9,12 @@ #include "Widgets/StaticLine.hpp" #include +#include #include +#include +#include #include "libslic3r/Exception.hpp" +#include "libslic3r/Utils.hpp" #include "libslic3r/AppConfig.hpp" #include "I18N.hpp" #include diff --git a/src/slic3r/GUI/PartPlate.cpp b/src/slic3r/GUI/PartPlate.cpp index 1bc2b55adf..7f2353a304 100644 --- a/src/slic3r/GUI/PartPlate.cpp +++ b/src/slic3r/GUI/PartPlate.cpp @@ -1597,6 +1597,9 @@ std::vector PartPlate::get_extruders_without_support(bool conside_custom_gc return plate_extruders; } + // if 3mf file + const DynamicPrintConfig& glb_config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + for (int obj_idx = 0; obj_idx < m_model->objects.size(); obj_idx++) { if (!contain_instance_totally(obj_idx, 0)) continue; @@ -1655,14 +1658,14 @@ Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig & config, con { Vec3d wipe_tower_size; - // double layer_height = 0.08f; // hard code layer height + double layer_height = 0.08f; // hard code layer height double max_height = 0.f; wipe_tower_size.setZero(); wipe_tower_size(0) = w; - // const ConfigOption* layer_height_opt = config.option("layer_height"); - // if (layer_height_opt) - // layer_height = layer_height_opt->getFloat(); + const ConfigOption* layer_height_opt = config.option("layer_height"); + if (layer_height_opt) + layer_height = layer_height_opt->getFloat(); // empty plate if (plate_extruder_size == 0) @@ -1710,6 +1713,7 @@ Vec3d PartPlate::estimate_wipe_tower_size(const DynamicPrintConfig & config, con // If wipe tower height is between the current and next member, set the min_depth as linear interpolation between them auto next_height_to_depth = *iter; if (next_height_to_depth.first > max_height) { + float height_base = curr_height_to_depth.first; float height_diff = next_height_to_depth.first - curr_height_to_depth.first; float min_depth_base = curr_height_to_depth.second; float depth_diff = next_height_to_depth.second - curr_height_to_depth.second; @@ -2098,6 +2102,7 @@ bool PartPlate::intersect_instance(int obj_id, int instance_id, BoundingBoxf3* b if (m_printable) { ModelObject* object = m_model->objects[obj_id]; + ModelInstance* instance = object->instances[instance_id]; BoundingBoxf3 instance_box = bounding_box? *bounding_box: object->instance_convex_hull_bounding_box(instance_id); result = get_plate_box().intersects(instance_box); } @@ -2121,6 +2126,7 @@ bool PartPlate::is_left_top_of(int obj_id, int instance_id) } ModelObject* object = m_model->objects[obj_id]; + ModelInstance* instance = object->instances[instance_id]; std::pair pair(obj_id, instance_id); BoundingBoxf3 instance_box = object->instance_convex_hull_bounding_box(instance_id); @@ -2516,7 +2522,7 @@ void PartPlate::generate_print_polygon(ExPolygon &print_polygon) { auto compute_points = [&print_polygon](Vec2d& center, double radius, double start_angle, double stop_angle, int count) { - double angle_steps; + double angle, angle_steps; angle_steps = (stop_angle - start_angle) / (count - 1); for(int j = 0; j < count; j++ ) { @@ -2535,7 +2541,7 @@ void PartPlate::generate_print_polygon(ExPolygon &print_polygon) { const Vec2d& p = m_shape[i]; Vec2d center; - double start_angle, stop_angle, radius_x, radius_y, radius; + double start_angle, stop_angle, angle_steps, radius_x, radius_y, radius; switch (i) { case 0: radius = 5.f; @@ -2586,7 +2592,7 @@ void PartPlate::generate_exclude_polygon(ExPolygon &exclude_polygon) { auto compute_exclude_points = [&exclude_polygon](Vec2d& center, double radius, double start_angle, double stop_angle, int count) { - double angle_steps; + double angle, angle_steps; angle_steps = (stop_angle - start_angle) / (count - 1); for(int j = 0; j < count; j++ ) { @@ -2605,7 +2611,7 @@ void PartPlate::generate_exclude_polygon(ExPolygon &exclude_polygon) { const Vec2d& p = m_exclude_area[i]; Vec2d center; - double start_angle, stop_angle, radius; + double start_angle, stop_angle, angle_steps, radius_x, radius_y, radius; switch (i) { case 0: radius = 5.f; @@ -3120,7 +3126,7 @@ void PartPlate::update_first_layer_print_sequence(size_t filament_nums) void PartPlate::print() const { - // unsigned int count=0; + unsigned int count=0; BOOST_LOG_TRIVIAL(trace) << __FUNCTION__ << boost::format(": plate index %1%, pointer %2%, print_index %3% print pointer %4%") % m_plate_index % this % m_print_index % m_print; BOOST_LOG_TRIVIAL(trace) << boost::format("\t origin {%1%,%2%,%3%}, width %4%, depth %5%, height %6%") % m_origin.x() % m_origin.y() % m_origin.z() % m_width % m_depth % m_height; @@ -4147,7 +4153,8 @@ int PartPlateList::find_instance_belongs(int obj_id, int instance_id) //newly added or modified int PartPlateList::notify_instance_update(int obj_id, int instance_id, bool is_new) { - int index; + int ret = 0, index; + PartPlate* plate = NULL; ModelObject* object = NULL; if ((obj_id >= 0) && (obj_id < m_model->objects.size())) @@ -4176,7 +4183,7 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id, bool is_n { //found it added before BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": found it in previous plate %1%") % index; - PartPlate* plate = m_plate_list[index]; + plate = m_plate_list[index]; if (!plate->intersect_instance(obj_id, instance_id, &boundingbox)) { //not include anymore, remove it from original plate @@ -4281,7 +4288,7 @@ int PartPlateList::notify_instance_update(int obj_id, int instance_id, bool is_n //notify instance is removed int PartPlateList::notify_instance_removed(int obj_id, int instance_id) { - int index, instance_to_delete = instance_id; + int ret = 0, index, instance_to_delete = instance_id; PartPlate* plate = NULL; BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": obj_id %1%, instance_id %2%") % obj_id % instance_id; @@ -4379,6 +4386,7 @@ int PartPlateList::reload_all_objects(bool except_locked, int plate_index) ModelObject* object = m_model->objects[i]; for (j = 0; j < (unsigned int)object->instances.size(); ++j) { + ModelInstance* instance = object->instances[j]; BoundingBoxf3 boundingbox = object->instance_convex_hull_bounding_box(j); for (k = 0; k < (unsigned int)m_plate_list.size(); ++k) { @@ -4429,7 +4437,9 @@ int PartPlateList::construct_objects_list_for_new_plate(int plate_index) ModelObject* object = m_model->objects[i]; for (j = 0; j < (unsigned int)object->instances.size(); ++j) { + ModelInstance* instance = object->instances[j]; already_included = false; + for (k = 0; k < (unsigned int)plate_index; ++k) { PartPlate* plate = m_plate_list[k]; @@ -4603,6 +4613,7 @@ bool PartPlateList::preprocess_nonprefered_areas(arrangement::ArrangePolygons& r nonprefered_regions.emplace_back(Vec2d{ 18,0 }, Vec2d{ 240,15 }); // new extrusion & hand-eye calibration region //has exclude areas + PartPlate* plate = m_plate_list[0]; for (int index = 0; index < nonprefered_regions.size(); index++) { Polygon ap = scaled(nonprefered_regions[index]).polygon(); @@ -4829,8 +4840,11 @@ void PartPlateList::set_render_option(bool bedtype_texture, bool plate_settings) int PartPlateList::select_plate_by_obj(int obj_index, int instance_index) { + int ret = 0, index; + PartPlate* plate = NULL; + BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": obj_id %1%, instance_id %2%") % obj_index % instance_index; - int index = find_instance(obj_index, instance_index); + index = find_instance(obj_index, instance_index); if (index != -1) { //found it in plate @@ -4868,6 +4882,8 @@ bool PartPlateList::set_shapes(const Pointfs& shape, const Pointfs& exclude_area m_height_to_lid = height_to_lid; m_height_to_rod = height_to_rod; + double stride_x = plate_stride_x(); + double stride_y = plate_stride_y(); for (unsigned int i = 0; i < (unsigned int)m_plate_list.size(); ++i) { PartPlate* plate = m_plate_list[i]; @@ -5429,12 +5445,14 @@ void PartPlateList::BedTextureInfo::TexturePart::update_buffer() rectangle.push_back(Vec2d(x, y+h)); ExPolygon poly; - for (const auto& p : rectangle) { - Vec2d pp = Vec2d(p.x() + offset.x(), p.y() + offset.y()); - poly.contour.append({ scale_(pp(0)), scale_(pp(1)) }); + for (int i = 0; i < 4; i++) { + const Vec2d & p = rectangle[i]; + for (auto& p : rectangle) { + Vec2d pp = Vec2d(p.x() + offset.x(), p.y() + offset.y()); + poly.contour.append({ scale_(pp(0)), scale_(pp(1)) }); + } } - if (!buffer) buffer = new GLModel(); diff --git a/src/slic3r/GUI/Plater.cpp b/src/slic3r/GUI/Plater.cpp index 68ba982a1c..469bba9117 100644 --- a/src/slic3r/GUI/Plater.cpp +++ b/src/slic3r/GUI/Plater.cpp @@ -396,9 +396,10 @@ Sidebar::priv::~priv() void Sidebar::priv::show_preset_comboboxes() { + const bool showSLA = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA; + //BBS #if 0 - const bool showSLA = wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() == ptSLA; for (size_t i = 0; i < 4; ++i) sizer_presets->Show(i, !showSLA); @@ -1157,7 +1158,7 @@ void Sidebar::init_filament_combo(PlaterPresetComboBox **combo, const int filame auto combo_and_btn_sizer = new wxBoxSizer(wxHORIZONTAL); // BBS: filament double columns - // int em = wxGetApp().em_unit(); + int em = wxGetApp().em_unit(); combo_and_btn_sizer->Add(FromDIP(8), 0, 0, 0, 0 ); (*combo)->clr_picker->SetLabel(wxString::Format("%d", filament_idx + 1)); combo_and_btn_sizer->Add((*combo)->clr_picker, 0, wxALIGN_CENTER_VERTICAL | wxRIGHT, FromDIP(3)); @@ -1325,6 +1326,7 @@ void Sidebar::update_all_preset_comboboxes() void Sidebar::update_presets(Preset::Type preset_type) { PresetBundle &preset_bundle = *wxGetApp().preset_bundle; + const auto print_tech = preset_bundle.printers.get_edited_preset().printer_technology(); BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": enter, preset_type %1%")%preset_type; switch (preset_type) { @@ -1332,7 +1334,6 @@ void Sidebar::update_presets(Preset::Type preset_type) { // BBS #if 0 - const auto print_tech = preset_bundle.printers.get_edited_preset().printer_technology(); const size_t extruder_cnt = print_tech != ptFFF ? 1 : dynamic_cast(preset_bundle.printers.get_edited_preset().config.option("nozzle_diameter"))->values.size(); const size_t filament_cnt = p->combos_filament.size() > extruder_cnt ? extruder_cnt : p->combos_filament.size(); @@ -1788,7 +1789,7 @@ void Sidebar::sync_ams_list() // BBS:Record consumables information before synchronization std::vector color_before_sync; - std::vector is_support_before; + std::vector is_support_before; DynamicPrintConfig& project_config = wxGetApp().preset_bundle->project_config; ConfigOptionStrings* color_opt = project_config.option("filament_colour"); for (int i = 0; i < p->combos_filament.size(); ++i) { @@ -2027,13 +2028,18 @@ void Sidebar::auto_calc_flushing_volumes(const int modify_id) { auto& preset_bundle = wxGetApp().preset_bundle; auto& project_config = preset_bundle->project_config; + auto& printer_config = preset_bundle->printers.get_edited_preset().config; const auto& full_config = wxGetApp().preset_bundle->full_config(); auto& ams_multi_color_filament = preset_bundle->ams_multi_color_filment; + auto& ams_filament_list = preset_bundle->filament_ams_list; const std::vector& init_matrix = (project_config.option("flush_volumes_matrix"))->values; + const std::vector& init_extruders = (project_config.option("flush_volumes_vector"))->values; const std::vector& min_flush_volumes= get_min_flush_volumes(full_config); + ConfigOptionFloat* flush_multi_opt = project_config.option("flush_multiplier"); + float flush_multiplier = flush_multi_opt ? flush_multi_opt->getFloat() : 1.f; std::vector matrix = init_matrix; int m_max_flush_volume = Slic3r::g_max_flush_volume; unsigned int m_number_of_extruders = (int)(sqrt(init_matrix.size()) + 0.001); @@ -2931,7 +2937,7 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame) wxGLCanvas* view3D_canvas = view3D->get_wxglcanvas(); //BBS: GUI refactor - // wxGLCanvas* preview_canvas = preview->get_wxglcanvas(); + wxGLCanvas* preview_canvas = preview->get_wxglcanvas(); if (wxGetApp().is_editor()) { // 3DScene events: @@ -3649,8 +3655,11 @@ std::vector Plater::priv::load_files(const std::vector& input_ std::string designer_model_id; std::string designer_country_code; + int answer_convert_from_meters = wxOK_DEFAULT; + int answer_convert_from_imperial_units = wxOK_DEFAULT; int tolal_model_count = 0; + int progress_percent = 0; int total_files = input_files.size(); const int stage_percent[IMPORT_STAGE_MAX+1] = { 5, // IMPORT_STAGE_RESTORE @@ -3817,7 +3826,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ wxString text = wxString::Format(_L("The 3mf's version %s is newer than %s's version %s, Found following keys unrecognized:"), file_version.to_string(), std::string(SLIC3R_APP_FULL_NAME), app_version.to_string()); text += "\n"; - // bool first = true; + bool first = true; // std::string context = into_u8(text); wxString context = text; // if (wxGetApp().app_config->get("user_mode") == "develop") { @@ -3923,7 +3932,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ } // Based on the printer technology field found in the loaded config, select the base for the config, - // PrinterTechnology printer_technology = Preset::printer_technology(config_loaded); + PrinterTechnology printer_technology = Preset::printer_technology(config_loaded); config.apply(static_cast(FullPrintConfig::defaults())); // and place the loaded config over the base. @@ -3978,7 +3987,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ MessageDialog dlg(q, _L("The 3mf has following modified G-codes in filament or printer presets:") + warning_message+ _L("Please confirm that these modified G-codes are safe to prevent any damage to the machine!"), _L("Modified G-codes")); dlg.show_dsa_button(); - dlg.ShowModal(); + auto res = dlg.ShowModal(); if (dlg.get_checkbox_state()) wxGetApp().app_config->set("no_warn_when_modified_gcodes", "true"); } @@ -3991,7 +4000,7 @@ std::vector Plater::priv::load_files(const std::vector& input_ //show_info(q, _L("The 3mf has following customized filament or printer presets:") + warning_message + _L("Please confirm that the G-codes within these presets are safe to prevent any damage to the machine!"), _L("Customized Preset")); MessageDialog dlg(q, _L("The 3mf has following customized filament or printer presets:") + from_u8(warning_message)+ _L("Please confirm that the G-codes within these presets are safe to prevent any damage to the machine!"), _L("Customized Preset")); dlg.show_dsa_button(); - dlg.ShowModal(); + auto res = dlg.ShowModal(); if (dlg.get_checkbox_state()) wxGetApp().app_config->set("no_warn_when_modified_gcodes", "true"); } @@ -4494,7 +4503,7 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode #ifndef AUTOPLACEMENT_ON_LOAD // bool need_arrange = false; #endif /* AUTOPLACEMENT_ON_LOAD */ - // bool scaled_down = false; + bool scaled_down = false; std::vector obj_idxs; unsigned int obj_count = model.objects.size(); @@ -4531,15 +4540,15 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode const Vec3d ratio = size.cwiseQuotient(bed_size); const double max_ratio = std::max(ratio(0), ratio(1)); if (max_ratio > 10000) { - MessageDialog dlg(q, _L("Your object appears to be too large. It will be scaled down to fit the heat bed automatically."), _L("Object too large"), - wxICON_QUESTION | wxOK); - dlg.ShowModal(); + MessageDialog dlg(q, _L("Your object appears to be too large, Do you want to scale it down to fit the heat bed automatically?"), _L("Object too large"), + wxICON_QUESTION | wxYES); + int answer = dlg.ShowModal(); // the size of the object is too big -> this could lead to overflow when moving to clipper coordinates, // so scale down the mesh object->scale_mesh_after_creation(1. / max_ratio); object->origin_translation = Vec3d::Zero(); object->center_around_origin(); - // scaled_down = true; + scaled_down = true; break; } else if (max_ratio > 10) { @@ -4548,7 +4557,7 @@ std::vector Plater::priv::load_model_objects(const ModelObjectPtrs& mode int answer = dlg.ShowModal(); if (answer == wxID_YES) { instance->set_scaling_factor(instance->get_scaling_factor() / max_ratio); - // scaled_down = true; + scaled_down = true; } } } @@ -5302,7 +5311,7 @@ unsigned int Plater::priv::update_background_process(bool force_validation, bool process_validation_warning(warning); return_state |= UPDATE_BACKGROUND_PROCESS_INVALID; if (printer_technology == ptFFF) { - // const Print* print = background_process.fff_print(); + const Print* print = background_process.fff_print(); //Polygons polygons; //if (print->config().print_sequence == PrintSequence::ByObject) // Print::sequential_print_clearance_valid(*print, &polygons); @@ -6446,6 +6455,7 @@ void Plater::priv::on_select_bed_type(wxCommandEvent &evt) int selection = combo->GetSelection(); std::string bed_type_name = print_config_def.get("curr_bed_type")->enum_values[selection]; + PresetBundle& preset_bundle = *wxGetApp().preset_bundle; DynamicPrintConfig& proj_config = wxGetApp().preset_bundle->project_config; const t_config_enum_values* keys_map = print_config_def.get("curr_bed_type")->enum_keys_map; @@ -8284,7 +8294,7 @@ void Plater::priv::on_create_filament(SimpleEvent &) update_ui_from_settings(); sidebar->update_all_preset_comboboxes(); CreatePresetSuccessfulDialog success_dlg(wxGetApp().mainframe, SuccessType::FILAMENT); - success_dlg.ShowModal(); + int res = success_dlg.ShowModal(); } } @@ -8396,7 +8406,7 @@ void Plater::priv::take_snapshot(const std::string& snapshot_name, const UndoRed // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print config. // BBS: add partplate logic if (this->printer_technology == ptFFF) { - // const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; const DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; const ConfigOptionFloats* tower_x_opt = proj_cfg.option("wipe_tower_x"); const ConfigOptionFloats* tower_y_opt = proj_cfg.option("wipe_tower_y"); @@ -8506,7 +8516,7 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print config. // BBS: add partplate logic if (this->printer_technology == ptFFF) { - // const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; const DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; const ConfigOptionFloats* tower_x_opt = proj_cfg.option("wipe_tower_x"); const ConfigOptionFloats* tower_y_opt = proj_cfg.option("wipe_tower_y"); @@ -8573,7 +8583,7 @@ void Plater::priv::undo_redo_to(std::vector::const_iterator // This is a workaround until we refactor the Wipe Tower position / orientation to live solely inside the Model, not in the Print config. // BBS: add partplate logic if (this->printer_technology == ptFFF) { - // const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; + const DynamicPrintConfig& config = wxGetApp().preset_bundle->prints.get_edited_preset().config; const DynamicPrintConfig& proj_cfg = wxGetApp().preset_bundle->project_config; ConfigOptionFloats* tower_x_opt = const_cast(proj_cfg.option("wipe_tower_x")); ConfigOptionFloats* tower_y_opt = const_cast(proj_cfg.option("wipe_tower_y")); @@ -8754,6 +8764,7 @@ void Plater::priv::record_start_print_preset(std::string action) { } j["record_event"] = action; + NetworkAgent* agent = wxGetApp().getAgent(); } catch (...) { return; @@ -8956,7 +8967,7 @@ void Plater::load_project(wxString const& filename2, // if res is empty no data has been loaded if (!res.empty() && (load_restore || !(strategy & LoadStrategy::Silence))) { - BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << (load_restore ? originfile : filename); + BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << __LINE__ << " call set_project_filename: " << load_restore ? originfile : filename; p->set_project_filename(load_restore ? originfile : filename); if (load_restore && originfile.IsEmpty()) { p->set_project_name(_L("Untitled")); @@ -9038,6 +9049,8 @@ int Plater::save_project(bool saveAs) boost::uintmax_t size = boost::filesystem::file_size(into_path(filename)); j["file_size"] = size; j["file_name"] = std::string(filename.mb_str()); + + NetworkAgent* agent = wxGetApp().getAgent(); } catch (...) {} @@ -9070,7 +9083,7 @@ void Plater::import_model_id(wxString download_info) } } - catch (std::exception&) + catch (const std::exception& error) { //wxString sError = error.what(); } @@ -9111,6 +9124,8 @@ void Plater::import_model_id(wxString download_info) // NetworkAgent* m_agent = Slic3r::GUI::wxGetApp().getAgent(); // if (!m_agent) return; + int res = 0; + unsigned int http_code; std::string http_body; msg = _L("prepare 3mf file..."); @@ -9149,7 +9164,7 @@ void Plater::import_model_id(wxString download_info) if (sFile == filename) is_already_exist = true; } } - catch (std::exception&) + catch (const std::exception& error) { //wxString sError = error.what(); } @@ -9451,21 +9466,21 @@ void Plater::_calib_pa_pattern(const Calib_Params& params) print_config.set_key_value( "travel_jerk", new ConfigOptionFloat(jerk)); } - for (const auto opt : SuggestedConfigCalibPAPattern().float_pairs) { + for (const auto& opt : SuggestedConfigCalibPAPattern().float_pairs) { print_config.set_key_value( opt.first, new ConfigOptionFloat(opt.second) ); } - for (const auto opt : SuggestedConfigCalibPAPattern().nozzle_ratio_pairs) { + for (const auto& opt : SuggestedConfigCalibPAPattern().nozzle_ratio_pairs) { print_config.set_key_value( opt.first, new ConfigOptionFloatOrPercent(nozzle_diameter * opt.second / 100, false) ); } - for (const auto opt : SuggestedConfigCalibPAPattern().int_pairs) { + for (const auto& opt : SuggestedConfigCalibPAPattern().int_pairs) { print_config.set_key_value( opt.first, new ConfigOptionInt(opt.second) @@ -9903,6 +9918,7 @@ void Plater::calib_retraction(const Calib_Params& params) add_model(false, Slic3r::resources_dir() + "/calib/retraction/retraction_tower.stl"); auto print_config = &wxGetApp().preset_bundle->prints.get_edited_preset().config; + auto filament_config = &wxGetApp().preset_bundle->filaments.get_edited_preset().config; auto printer_config = &wxGetApp().preset_bundle->printers.get_edited_preset().config; auto obj = model().objects[0]; @@ -10233,7 +10249,7 @@ bool Plater::preview_zip_archive(const boost::filesystem::path& archive_path) std::replace(name.begin(), name.end(), '\\', '/'); // rename if file exists std::string filename = path.filename().string(); - std::string extension = path.extension().string(); + std::string extension = boost::filesystem::extension(path); std::string just_filename = filename.substr(0, filename.size() - extension.size()); std::string final_filename = just_filename; @@ -10539,6 +10555,7 @@ ProjectDropDialog::ProjectDropDialog(const std::string &filename) auto limit_width = m_fname_f->GetSize().GetWidth() - 2; auto current_width = 0; + auto cut_index = 0; auto fstring = wxString(""); auto bstring = wxString(""); @@ -10546,6 +10563,7 @@ ProjectDropDialog::ProjectDropDialog(const std::string &filename) auto file_name = wxString(filename); for (int x = 0; x < file_name.length(); x++) { current_width += m_fname_s->GetTextExtent(file_name[x]).GetWidth(); + cut_index = x; if (current_width > limit_width) { bstring += file_name[x]; @@ -11448,6 +11466,7 @@ void Plater::export_gcode(bool prefer_removable) if (preset_bundle) { j["gcode_printer_model"] = preset_bundle->printers.get_edited_preset().get_printer_type(preset_bundle); } + NetworkAgent *agent = wxGetApp().getAgent(); } catch (...) {} } @@ -11557,7 +11576,7 @@ TriangleMesh Plater::combine_mesh_fff(const ModelObject& mo, int instance_id, st std::vector csgmesh; csgmesh.reserve(2 * mo.volumes.size()); - csg::model_to_csgmesh(mo, Transform3d::Identity(), std::back_inserter(csgmesh), + bool has_splitable_volume = csg::model_to_csgmesh(mo, Transform3d::Identity(), std::back_inserter(csgmesh), csg::mpartsPositive | csg::mpartsNegative); std::string fail_msg = _u8L("Unable to perform boolean operation on model meshes. " @@ -11637,9 +11656,9 @@ void Plater::export_stl(bool extended, bool selection_only, bool multi_stls) wxBusyCursor wait; const auto& selection = p->get_selection(); + const auto obj_idx = selection.get_object_idx(); #if EXPORT_WITH_BOOLEAN - const auto obj_idx = selection.get_object_idx(); if (selection_only && (obj_idx == -1 || selection.is_wipe_tower())) return; #else @@ -12402,6 +12421,7 @@ void Plater::record_slice_preset(std::string action) } j["record_event"] = action; + NetworkAgent* agent = wxGetApp().getAgent(); } catch (...) { @@ -12584,7 +12604,7 @@ int Plater::send_gcode(int plate_idx, Export3mfProgressFn proFn) p->m_print_job_data._3mf_path = fs::path(plate->get_tmp_gcode_path()); p->m_print_job_data._3mf_path.replace_extension("3mf"); } - catch (std::exception&) { + catch (std::exception& e) { BOOST_LOG_TRIVIAL(error) << "generate 3mf path failed"; return -1; } @@ -12617,7 +12637,7 @@ int Plater::export_config_3mf(int plate_idx, Export3mfProgressFn proFn) try { p->m_print_job_data._3mf_config_path = fs::path(plate->get_temp_config_3mf_path()); } - catch (std::exception&) { + catch (std::exception& e) { BOOST_LOG_TRIVIAL(error) << "generate 3mf path failed"; return -1; } diff --git a/src/slic3r/GUI/Preferences.cpp b/src/slic3r/GUI/Preferences.cpp index 079e228050..612fb86b7e 100644 --- a/src/slic3r/GUI/Preferences.cpp +++ b/src/slic3r/GUI/Preferences.cpp @@ -229,13 +229,13 @@ wxBoxSizer *PreferencesDialog::create_item_language_combobox( } } - /*auto check = [this](bool yes_or_no) { + auto check = [this](bool yes_or_no) { // if (yes_or_no) // return true; int act_btns = ActionButtons::SAVE; return wxGetApp().check_and_keep_current_preset_changes(_L("Switching application language"), _L("Switching application language while some presets are modified."), act_btns); - };*/ + }; m_current_language_selected = combobox->GetSelection(); if (m_current_language_selected >= 0 && m_current_language_selected < vlist.size()) { diff --git a/src/slic3r/GUI/PresetComboBoxes.cpp b/src/slic3r/GUI/PresetComboBoxes.cpp index a710668d71..e634c4fe1a 100644 --- a/src/slic3r/GUI/PresetComboBoxes.cpp +++ b/src/slic3r/GUI/PresetComboBoxes.cpp @@ -401,7 +401,7 @@ void PresetComboBox::add_ams_filaments(std::string selected, bool alias_name) auto color = tray.opt_string("filament_colour", 0u); auto name = tray.opt_string("tray_name", 0u); wxBitmap bmp(*get_extruder_color_icon(color, name, 24, 16)); - Append(get_preset_name(*iter), bmp.ConvertToImage(), &m_first_ams_filament + entry.first); + int item_id = Append(get_preset_name(*iter), bmp.ConvertToImage(), &m_first_ams_filament + entry.first); //validate_selection(id->value == selected); // can not select } m_last_ams_filament = GetCount(); @@ -668,6 +668,7 @@ PlaterPresetComboBox::PlaterPresetComboBox(wxWindow *parent, Preset::Type preset // BBS if (m_type == Preset::TYPE_FILAMENT) { + int em = wxGetApp().em_unit(); clr_picker = new wxBitmapButton(parent, wxID_ANY, {}, wxDefaultPosition, wxSize(FromDIP(20), FromDIP(20)), wxBU_EXACTFIT | wxBU_AUTODRAW | wxBORDER_NONE); clr_picker->SetToolTip(_L("Click to pick filament color")); clr_picker->Bind(wxEVT_BUTTON, [this](wxCommandEvent& e) { @@ -802,6 +803,7 @@ bool PlaterPresetComboBox::switch_to_tab() wxGetApp().params_dialog()->Popup(); tab->restore_last_select_item(); + const Preset* selected_filament_preset = nullptr; if (m_type == Preset::TYPE_FILAMENT) { const std::string& selected_preset = GetString(GetSelection()).ToUTF8().data(); @@ -981,6 +983,7 @@ void PlaterPresetComboBox::update() if (!preset.is_visible || (!preset.is_compatible && !is_selected)) continue; + bool single_bar = false; if (m_type == Preset::TYPE_FILAMENT) { #if 0 @@ -988,7 +991,7 @@ void PlaterPresetComboBox::update() filament_rgb = is_selected ? selected_filament_preset->config.opt_string("filament_colour", 0) : preset.config.opt_string("filament_colour", 0); extruder_rgb = (is_selected && !filament_color.empty()) ? filament_color : filament_rgb; - bool single_bar = filament_rgb == extruder_rgb; + single_bar = filament_rgb == extruder_rgb; bitmap_key += single_bar ? filament_rgb : filament_rgb + extruder_rgb; #endif @@ -1476,6 +1479,8 @@ void GUI::CalibrateFilamentComboBox::update() this->Clear(); invalidate_selection(); + const Preset* selected_filament_preset = nullptr; + m_nonsys_presets.clear(); m_system_presets.clear(); diff --git a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp index f406553b0c..8d272057f8 100644 --- a/src/slic3r/GUI/Printer/PrinterFileSystem.cpp +++ b/src/slic3r/GUI/Printer/PrinterFileSystem.cpp @@ -548,6 +548,7 @@ void PrinterFileSystem::BuildGroups() void PrinterFileSystem::UpdateGroupSelect() { m_group_flags.clear(); + int beg = 0; if (m_group_mode != G_NONE) { auto group = m_group_mode == G_YEAR ? m_group_year : m_group_month; if (m_group_mode == G_YEAR) diff --git a/src/slic3r/GUI/PrinterWebView.cpp b/src/slic3r/GUI/PrinterWebView.cpp index 952cf892de..35870df65b 100644 --- a/src/slic3r/GUI/PrinterWebView.cpp +++ b/src/slic3r/GUI/PrinterWebView.cpp @@ -1,9 +1,11 @@ #include "PrinterWebView.hpp" #include "I18N.hpp" +#include "slic3r/GUI/PrinterWebView.hpp" #include "slic3r/GUI/wxExtensions.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/MainFrame.hpp" +#include "libslic3r_version.h" #include #include diff --git a/src/slic3r/GUI/Project.cpp b/src/slic3r/GUI/Project.cpp index e69ba143db..003d0e4cdd 100644 --- a/src/slic3r/GUI/Project.cpp +++ b/src/slic3r/GUI/Project.cpp @@ -266,7 +266,7 @@ void ProjectPanel::OnScriptMessage(wxWebViewEvent& evt) } } - catch (std::exception&) { + catch (std::exception& e) { // wxMessageBox(e.what(), "json Exception", MB_OK); } } diff --git a/src/slic3r/GUI/RecenterDialog.cpp b/src/slic3r/GUI/RecenterDialog.cpp index 2a923fb181..6947763890 100644 --- a/src/slic3r/GUI/RecenterDialog.cpp +++ b/src/slic3r/GUI/RecenterDialog.cpp @@ -86,6 +86,8 @@ void RecenterDialog::OnPaint(wxPaintEvent& event){ } void RecenterDialog::render(wxDC& dc) { + wxSize size = GetSize(); + dc.SetFont(Label::Body_14); dc.SetTextForeground(text_color); wxPoint pos_start = wxPoint(BORDER, BORDER); diff --git a/src/slic3r/GUI/ReleaseNote.cpp b/src/slic3r/GUI/ReleaseNote.cpp index 5937ff9d37..617397f32f 100644 --- a/src/slic3r/GUI/ReleaseNote.cpp +++ b/src/slic3r/GUI/ReleaseNote.cpp @@ -1375,6 +1375,7 @@ wxString ConfirmBeforeSendDialog::format_text(wxString str, int warp) Label st (this, str); wxString out_txt = str; wxString count_txt = ""; + int new_line_pos = 0; for (int i = 0; i < str.length(); i++) { auto text_size = st.GetTextExtent(count_txt); diff --git a/src/slic3r/GUI/RemovableDriveManager.cpp b/src/slic3r/GUI/RemovableDriveManager.cpp index a0a68eb05b..a26e13448d 100644 --- a/src/slic3r/GUI/RemovableDriveManager.cpp +++ b/src/slic3r/GUI/RemovableDriveManager.cpp @@ -6,9 +6,13 @@ #include #if _WIN32 +#include #include #include #include + +#include + #else // unix, linux & OSX includes #include diff --git a/src/slic3r/GUI/Search.cpp b/src/slic3r/GUI/Search.cpp index 05958f7ac8..c8a661769f 100644 --- a/src/slic3r/GUI/Search.cpp +++ b/src/slic3r/GUI/Search.cpp @@ -435,6 +435,8 @@ void SearchItem::OnPaint(wxPaintEvent &event) auto bold_pair = std::vector>(); + auto index = 0; + auto b_first_list = std::vector(); auto b_second_list = std::vector(); @@ -813,9 +815,9 @@ void SearchDialog::OnCheck(wxCommandEvent &event) void SearchDialog::OnMotion(wxMouseEvent &event) { - // wxDataViewItem item; - // wxDataViewColumn *col; - // wxWindow * win = this; + wxDataViewItem item; + wxDataViewColumn *col; + wxWindow * win = this; // search_list->HitTest(wxGetMousePosition() - win->GetScreenPosition(), item, col); // search_list->Select(item); @@ -864,7 +866,7 @@ void SearchDialog::msw_rescale() SearchListModel::SearchListModel(wxWindow *parent) : wxDataViewVirtualListModel(0) { int icon_id = 0; - for (const std::string &icon : {"cog", "printer", "printer", "spool", "blank_16"}) m_icon[icon_id++] = ScalableBitmap(parent, icon); + for (const std::string icon : {"cog", "printer", "printer", "spool", "blank_16"}) m_icon[icon_id++] = ScalableBitmap(parent, icon); } void SearchListModel::Clear() diff --git a/src/slic3r/GUI/SelectMachine.cpp b/src/slic3r/GUI/SelectMachine.cpp index f641769b45..e6b2ac81c5 100644 --- a/src/slic3r/GUI/SelectMachine.cpp +++ b/src/slic3r/GUI/SelectMachine.cpp @@ -421,7 +421,7 @@ SelectMachinePopup::SelectMachinePopup(wxWindow *parent) m_refresh_timer = new wxTimer(); m_refresh_timer->SetOwner(this); Bind(EVT_UPDATE_USER_MACHINE_LIST, &SelectMachinePopup::update_machine_list, this); - Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); + Bind(wxEVT_TIMER, &SelectMachinePopup::on_timer, this); Bind(EVT_DISSMISS_MACHINE_LIST, &SelectMachinePopup::on_dissmiss_win, this); } @@ -459,7 +459,7 @@ void SelectMachinePopup::Popup(wxWindow *WXUNUSED(focus)) } } - on_timer(); + wxPostEvent(this, wxTimerEvent()); PopupWindow::Popup(); } @@ -529,7 +529,7 @@ wxWindow *SelectMachinePopup::create_title_panel(wxString text) return m_panel_title_own; } -void SelectMachinePopup::on_timer() +void SelectMachinePopup::on_timer(wxTimerEvent &event) { BOOST_LOG_TRIVIAL(trace) << "SelectMachinePopup on_timer"; wxGetApp().reset_to_active(); @@ -933,6 +933,7 @@ wxString SelectMachineDialog::format_text(wxString &m_msg) wxString out_txt = m_msg; wxString count_txt = ""; + int new_line_pos = 0; for (int i = 0; i < m_msg.length(); i++) { auto text_size = m_statictext_ams_msg->GetTextExtent(count_txt); @@ -2460,6 +2461,9 @@ void SelectMachineDialog::on_ok_btn(wxCommandEvent &event) //check blacklist for (auto i = 0; i < m_ams_mapping_result.size(); i++) { + + auto tid = m_ams_mapping_result[i].tray_id; + std::string filament_type = boost::to_upper_copy(m_ams_mapping_result[i].type); std::string filament_brand; @@ -3315,7 +3319,7 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) if (m_list[i]->is_lan_mode_printer() && !m_list[i]->has_access_right()) { ConnectPrinterDialog dlg(wxGetApp().mainframe, wxID_ANY, _L("Input access code")); dlg.set_machine_object(m_list[i]); - dlg.ShowModal(); + auto res = dlg.ShowModal(); m_printer_last_select = ""; m_comboBox_printer->SetSelection(-1); m_comboBox_printer->Refresh(); @@ -3365,6 +3369,7 @@ void SelectMachineDialog::on_selection_changed(wxCommandEvent &event) void SelectMachineDialog::update_flow_cali_check(MachineObject* obj) { + auto bed_type = m_plater->get_partplate_list().get_curr_plate()->get_bed_type(true); auto show_cali_tips = true; if (obj && obj->get_printer_arch() == PrinterArch::ARCH_I3) { show_cali_tips = false; } @@ -3701,6 +3706,7 @@ void SelectMachineDialog::reset_ams_material() { MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { + int id = iter->first; Material* item = iter->second; MaterialItem* m = item->item; wxString ams_id = "-"; @@ -3982,6 +3988,7 @@ void SelectMachineDialog::reset_and_sync_ams_list() BitmapCache bmcache; MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { + int id = iter->first; Material *item = iter->second; item->item->Destroy(); delete item; @@ -4008,6 +4015,7 @@ void SelectMachineDialog::reset_and_sync_ams_list() item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent &e) { MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { + int id = iter->first; Material * item = iter->second; MaterialItem *m = item->item; m->on_normal(); @@ -4017,6 +4025,9 @@ void SelectMachineDialog::reset_and_sync_ams_list() m_current_filament_id = extruder; item->on_selected(); + auto mouse_pos = ClientToScreen(e.GetPosition()); + wxPoint rect = item->ClientToScreen(wxPoint(0, 0)); + // update ams data DeviceManager *dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev_manager) return; @@ -4236,6 +4247,7 @@ void SelectMachineDialog::unify_deal_thumbnail_data(ThumbnailData &input_data, T MaterialHash::iterator iter = m_materialList.begin(); bool is_connect_printer = true; while (iter != m_materialList.end()) { + int id = iter->first; Material * item = iter->second; MaterialItem *m = item->item; if (m->m_ams_name == "-") { @@ -4347,10 +4359,10 @@ void SelectMachineDialog::set_default_normal(const ThumbnailData &data) MachineObject* obj_ = dev_manager->get_selected_machine(); update_flow_cali_check(obj_); -#ifdef __WINDOWS__ wxSize screenSize = wxGetDisplaySize(); auto dialogSize = this->GetSize(); +#ifdef __WINDOWS__ if (screenSize.GetHeight() < dialogSize.GetHeight()) { m_need_adaptation_screen = true; m_scrollable_view->SetScrollRate(0, 5); @@ -4411,6 +4423,7 @@ void SelectMachineDialog::set_default_from_sdcard() //init MaterialItem MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { + int id = iter->first; Material* item = iter->second; item->item->Destroy(); delete item; @@ -4433,6 +4446,7 @@ void SelectMachineDialog::set_default_from_sdcard() item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, fo](wxMouseEvent& e) { MaterialHash::iterator iter = m_materialList.begin(); while (iter != m_materialList.end()) { + int id = iter->first; Material* item = iter->second; MaterialItem* m = item->item; m->on_normal(); @@ -4445,6 +4459,9 @@ void SelectMachineDialog::set_default_from_sdcard() catch (...) {} item->on_selected(); + + auto mouse_pos = ClientToScreen(e.GetPosition()); + wxPoint rect = item->ClientToScreen(wxPoint(0, 0)); // update ams data DeviceManager* dev_manager = Slic3r::GUI::wxGetApp().getDeviceManager(); if (!dev_manager) return; @@ -4468,7 +4485,7 @@ void SelectMachineDialog::set_default_from_sdcard() m_mapping_popup.Popup(); } } - }); + }); Material* material_item = new Material(); material_item->id = fo.id; @@ -4495,9 +4512,10 @@ void SelectMachineDialog::set_default_from_sdcard() set_flow_calibration_state(true); -#ifdef __WINDOWS__ wxSize screenSize = wxGetDisplaySize(); auto dialogSize = this->GetSize(); + +#ifdef __WINDOWS__ if (screenSize.GetHeight() < dialogSize.GetHeight()) { m_need_adaptation_screen = true; m_scrollable_view->SetScrollRate(0, 5); diff --git a/src/slic3r/GUI/SelectMachine.hpp b/src/slic3r/GUI/SelectMachine.hpp index dadc3be613..16da5e05d5 100644 --- a/src/slic3r/GUI/SelectMachine.hpp +++ b/src/slic3r/GUI/SelectMachine.hpp @@ -278,7 +278,7 @@ private: private: void OnLeftUp(wxMouseEvent &event); - void on_timer(); + void on_timer(wxTimerEvent &event); void update_other_devices(); void update_user_devices(); diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index 9d42a624c6..187ec03eb7 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -1110,6 +1110,7 @@ void Selection::move_to_center(const Vec3d& displacement, bool local) if (!m_valid) return; + EMode translation_type = m_mode; //BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << boost::format(": %1%, displacement {%2%, %3%, %4%}") % __LINE__ % displacement(X) % displacement(Y) % displacement(Z); set_caches(); @@ -1130,6 +1131,7 @@ void Selection::move_to_center(const Vec3d& displacement, bool local) else { const Vec3d local_displacement = (m_cache.volumes_data[i].get_instance_rotation_matrix() * m_cache.volumes_data[i].get_instance_scale_matrix() * m_cache.volumes_data[i].get_instance_mirror_matrix()).inverse() * displacement; v.set_volume_offset(m_cache.volumes_data[i].get_volume_position() + local_displacement); + translation_type = Volume; } } } @@ -2183,8 +2185,7 @@ void Selection::update_type() obj_it->second.insert(inst_idx); } - // BBL removed functionality below - // bool requires_disable = false; + bool requires_disable = false; if (!m_valid) m_type = Invalid; @@ -2200,7 +2201,7 @@ void Selection::update_type() else if (first->is_modifier) { m_type = SingleModifier; - // requires_disable = true; + requires_disable = true; } else { @@ -2222,7 +2223,7 @@ void Selection::update_type() else { m_type = SingleVolume; - // requires_disable = true; + requires_disable = true; } } } @@ -2270,7 +2271,7 @@ void Selection::update_type() else if (modifiers_count == (unsigned int)m_list.size()) m_type = MultipleModifier; - // requires_disable = true; + requires_disable = true; } } else if ((selected_instances_count > 1) && (selected_instances_count * model_volumes_count + sla_volumes_count == (unsigned int)m_list.size())) diff --git a/src/slic3r/GUI/SendMultiMachinePage.cpp b/src/slic3r/GUI/SendMultiMachinePage.cpp index 036409f4d9..bf766d78d0 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.cpp +++ b/src/slic3r/GUI/SendMultiMachinePage.cpp @@ -300,7 +300,7 @@ SendMultiMachinePage::SendMultiMachinePage(Plater* plater) m_main_scroll->Bind(wxEVT_LEFT_DOWN, [this](auto& e) {check_fcous_state(this); e.Skip(); }); init_timer(); - Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); + Bind(wxEVT_TIMER, &SendMultiMachinePage::on_timer, this); wxGetApp().UpdateDlgDarkUI(this); } @@ -451,6 +451,8 @@ BBL::PrintParams SendMultiMachinePage::request_params(MachineObject* obj) auto use_ams = false; AmsRadioSelectorList::Node* node = m_radio_group.GetFirst(); + auto groupid = 0; + while (node) { AmsRadioSelector* rs = node->GetData(); @@ -470,11 +472,13 @@ BBL::PrintParams SendMultiMachinePage::request_params(MachineObject* obj) PrintPrepareData job_data; m_plater->get_print_job_data(&job_data); - - std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; - auto check_access_code_path = temp_file.c_str(); - BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; - job_data._temp_path = fs::path(check_access_code_path); + + if (&job_data) { + std::string temp_file = Slic3r::resources_dir() + "/check_access_code.txt"; + auto check_access_code_path = temp_file.c_str(); + BOOST_LOG_TRIVIAL(trace) << "sned_job: check_access_code_path = " << check_access_code_path; + job_data._temp_path = fs::path(check_access_code_path); + } int curr_plate_idx; if (job_data.plate_idx >= 0) @@ -635,7 +639,7 @@ void SendMultiMachinePage::on_send(wxCommandEvent& event) int result = m_plater->send_gcode(m_print_plate_idx, [this](int export_stage, int current, int total, bool& cancel) { if (m_is_canceled) return; - // bool cancelled = false; + bool cancelled = false; wxString msg = _L("Preparing print job"); //m_status_bar->update_status(msg, cancelled, 10, true); //m_export_3mf_cancel = cancel = cancelled; @@ -734,7 +738,7 @@ bool SendMultiMachinePage::Show(bool show) m_refresh_timer->Stop(); m_refresh_timer->SetOwner(this); m_refresh_timer->Start(4000); - on_timer(); + wxPostEvent(this, wxTimerEvent()); } else { m_refresh_timer->Stop(); @@ -931,6 +935,7 @@ void SendMultiMachinePage::on_set_finish_mapping(wxCommandEvent& evt) if (selection_data_arr.size() == 6) { auto ams_colour = wxColour(wxAtoi(selection_data_arr[0]), wxAtoi(selection_data_arr[1]), wxAtoi(selection_data_arr[2]), wxAtoi(selection_data_arr[3])); + int old_filament_id = (int)wxAtoi(selection_data_arr[5]); int ctype = 0; std::vector material_cols; @@ -1142,7 +1147,7 @@ wxPanel* SendMultiMachinePage::create_page() e.Skip(); }); - m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); + m_printer_name = new Button(m_table_head_panel, _L("Device Name"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); m_printer_name->SetBackgroundColor(head_bg); m_printer_name->SetCornerRadius(0); m_printer_name->SetFont(TABLE_HEAD_FONT); @@ -1164,7 +1169,7 @@ wxPanel* SendMultiMachinePage::create_page() m_table_head_sizer->Add( 0, 0, 0, wxLEFT, FromDIP(10) ); m_table_head_sizer->Add(m_printer_name, 0, wxALIGN_CENTER_VERTICAL, 0); - m_device_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE); + m_device_status = new Button(m_table_head_panel, _L("Device Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE); m_device_status->SetBackgroundColor(head_bg); m_device_status->SetFont(TABLE_HEAD_FONT); m_device_status->SetCornerRadius(0); @@ -1207,7 +1212,7 @@ wxPanel* SendMultiMachinePage::create_page() //m_table_head_sizer->Add(m_task_status, 0, wxALIGN_CENTER_VERTICAL, 0); - m_ams = new Button(m_table_head_panel, _L("Ams Status"), "toolbar_double_directional_arrow", wxNO_BORDER, MM_ICON_SIZE, false); + m_ams = new Button(m_table_head_panel, _L("Ams Status"), "toolbar_double_directional_arrow", wxNO_BORDER, ICON_SIZE, false); m_ams->SetBackgroundColor(head_bg); m_ams->SetCornerRadius(0); m_ams->SetFont(TABLE_HEAD_FONT); @@ -1228,7 +1233,7 @@ wxPanel* SendMultiMachinePage::create_page() }); m_table_head_sizer->Add(m_ams, 0, wxALIGN_CENTER_VERTICAL, 0); - m_refresh_button = new Button(m_table_head_panel, "", "mall_control_refresh", wxNO_BORDER, MM_ICON_SIZE, false); + m_refresh_button = new Button(m_table_head_panel, "", "mall_control_refresh", wxNO_BORDER, ICON_SIZE, false); m_refresh_button->SetBackgroundColor(head_bg); m_refresh_button->SetCornerRadius(0); m_refresh_button->SetFont(TABLE_HEAD_FONT); @@ -1380,6 +1385,7 @@ void SendMultiMachinePage::sync_ams_list() BitmapCache bmcache; MaterialHash::iterator iter = m_material_list.begin(); while (iter != m_material_list.end()) { + int id = iter->first; Material* item = iter->second; item->item->Destroy(); delete item; @@ -1408,6 +1414,7 @@ void SendMultiMachinePage::sync_ams_list() item->Bind(wxEVT_LEFT_DOWN, [this, item, materials, extruder](wxMouseEvent& e) { MaterialHash::iterator iter = m_material_list.begin(); while (iter != m_material_list.end()) { + int id = iter->first; Material* item = iter->second; MaterialItem* m = item->item; m->on_normal(); @@ -1417,6 +1424,9 @@ void SendMultiMachinePage::sync_ams_list() m_current_filament_id = extruder; item->on_selected(); + auto mouse_pos = ClientToScreen(e.GetPosition()); + wxPoint rect = item->ClientToScreen(wxPoint(0, 0)); + // update ams data if (get_value_radio("use_ams")) { if (m_mapping_popup->IsShown()) return; @@ -1646,7 +1656,7 @@ void SendMultiMachinePage::init_timer() m_refresh_timer = new wxTimer(); } -void SendMultiMachinePage::on_timer() +void SendMultiMachinePage::on_timer(wxTimerEvent& event) { for (auto it = m_device_items.begin(); it != m_device_items.end(); it++) { it->second->sync_state(); diff --git a/src/slic3r/GUI/SendMultiMachinePage.hpp b/src/slic3r/GUI/SendMultiMachinePage.hpp index c6935f2d64..58014f065c 100644 --- a/src/slic3r/GUI/SendMultiMachinePage.hpp +++ b/src/slic3r/GUI/SendMultiMachinePage.hpp @@ -194,7 +194,7 @@ protected: void on_set_finish_mapping(wxCommandEvent& evt); void on_rename_click(wxCommandEvent& event); - void on_timer(); + void on_timer(wxTimerEvent& event); void init_timer(); private: diff --git a/src/slic3r/GUI/SendSystemInfoDialog.cpp b/src/slic3r/GUI/SendSystemInfoDialog.cpp index 3740cbb690..73de9101c4 100644 --- a/src/slic3r/GUI/SendSystemInfoDialog.cpp +++ b/src/slic3r/GUI/SendSystemInfoDialog.cpp @@ -443,7 +443,7 @@ static std::string generate_system_info_json() pt::ptree hw_node; { - hw_node.put("ArchName", wxPlatformInfo::Get().GetBitnessName()); + hw_node.put("ArchName", wxPlatformInfo::Get().GetArchName()); size_t num = std::round(Slic3r::total_physical_memory()/107374100.); hw_node.put("RAM_GiB", std::to_string(num / 10) + "." + std::to_string(num % 10)); } diff --git a/src/slic3r/GUI/SendToPrinter.cpp b/src/slic3r/GUI/SendToPrinter.cpp index 51b6797a5f..7d0fb5663c 100644 --- a/src/slic3r/GUI/SendToPrinter.cpp +++ b/src/slic3r/GUI/SendToPrinter.cpp @@ -59,6 +59,7 @@ wxString SendToPrinterDialog::format_text(wxString &m_msg) wxString out_txt = m_msg; wxString count_txt = ""; + int new_line_pos = 0; for (int i = 0; i < m_msg.length(); i++) { auto text_size = m_statictext_printer_msg->GetTextExtent(count_txt); @@ -1337,6 +1338,11 @@ void SendToPrinterDialog::set_default() Layout(); Fit(); + + wxSize screenSize = wxGetDisplaySize(); + auto dialogSize = this->GetSize(); + + // basic info auto aprint_stats = m_plater->get_partplate_list().get_current_fff_print().print_statistics(); wxString time; diff --git a/src/slic3r/GUI/SlicingProgressNotification.cpp b/src/slic3r/GUI/SlicingProgressNotification.cpp index 219950ceff..bedcbc2eb7 100644 --- a/src/slic3r/GUI/SlicingProgressNotification.cpp +++ b/src/slic3r/GUI/SlicingProgressNotification.cpp @@ -224,8 +224,8 @@ void NotificationManager::SlicingProgressNotification::render(GLCanvas3D& canvas const float progress_panel_width = (m_window_width - 2 * progress_child_window_padding.x); const float progress_panel_height = (58.0f * scale); const float dailytips_panel_width = (m_window_width - 2 * dailytips_child_window_padding.x); - // const float gcodeviewer_height = wxGetApp().plater()->get_preview_canvas3D()->get_gcode_viewer().get_legend_height(); - // const float dailytips_panel_height = std::min(380.0f * scale, std::max(90.0f, (cnv_size.get_height() - gcodeviewer_height - progress_panel_height - dailytips_child_window_padding.y - initial_y - m_line_height * 4))); + const float gcodeviewer_height = wxGetApp().plater()->get_preview_canvas3D()->get_gcode_viewer().get_legend_height(); + //const float dailytips_panel_height = std::min(380.0f * scale, std::max(90.0f, (cnv_size.get_height() - gcodeviewer_height - progress_panel_height - dailytips_child_window_padding.y - initial_y - m_line_height * 4))); const float dailytips_panel_height = 125.0f * scale; float right_gap = right_margin + (move_from_overlay ? overlay_width + m_line_height * 5 : 0); diff --git a/src/slic3r/GUI/StatusPanel.cpp b/src/slic3r/GUI/StatusPanel.cpp index d4b1148df3..dfef462a7e 100644 --- a/src/slic3r/GUI/StatusPanel.cpp +++ b/src/slic3r/GUI/StatusPanel.cpp @@ -291,6 +291,7 @@ void PrintingTaskPanel::create_panel(wxWindow* parent) }); m_button_pause_resume->Bind(wxEVT_LEAVE_WINDOW, [this](auto &e) { + auto buf = m_button_pause_resume->GetClientData(); if (m_button_pause_resume->GetToolTipText() == _L("Pause")) { m_button_pause_resume->SetBitmap_("print_control_pause"); } @@ -2527,7 +2528,7 @@ void StatusPanel::update_misc_ctrl(MachineObject *obj) } bool light_on = obj->chamber_light != MachineObject::LIGHT_EFFECT::LIGHT_EFFECT_OFF; - BOOST_LOG_TRIVIAL(trace) << "light: " << (light_on ? "on" : "off"); + BOOST_LOG_TRIVIAL(trace) << "light: " << light_on ? "on" : "off"; if (m_switch_lamp_timeout > 0) m_switch_lamp_timeout--; else { @@ -2591,6 +2592,7 @@ void StatusPanel::update_ams(MachineObject *obj) } bool is_support_virtual_tray = obj->ams_support_virtual_tray; + bool is_support_filament_backup = obj->is_support_filament_backup; AMSModel ams_mode = AMSModel::GENERIC_AMS; if (obj) { @@ -2661,6 +2663,9 @@ void StatusPanel::update_ams(MachineObject *obj) std::string curr_ams_id = m_ams_control->GetCurentAms(); std::string curr_can_id = m_ams_control->GetCurrentCan(curr_ams_id); + bool is_vt_tray = false; + if (obj->m_tray_tar == std::to_string(VIRTUAL_TRAY_ID)) + is_vt_tray = true; // set segment 1, 2 if (obj->m_tray_now == std::to_string(VIRTUAL_TRAY_ID) ) { @@ -4841,7 +4846,7 @@ wxBoxSizer *ScoreDialog::get_photo_btn_sizer() { it = m_selected_image_list.erase(it); } m_image_url_paths.clear(); - for (const std::pair &bitmap : m_image) { + for (const auto& bitmap : m_image) { if (bitmap.second.is_uploaded) { if (!bitmap.second.img_url_paths.empty()) { m_image_url_paths.push_back(bitmap.second.img_url_paths); @@ -4902,6 +4907,7 @@ wxBoxSizer *ScoreDialog::get_button_sizer() if (m_upload_status_code == StatusCode::UPLOAD_PROGRESS) { int need_upload_nums = need_upload_images.size(); int upload_nums = 0; + int upload_failed_nums = 0; ProgressDialog *progress_dialog = new ProgressDialog(_L("Upload Pictrues"), _L("Number of images successfully uploaded") + ": " + std::to_string(upload_nums) + "/" + std::to_string(need_upload_nums), need_upload_nums, this); for (std::set>::iterator it = need_upload_images.begin(); it != need_upload_images.end();) { std::pair need_upload = *it; diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index 3bcb4eda28..f529b09c13 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -266,7 +266,7 @@ void Tab::create_preset_tab() set_tooltips_text(); add_scaled_button(m_top_panel, &m_undo_btn, m_bmp_white_bullet.name()); - add_scaled_button(m_top_panel, &m_undo_to_sys_btn, m_bmp_white_bullet.name()); + //add_scaled_button(m_top_panel, &m_undo_to_sys_btn, m_bmp_white_bullet.name()); add_scaled_button(m_top_panel, &m_btn_search, "search"); m_btn_search->SetToolTip(_L("Search in preset")); @@ -347,7 +347,7 @@ void Tab::create_preset_tab() }); m_undo_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent) { on_roll_back_value(); })); - m_undo_to_sys_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent) { on_roll_back_value(true); })); + //m_undo_to_sys_btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent) { on_roll_back_value(true); })); /* m_search_btn->Bind(wxEVT_BUTTON, [](wxCommandEvent) { wxGetApp().plater()->search(false); });*/ // Colors for ui "decoration" @@ -1034,10 +1034,10 @@ void Tab::update_undo_buttons() { // BBS: restore all pages in preset m_undo_btn-> SetBitmap_(m_presets->get_edited_preset().is_dirty ? m_bmp_value_revert: m_bmp_white_bullet); - m_undo_to_sys_btn-> SetBitmap_(m_is_nonsys_values ? *m_bmp_non_system : m_bmp_value_lock); + //m_undo_to_sys_btn-> SetBitmap_(m_is_nonsys_values ? *m_bmp_non_system : m_bmp_value_lock); m_undo_btn->SetToolTip(m_presets->get_edited_preset().is_dirty ? _L("Click to reset all settings to the last saved preset.") : m_ttg_white_bullet); - m_undo_to_sys_btn->SetToolTip(m_is_nonsys_values ? *m_ttg_non_system : m_ttg_value_lock); + //m_undo_to_sys_btn->SetToolTip(m_is_nonsys_values ? *m_ttg_non_system : m_ttg_value_lock); } void Tab::on_roll_back_value(const bool to_sys /*= true*/) @@ -1222,7 +1222,7 @@ void Tab::msw_rescale() // recreate and set new ImageList for tree_ctrl m_icons->RemoveAll(); m_icons = new wxImageList(m_scaled_icons_list.front().bmp().GetWidth(), m_scaled_icons_list.front().bmp().GetHeight(), false); - // for (ScalableBitmap& bmp : m_scaled_icons_list) + for (ScalableBitmap& bmp : m_scaled_icons_list) //m_icons->Add(bmp.bmp()); m_tabctrl->AssignImageList(m_icons); @@ -1256,7 +1256,7 @@ void Tab::sys_color_changed() // recreate and set new ImageList for tree_ctrl m_icons->RemoveAll(); m_icons = new wxImageList(m_scaled_icons_list.front().bmp().GetWidth(), m_scaled_icons_list.front().bmp().GetHeight(), false); - // for (ScalableBitmap& bmp : m_scaled_icons_list) + for (ScalableBitmap& bmp : m_scaled_icons_list) //m_icons->Add(bmp.bmp()); m_tabctrl->AssignImageList(m_icons); @@ -1617,6 +1617,19 @@ void Tab::on_value_change(const std::string& opt_key, const boost::any& value) } } + + // -1 means caculate all + auto update_flush_volume = [](int idx = -1) { + if (idx < 0) { + size_t filament_size = wxGetApp().plater()->get_extruder_colors_from_plater_config().size(); + for (size_t i = 0; i < filament_size; ++i) + wxGetApp().plater()->sidebar().auto_calc_flushing_volumes(i); + } + else + wxGetApp().plater()->sidebar().auto_calc_flushing_volumes(idx); + }; + + string opt_key_without_idx = opt_key.substr(0, opt_key.find('#')); if (opt_key_without_idx == "long_retractions_when_cut") { @@ -2601,6 +2614,8 @@ void TabPrintModel::update_model_config() // Reset m_config manually because there's no corresponding config in m_parent_tab->m_config for (auto plate_item : m_object_configs) { const DynamicPrintConfig& plate_config = plate_item.second->get(); + BedType plate_bed_type = (BedType)0; + PrintSequence plate_print_seq = (PrintSequence)0; if (!plate_config.has("curr_bed_type")) { // same as global DynamicConfig& global_cfg = wxGetApp().preset_bundle->project_config; @@ -2911,6 +2926,7 @@ void TabPrintPlate::on_value_change(const std::string& opt_key, const boost::any void TabPrintPlate::notify_changed(ObjectBase* object) { + auto plate = dynamic_cast(object); auto objects_list = wxGetApp().obj_list(); wxDataViewItemArray items; objects_list->GetSelections(items); @@ -3437,8 +3453,6 @@ void TabFilament::build() optgroup->append_single_option_line("filament_loading_speed", "semm"); optgroup->append_single_option_line("filament_unloading_speed_start", "semm"); optgroup->append_single_option_line("filament_unloading_speed", "semm"); - optgroup->append_single_option_line("filament_load_time", "semm"); - optgroup->append_single_option_line("filament_unload_time", "semm"); optgroup->append_single_option_line("filament_toolchange_delay", "semm"); optgroup->append_single_option_line("filament_cooling_moves", "semm"); optgroup->append_single_option_line("filament_cooling_initial_speed", "semm"); @@ -3581,10 +3595,9 @@ void TabFilament::toggle_options() if (m_active_page->title() == L("Multimaterial")) { // Orca: hide specific settings for BBL printers - for (auto el : - {"filament_minimal_purge_on_wipe_tower", "filament_loading_speed_start", "filament_loading_speed", - "filament_unloading_speed_start", "filament_unloading_speed", "filament_load_time", "filament_unload_time", - "filament_toolchange_delay", "filament_cooling_moves", "filament_cooling_initial_speed", "filament_cooling_final_speed"}) + for (auto el : {"filament_minimal_purge_on_wipe_tower", "filament_loading_speed_start", "filament_loading_speed", + "filament_unloading_speed_start", "filament_unloading_speed", "filament_toolchange_delay", "filament_cooling_moves", + "filament_cooling_initial_speed", "filament_cooling_final_speed"}) toggle_option(el, !is_BBL_printer); } } @@ -3741,8 +3754,6 @@ void TabPrinter::build_fff() optgroup->append_single_option_line("use_relative_e_distances"); optgroup->append_single_option_line("use_firmware_retraction"); // optgroup->append_single_option_line("spaghetti_detector"); - optgroup->append_single_option_line("machine_load_filament_time"); - optgroup->append_single_option_line("machine_unload_filament_time"); optgroup->append_single_option_line("time_cost"); optgroup = page->new_optgroup(L("Cooling Fan"), "param_cooling_fan"); @@ -4197,6 +4208,11 @@ if (is_marlin_flavor) optgroup->append_single_option_line("parking_pos_retraction", "semm"); optgroup->append_single_option_line("extra_loading_move", "semm"); optgroup->append_single_option_line("high_current_on_filament_swap", "semm"); + + optgroup = page->new_optgroup(L("Advanced"), L"param_advanced"); + optgroup->append_single_option_line("machine_load_filament_time"); + optgroup->append_single_option_line("machine_unload_filament_time"); + optgroup->append_single_option_line("machine_tool_change_time"); m_pages.insert(m_pages.end() - n_after_single_extruder_MM, page); } @@ -4443,9 +4459,8 @@ void TabPrinter::toggle_options() if (m_active_page->title() == L("Basic information")) { // SoftFever: hide BBL specific settings - for (auto el : - {"scan_first_layer", "machine_load_filament_time", "machine_unload_filament_time", "bbl_calib_mark_logo", "bbl_use_printhost"}) - toggle_line(el, is_BBL_printer); + for (auto el : {"scan_first_layer", "bbl_calib_mark_logo", "bbl_use_printhost"}) + toggle_line(el, is_BBL_printer); // SoftFever: hide non-BBL settings for (auto el : {"use_firmware_retraction", "use_relative_e_distances", "support_multi_bed_types", "pellet_modded_printer"}) @@ -4755,14 +4770,14 @@ void Tab::rebuild_page_tree() if (sel_item == m_last_select_item) m_last_select_item = item; else - m_last_select_item = 0; + m_last_select_item = NULL; // allow activate page before selection of a page_tree item m_disable_tree_sel_changed_event = false; //BBS: GUI refactor if (item >= 0) { - update_current_page_in_background(item); + bool ret = update_current_page_in_background(item); //if m_active_page is changed in update_current_page_in_background //will just update the selected item of the treectrl if (m_parent->is_active_and_shown_tab(this)) // FIX: modify state not update @@ -5582,6 +5597,7 @@ void Tab::delete_preset() if (m_presets->get_preset_base(current_preset) == ¤t_preset) { //root preset is_base_preset = true; if (current_preset.type == Preset::Type::TYPE_PRINTER && !current_preset.is_system) { //Customize third-party printers + Preset ¤t_preset = m_presets->get_selected_preset(); int filament_preset_num = 0; int process_preset_num = 0; for (const Preset &preset : m_preset_bundle->filaments.get_presets()) { @@ -5845,6 +5861,7 @@ wxSizer* TabPrinter::create_bed_shape_widget(wxWindow* parent) sizer->Add(btn, 0, wxALIGN_CENTER_VERTICAL); btn->Bind(wxEVT_BUTTON, ([this](wxCommandEvent e) { + bool is_configed_by_BBL = PresetUtils::system_printer_bed_model(m_preset_bundle->printers.get_edited_preset()).size() > 0; BedShapeDialog dlg(this); dlg.build_dialog(*m_config->option("printable_area"), *m_config->option("bed_custom_texture"), diff --git a/src/slic3r/GUI/Tabbook.hpp b/src/slic3r/GUI/Tabbook.hpp index 61eee685b8..7dd19389de 100644 --- a/src/slic3r/GUI/Tabbook.hpp +++ b/src/slic3r/GUI/Tabbook.hpp @@ -198,6 +198,8 @@ public: // check that only the selected page is visible and others are hidden: for (size_t page = 0; page < m_pages.size(); page++) { + wxWindow* win_a = GetPage(page); + wxWindow* win_b = GetPage(n); if (page != n && GetPage(page) != GetPage(n)) { m_pages[page]->Hide(); } diff --git a/src/slic3r/GUI/UnsavedChangesDialog.cpp b/src/slic3r/GUI/UnsavedChangesDialog.cpp index 1b46e2b7dd..b47f3c0389 100644 --- a/src/slic3r/GUI/UnsavedChangesDialog.cpp +++ b/src/slic3r/GUI/UnsavedChangesDialog.cpp @@ -1654,7 +1654,7 @@ void UnsavedChangesDialog::update_tree(Preset::Type type, PresetCollection* pres const DynamicPrintConfig& new_config = presets->get_edited_preset().config; type = presets->type(); - // const std::map& category_icon_map = wxGetApp().get_tab(type)->get_category_icon_map(); + const std::map& category_icon_map = wxGetApp().get_tab(type)->get_category_icon_map(); //m_tree->model->AddPreset(type, from_u8(presets->get_edited_preset().name), old_pt); diff --git a/src/slic3r/GUI/UpdateDialogs.cpp b/src/slic3r/GUI/UpdateDialogs.cpp index deba5a7a97..d78136a094 100644 --- a/src/slic3r/GUI/UpdateDialogs.cpp +++ b/src/slic3r/GUI/UpdateDialogs.cpp @@ -24,11 +24,12 @@ namespace Slic3r { namespace GUI { -// Orca: Replace static char* with macro defs -// currently disabled until needed -// #define URL_CHANGELOG "%1%" -// #define URL_DOWNLOAD "%1%" -// #define URL_DEV "%1%" + +static const char* URL_CHANGELOG = "%1%"; +static const char* URL_DOWNLOAD = "%1%"; +static const char* URL_DEV = "%1%"; + +static const std::string CONFIG_UPDATE_WIKI_URL(""); // MsgUpdateSlic3r diff --git a/src/slic3r/GUI/UpgradePanel.cpp b/src/slic3r/GUI/UpgradePanel.cpp index e2376326e4..e9384c385b 100644 --- a/src/slic3r/GUI/UpgradePanel.cpp +++ b/src/slic3r/GUI/UpgradePanel.cpp @@ -670,6 +670,8 @@ void MachineInfoPanel::update_ams_ext(MachineObject *obj) show_ams(true); std::map ver_list = obj->get_ams_version(); + AmsPanelHash::iterator iter = m_amspanel_list.begin(); + for (auto i = 0; i < m_amspanel_list.GetCount(); i++) { AmsPanel* amspanel = m_amspanel_list[i]; amspanel->Hide(); diff --git a/src/slic3r/GUI/UserManager.cpp b/src/slic3r/GUI/UserManager.cpp index 0fd8dfce25..29f5f2d137 100644 --- a/src/slic3r/GUI/UserManager.cpp +++ b/src/slic3r/GUI/UserManager.cpp @@ -25,6 +25,7 @@ void UserManager::set_agent(NetworkAgent* agent) int UserManager::parse_json(std::string payload) { + bool restored_json = false; json j; json j_pre = json::parse(payload); if (j_pre.empty()) { @@ -40,7 +41,7 @@ int UserManager::parse_json(std::string payload) //bind if (j_pre["bind"]["command"].get() == "bind") { std::string dev_id; - std::string result; + std:; string result; if (j_pre["bind"].contains("dev_id")) { dev_id = j_pre["bind"]["dev_id"].get(); diff --git a/src/slic3r/GUI/WebDownPluginDlg.cpp b/src/slic3r/GUI/WebDownPluginDlg.cpp index 49fc439887..82d2816f2e 100644 --- a/src/slic3r/GUI/WebDownPluginDlg.cpp +++ b/src/slic3r/GUI/WebDownPluginDlg.cpp @@ -1,17 +1,27 @@ #include "WebDownPluginDlg.hpp" +#include "ConfigWizard.hpp" + +#include #include "I18N.hpp" #include "libslic3r/AppConfig.hpp" +#include "slic3r/GUI/wxExtensions.hpp" #include "slic3r/GUI/GUI_App.hpp" +#include "libslic3r_version.h" #include +#include #include + #include #include +#include #include #include +#include #include "MainFrame.hpp" +#include #include #include #include @@ -217,7 +227,7 @@ void DownPluginFrame::OnScriptMessage(wxWebViewEvent &evt) auto plugin_folder = (boost::filesystem::path(wxStandardPaths::Get().GetUserDataDir().ToUTF8().data()) / "plugins").make_preferred().string(); desktop_open_any_folder(plugin_folder); } - } catch (std::exception&) { + } catch (std::exception &e) { // wxMessageBox(e.what(), "json Exception", MB_OK); } } diff --git a/src/slic3r/GUI/WebGuideDialog.cpp b/src/slic3r/GUI/WebGuideDialog.cpp index 94913348e1..342a8958d8 100644 --- a/src/slic3r/GUI/WebGuideDialog.cpp +++ b/src/slic3r/GUI/WebGuideDialog.cpp @@ -858,7 +858,7 @@ bool GuideFrame::apply_config(AppConfig *app_config, PresetBundle *preset_bundle const std::map>& model_maps = config->second; //for (const auto& vendor_profile : preset_bundle->vendors) { - for (const auto model_it: model_maps) { + for (const auto& model_it: model_maps) { if (model_it.second.size() > 0) { variant = *model_it.second.begin(); const auto config_old = old_enabled_vendors.find(bundle_name); @@ -893,13 +893,13 @@ bool GuideFrame::apply_config(AppConfig *app_config, PresetBundle *preset_bundle } std::string first_added_filament; - /*auto get_first_added_material_preset = [this, app_config](const std::string& section_name, std::string& first_added_preset) { + auto get_first_added_material_preset = [this, app_config](const std::string& section_name, std::string& first_added_preset) { if (m_appconfig_new.has_section(section_name)) { // get first of new added preset names const std::map& old_presets = app_config->has_section(section_name) ? app_config->get_section(section_name) : std::map(); first_added_preset = get_first_added_preset(old_presets, m_appconfig_new.get_section(section_name)); } - };*/ + }; // Not switch filament //get_first_added_material_preset(AppConfig::SECTION_FILAMENTS, first_added_filament); @@ -960,6 +960,7 @@ bool GuideFrame::run() BOOST_LOG_TRIVIAL(info) << "GuideFrame cancelled"; if (app.preset_bundle->printers.only_default_printers()) { //we install the default here + bool apply_keeped_changes = false; //clear filament section and use default materials app.app_config->set_variant(PresetBundle::BBL_BUNDLE, PresetBundle::BBL_DEFAULT_PRINTER_MODEL, PresetBundle::BBL_DEFAULT_PRINTER_VARIANT, "true"); @@ -1139,7 +1140,7 @@ int GuideFrame::LoadProfile() wxString strVendor = from_u8(iter->path().string()).BeforeLast('.'); strVendor = strVendor.AfterLast( '\\'); - strVendor = strVendor.AfterLast('/'); + strVendor = strVendor.AfterLast('\/'); wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); if (w2s(strVendor) == PresetBundle::BBL_BUNDLE && strExtension.CmpNoCase("json") == 0) @@ -1158,7 +1159,7 @@ int GuideFrame::LoadProfile() //cout << iter->path().string() << endl; wxString strVendor = from_u8(iter->path().string()).BeforeLast('.'); strVendor = strVendor.AfterLast( '\\'); - strVendor = strVendor.AfterLast('/'); + strVendor = strVendor.AfterLast('\/'); wxString strExtension = from_u8(iter->path().string()).AfterLast('.').Lower(); if (w2s(strVendor) != PresetBundle::BBL_BUNDLE && strExtension.CmpNoCase("json")==0) @@ -1543,6 +1544,9 @@ int GuideFrame::LoadProfileFamily(std::string strVendor, std::string strFilePath BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << "Vendor: " << strVendor <<", tFilaList Add: " << s1; } + int nFalse = 0; + int nModel = 0; + int nFinish = 0; BOOST_LOG_TRIVIAL(info) << __FUNCTION__ << boost::format(", got %1% filaments") % nsize; for (int n = 0; n < nsize; n++) { json OneFF = pFilament.at(n); @@ -1652,7 +1656,7 @@ std::string GuideFrame::w2s(wxString sSrc) void GuideFrame::GetStardardFilePath(std::string &FilePath) { StrReplace(FilePath, "\\", w2s(wxString::Format("%c", boost::filesystem::path::preferred_separator))); - StrReplace(FilePath, "/", w2s(wxString::Format("%c", boost::filesystem::path::preferred_separator))); + StrReplace(FilePath, "\/", w2s(wxString::Format("%c", boost::filesystem::path::preferred_separator))); } bool GuideFrame::LoadFile(std::string jPath, std::string &sContent) diff --git a/src/slic3r/GUI/WebUserLoginDialog.cpp b/src/slic3r/GUI/WebUserLoginDialog.cpp index 4385f43dae..b95aa50b5f 100644 --- a/src/slic3r/GUI/WebUserLoginDialog.cpp +++ b/src/slic3r/GUI/WebUserLoginDialog.cpp @@ -3,6 +3,7 @@ #include #include "I18N.hpp" #include "libslic3r/AppConfig.hpp" +#include "slic3r/GUI/wxExtensions.hpp" #include "slic3r/GUI/GUI_App.hpp" #include "libslic3r_version.h" @@ -12,9 +13,11 @@ #include #include +#include #include #include +#include #include #include "MainFrame.hpp" diff --git a/src/slic3r/GUI/WebViewDialog.cpp b/src/slic3r/GUI/WebViewDialog.cpp index a5e17afab4..fab48fa679 100644 --- a/src/slic3r/GUI/WebViewDialog.cpp +++ b/src/slic3r/GUI/WebViewDialog.cpp @@ -5,6 +5,7 @@ #include "slic3r/GUI/GUI_App.hpp" #include "slic3r/GUI/MainFrame.hpp" #include "libslic3r_version.h" +#include "../Utils/Http.hpp" #include #include diff --git a/src/slic3r/GUI/Widgets/AMSControl.cpp b/src/slic3r/GUI/Widgets/AMSControl.cpp index c9a7e5c6e1..ea2fea852c 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.cpp +++ b/src/slic3r/GUI/Widgets/AMSControl.cpp @@ -137,7 +137,7 @@ void AMSrefresh::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, con wxWindow::Create(parent, id, pos, size, wxBORDER_NONE); SetBackgroundColour(AMS_CONTROL_DEF_BLOCK_BK_COLOUR); - Bind(wxEVT_TIMER, [this](wxTimerEvent&) { on_timer(); }); + Bind(wxEVT_TIMER, &AMSrefresh::on_timer, this); Bind(wxEVT_PAINT, &AMSrefresh::paintEvent, this); Bind(wxEVT_ENTER_WINDOW, &AMSrefresh::OnEnterWindow, this); Bind(wxEVT_LEAVE_WINDOW, &AMSrefresh::OnLeaveWindow, this); @@ -166,14 +166,14 @@ void AMSrefresh::create(wxWindow *parent, wxWindowID id, const wxPoint &pos, con m_playing_timer = new wxTimer(); m_playing_timer->SetOwner(this); - on_timer(); + wxPostEvent(this, wxTimerEvent()); SetSize(AMS_REFRESH_SIZE); SetMinSize(AMS_REFRESH_SIZE); SetMaxSize(AMS_REFRESH_SIZE); } -void AMSrefresh::on_timer() +void AMSrefresh::on_timer(wxTimerEvent &event) { //if (m_rotation_angle >= m_rfid_bitmap_list.size()) { // m_rotation_angle = 0; @@ -472,7 +472,7 @@ void AMSextruder::doRender(wxDC& dc) { //m_current_colur = wxSize size = GetSize(); - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (!m_none_ams_mode) { @@ -484,24 +484,24 @@ void AMSextruder::doRender(wxDC& dc) if (m_vams_loading) { - if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxPENSTYLE_SOLID)); } - else { dc.SetPen(wxPen(m_current_colur, 6, wxPENSTYLE_SOLID)); } + if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID)); } + else { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); } dc.DrawRoundedRectangle(-size.x / 2, size.y * 0.1, size.x, size.y, 4); if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); dc.DrawRoundedRectangle(-size.x / 2 - FromDIP(3), size.y * 0.1 + FromDIP(3), size.x, size.y, 3); dc.DrawRoundedRectangle(-size.x / 2 + FromDIP(3), size.y * 0.1 - FromDIP(3), size.x, size.y, 5); } } if (m_ams_loading && !m_none_ams_mode) { - if (m_current_colur.Alpha() == 0) {dc.SetPen(wxPen(*wxWHITE, 6, wxPENSTYLE_SOLID));} - else {dc.SetPen(wxPen(m_current_colur, 6, wxPENSTYLE_SOLID));} + if (m_current_colur.Alpha() == 0) {dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID));} + else {dc.SetPen(wxPen(m_current_colur, 6, wxSOLID));} dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); dc.DrawLine(size.x / 2 - FromDIP(4), -1, size.x / 2 - FromDIP(3), size.y * 0.6 - 1); dc.DrawLine(size.x / 2 + FromDIP(3), -1, size.x / 2 + FromDIP(3), size.y * 0.6 - 1); } @@ -509,12 +509,12 @@ void AMSextruder::doRender(wxDC& dc) } else { if (m_ams_loading) { - if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxPENSTYLE_SOLID)); } - else { dc.SetPen(wxPen(m_current_colur, 6, wxPENSTYLE_SOLID)); } + if (m_current_colur.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID)); } + else { dc.SetPen(wxPen(m_current_colur, 6, wxSOLID)); } dc.DrawLine(size.x / 2, -1, size.x / 2, size.y * 0.6 - 1); if ((m_current_colur == *wxWHITE || m_current_colur.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); dc.DrawLine(size.x / 2 - FromDIP(4), -1, size.x / 2 - FromDIP(3), size.y * 0.6 - 1); dc.DrawLine(size.x / 2 + FromDIP(3), -1, size.x / 2 + FromDIP(3), size.y * 0.6 - 1); } @@ -587,18 +587,18 @@ void AMSVirtualRoad::doRender(wxDC& dc) wxSize size = GetSize(); if (m_vams_loading) { - if (m_current_color.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxPENSTYLE_SOLID)); } - else { dc.SetPen(wxPen(m_current_color, 6, wxPENSTYLE_SOLID)); } + if (m_current_color.Alpha() == 0) { dc.SetPen(wxPen(*wxWHITE, 6, wxSOLID)); } + else { dc.SetPen(wxPen(m_current_color, 6, wxSOLID)); } } else { - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); } dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); dc.DrawRoundedRectangle(size.x / 2, -size.y / 1.1 + FromDIP(1), size.x, size.y, 4); if ((m_current_color == *wxWHITE || m_current_color.Alpha() == 0) && !wxGetApp().dark_mode()) { - dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_DEF_BLOCK_BK_COLOUR, 1, wxSOLID)); dc.DrawRoundedRectangle(size.x / 2 - FromDIP(3), -size.y / 1.1 + FromDIP(4), size.x, size.y, 5); dc.DrawRoundedRectangle(size.x / 2 + FromDIP(3), -size.y / 1.1 - FromDIP(2), size.x, size.y, 3); } @@ -988,11 +988,11 @@ void AMSLib::render_extra_lib(wxDC& dc) //draw road - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (m_pass_road) { - dc.SetPen(wxPen(m_info.material_colour, 6, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_info.material_colour, 6, wxSOLID)); } if (m_can_index == 0 || m_can_index == 3) { @@ -1114,9 +1114,9 @@ void AMSLib::render_generic_lib(wxDC &dc) // selected if (m_selected) { - dc.SetPen(wxPen(tmp_lib_colour, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(tmp_lib_colour, 2, wxSOLID)); if (tmp_lib_colour.Alpha() == 0) { - dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(),tmp_lib_colour.Blue(),128), 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(wxColour(tmp_lib_colour.Red(), tmp_lib_colour.Green(),tmp_lib_colour.Blue(),128), 2, wxSOLID)); } dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (m_radius == 0) { @@ -1131,7 +1131,7 @@ void AMSLib::render_generic_lib(wxDC &dc) } if (!m_selected && m_hover) { - dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_BRAND_COLOUR, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (m_radius == 0) { dc.DrawRectangle(0, 0, size.x, size.y); @@ -1144,7 +1144,7 @@ void AMSLib::render_generic_lib(wxDC &dc) dc.SetBrush(wxBrush(tmp_lib_colour)); } else { - dc.SetPen(wxPen(tmp_lib_colour, 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(tmp_lib_colour, 1, wxSOLID)); dc.SetBrush(wxBrush(tmp_lib_colour)); } @@ -1230,7 +1230,7 @@ void AMSLib::render_generic_lib(wxDC &dc) dc.SetBrush(wxBrush(tmp_lib_colour)); } else { - dc.SetPen(wxPen(tmp_lib_colour, 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(tmp_lib_colour, 1, wxSOLID)); dc.SetBrush(wxBrush(tmp_lib_colour)); } } @@ -1260,7 +1260,7 @@ void AMSLib::render_generic_lib(wxDC &dc) #endif } if (tmp_lib_colour.Red() > 238 && tmp_lib_colour.Green() > 238 && tmp_lib_colour.Blue() > 238) { - dc.SetPen(wxPen(wxColour(130, 129, 128), 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(wxColour(130, 129, 128), 1, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); dc.DrawLine(FromDIP(4), FromDIP(4) + top, size.x - FromDIP(4), FromDIP(4) + top); } @@ -1268,10 +1268,10 @@ void AMSLib::render_generic_lib(wxDC &dc) else { dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); if (tmp_lib_colour.Red() > 238 && tmp_lib_colour.Green() > 238 && tmp_lib_colour.Blue() > 238) { - dc.SetPen(wxPen(wxColour(130, 129, 128), 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(wxColour(130, 129, 128), 2, wxSOLID)); } else { - dc.SetPen(wxPen(tmp_lib_colour, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(tmp_lib_colour, 2, wxSOLID)); } #ifdef __APPLE__ @@ -1285,7 +1285,7 @@ void AMSLib::render_generic_lib(wxDC &dc) } //border - dc.SetPen(wxPen(wxColour(130, 130, 128), 1, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(wxColour(130, 130, 128), 1, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); #ifdef __APPLE__ dc.DrawRoundedRectangle(FromDIP(4), FromDIP(4), size.x - FromDIP(7), size.y - FromDIP(7), m_radius); @@ -1371,6 +1371,7 @@ AMSRoad::AMSRoad(wxWindow *parent, wxWindowID id, Caninfo info, int canindex, in m_info = info; m_canindex = canindex; // road type + auto mode = AMSRoadMode::AMS_ROAD_MODE_END; if (m_canindex == 0 && maxcan == 1) { m_rode_mode = AMSRoadMode::AMS_ROAD_MODE_NONE; } else if (m_canindex == 0 && maxcan > 1) { @@ -1491,7 +1492,7 @@ void AMSRoad::doRender(wxDC &dc) { wxSize size = GetSize(); - dc.SetPen(wxPen(m_road_def_color, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_def_color, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); // left mode if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_LEFT) { dc.DrawRoundedRectangle(-10, -10, size.x / 2 + 10, size.y * 0.6 + 10, 4); } @@ -1534,8 +1535,8 @@ void AMSRoad::doRender(wxDC &dc) // mode none // if (m_pass_rode_mode.size() == 1 && m_pass_rode_mode[0] == AMSPassRoadMode::AMS_ROAD_MODE_NONE) return; - if (m_road_color.Alpha() == 0) {dc.SetPen(wxPen(*wxWHITE, m_passroad_width, wxPENSTYLE_SOLID));} - else {dc.SetPen(wxPen(m_road_color, m_passroad_width, wxPENSTYLE_SOLID));} + if (m_road_color.Alpha() == 0) {dc.SetPen(wxPen(*wxWHITE, m_passroad_width, wxSOLID));} + else {dc.SetPen(wxPen(m_road_color, m_passroad_width, wxSOLID));} dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); @@ -1562,7 +1563,7 @@ void AMSRoad::doRender(wxDC &dc) // end mode if (m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END || m_rode_mode == AMSRoadMode::AMS_ROAD_MODE_END_ONLY) { - dc.SetPen(wxPen(m_road_def_color, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_def_color, 2, wxSOLID)); dc.SetBrush(wxBrush(m_road_def_color)); dc.DrawRoundedRectangle(size.x * 0.37 / 2, size.y * 0.6 - size.y / 6, size.x * 0.63, size.y / 3, m_radius); } @@ -2243,7 +2244,7 @@ void AmsCans::doRender(wxDC& dc) // A1 - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); try @@ -2284,32 +2285,32 @@ void AmsCans::doRender(wxDC& dc) if (!m_road_canid.empty()) { if (m_road_canid == "0") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); dc.DrawLine(a1_left, FromDIP(30), a1_left, a1_top); dc.DrawLine(a1_left, a1_top, end_top, a1_top); } if (m_road_canid == "1") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); dc.DrawLine(a2_left, FromDIP(160), a2_left, a2_top); dc.DrawLine(a2_left, a2_top, end_top, a2_top); } if (m_road_canid == "2") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); dc.DrawLine(a3_left, FromDIP(160), a3_left, a3_top); dc.DrawLine(a3_left, a3_top, end_top, a3_top); } if (m_road_canid == "3") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); dc.DrawLine(a4_left, FromDIP(30), a4_left, a4_top); dc.DrawLine(a4_left, a4_top, end_top, a4_top); } } //to Extruder - dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(AMS_CONTROL_GRAY500, 2, wxSOLID)); dc.SetBrush(wxBrush(*wxTRANSPARENT_BRUSH)); dc.DrawLine(end_top, a1_top, end_top, size.y); @@ -2317,19 +2318,19 @@ void AmsCans::doRender(wxDC& dc) if (!m_road_canid.empty()) { if (!m_road_canid.empty()) { if (m_road_canid == "0") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); dc.DrawLine(end_top, a1_top, end_top, size.y); } else if (m_road_canid == "1") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); dc.DrawLine(end_top, a2_top, end_top, size.y); } else if (m_road_canid == "2") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); dc.DrawLine(end_top, a3_top, end_top, size.y); } else if (m_road_canid == "3") { - dc.SetPen(wxPen(m_road_colour, passroad_width, wxPENSTYLE_SOLID)); + dc.SetPen(wxPen(m_road_colour, passroad_width, wxSOLID)); dc.DrawLine(end_top, a4_top, end_top, size.y); } } @@ -3099,6 +3100,7 @@ void AMSControl::SetClibrationLink(wxString link) void AMSControl::PlayRridLoading(wxString amsid, wxString canid) { AmsCansHash::iterator iter = m_ams_cans_list.begin(); + auto count_item_index = 0; for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) { AmsCansWindow *cans = m_ams_cans_list[i]; @@ -3110,6 +3112,7 @@ void AMSControl::PlayRridLoading(wxString amsid, wxString canid) void AMSControl::StopRridLoading(wxString amsid, wxString canid) { AmsCansHash::iterator iter = m_ams_cans_list.begin(); + auto count_item_index = 0; for (auto i = 0; i < m_ams_cans_list.GetCount(); i++) { AmsCansWindow *cans = m_ams_cans_list[i]; diff --git a/src/slic3r/GUI/Widgets/AMSControl.hpp b/src/slic3r/GUI/Widgets/AMSControl.hpp index 701be1bf34..afcee66365 100644 --- a/src/slic3r/GUI/Widgets/AMSControl.hpp +++ b/src/slic3r/GUI/Widgets/AMSControl.hpp @@ -175,7 +175,7 @@ public: void PlayLoading(); void StopLoading(); void create(wxWindow *parent, wxWindowID id, const wxPoint &pos, const wxSize &size); - void on_timer(); + void on_timer(wxTimerEvent &event); void OnEnterWindow(wxMouseEvent &evt); void OnLeaveWindow(wxMouseEvent &evt); void OnClick(wxMouseEvent &evt); diff --git a/src/slic3r/GUI/Widgets/ComboBox.cpp b/src/slic3r/GUI/Widgets/ComboBox.cpp index fc66d524a5..55b8e12bcb 100644 --- a/src/slic3r/GUI/Widgets/ComboBox.cpp +++ b/src/slic3r/GUI/Widgets/ComboBox.cpp @@ -24,7 +24,7 @@ static wxWindow *GetScrollParent(wxWindow *pWindow) wxWindow *pWin = pWindow; while (pWin->GetParent()) { auto pWin2 = pWin->GetParent(); - if (dynamic_cast(pWin2)) + if (auto top = dynamic_cast(pWin2)) return dynamic_cast(pWin); pWin = pWin2; } diff --git a/src/slic3r/GUI/Widgets/FanControl.cpp b/src/slic3r/GUI/Widgets/FanControl.cpp index e7430037d4..222362e917 100644 --- a/src/slic3r/GUI/Widgets/FanControl.cpp +++ b/src/slic3r/GUI/Widgets/FanControl.cpp @@ -112,7 +112,7 @@ void Fan::render(wxDC& dc) void Fan::doRender(wxDC& dc) { - // auto rpm = wxT("rpm"); + auto rpm = wxT("rpm"); wxSize size = GetSize(); dc.DrawBitmap(m_bitmap_bk.bmp(), wxPoint(0,0)); diff --git a/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp b/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp index d30f94976d..af48b6d27a 100644 --- a/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp +++ b/src/slic3r/GUI/Widgets/ImageSwitchButton.cpp @@ -108,6 +108,7 @@ void ImageSwitchButton::render(wxDC& dc) wxSize size = GetSize(); wxSize szIcon; + wxSize szContent = textSize; ScalableBitmap &icon = GetValue() ? m_on : m_off; int content_height = icon.GetBmpHeight() + textSize.y + m_padding; @@ -267,6 +268,7 @@ void FanSwitchButton::render(wxDC& dc) wxSize size = GetSize(); wxSize szIcon; + wxSize szContent = textSize; ScalableBitmap& icon = GetValue() ? m_on : m_off; //int content_height = icon.GetBmpHeight() + textSize.y + m_padding; diff --git a/src/slic3r/GUI/Widgets/RoundedRectangle.cpp b/src/slic3r/GUI/Widgets/RoundedRectangle.cpp index f86f144ddc..07f2aa0b30 100644 --- a/src/slic3r/GUI/Widgets/RoundedRectangle.cpp +++ b/src/slic3r/GUI/Widgets/RoundedRectangle.cpp @@ -1,4 +1,5 @@ #include "RoundedRectangle.hpp" +#include "../wxExtensions.hpp" #include #include diff --git a/src/slic3r/GUI/Widgets/SpinInput.cpp b/src/slic3r/GUI/Widgets/SpinInput.cpp index cee447769e..5c8b91a0c7 100644 --- a/src/slic3r/GUI/Widgets/SpinInput.cpp +++ b/src/slic3r/GUI/Widgets/SpinInput.cpp @@ -205,6 +205,8 @@ void SpinInput::messureSize() if (size.y < h) { size.y = h; } + wxSize minSize = size; + minSize.x = GetMinWidth(); StaticBox::SetSize(size); SetMinSize(size); wxSize btnSize = {14, (size.y - 4) / 2}; diff --git a/src/slic3r/GUI/Widgets/StepCtrl.cpp b/src/slic3r/GUI/Widgets/StepCtrl.cpp index cdd25ea1f0..73a3e80dd3 100644 --- a/src/slic3r/GUI/Widgets/StepCtrl.cpp +++ b/src/slic3r/GUI/Widgets/StepCtrl.cpp @@ -322,6 +322,7 @@ void StepIndicator::doRender(wxDC &dc) dc.DrawEllipse(circleX - radius, circleY - radius, radius * 2, radius * 2); // Draw content ( icon or text ) in circle if (disabled) { + wxSize sz = bmp_ok.GetBmpSize(); dc.DrawBitmap(bmp_ok.bmp(), circleX - radius, circleY - radius); } else { dc.SetFont(font_tip); diff --git a/src/slic3r/GUI/Widgets/TempInput.cpp b/src/slic3r/GUI/Widgets/TempInput.cpp index 6ae82776de..f581f73bf1 100644 --- a/src/slic3r/GUI/Widgets/TempInput.cpp +++ b/src/slic3r/GUI/Widgets/TempInput.cpp @@ -412,6 +412,7 @@ void TempInput::render(wxDC &dc) /*if (!text.IsEmpty()) { }*/ + wxSize textSize = text_ctrl->GetSize(); if (align_right) { if (pt.x + labelSize.x > size.x) text = wxControl::Ellipsize(text, dc, wxELLIPSIZE_END, size.x - pt.x); pt.y = (size.y - labelSize.y) / 2; diff --git a/src/slic3r/GUI/Widgets/WebView.cpp b/src/slic3r/GUI/Widgets/WebView.cpp index 2bbe519c46..11f431c308 100644 --- a/src/slic3r/GUI/Widgets/WebView.cpp +++ b/src/slic3r/GUI/Widgets/WebView.cpp @@ -373,7 +373,7 @@ bool WebView::RunScript(wxWebView *webView, wxString const &javascript) }, NULL); return true; #endif - } catch (std::exception&) { + } catch (std::exception &e) { return false; } } diff --git a/src/slic3r/GUI/WipeTowerDialog.cpp b/src/slic3r/GUI/WipeTowerDialog.cpp index e965c803ff..78662c1f3a 100644 --- a/src/slic3r/GUI/WipeTowerDialog.cpp +++ b/src/slic3r/GUI/WipeTowerDialog.cpp @@ -3,6 +3,7 @@ #include "libslic3r/FlushVolCalc.hpp" #include "WipeTowerDialog.hpp" #include "BitmapCache.hpp" +#include "GUI.hpp" #include "I18N.hpp" #include "GUI_App.hpp" #include "MsgDialog.hpp" @@ -734,6 +735,9 @@ void WipingPanel::update_warning_texts() static const wxColour g_warning_color = *wxRED; static const wxColour g_normal_color = *wxBLACK; + wxString multi_str = m_flush_multiplier_ebox->GetValue(); + float multiplier = wxAtof(multi_str); + bool has_exception_flush = false; for (int i = 0; i < edit_boxes.size(); i++) { auto& box_vec = edit_boxes[i]; diff --git a/src/slic3r/GUI/wxExtensions.cpp b/src/slic3r/GUI/wxExtensions.cpp index 65ed46ba42..b542723e15 100644 --- a/src/slic3r/GUI/wxExtensions.cpp +++ b/src/slic3r/GUI/wxExtensions.cpp @@ -491,6 +491,7 @@ wxBitmap* get_default_extruder_color_icon(bool thin_icon/* = false*/) const double em = Slic3r::GUI::wxGetApp().em_unit(); const int icon_width = lround((thin_icon ? 2 : 4.5) * em); const int icon_height = lround(2 * em); + bool dark_mode = Slic3r::GUI::wxGetApp().dark_mode(); wxClientDC cdc((wxWindow*)Slic3r::GUI::wxGetApp().mainframe); wxMemoryDC dc(&cdc); diff --git a/src/slic3r/Utils/ASCIIFolding.cpp b/src/slic3r/Utils/ASCIIFolding.cpp index 7e47448067..0eb02a5f8c 100644 --- a/src/slic3r/Utils/ASCIIFolding.cpp +++ b/src/slic3r/Utils/ASCIIFolding.cpp @@ -1953,7 +1953,8 @@ std::string fold_utf8_to_ascii(const std::string &src, bool is_convert_for_filen for (wchar_t c : wstr) fold_to_ascii(c, out); if (is_convert_for_filename) { - auto dstStr = boost::locale::conv::utf_to_utf(dst); + std::wstring_convert> converter; + auto dstStr = converter.to_bytes(dst); std::size_t found = dstStr.find_last_of("/\\"); if (found != std::string::npos) { @@ -1963,7 +1964,7 @@ std::string fold_utf8_to_ascii(const std::string &src, bool is_convert_for_filen std::string newFileName = regex_replace(filename, reg, ""); dstStr = dir + "\\" + newFileName; } - return dstStr; + dst = converter.from_bytes(dstStr); } return boost::locale::conv::utf_to_utf(dst.c_str(), dst.c_str() + dst.size()); diff --git a/src/slic3r/Utils/CalibUtils.cpp b/src/slic3r/Utils/CalibUtils.cpp index 88c59075ea..e68969acbf 100644 --- a/src/slic3r/Utils/CalibUtils.cpp +++ b/src/slic3r/Utils/CalibUtils.cpp @@ -519,7 +519,7 @@ bool CalibUtils::calib_flowrate(int pass, const CalibInfo &calib_info, wxString const ConfigOptionFloats *nozzle_diameter_config = printer_config.option("nozzle_diameter"); assert(nozzle_diameter_config->values.size() > 0); float nozzle_diameter = nozzle_diameter_config->values[0]; - // float xyScale = nozzle_diameter / 0.6; + float xyScale = nozzle_diameter / 0.6; // scale z to have 7 layers double first_layer_height = print_config.option("initial_layer_print_height")->value; double layer_height = nozzle_diameter / 2.0; // prefer 0.2 layer height for 0.4 nozzle @@ -618,7 +618,7 @@ void CalibUtils::calib_pa_pattern(const CalibInfo &calib_info, Model& model) float nozzle_diameter = printer_config.option("nozzle_diameter")->get_at(0); - for (const auto opt : SuggestedConfigCalibPAPattern().float_pairs) { + for (const auto& opt : SuggestedConfigCalibPAPattern().float_pairs) { print_config.set_key_value(opt.first, new ConfigOptionFloat(opt.second)); } @@ -627,11 +627,11 @@ void CalibUtils::calib_pa_pattern(const CalibInfo &calib_info, Model& model) full_config, print_config.get_abs_value("line_width"), print_config.get_abs_value("layer_height"), 0))); - for (const auto opt : SuggestedConfigCalibPAPattern().nozzle_ratio_pairs) { + for (const auto& opt : SuggestedConfigCalibPAPattern().nozzle_ratio_pairs) { print_config.set_key_value(opt.first, new ConfigOptionFloat(nozzle_diameter * opt.second / 100)); } - for (const auto opt : SuggestedConfigCalibPAPattern().int_pairs) { + for (const auto& opt : SuggestedConfigCalibPAPattern().int_pairs) { print_config.set_key_value(opt.first, new ConfigOptionInt(opt.second)); } @@ -1067,6 +1067,7 @@ bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f { GLVolumeCollection glvolume_collection; std::vector colors_out(1); + unsigned char rgb_color[4] = {255, 255, 255, 255}; ColorRGBA new_color {1.0f, 1.0f, 1.0f, 1.0f}; colors_out.push_back(new_color); @@ -1079,9 +1080,9 @@ bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f const ModelObject &model_object = *model->objects[obj_idx]; for (int volume_idx = 0; volume_idx < (int)model_object.volumes.size(); ++ volume_idx) { - // const ModelVolume &model_volume = *model_object.volumes[volume_idx]; + const ModelVolume &model_volume = *model_object.volumes[volume_idx]; for (int instance_idx = 0; instance_idx < (int)model_object.instances.size(); ++ instance_idx) { - // const ModelInstance &model_instance = *model_object.instances[instance_idx]; + const ModelInstance &model_instance = *model_object.instances[instance_idx]; glvolume_collection.load_object_volume(&model_object, obj_idx, volume_idx, instance_idx, "volume", true, false, true); glvolume_collection.volumes.back()->set_render_color(new_color); glvolume_collection.volumes.back()->set_color(new_color); @@ -1127,11 +1128,11 @@ bool CalibUtils::process_and_store_3mf(Model *model, const DynamicPrintConfig &f store_params.strategy = SaveStrategy::Silence | SaveStrategy::WithGcode | SaveStrategy::SplitModel | SaveStrategy::SkipModel; - Slic3r::store_bbs_3mf(store_params); + bool success = Slic3r::store_bbs_3mf(store_params); store_params.strategy = SaveStrategy::Silence | SaveStrategy::SplitModel | SaveStrategy::WithSliceInfo | SaveStrategy::SkipAuxiliary; store_params.path = config_3mf_path.c_str(); - Slic3r::store_bbs_3mf(store_params); + success = Slic3r::store_bbs_3mf(store_params); release_PlateData_list(plate_data_list); return true; diff --git a/src/slic3r/Utils/ESP3D.cpp b/src/slic3r/Utils/ESP3D.cpp index c95d292afe..531e9d08e9 100644 --- a/src/slic3r/Utils/ESP3D.cpp +++ b/src/slic3r/Utils/ESP3D.cpp @@ -1,6 +1,8 @@ #include "ESP3D.hpp" #include +#include +#include #include #include #include @@ -10,7 +12,13 @@ #include #include +#include #include +#include +#include +#include +#include +#include #include "libslic3r/PrintConfig.hpp" #include "slic3r/GUI/GUI.hpp" @@ -18,6 +26,7 @@ #include "slic3r/GUI/MsgDialog.hpp" #include "Http.hpp" #include "SerialMessage.hpp" +#include "SerialMessageType.hpp" namespace fs = boost::filesystem; namespace pt = boost::property_tree; diff --git a/src/slic3r/Utils/Obico.cpp b/src/slic3r/Utils/Obico.cpp index 6486e43114..5541d1c683 100644 --- a/src/slic3r/Utils/Obico.cpp +++ b/src/slic3r/Utils/Obico.cpp @@ -10,8 +10,10 @@ #include #include #include +#include #include +#include #include #include "slic3r/GUI/GUI.hpp" @@ -20,6 +22,8 @@ #include "slic3r/GUI/format.hpp" #include "Http.hpp" #include "libslic3r/AppConfig.hpp" +#include "Bonjour.hpp" +#include "slic3r/GUI/BonjourDialog.hpp" namespace fs = boost::filesystem; namespace pt = boost::property_tree; diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index 55bb426463..cdd91eb22e 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -52,6 +52,7 @@ using Slic3r::GUI::Config::SnapshotDB; namespace Slic3r { +static const char *INDEX_FILENAME = "index.idx"; static const char *TMP_EXTENSION = ".data"; diff --git a/src/slic3r/Utils/UndoRedo.cpp b/src/slic3r/Utils/UndoRedo.cpp index 8e7bd703c3..eaf90c7349 100644 --- a/src/slic3r/Utils/UndoRedo.cpp +++ b/src/slic3r/Utils/UndoRedo.cpp @@ -1071,7 +1071,7 @@ bool StackImpl::has_redo_snapshot() const // BBS: undo-redo until modify record auto it = std::lower_bound(m_snapshots.begin(), m_snapshots.end(), Snapshot(m_active_snapshot_time)); - for (; it != m_snapshots.end(); ++it) { + for (it; it != m_snapshots.end(); ++it) { if (snapshot_modifies_project(*it)) return true; } @@ -1340,12 +1340,12 @@ bool StackImpl::has_real_change_from(size_t time) const Snapshot(m_active_snapshot_time)); if (it_active == m_snapshots.end()) return true; if (it_active > it_time) { - for (; it_time < it_active; ++it_time) { + for (it_time; it_time < it_active; ++it_time) { if (snapshot_modifies_project(*it_time)) return true; } } else { - for (; it_active < it_time; ++it_active) { + for (it_active; it_active < it_time; ++it_active) { if (snapshot_modifies_project(*it_active)) return true; }