Skip to content

PrusaSlicer 2.1.0-alpha1

Compare
Choose a tag to compare
@bubnikv bubnikv released this 09 Aug 14:16
· 15283 commits to master since this release

PrusaSlicer 2.1.0-alpha1

PrusaSlicer PrusaSlicer 2.1.0-alpha1

Summary

This is the first alpha release of PrusaSlicer 2.1.0, introducing a state of the art Undo / Redo concept, custom print bed model with lower GPU memory requirements, perspective camera, layer height table with modifier parameters, SLA printing with the pad around the object, wipe tower improvements, partial arrangement, color change time estimates, scale to fit the platform and much more.

To let you enjoy the alpha without worries, the alpha builds save their profiles into PrusaSlicer-alpha directory, so you may use the alpha side by side with the current release without ruining your production configuration.

Undo / Redo #1024

We took our time to implement the Undo / Redo functionality. First, if we had implemented it earlier, we would have to struggle with the Perl programming language bindings, and we would waste a lot of time later on porting that new code into C++. Second, Undo / Redo is hard to do right, and we took our time to implement a robust and future proof framework. We believe we have the best Undo / Redo implementation in the world of FFF and SLA desktop printing software.

All the actions accessible from the Plater are now undoable including object selection, actions at the side bar (adding modifiers, changing their attributes), with the exception of switching the print, filament, SLA material or printer profiles. Changing the parameters at the Print / Filament / SLA Material or Printer parameter tab is already undoable with the "Reset to system value" and "Reset to user saved value" buttons, therefore we decided to not put the events of modifying these parameters onto the Undo / Redo stack of the plater.

One can jump over multiple snapshots by clicking on the Undo or Redo button with the right mouse button. As each of the snapshots have an expressive name assigned, it is easy to orient oneself even in a long list of actions.
Undo list

The Undo / Redo stack currently limits its memory usage to 10% of the physical RAM size, and the oldest Undo snapshots are released until the memory limit is met. As we are only storing differences between the successive Undo / Redo snapshots, the Undo / Redo history is nearly limitless on a modern computer. The Undo / Redo memory statistics is now shown by the System Info dialog.

Some of the PrusaSlicer functionality depends on the active printer technology (FDM or SLA), therefore the active technology is remembered at the time the Undo / Redo snapshot is taken, and the Printer profile is switched to the last active Printer profile of that particular technology when that snapshot is reactivated.

Custom print bed, lower GPU memory consumption & faster start up

PrusaSlicer now supports custom print bed textures and models #1875 #2169 #2496. Both PNG and SVG formats are supported for the print bed texture. The image and model files are assigned to the Printer profile from the "Bed Shape" dialog, and the full path to these files is stored into "bed_custom_texture" and "bed_custom_model" Print profile variables. We are considering to install the custom bed textures and models into user's PrusaSlicer configuration folder, so that we would store the names of these files without a full path to make sharing the Printer profiles easier.

We received multiple reports of graphics issues due to the excessively detailed print bed textures not fitting into the GPU memory #2299 #2382. We implemented two strategies to cope with the low GPU memory issues:

  • We only rasterize the print bed texture to a high resolution of 8192x8192 pixels if the graphics card supports OpenGL 3.0 and newer, or if there is a Retina display connected to a Mac. Otherwise a lower resolution 4096x4096 print bed texture is rasterized.
  • The print bed texture is compressed with this library.

In addition, we improved application start up time and the time to switch the Printer profiles by sending a low resolution print bed texture to the GPU first, while the higher resolutions are compressed and sent to the CPU progressively as they are ready.

Layers editing #1804 #2102 #2347 #2421 #2529 #2587

The Slic3r PE used to offer a layer height table, where one was able to set the layer height per object Z span. While we removed this feature from PrusaSlicer 2.0 due to developer time constraints, we are now bringing the feature back with major improvements: One can now not only define a layer height for a Z span, but one can also apply any parameter to the Z span of an object, that can be assigned to object's modifier mesh. When editing the Z minimum or maximum value of a Z span, the top and bottom planes are visualized at the selected object in the 3D scene. The new feature was mentioned by the "Modeling" with PrusaSlicer? video.

SLA zero object elevation with pad around the object

In PrusaSlicer 2.0 the SLA supports require a certain elevation of the model if supports are to be generated. This ensures that the support pillars do not collide with the model and the pad can also be generated without complications. In the 2.1 release we added a feature to set the elevation to zero and the supports and pad will be correctly derived for every model. The generated pad will surround the object with small break-stick connections. The pictures below show the old behavior (left side) vs the new feature (right side).


If the "pad_zero_elevation" parameter is set, the parameters "pad_object_gap", "pad_object_connector_stride", "pad_object_connector_width", "pad_object_connector_penetration" are used to control the gap between the object and the pad around the object, and to add connectors between the object and pad to improve platform adhesion.

Arrangement of selection only

Arrangement tool can now be used to arrange only a subset of the objects on the bed, while keeping the position of unselected objects unchanged. This can be achieved by selecting the set of objects and hitting the Arrange button while holding down the Shift key, or pressing the Shift + A hot key.

Partial arrangement

Multi material, Wipe tower generator

The old Wipe tower generator used to manipulate the print speed override of the Marlin firmware to slow down for the soluble and flexible materials. Starting with this release, the print speed override G-code is only emitted to reset printer speed override to 100% over the Wipe tower as the Wipe tower is always printed at the maximum extrusion rate possible, while the maximum volumetric speed of an active filament is respected to limit the print speed for both the normal print and for the nozzle cleaning sequences at the Wipe tower.

In addition, the Wipe tower generator now supports multiple physical extruders, not just the "single extruder multi-material" setup, thanks to @tcm0116 for the initial implementation. The filament exchange sequences (ramming, cooling, etc.) specific for the "single extruder multi-material" mode are disabled for a multi-extruder setup #718 #1944 #2337.

We changed the way how custom filament and tool change gcodes are emitted into the final G-code with the goal to make the custom G-codes more versatile and consistent between the "single-extruder multi-material" and "multiple extruders" setups with the wipe tower enabled or disabled (#560 #1530 #1245). Each toolchange now emits:

  • end filament custom gcode
  • toolchange custom gcode; if not provided, a standard tool change G-code (Tn) is inserted
  • start filament gcode

See the tool tips of "start_filament_gcode", "end_filament_gcode", "toolchange_gcode" parameters for details. Lastly, the Wipe tower now supports filaments with diameters different from 1.75 mm.

Filament retract overrides #480 #844 #2661

PrusaSlicer classifies the FDM parameters into three groups: Print, Filament and Printer parameters. This parameter classification is certianly artificial. While the current grouping may make sense for some printers or filaments, it may not suit other setups well. We were asked to make the configuration more flexible.

With this release we are allowing the Filament profiles to override all or some of the extruder retract values. The filament retract overrides define the same configuration keys as the extruder retract configuration values, only prefixed with "filament_". For example, the "retract_length" is overridden with a "filament_retract_length" value. A special "nil" value is used if the filament override value is not set, therefore the extruder retract value shall be used.

The PET and FLEX profiles bundled with this PrusaSlicer release already contain filament specific retract settings to reduce stringing. In the future, we are considering to allow the Filament profile to override the bridging speed and bridge flow ratio. Other candidates are the print speed and acceleration values.

Other new features and improvements

  • Object and their instances may now be marked to be suppressed from the print. Such objects are shown with dark green color on the Plater and they are marked with a crossed eye icon at the object list. The object or instance may be suppressed or enabled by clicking on the "eye" icon at the object list with the right mouse button, or from the object's context menu #1099 #2291 #2694.
  • 3D scene is now rendered with a perspective camera by default. One may toggle between the perspective and orthographic cameras with a "k" hot key, and the last state is stored as the "use_perspective_camera" key into PrusaSlicer.ini #1155 #1809 #2230 #2266 #2271.
  • Single objects can now be scaled to fill the print volume from the object pop up menu or with the "f" hot key when the Scale gizmo is active #1509.
  • Print time estimator now calculates times of each Color change event. Color change time estimates are currently shown at the Sliced info box, we may show the times at the legend in the left top corner in the future #1621 #1636 #2390.
  • The custom G-code sections newly support the "total_layer_count" placeholder everywhere where the "layer_num" is available #1777, thanks @BryanSmithDev.
  • The top and left toolbar sizes are newly configurable from the application preferences dialog #1906 #2247.
  • SLA mode newly supports mirroring of the printer display in both X and Y axes using the new "display_mirror_x" and "display_mirror_y" printer configuration values #2241.
  • The modifier meshes could newly be dropped to the print bed using a new button at the "Part manipulation" side panel #2504.
  • Resetting the application to a "New Project" newly switches to object view from the print path preview automatically #2528.
  • Tooltip of the "uniform / non-uniform scaling" button at the side bar newly explains, that the non-uniform scaling is not allowed for a group selection #2539.
  • The tool path preview newly supports the tool change G-codes of MakerWare and Sailfish firmwares (M135 Tn and M108 Tn) #2566.
  • The tool path preview also newly supports the M401 and M402 codes (Store x, y and z position, Go to stored position) of the Repetier firmware #2663.
  • There are new buttons at the Object manipulation panel for a single object and for a single volume to reset the rotation and scale to zero, and for mirroring (mirroring only allowed in local coordinates) #2607.
  • A list of recently opened project files is newly provided at the File menu #2616.
  • There is a new keyboard shortcut Ctrl+Shift+G and menu "File->Export->Send G-code" #2633.
  • The Left / Right / Up / Down / + / - / Delete keys are newly routed to the slider of the print path preview even if the 3D scene holds the keyboard focus #2714.
  • Layer slider at the print path preview newly moves the active cursor to a mouse click position.
  • There is a new "Reset color changes" button at the bottom of the Layer slider.
  • Error reporting of excessively small or large extrusion width parameters has been improved #2715.
  • Legend at the left top corner of the print path preview can newly be toggled on / off #2727 thanks @wavexx.
  • The Simple / Advanced / Expert mode buttons look newly more like buttons to be discoverable.
  • The "wipe_into_infill" and "wipe_into_objects" options are newly found under the "Wipe options" category instead of "Extruders".
  • Faster STL import / repair due to faster memory allocation.
  • SLA automatic object orientation algorithm has been improved using the Rotating Calipers algorithm to improve chances of fitting a large object into the limited build volume of an SLA printer.
  • The preset editor newly considers the "-- default --" preset to be the system preset for the user profiles derived from it, therefore the "lock" button next to each of the parameter reverts to the "-- default --" value.
  • Statistics on current and maximum memory consumption is newly shown by the System Info dialog and on the console (if enabled with --loglevel parameter).

Translations

Following translations were submitted for PrusaSlicer 2.0 and integrated. Dear contributors, please provide updates for the PrusaSlicer 2.1.

  • Korean translation thanks to @ulsanether
  • Chinese translation thanks to @skymaze
  • Traditional Chinese translation thanks to @taksito
  • Turkish translation thanks to @fsadak

Our current binary distributions grew significantly by bundling the Chinese / Japanese / Korean font to be used in the 3D scene. We are investigating how to use the system fonts instead.

Bugs fixed

  • Fixed an error, where the extruder temperature was sometimes not set for a single-extruder multi-material setup at the very first tool change #1542 #2373 #2685.
  • The "Delete parameter" (the cross) button at the side bar is newly highlighted to indicate keyboard focus #1767.
  • Fixed a crash when moving the layer slider and accidentally right-clicked #1933.
  • Fixed flickering of the 3D view when moving objects on some NVIDIA graphic cards #2136.
  • Fixed compilation issues on OSX: Fixed lookup of the gettext tool #2264.
  • Fixed crash due to a layer height or first layer height being zero. Now the zero layer heights are reported and changed to 0.01mm #2277.
  • Fixed Unit tests failing due to latent Wipe Tower issues #2288.
  • Fixed an error, when PrusaSlicer 2.0.0 refused to import G-codes generated by the Slic3r PE #2304 #2374 #2618.
  • Fixed crash when exporting a config bundle in case no SLA printer profile was activated yet #2307 #2336 #2370 #2446 #2483 #2611.
  • Fixed loading of 3MF or AMF files not generated by the PrusaSlicer. If an AMF or 3MF file does not contain PrusaSlicer's configuration, and if it looks like a multi-part object, slicer now correctly asks whether to convert it to a multi-part object #2317 #2513 #2693.
  • Fixed setting of extruder for multiple part selection #2318.
  • Windows specific: Fixed an issue when trying to open a color picking dialog by clicking on the color field of the filament combo box on plater. Clicking worked over the left part of the color field due to HiDPI scaling not being handled correctly #2321.
  • Fixed repeated query "Do you mean 1% instead of 1mm" when setting extrusion width higher than 1mm. Now PrusaSlicer will ask just once #2326.
  • Fixed layout issue of the "Machine limits" parameter page #2331 #2512.
  • Linux specific: Fixed a crash after deleting settings group from the object list #2343.
  • Fixed crash after renaming an object to an illegal object name (likely Windows specific) #2348 #2459.
  • Fixed import of 3MF files not generated by PrusaSlicer (or Slic3r PE), containing multiple parts. Transformation matrices of the imported objects were not preserved when converting from multiple objects to multiple parts of a single object #2395.
  • OSX specific: Delete key now deletes objects in the 3D scene as well as backspace does #2401.
  • Fixed command line slicing if multiple configurations were loaded with the "--load" parameters, ending with the "Unable to slice in command line mode: Mixing configurations for FFF and SLA technologies" error #2426.
  • Reworked logic for Copy / Paste of volumes (support blockers, enforcers etc): 1) The pasted volume is shifted a bit only if inserted into the source object. If inserted into another object, the pasted volume is not shifted. 2) The source transformation and relative positions are maintained when pasting volumes into another object #2428.
  • Fixed print time estimator, which sometimes produced increased times for increased travel speed settings #1738 #2433.
  • Fixed a bug, where the number of extruders set at the Printer tab was not reflected by the Plater until the Print profile was saved, causing the "gear" button left to the filament combo box not switching to the selected filament #2440.
  • Fixed a typo at the "Usage" print out of the command line slicer: The command line application was renamed from slic3r to prusa-slicer #2484 thanks @stuartpb.
  • Automatic high power graphics card selection on Windows was working in Slic3r PE 1.41.3, broken in PrusaSlicer 2.0, now working again.
  • Fixed picking issues in the 3D scene on NVIDIA cards, leading to crashes and incorrect selection by rectangle. Due to the preceding issue, we only received a single report as most computers out there are laptops featuring an internal low power Intel GPU with a high power (NVIDIA or ATI) enabled on demand. The picking issue is caused by the NVIDIA driver not disabling multi-sampling fully if requested, leading to unexpected object identifiers returned for picks the boundary of objects. The issue has been worked around by introducing a checksum, which rejects these wrong object identifiers with a high probability #2506.
  • Fixed command line processing of vector command line arguments as extruder temperature #2516.
  • The "New Project" command now correctly resets the name of the active project #2520.
  • Fixed hang up of the Arrangement function on some objects #2536.
  • When changing extruder diameter for a "single extruder multi-material" setup, the extruder diameters of active virtual extruders are newly synchronized #2548.
  • It is now possible to select an extruder higher than 9 at the side bar #2558.
  • Fixed some crashes and weird behavior for objects standing on such a sharp edge, that it is too thin to fit an extrusion into. We have added a check to stop the backend from producing an invalid G-code. We may implement a significantly more complex solution later, trying to lower the object down by the number of layers with zero extrusions #2581, #2417, #2670
  • Fixed loading of .zip.amf files from command line #2593.
  • Fixed layout issues of the side panel for some localizations (for example French) #2621.
  • Fixed extruder selection issue ("0" was incorrectly shown instead of the "default" extruder identifier, and the "0" extruder was not processed correctly) #2642.
  • The "start_filament_gcode" was not inserted into G-code for a single extruder setup. This is now fixed. #2652.
  • Fixed crash when adding per-model options #2655 #2659.
  • Improved arrangement for large number of small objects #2656.
  • Fixed compilation on Linux against wxWidgets 3.0 due to wxString API change #2668 #2676.
  • Fixed occasional false reporting of out of print condition for SLA supports in the SLA print preview.
  • When accessing the localized web pages provided by Prusa Research, only those language codes are now passed to the Prusa Research web server, which are currently being localized by PrusaResearch. For example, there is no web page for "en_UK" or "en_AU", the "en_UK" code will be translated to "en_US". Slovak locales will be mapped to Czech #2724.
  • Fixed loading of the variable layer height profile and the SLA support points from 3MF files with instances. The layer height profiles and SLA support points were assigned to incorrect objects on loading if the objects had more then a single instance assigned.
  • Fixed update of the SLA slicing back end after loading of a project file, causing "disable supports" and "disable pad" flags being ignored.
  • Fixed an occasional crash when fixing degenerate STLs on loading.
  • Improved shading of 3D print paths. PrusaSlicer strives to conserve memory by sharing shading information on transitions of linear segments. This was found to cause shading artifacts, if one of the two neighboring segments was long. Newly the shading information is shared only for segments shorter than 2.5mm only.
  • Fixed volumetric flow visualization for the wipe tower extrusions.
  • Importing multi-part AMF or 3MF files is newly rejected in SLA mode.
  • Fixed color print preview, where sometimes the color change event was displayed one or more layers higher than it should.
  • If the color print events are added to a single material FDM print, and the printer is then switched to an SLA printer or a multi-material printer, the color print events are newly ignored: They are not shown at the layer slider, and the print path preview is switched to a "color by tool" mode, not "color by color change".
  • Firmware updater newly refuses to flash if there is no HEX file defined yet or no COM port selected.
  • Fixed firmware updater logic when switching between flashing the printer firmware or the MMU2 unit. Sometimes the COM port selection was not updated with the devices compatible with the loaded HEX file.
  • The preset updating logic was modified, so that if the user refuses a printer profile update on application start up, she or he will not be bugged with the same printer profile update query at the next application start up.
  • Modifier options that are not respected (for example the layer height) may no more be assigned to a modifier mesh #2623.
  • Fixed crashes when the application is closed while arrange or SLA optimize rotation is running.
  • The "Use legacy OpenGL 1.1" checkbox was removed from the Preferences dialog as we do not support OpenGL 1.1 rendering since PrusaSlicer 2.0.

Architecture, infrastructure

  • The PrusaSlicer development team switched to the latest Visual Studio 2019 Community Edition for Windows builds.
  • The heavy weight triangle meshes are newly being shared between the front end, back end, UndoRedo stack and the CopyPaste stack to conserve memory.
  • We have significantly reduced memory leaks at the end of the application.
  • We made first steps to reduce compiler warnings.
  • The old school admesh library was refactored to keep as little state as possible and to use std::vectors for allocation, console print outs were replaced with boost::log.

Linux distros

We are aware of the following new Linux distro packages of PrusaSlicer 2.0 provided by the community: