pkgsrc-WIP-changes archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

prusaslicer: Update to 2.9.0



Module Name:	pkgsrc-wip
Committed By:	Paul Ripke <stix%stix.id.au@localhost>
Pushed By:	stix
Date:		Mon Feb 17 22:16:11 2025 +1100
Changeset:	7145b204a364ee3fe80cee0bbaa383304b99090a

Modified Files:
	prusaslicer/COMMIT_MSG
	prusaslicer/Makefile
	prusaslicer/PLIST
	prusaslicer/distinfo
	prusaslicer/patches/patch-src_slic3r_GUI_GUI__App.cpp
	prusaslicer/patches/patch-src_slic3r_GUI_Plater.cpp
	prusaslicer/patches/patch-tests_arrange_test__arrange__integration.cpp
	prusaslicer/patches/patch-tests_libslic3r_test__emboss.cpp
	prusaslicer/patches/patch-tests_libslic3r_test__point.cpp
Added Files:
	prusaslicer/patches/patch-src_libslic3r_CutSurface.cpp
	prusaslicer/patches/patch-tests_fff__print_test__seam__scarf.cpp
	prusaslicer/patches/patch-tests_libslic3r_test__multiple__beds.cpp
Removed Files:
	prusaslicer/patches/patch-src_libslic3r_CMakeLists.txt
	prusaslicer/patches/patch-src_slic3r_Config_Version.cpp

Log Message:
prusaslicer: Update to 2.9.0

Also add patches to fix compatibility isues with cgal 6.0.x.

PrusaSlicer 2.9.0

Bugs fixed with respect to 2.9.0-rc1
- Fixed a crash in a specific case when slicing multimaterial-painted
  objects (#13676, #13798).
- Fixed a crash when slicing multimaterial-painted objects on a printer with
  less extruders than painted.
- Fixed highlighting of the active bed in case that the bed has a big custom
  model which would overlap neighboring beds (mentioned in #13791).

PrusaSlicer 2.9.0-rc1

Bugs fixed with respect to 2.9.0-beta1
- Windows specific: Export G-code button in the right panel was flickering on
  mouse move.
- The Slice Now button did not update after loading an object from the shape
  gallery (#13777).
- Fixed undefined behavior when sending G-code to print host. The issue only
  manifested on macOS with address sanitizer (#13766, #13759, #13750).
- A tenth bed was offered to the user after loading the project already
  containing maximum number of beds (a visual glitch, it was not possible to
  actually use the bed).
- Fixed empty thumbnail after adding a custom object into the shape gallery
  (bug introduced in 2.9.0-alpha1).
- Fixed freeze after a communication with Prusa Account returned a specific
  error code. This bug was uncovered by a problem on the server side couple of
  days ago which affected many PrusaSlicer users (#13768, #13762, #13765,
  #13762, #13745, #13757, #13758, #13748). Extra countermeasures were applied
  on both sides and they should prevent this from happening again.
- Fixed incomplete update when switching from FDM mode to SLA: out-of-bed
  status of volumes and thumbnails in bed selector were not updated correctly.
- Fixed a crash during slicing introduced between 2.9.0-alpha1 and 2.9.0-beta1.
- Fixed a crash when switching application language while using the bulk
  slicing screen.
- macOS specific: Loading screen displayed when web content is being loaded
  did not show.
Localization
- Updated POT.
- Updated CS, PL, DE, IT, ES, FR, JA dictionaries.
- Updated RU dictionary (#13438, thanks to @AndylgTom and Dmitry Sorkin).

PrusaSlicer 2.9.0-beta1

This is the first beta release of PrusaSlicer 2.9.0. This release introduces
more improvement related to multiple beds, several other improvements and
couple of bugfixes.

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

Important note for Linux users: As noted during 2.8.x releases, we are now
using Flathub as the only official distribution channel of PrusaSlicer on
Linux. The reasons behind this decision and what it means for you are
described at the end of 2.9.0-alpha1 release log.

Multiple beds - bulk slicing and export
It is now possible to schedule slicing of all prepared beds without switching
them manually. The bed selector dialog in Preview now has an extra button.
Pushing it activates a "bulk slicing" mode, and PrusaSlicer will start slicing
all the beds one by one. When it is finished, a combined print statistics is
shown.

It is also possible to export all the sliced beds using the usual button in the
right panel. It now opens an "Open folder" dialog, and after a folder is
selected, an extra dialog appears where it is possible to change names of the
individual files. One can also uncheck one or more of the beds to not export
them. The same dialog opens when sending multiple G-codes to Connect.

Support for printing with different nozzle diameters
Experimental support for printing with different nozzle diameters on multi-tool
printers, such as the Original Prusa XL, is now available for experienced users
and developers. This workflow allows combining nozzles of different diameters
(e.g., for fine perimeters and fast infill) but requires a few profile
adjustments.

Key changes:
- Automatic extrusion width calculation can be easily enabled (Print Settings ->
  Advanced -> Automatic extrusion widths calculation), adjusting based on nozzle
  diameter.
- Automatic infill combining (Print Settings -> Infill -> Automatic infill
  combination) helps optimize printing when using larger nozzles for infill.
  This feature, inspired by OrcaSlicer, simplifies setup. Thanks to OrcaSlicer
  for the idea!
- It is now possible to use the wipe tower and supports with multiple nozzles of
  different size.

Important Notes:
- Some nozzle combinations may not be compatible. Be cautious as these setups
  could lead to failed prints.
- For detailed step-by-step instructions and limitations refer to our help.
Closes #13159, #13587.

Other improvements with respect to 2.9.0-alpha1
- When using slicer from command-line interface and slicing a 3MF, the thumbnail
  in the 3MF is used for G-codes. Because thumbnail generator relies on OpenGL,
  PrusaSlicer cannot easily generate its own thumbnail. #7878
- When multiple beds are used, each is now labeled with a number. The number
  also appears in the Bed selector dialog in Preview, along with a status icon
  informing about current situation of the bed (not sliced / slicing in
  progress / slicing finished).
- Autocenter feature was removed. The feature was a candidate for removal for
  many years, because it caused more confusion than good.
- Extruder stall detection is disabled for XL before ramming.
- Bugs fixed with respect to 2.9.0-alpha1
- Loading binary G-codes into standalone G-code Viewer was extremely slow.
- Fixed issues with 'avoid crossing perimeters' feature (#13445, #13478, #12432,
  #13669).
- Fixed incorrect display of volumetric flow rate in preview when "Use relative
  distances" was switched off (#13623).
- Fixed never-ending loading cursor on Linux when loading webpage in WebView
  panels.
- Fixed arrange not arranging to front on XL (#13650).
- Fixed wipe tower not auto-disabling on single filament print on MM printer
  (#13649).
- Fixed export of M73 C lines to G-code to fix displaying remaining time to
  color change. This was partially fixed in 2.9.0-alpha1 already, but not in
  all cases. #4734, #12849
- Fixed couple of camera glitches.
- Fixed missing updates of shells in preview after moving object using the right
  panel.
- Fixed incorrect placement of objects after cut (they would end up on an
  unexpected bed). #13637
- Stopped displaying warning dialog with "Error running JavaScript" phrase
  (#12950).
- Fix objects incorrectly rearranging after saving and reloading a 3mf in
  2.9.1-alpha1 (#13651).
- Custom G-codes and ColorChanges did not load from project when multiple beds
  were used (#13651).
- Object names emitted into G-code for Cancel Object G-codes are now trimmed.
  Very long names were causing issues when sending the G-code using OctoPrint
  (#13314).
- Changed reading of keyboard shortcuts in WebView on MacOS. Current
  implementation of wxWidgets's WebView has completely different approach to
  keyboard shortcuts. On Widows, all kind of WebView shortcuts are read and
  implemented while no "PrusaSlicer shortcuts" are read. On Linux it is opposite
  situation - only "PrusaSlicer shortcuts" are read inside WebView. It is not
  the best, but behavior on Windows and Linux is acceptable. While on Mac no
  shortcuts are read at all. So far we have added reading and handling of
  cmd + Q, cmd + M and cmd + R. In future we would like to unify shortcut
  reading on all platforms.
- Menu button "Reload from disk" and "Reload WebView Content" now correctly
  share "F5" shortcut. Reload from disk shortcut was not working in last
  release (#13693).
- Fix of clipping logic for clipping arcs with negative radius. (#13678).
- Fix splitting to object moving some of the just split object parts to a
  different bed (#13661).
- Fix of search bar losing focus while typing (#13691, thanks to @themanyone).
- Fixed slow generation of cancel object polygons by performing union operation
  of polygons incrementally.
- Prevent empty slicing notification when switching beds.
- Height range painting tool now always use world coordinates and thus works
  correctly with rotated objects (13631).
- During startup, non-flatpak desktop files of older PrusaSlicer versions are
  silently searched for and deleted. This is necessary for correct opening of
  our custom URL (used for login and model opening from Printables).
  Unfortunately searching for desktop files has troubles to search all possible
  paths due flatpak changing XDG_DATA_HOME and XDG_DATA_DIRS which stores
  potential paths for desktop file creation. Thus some old desktop files might
  remain in the system. In such case, it is possible to delete those inside the
  old version with Configuration -> Desktop Integration -> Undo.
- Fix of uninitialized ExtrusionLine when Fuzzy skin was applied on Arachne
  extrusions to fix combining Fuzzy Skin and Seam Painting (#13614).
- Fixed incorrect seam placement with painted fuzzy skin (#13640, #13614).
- Fixed negative seam gap values causing invalid extrusion generation (#13678).
- Fix missing update of preview when switching beds in 3D scene.
- Fix empty layers when multi-material painting and modifiers are used (#13645).
- Fix of ignored assigned extruders to modifiers when multi-material painting
  is used (#13645).
Infrastructure
- Fix CMake bugs leading to build errors on Gentoo and possibly other linux
  distributions (PR #13609 by @jmickelin building upon PR #13080 by @Rose-

PrusaSlicer 2.9.0-alpha1

This is the first alpha release of PrusaSlicer 2.9.0. This release introduces
support for multiple beds, Printables integration, scarf seams, better fuzzy
skin and other improvements and bugfixes.

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.

Important note for Linux users: As noted during 2.8.x releases, we are now using
Flathub as the only official distribution channel of PrusaSlicer on Linux. The
reasons behind this decision and what it means for you are described at the end
of this release log. Thanks for your understanding

Multiple beds (#10704)
It is now possible to work with multiple beds in the scene. This allows the user
to handle more complicated projects (which do not fit a single bed) more easily
than before. This feature is already known to BambuStudio users (the
implementation in PrusaSlicer is completely independent).

Beds handling
To make the workflow fluid and not intrusive to users using only a single bed,
there are no buttons to add or remove beds. A new bed is offered anytime you are
dragging an object outside of bed for more than 1 second (unless the object is
dragged to the new bed position faster, in which case it shows up immediately).
This allows to create a bed and place an object on it in a single operation. The
beds are placed in a compact grid pattern, with a hard limit of 9 beds. One bed
is always set as active, which is controlled by left-clicking it. Operations
such as "Import STL" and similar are processed on the active bed. The individual
beds can be thought of as almost independent projects, each having its own set
of color changes, its own wipe tower and so on. Currently the only limitation is
that all the beds must use the same configuration (i.e. you cannot have an MK4
bed next to a MINI).

Arrange
The Arrange button in the top toolbar was duplicated. The arrange function can
either do the global arrange (as it always could) or arrange only objects on the
active bed (which includes objects partially on it). The settings dialog shown
when right-clicking the button is common to both.

Compatibility with older PrusaSlicer
To keep the number of changes to our 3MF project files as small as possible,
the positions of the beds are not explicitly saved, but they are instead
inferred from positions of the objects. The new project files can therefore be
loaded into older versions of PrusaSlicer (they obviously do not show the extra
beds, though). As for loading older PrusaSlicer projects. PrusaSlicer actually
had minimal concept of virtual beds for many years, which is obvious from
Arrange function. When there were too many objects to place on a single bed,
PrusaSlicer would keep adding them spaced as if there were other beds next to
each other. If you load such a project into PrusaSlicer 2.9.0, this situation
is detected and the objects on these virtual "beds" are moved so they actually
end up on a non-virtual bed in the grid.

Preview
When switching to Preview, a bed selector toolbar is shown in the top-right
corner, which was the last remaining space where nothing was placed yet. We were
considering a bigger reorganization of the Preview scene, but in the end we
decided to purposefully leave the controls where they were so we do not break
what people are used to. We are planning to do a general overhaul in future,
so it makes sense to us to postpone the big changes to do them in one go.
Switching the beds in Preview moves the camera so the bed switched to is in the
same position as the one switched from. The 'Sliced Info' statistics and
'Export G-code' button in the right panel are related to currently active bed.

What is in the works
It is currently not possible to slice all the beds in one step. This will be
added before the 2.9.0 final. We only released the alpha a bit early to start
collecting feedback.

Printables integration (#13207)
Printables.com has been fully integrated into the PrusaSlicer ecosystem,
complementing the earlier integration of Prusa Connect in version 2.8.0.
Printables is now a persistent tab in the top bar, available to all users
regardless of login status. While anonymous users can browse and download
models, logged-in users gain access to additional features such as managing
collections, viewing liked and downloaded models, and sending G-code directly
to Prusa Connect.

On model pages, three key functions - Slice, Download and Print - interact
seamlessly with PrusaSlicer. The Slice button, identifiable by the PrusaSlicer
logo, mirrors the functionality of the browser version. Clicking it redirects
the user to the Plater tab, where the download starts automatically. The
destination directory for downloads can be set in Configuration ->
Preferences -> Others. The download notification now includes a link back to
the model page on Printables. Once the download is complete, the data is
added to the Plater using the same logic as the drag-and-drop mechanism.

The Download button provides similar functionality with two key differences.
First, the user remains on the Printables tab, with a simple notification
confirming the download in the bottom-right corner. As with Slice, a detailed
notification is available in the Plater tab, including a button to open the
destination directory. Second, the downloaded file is not opened or added to
the Plater.

The Print button is exclusively for logged-in users and enables direct printing
of G-code files. A background check between Printables and Prusa Connect
ensures printer model compatibility. If a suitable printer is detected, users
can start printing directly from Printables without needing to slice or
download the model. A printer selection dialog, similar to the upload dialog in
PrusaSlicer, is displayed to complete the process.

Printables is implemented as a webpage within a WebView, allowing its content
and functionality to improve independently of PrusaSlicer releases.

Scarf seams (#11621)
A feature dubbed "scarf seams" by the community is introduced. The main purpose
of this feature is hiding visible seams on smooth perimeters. It is achieved by
overlapping extrusions at the start and end of a perimeter loop. The name of
the feature originates from a similar technique in woodworking called "scarf
joint". It is possible to turn on scarf seams for both inner and outer
perimeters and to turn it off for holes in a print (e.g. a hole for a screw).
Also, by default, when scarf seams are turned on, it only generates the scarfs
if the perimeter is considered smooth. This can be turned off. Currently, the
scarf seams are best visualized using the "Actual volumetric flow rate" option
in the preview legend. This way it is clearly visible where the scarf joint
begins and ends.

In the image above there is a cylinder printed with both a normal seam and
scarf seam. Number one is the scarf seam start, number two is the scarf seam
end and number three is a normal seam. The scarf seam greatly reduces the
visibility of the usual seam. Yet, it is not a silver bullet as it may
generates a new "ghost" seam, albeit way less visible than the original seam.

Settings related to scarf seams are located under Print Settings -> Layers
and Perimeters -> Advanced.

It is important to note that scarf seams are not our original idea. As far as
we know the original idea came from @MichaelJLew in #11621 and simultaneously
from @vgdh in SoftFever/OrcaSlicer#3211. The feature was then implemented by
@Noisyfox to OrcaSlicer in SoftFever/OrcaSlicer#3839. Even though our
implementation is original (because of our specific code base needs), for the
most part the functionality mimics the available functionality in OrcaSlicer.
We would like to express our gratitude to the many people that got directly or
indirectly involved with the development of this feature, with a special thank
you to @Noisyfox who did a lot of the heavy lifting required to implement it in
OrcaSlicer.

Fuzzy skin improvements
Since fuzzy skin was integrated into PrusaSlicer, it was always applied to the
whole perimeter. This behavior had drawbacks, such as when fuzzy skin was
applied to the modifier, objects were split into several regions, and each
region had its own perimeters that divided the layer into several parts (#6881,
@Noisyfox, which was the base for our implementation.

We incorporated several other fuzzy skin improvements (like poor randomness)
into PrusaSlicer, which were developed by the OrcaSlicer community. Thanks to
@Noisyfox, @SoftFever, @SeaRyanC, and @andrewboktor for improvements of the
fuzzy skin.

We believe that the above mentioned improvements will lead to fuzzy skin being
more used together with modifiers. To make it more convenient to use, we also
introduced the fuzzy skin painting tool. The fuzzy skin painting is similar to
the multi-material tool and the support painting tool, so now fuzzy skin can be
easily painted where it is needed without playing with modifiers (#6988). The
tool is available from the left toolbar.

Improvements in painting tools and multimaterial segmentation
- Smart fill and bucket fill automatically paint tiny triangles around selected
  areas. Such triangles often exceeded the angle limit and were left unpainted,
  negatively affecting multi-material segmentation.
- Added the slider to specify the maximum angle between triangles that the
  bucket fill will select.
- Added height range painting tool into multi-material painting tool for
  painting objects between two horizontal lines. We were inspired by this tool
  in BambuStudio but implemented it from scratch to ensure that it works
  smoothly on detailed models.
- Sped up painting using the single triangle brush, which was especially slow on
  detailed models.
- Fixed unintended short sliders in the support painting gizmo.
- The projection of painted models onto slices in multi-material segmentation
  has been improved. We fixed various types of artifacts and made the
  projection more precise. This means the sliced models will now better match
  how they were painted (#8745, #12616).
- Improved multi-material segmentation for painted volume objects. Previously,
  multi-material segmentation was used just for painted volumes, and handling
  of the default extruder was done later during the slicing process, which was
  unpredictable and confusing for users. Because it could happen that in the
  place where two volumes were touching, there could be a change in the used
  extruder. Since this PrusaSlicer version, when at least one volume is
  multi-material painted, the whole multi-volume object is processed by
  multi-material segmentation, and the handling of the default extruder is left
  on multi-material segmentation.

Other improvements with respect to 2.8.1
- Reduced splitting of extrusions when the pressure equalizer is enabled.
  Extrusions were split into too many even when the feedrate barely changed.
- Avoid emitting Z-axis coordinates for every g-code command when the pressure
  equalizer is enabled. Z-axis coordinates are now emitted only when Z-axis
  coordinates actually change.
- We reconsidered the decision to remove the "Ensure vertical shell thickness"
  option. We bring back this parameter by combining PR by @vovodroid (#11950)
  and implementation in OrcaSlicer by @SoftFever. Now, there are three options
  for "Ensure vertical shell thickness": Enabled, Partial, and Disabled. Partial
  is similar to behavior when "Ensure vertical shell thickness" is unchecked in
  the older PrusaSlicer versions. Disabled produces additional extrusion only to
  support top layers (#223, #1054, #6853, #9898, #10102, #10191, #10202, #10827,
  #10926).
- Added hypertext link that opens the printer dashboard into the notification
  about sending files into Connect.
- It is now possible to start PrusaSlicer GUI from the command line with
  specified printer, print, and material profiles using the following arguments:
  --print-profile, --printer-profile and --material-profile (#13327). Until now,
  the arguments could only be used in the headless mode.
- Several performance improvements of ConfigWizard together with improvements of
  ConfigWizard UI.
- Remove export to the AMF file format from CLI. Export into the AMF file format
  was previously removed from GUI in PrusaSlicer 2.4.0.
- Behavior of WebView tabs is changed. Until user clicks and opens the tab,
  WebView is not created. This is particularly effective on Windows, where
  WebView spawns several processes for each tab. This applies for Connect,
  Physical printer and the new Printables tabs. #13127
- 'Reload WebView' action was added. Accessible from the View menu, 'Reload
  WebView Content' button or F5 key reloads currently visible WebView.
  Unfortunately keyboard reading with WebView / WebKit libraries does not work
  reliably on all platforms and is subject of further improvements.
- Reload button is also present on error page displayed in WebView. This could
  be helpful e.g. when user forgets to turn on their physical printer before
  clicking the Physical printer tab.
- Upload to Connect dialog now has larger default size.

Bugs fixed with respect to 2.8.1
- Covered parts of top and bottom layers are now ignored during multi-material
  segmentation.
- Fixed overriding of multi-material painted top or bottom layer on low objects
  (#13252).
- Fixed painting on broken meshes (#13142).
- Fixed top layers incorrectly classified as a bridge. Thanks to @SoftFever.
- Added parameter for setting the gap between the start and the end of
  perimeter loops (#2503).
- Emboss tool was failing when attempting to load a file from path containing
  non-ASCII characters (#13123).
- Fixed Gtk-CRITICAL ** errors filling up logs (#4935, #13092, thanks to
  @themanyone).
- Fixed avoid crossing perimeters on layer change (#13445, #13478).
- Fix rear seam not aligned to rear sharp corner (#13518).
- Fix nearest seam would detect very tiny corners in geometry (#13072).
- Fix limiting of feedrate by z-travel speed (#13420).
- Fine tune seam placing algorithm - allow more flexibility when picking
  aligned seam points.
- Fixed warning dialog to correctly show multiple slicing warnings.
- Fixed export of M73 C lines to G-code to fix displaying remaining time to
  color change (prusa3d/Prusa-Firmware#4734).
- Fixed brush freeze when changing size using "Alt+mouse wheel" in the
  painting tools.
- Fixed a crash on Esc key when editing text in gizmos (#13458).
- Fixed a crash when infill density is changed to 100% (#13450).
- Fixed incompatible profiles with parentheses in name (#13554).
- Fixed reading of right Alt key in painting gizmos.
- Linux only: Fixed issues with WebView showing just a blank page (#12969
  #13046).
- Fixed drag & drop of several files at once including 3mfs and zip files.
- Improved Configuration Wizard to select SLA printer when multipart object is
  in on the bed.
- Fixed an internal issue potentially causing problems with path planning
  (although the problematic case was not identified). Thanks to @supermerill
  for spotting and fixing the issue (#13331).

Linux: Distribution through Flathub (#1124, #9776)
We have decided to move to Flatpak and use Flathub as the official means of
distributing our application on Linux. The Flathub package here is now
officially endorsed. You can follow the steps provided on the Flathub page.

Here is a quick guide on how to use flatpak from the terminal. This is
required to try out the alpha, beta and rc releases.

First, make sure you have flatpak installed and Flathub correctly set up.
You can follow the steps at https://flatpak.org/setup/.

If you want to try out the alpha (such as this one), beta and rc versions
you must add the flathub-beta repository (you only need to do this once):

flatpak remote-add --if-not-exists flathub-beta https://flathub.org/beta-repo/flathub-beta.flatpakrepo

To install the latest version of PrusaSlicer:

flatpak install flathub com.prusa3d.PrusaSlicer      # for stable
flatpak install flathub-beta com.prusa3d.PrusaSlicer # for the unstable versions

To run PrusaSlicer from the terminal, you can do:

flatpak run com.prusa3d.PrusaSlicer       # for stable
flatpak run com.prusa3d.PrusaSlicer//beta # for the unstable versions

Note that you can run all the mentioned commands with the --user option if you
do not have the superuser privileges on your machine.

Please understand that publication of PrusaSlicer on Flathub has to be preceded
by the publication on our GitHub. This means that there will always be certain
delay (typically couple of hours) before the new release shows up on Flathub.
This is the expected behaviour, the extra time is needed to build the Flathub
binary.

Config migration
Config folder location on your machine for the new Flatpak version of
PrusaSlicer is different to the one used by the AppImage. PrusaSlicer will
automatically ask you if you want to migrate your old AppImage config to the
new location. If you prefer or are afraid of data loss, you can also do this
manually. The Help -> Show configuration folder utility in PrusaSlicer can aid
you with doing just that.

Special thanks
Special thanks belong to @xarbit and @eliadevito who were keeping PrusaSlicer
community flatpak up to date for the past several years. Their commitment
provided a great service to many users that used the flatpak version before
this release. Also, the work was an invaluable resource when migrating our
infrastructure to flatpak. Last but not least, shout-out to @xarbit who helped
us with the migration itself.

Reasons for moving to Flatpak
We understand that the decision may make some people angry and raise questions
about why we are leaving something that "just works" (the AppImage). Why did we
decide to leave AppImage in favor of Flatpak? There are multiple reasons. First
of all, AppImage is not designed to bundle "everything". There are still
assumptions about the target system that must hold for the AppImage to work. It
is up to the developer to decide what to bundle with the application, and doing
this decision requires to check and test on all the targeted Linux
distributions, which kind of kills the whole purpose. Also, some libraries may
be almost or completely impossible to bundle (such as glibc or webkit). The
AppImage itself requires certain version of libfuse to be present on the target
system, otherwise it does not start at all, and because some Linux
distributions have upgraded from libfuse2 to libfuse3, this brings another
problem into the equation. The need to use old glibc for compatibility reasons
forces us to build on older distros (not to mention that we would like to
provide both x64 and arm64 builds). To summarize this all, the amount of work
required to keep our build infrastructure running is consuming resources that
we would much rather spend on PrusaSlicer itself.

Flatpak is a tool that is already proven by time, and it solves the problem
that we need to solve - it bypasses the dependency hell created by the
existence of many Linux distributions and different versions of everything.
The main idea is that the application is built against a defined runtime,
which is then downloaded on the target computer and the application is run
against it. The biggest complain people have about Flatpak is that it downloads
too much data to run a single application (although a runtime is only
downloaded once for all applications that rely on it). However, Flatpak only
does what people assume the AppImage was doing - it bundles everything. This
is not Flatpak's fault, it is really the price paid for the Linux freedom,
which effectively makes every distribution is a separately maintained platform.

Flatpak also provides better user experience regarding desktop integration and
application updates, and it is able to control permissions that the
applications have through its sandboxing mechanism. Although this may not be
appealing to all Linux users, we believe that these points are valuable to most.

Thank you for your understanding.

To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=7145b204a364ee3fe80cee0bbaa383304b99090a

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

diffstat:
 prusaslicer/COMMIT_MSG                             |   2 +-
 prusaslicer/Makefile                               |   6 +-
 prusaslicer/PLIST                                  |  20 ++-
 prusaslicer/distinfo                               |  21 +--
 .../patches/patch-src_libslic3r_CMakeLists.txt     |  31 ----
 .../patches/patch-src_libslic3r_CutSurface.cpp     | 198 +++++++++++++++++++++
 .../patches/patch-src_slic3r_Config_Version.cpp    |  14 --
 .../patches/patch-src_slic3r_GUI_GUI__App.cpp      |  24 +--
 .../patches/patch-src_slic3r_GUI_Plater.cpp        |  23 +--
 ...ch-tests_arrange_test__arrange__integration.cpp |  12 +-
 .../patch-tests_fff__print_test__seam__scarf.cpp   |  20 +++
 .../patches/patch-tests_libslic3r_test__emboss.cpp |  69 ++++++-
 .../patch-tests_libslic3r_test__multiple__beds.cpp |  13 ++
 .../patches/patch-tests_libslic3r_test__point.cpp  |   6 +-
 14 files changed, 359 insertions(+), 100 deletions(-)

diffs:
diff --git a/prusaslicer/COMMIT_MSG b/prusaslicer/COMMIT_MSG
index 488fd1467c..ec0c4b0aff 100644
--- a/prusaslicer/COMMIT_MSG
+++ b/prusaslicer/COMMIT_MSG
@@ -1,4 +1,4 @@
-cad/prusaslicer: Add prusaslicer version 2.8.0
+cad/prusaslicer: Add prusaslicer version 2.9.0
 
 PrusaSlicer takes 3D models (STL, OBJ, AMF) and converts them into G-code
 instructions for FFF printers or PNG layers for mSLA 3D printers. It's
diff --git a/prusaslicer/Makefile b/prusaslicer/Makefile
index cae9f4b63a..e2782553c1 100644
--- a/prusaslicer/Makefile
+++ b/prusaslicer/Makefile
@@ -1,6 +1,6 @@
 # $NetBSD$
 
-PKGVERSION=	2.8.1
+PKGVERSION=	2.9.0
 PKGNAME=	prusaslicer-${PKGVERSION}
 DISTNAME=	PrusaSlicer-${PKGVERSION:C/(alpha|beta|rc)/-\1/}
 CATEGORIES=	cad
@@ -18,7 +18,7 @@ LICENSE=	gnu-agpl-v3
 ONLY_FOR_PLATFORM=	*-*-aarch64 *-*-x86_64 *-*-earmv6 *-*-earmv7 *-*-i386
 
 # Uses std::to_chars_result from <charconv> which is actually gcc8+.
-GCC_REQD+=		10
+# GCC_REQD+=		10
 USE_LANGUAGES=		c c++
 USE_CXX_FEATURES=	c++17
 USE_TOOLS+=		gmake pkg-config:run
@@ -47,6 +47,7 @@ pre-configure:
 .include "../../devel/catch2/buildlink3.mk"
 .include "../../devel/cmake/build.mk"
 .include "../../devel/glib2/buildlink3.mk"
+.include "../../devel/gmp/buildlink3.mk"
 .include "../../devel/libepoll-shim/buildlink3.mk"
 .include "../../devel/libffi/buildlink3.mk"
 .include "../../devel/pango/buildlink3.mk"
@@ -63,6 +64,7 @@ pre-configure:
 .include "../../graphics/tiff/buildlink3.mk"
 .include "../../math/eigen3/buildlink3.mk"
 .include "../../math/imath/buildlink3.mk"
+.include "../../math/mpfr/buildlink3.mk"
 .include "../../math/qhull/buildlink3.mk"
 .include "../../net/libsoup/buildlink3.mk"
 .include "../../parallel/threadingbuildingblocks/buildlink3.mk"
diff --git a/prusaslicer/PLIST b/prusaslicer/PLIST
index e970972e5e..e9b2eb0ff6 100644
--- a/prusaslicer/PLIST
+++ b/prusaslicer/PLIST
@@ -42,6 +42,7 @@ share/PrusaSlicer/icons/align_vertical_bottom.svg
 share/PrusaSlicer/icons/align_vertical_center.svg
 share/PrusaSlicer/icons/align_vertical_top.svg
 share/PrusaSlicer/icons/arrange.svg
+share/PrusaSlicer/icons/arrange_current.svg
 share/PrusaSlicer/icons/attention.svg
 share/PrusaSlicer/icons/browse.svg
 share/PrusaSlicer/icons/bullet_black.png
@@ -130,6 +131,8 @@ share/PrusaSlicer/icons/flag_green.svg
 share/PrusaSlicer/icons/flag_red.svg
 share/PrusaSlicer/icons/funnel.svg
 share/PrusaSlicer/icons/fuzzy_skin.svg
+share/PrusaSlicer/icons/fuzzy_skin_painting.svg
+share/PrusaSlicer/icons/fuzzy_skin_painting_.svg
 share/PrusaSlicer/icons/gcode.icns
 share/PrusaSlicer/icons/hollow.svg
 share/PrusaSlicer/icons/hollowing.svg
@@ -210,7 +213,9 @@ share/PrusaSlicer/icons/notification_preferences_hover.svg
 share/PrusaSlicer/icons/notification_right.svg
 share/PrusaSlicer/icons/notification_right_hover.svg
 share/PrusaSlicer/icons/notification_warning.svg
+share/PrusaSlicer/icons/notification_warning_grey.svg
 share/PrusaSlicer/icons/number_of_copies.svg
+share/PrusaSlicer/icons/numbers.png
 share/PrusaSlicer/icons/objlist_info.svg
 share/PrusaSlicer/icons/open.svg
 share/PrusaSlicer/icons/open_browser.svg
@@ -225,6 +230,9 @@ share/PrusaSlicer/icons/plater.svg
 share/PrusaSlicer/icons/plug.svg
 share/PrusaSlicer/icons/preview.svg
 share/PrusaSlicer/icons/preview_menu.svg
+share/PrusaSlicer/icons/print_finished.svg
+share/PrusaSlicer/icons/print_idle.svg
+share/PrusaSlicer/icons/print_running.svg
 share/PrusaSlicer/icons/printer.svg
 share/PrusaSlicer/icons/printer_available.svg
 share/PrusaSlicer/icons/printer_busy.svg
@@ -266,6 +274,7 @@ share/PrusaSlicer/icons/sla_printer_offline.svg
 share/PrusaSlicer/icons/sla_supports.svg
 share/PrusaSlicer/icons/sla_view_original.svg
 share/PrusaSlicer/icons/sla_view_processed.svg
+share/PrusaSlicer/icons/slice_all.svg
 share/PrusaSlicer/icons/snap.svg
 share/PrusaSlicer/icons/spin_dec.svg
 share/PrusaSlicer/icons/spin_dec_act.svg
@@ -591,6 +600,8 @@ share/PrusaSlicer/profiles/FLSun/QQSP_bed.stl
 share/PrusaSlicer/profiles/FLSun/QQSP_thumbnail.png
 share/PrusaSlicer/profiles/Geeetech.idx
 share/PrusaSlicer/profiles/Geeetech.ini
+share/PrusaSlicer/profiles/Geeetech/105x105.stl
+share/PrusaSlicer/profiles/Geeetech/105x105.svg
 share/PrusaSlicer/profiles/Geeetech/125X130.stl
 share/PrusaSlicer/profiles/Geeetech/125x130.svg
 share/PrusaSlicer/profiles/Geeetech/150x150.stl
@@ -625,6 +636,8 @@ share/PrusaSlicer/profiles/Geeetech/GiantArmD200_thumbnail.png
 share/PrusaSlicer/profiles/Geeetech/I3ProB_thumbnail.png
 share/PrusaSlicer/profiles/Geeetech/I3ProC_thumbnail.png
 share/PrusaSlicer/profiles/Geeetech/I3ProW_thumbnail.png
+share/PrusaSlicer/profiles/Geeetech/M1.svg
+share/PrusaSlicer/profiles/Geeetech/M1_thumbnail.png
 share/PrusaSlicer/profiles/Geeetech/MeCreator2_thumbnail.png
 share/PrusaSlicer/profiles/Geeetech/MeCreator_thumbnail.png
 share/PrusaSlicer/profiles/Geeetech/MeDucer_thumbnail.png
@@ -788,6 +801,7 @@ share/PrusaSlicer/profiles/RatRig/rr-vminion.stl
 share/PrusaSlicer/profiles/RatRig/rr-vminion.svg
 share/PrusaSlicer/profiles/RatRig/vc4-corexy.png
 share/PrusaSlicer/profiles/RatRig/vc4-hybrid.png
+share/PrusaSlicer/profiles/RatRig/vc4-idex.png
 share/PrusaSlicer/profiles/Rigid3D.idx
 share/PrusaSlicer/profiles/Rigid3D.ini
 share/PrusaSlicer/profiles/Rigid3D/Mucit2_thumbnail.png
@@ -1062,9 +1076,11 @@ share/PrusaSlicer/shapes/torus.png
 share/PrusaSlicer/shapes/torus.stl
 share/PrusaSlicer/shapes/universal wall mount hole.png
 share/PrusaSlicer/shapes/universal wall mount hole.stl
+share/PrusaSlicer/web/connect_error.html
 share/PrusaSlicer/web/connect_loading.html
-share/PrusaSlicer/web/connection_failed.html
-share/PrusaSlicer/web/loading.html
+share/PrusaSlicer/web/error_no_reload.html
+share/PrusaSlicer/web/other_error.html
+share/PrusaSlicer/web/other_loading.html
 share/applications/PrusaGcodeviewer.desktop
 share/applications/PrusaSlicer.desktop
 share/icons/hicolor/128x128/apps/PrusaSlicer-gcodeviewer.png
diff --git a/prusaslicer/distinfo b/prusaslicer/distinfo
index 17bff5f349..8add687a73 100644
--- a/prusaslicer/distinfo
+++ b/prusaslicer/distinfo
@@ -1,8 +1,8 @@
 $NetBSD$
 
-BLAKE2s (PrusaSlicer-2.8.1.tar.gz) = 4dd2f00cef8d9ff80030c0e637a9882492e945c5390949e2155fada333d0ae9d
-SHA512 (PrusaSlicer-2.8.1.tar.gz) = 0471fa579a494d66e6b49c0bc1a9fa91f3a5f9147d8b7fa8133c6f03391f8daddddb19ed222d1be44f6f22e2de3021f3fb839331e3c3ccdf5643caa8a61d6912
-Size (PrusaSlicer-2.8.1.tar.gz) = 69409077 bytes
+BLAKE2s (PrusaSlicer-2.9.0.tar.gz) = f3aece9c36b69327f5d241e14505c90a6125507e9a0882f445b5f6269931188c
+SHA512 (PrusaSlicer-2.9.0.tar.gz) = 554099ba827f8b4af37727d4e99ad6b2f339c530f35a4f8e63f0c5aaf455a5fc3261b983939c487f76964c522ea8ecd13527efea7f881749f907a039cfe7ef89
+Size (PrusaSlicer-2.9.0.tar.gz) = 70604482 bytes
 SHA1 (patch-CMakeLists.txt) = 293c5116b1ec1c4fa733bf18f6e9ab8c19f7bad4
 SHA1 (patch-bundled__deps_CMakeLists.txt) = 9fad4b02132498a6bf06e0e53ed7626fa8b60b67
 SHA1 (patch-bundled__deps_avrdude_avrdude_arduino.c) = c03d11e4648054fc8e5028da3838400d61c27a95
@@ -10,7 +10,7 @@ SHA1 (patch-bundled__deps_avrdude_avrdude_libavrdude.h) = a0d56b68dba55d58202352
 SHA1 (patch-bundled__deps_localesutils_LocalesUtils.cpp) = 18cbf76d545828bc97bb765b470f2aa4ef5e8a8e
 SHA1 (patch-bundled__deps_localesutils_LocalesUtils.hpp) = 9c6228e2db7bf4aedb29dec656c1995305afd8a2
 SHA1 (patch-cmake_modules_FindOpenVDB.cmake) = 4f2afc423a70fe60617b33ff7f26859b39775faa
-SHA1 (patch-src_libslic3r_CMakeLists.txt) = 6ef9dd160b0a4f83e692192c57bf4b0f8ae63126
+SHA1 (patch-src_libslic3r_CutSurface.cpp) = a6a702e0fe32bc9b37136299e14c715f62943ab7
 SHA1 (patch-src_libslic3r_GCodeSender.cpp) = bd69c52e92ff85dba7f357eab62788a8e67a440e
 SHA1 (patch-src_libslic3r_Platform.cpp) = 3066585efc98ba4963e41bda5952df38a7b095a0
 SHA1 (patch-src_libslic3r_Platform.hpp) = 5626058616d04396bff6c8550951d04fe03249e4
@@ -19,7 +19,6 @@ SHA1 (patch-src_libslic3r_Thread.cpp) = 8aa488b933baa97132058f88a82eef8db73ab2f5
 SHA1 (patch-src_libslic3r_Utils_DirectoriesUtils.cpp) = 02c874c348016d572ddf8fed3171aabe2d4550c0
 SHA1 (patch-src_occt__wrapper_CMakeLists.txt) = d1d3405bd68e32d204eaf95a578f4f837571f391
 SHA1 (patch-src_slic3r_CMakeLists.txt) = f6ad2741c3eb3c28550cedf5a07799866944b247
-SHA1 (patch-src_slic3r_Config_Version.cpp) = 45dd3d5e514952796e973c37adbcc0f51e3b83ae
 SHA1 (patch-src_slic3r_GUI_BitmapCache.cpp) = 9a464bcb09589e12de70ce57cda17f526df33b9b
 SHA1 (patch-src_slic3r_GUI_ConfigWizard.cpp) = a8bd1d621f73ae6464b1ba4a5cb1db965e8e551b
 SHA1 (patch-src_slic3r_GUI_DesktopIntegrationDialog.cpp) = 35ccd8882313eb3270e88c47d496d62db96f4d36
@@ -30,7 +29,7 @@ SHA1 (patch-src_slic3r_GUI_Field.cpp) = a0901064c68aa5e6c2396ccec36018e45f92fbcb
 SHA1 (patch-src_slic3r_GUI_GLCanvas3D.cpp) = 11e42a87d7124ac92027af9e385533f0455d788b
 SHA1 (patch-src_slic3r_GUI_GUI.cpp) = ab8bb26e14f17eed20587693ac1ef568b8cd8cd5
 SHA1 (patch-src_slic3r_GUI_GUI.hpp) = 52442f3881564cfe7c31ff51d63c96129f162aed
-SHA1 (patch-src_slic3r_GUI_GUI__App.cpp) = cbd17407fbacbe0a91dc97b4c05b338377e73497
+SHA1 (patch-src_slic3r_GUI_GUI__App.cpp) = a42a15c7309aeff4616dd376b51ceb4402c210b3
 SHA1 (patch-src_slic3r_GUI_GUI__Factories.cpp) = a3db8dc6e41c4df3cba7282fdd0cdadd1bc7d956
 SHA1 (patch-src_slic3r_GUI_GUI__ObjectLayers.cpp) = da99be89d62efffceaccc81ade8e55e1fadb7919
 SHA1 (patch-src_slic3r_GUI_GUI__Utils.cpp) = bcbc83109ba7806e6371d0ef10f3c05cc480d730
@@ -44,7 +43,7 @@ SHA1 (patch-src_slic3r_GUI_Mouse3DController.hpp) = 6a008114e932b08951428b6fa882
 SHA1 (patch-src_slic3r_GUI_OpenGLManager.cpp) = 53d116ee715dd3c90bad11c55659c538f49007ea
 SHA1 (patch-src_slic3r_GUI_OptionsGroup.cpp) = c413f24a9a50069b93bdd611b95fa85ccab45567
 SHA1 (patch-src_slic3r_GUI_PhysicalPrinterDialog.cpp) = 5dbe3c5c19ce5d03b5dd310af484b712b091efda
-SHA1 (patch-src_slic3r_GUI_Plater.cpp) = 840abde0ab6e033787c301f8157a291699f31158
+SHA1 (patch-src_slic3r_GUI_Plater.cpp) = 298b3c9fed809d9a316e663bb4428adafa31b0dc
 SHA1 (patch-src_slic3r_GUI_Preferences.cpp) = 37459f9fa37751e0b72ba8538eb44c286a5174d4
 SHA1 (patch-src_slic3r_GUI_PresetComboBoxes.cpp) = ae083491bb2b1228c0f666fdc36b1b3ca4008c3c
 SHA1 (patch-src_slic3r_GUI_PresetComboBoxes.hpp) = 0c84c1b706a1f4e00f60c1677c7edf53845d4467
@@ -65,7 +64,7 @@ SHA1 (patch-src_slic3r_Utils_WifiScanner.cpp) = a7c8d6dfb43ddaca651df13b487b43dd
 SHA1 (patch-src_slic3r_Utils_WxFontUtils.cpp) = 75d657b3c8af52eee7aa130a895760c4203fef78
 SHA1 (patch-tests_CMakeLists.txt) = 89670b4a0a74f9cf985b4b3f0e7aa3f83d8b8a36
 SHA1 (patch-tests_arrange_test__arrange.cpp) = 4861d58845a0285b59d2d75869e35121f1293d8d
-SHA1 (patch-tests_arrange_test__arrange__integration.cpp) = 94f9a1e67647baf5563f13d2ead6d666a2a04e22
+SHA1 (patch-tests_arrange_test__arrange__integration.cpp) = 90d16d1d8b815fc47d3076e7e06fe8ac0b89feb5
 SHA1 (patch-tests_catch__main.hpp) = cbcf811b2ac9d95c4a16e34068fa64a771f6527d
 SHA1 (patch-tests_fff__print_benchmark__seams.cpp) = 946182bb449f35142decaa23bf470d553550da05
 SHA1 (patch-tests_fff__print_test__avoid__crossing__perimeters.cpp) = 7ecee4420340190017bea14e51f9f20e9a9d40ec
@@ -96,6 +95,7 @@ SHA1 (patch-tests_fff__print_test__seam__geometry.cpp) = 396c183e0f2d711baf4ccb8
 SHA1 (patch-tests_fff__print_test__seam__perimeters.cpp) = d87f71a5a62be5832bbdf4ff436326530be7df39
 SHA1 (patch-tests_fff__print_test__seam__random.cpp) = 2b73d3ed62bc5a60d18e7e60f7e9e05cc38e9f86
 SHA1 (patch-tests_fff__print_test__seam__rear.cpp) = 88ffce562371d823ea45e68486ed822f24d13fa7
+SHA1 (patch-tests_fff__print_test__seam__scarf.cpp) = c98c81c4f964fb775bc729ef5db72abece664618
 SHA1 (patch-tests_fff__print_test__seam__shells.cpp) = 32aa8dafd0e8512e314e093592d7f8c91bdb4202
 SHA1 (patch-tests_fff__print_test__shells.cpp) = c96072233c9f35a798971b9fd220ccbb423d82c3
 SHA1 (patch-tests_fff__print_test__skirt__brim.cpp) = 5bdddb6929c85a5c53da5b9a1f96fdb975955eee
@@ -115,7 +115,7 @@ SHA1 (patch-tests_libslic3r_test__config.cpp) = 87545bb2dd53e05a9b8fb09b4a4c1af1
 SHA1 (patch-tests_libslic3r_test__curve__fitting.cpp) = 3d905c88deac5dc6696a5c98ece0707270df50e2
 SHA1 (patch-tests_libslic3r_test__cut__surface.cpp) = 48e106514f7e458e97f7ddff73be53203a72e3b4
 SHA1 (patch-tests_libslic3r_test__elephant__foot__compensation.cpp) = fb5fa38edec00d560fbfdedf48695757815ff970
-SHA1 (patch-tests_libslic3r_test__emboss.cpp) = 1dace2789dfa1cfc79eac8f71541bd29e83585df
+SHA1 (patch-tests_libslic3r_test__emboss.cpp) = 54f902c1c16f39fcdc2cf55edfa0a4fb97533611
 SHA1 (patch-tests_libslic3r_test__expolygon.cpp) = 9d5ce4d2619a24751f22b178fd1985876734d1f1
 SHA1 (patch-tests_libslic3r_test__geometry.cpp) = a3b8f9f0384cf0fe01f3dd92e8b52a477d38ec4d
 SHA1 (patch-tests_libslic3r_test__hollowing.cpp) = 21b3f2decbdf170bfa841fa6698f8398faae35a9
@@ -126,12 +126,13 @@ SHA1 (patch-tests_libslic3r_test__layer__region.cpp) = 23b035e18e8ecb46664986068
 SHA1 (patch-tests_libslic3r_test__line.cpp) = d540e905a1cc42bd05ecdac0690e462740564786
 SHA1 (patch-tests_libslic3r_test__marchingsquares.cpp) = 701f11ff7e66e1f9d74e6424e33a01b75d923ee4
 SHA1 (patch-tests_libslic3r_test__meshboolean.cpp) = 31a6e9bf3a3fc3dc74e8587187af9c2b67eec550
+SHA1 (patch-tests_libslic3r_test__multiple__beds.cpp) = e39639b34360f3494cc8400cb4fa2d855089aec4
 SHA1 (patch-tests_libslic3r_test__mutable__polygon.cpp) = 520d8d53df9da5a16b6b8f9f33b1915b4ca7a75f
 SHA1 (patch-tests_libslic3r_test__mutable__priority__queue.cpp) = 2cba211ebb7a23623a61f868d6643ec52ddfafd2
 SHA1 (patch-tests_libslic3r_test__optimizers.cpp) = 53a5373798aef3fbe4b710b4ff9d818505b4931d
 SHA1 (patch-tests_libslic3r_test__placeholder__parser.cpp) = 5f30b562f1a69f5e3ee22de9eadb98b53a752946
 SHA1 (patch-tests_libslic3r_test__png__io.cpp) = 0ad327a63ef606c0d41af6cf60e8517743ff4ee4
-SHA1 (patch-tests_libslic3r_test__point.cpp) = cc62a20c1058e2a35b0d85f884f9a07e2ccaca47
+SHA1 (patch-tests_libslic3r_test__point.cpp) = 4b72e7ccf65f7b5f146cfe0007d219c89750b59a
 SHA1 (patch-tests_libslic3r_test__polygon.cpp) = 2c8a7bf99b08eeeb5296d40a34a92e2e66dc5274
 SHA1 (patch-tests_libslic3r_test__polyline.cpp) = caf306c874cc71f2e93ba59113ae080028b4b06f
 SHA1 (patch-tests_libslic3r_test__quadric__edge__collapse.cpp) = f1b3252d2f3f66024c372560a9b904d26e466514
diff --git a/prusaslicer/patches/patch-src_libslic3r_CMakeLists.txt b/prusaslicer/patches/patch-src_libslic3r_CMakeLists.txt
deleted file mode 100644
index 2eb7484e9e..0000000000
--- a/prusaslicer/patches/patch-src_libslic3r_CMakeLists.txt
+++ /dev/null
@@ -1,31 +0,0 @@
-$NetBSD$
-
-boost_libs needs public linking.
-
---- src/libslic3r/CMakeLists.txt.orig	2024-09-18 13:39:04.000000000 +0000
-+++ src/libslic3r/CMakeLists.txt
-@@ -612,7 +612,6 @@ find_package(JPEG REQUIRED)
- target_link_libraries(libslic3r PRIVATE
-     libnest2d
-     libcereal
--    boost_libs
-     clipper
-     libexpat
-     glu-libtess
-@@ -629,7 +628,7 @@ target_link_libraries(libslic3r PRIVATE
-     int128
- )
- target_link_libraries(libslic3r PUBLIC
--    Eigen3::Eigen
-+    # Eigen3::Eigen
-     semver
-     admesh
-     localesutils
-@@ -639,6 +638,7 @@ target_link_libraries(libslic3r PUBLIC
-     libigl
-     agg
-     ankerl
-+    boost_libs
- )
- 
- if (APPLE)
diff --git a/prusaslicer/patches/patch-src_libslic3r_CutSurface.cpp b/prusaslicer/patches/patch-src_libslic3r_CutSurface.cpp
new file mode 100644
index 0000000000..629b2837b4
--- /dev/null
+++ b/prusaslicer/patches/patch-src_libslic3r_CutSurface.cpp
@@ -0,0 +1,198 @@
+$NetBSD$
+
+Patch for new CGAL 6.x based on
+https://github.com/prusa3d/PrusaSlicer/pull/13081
+
+--- src/libslic3r/CutSurface.cpp.orig	2024-12-20 11:54:34.000000000 +0000
++++ src/libslic3r/CutSurface.cpp
+@@ -4,6 +4,14 @@
+ ///|/
+ #include "CutSurface.hpp"
+ 
++template <typename T>
++auto access_pmap(std::optional<T> opt) -> T {
++    return opt.value_or(T{});
++}
++
++template <typename Pair>
++auto access_pmap(Pair pair) { return pair.first; }
++
+ /// models_input.obj - Check transormation of model to each others
+ /// projection_center.obj - circle representing center of projection with correct distance
+ /// {M} .. model index
+@@ -31,6 +39,7 @@ using namespace Slic3r;
+ #include <CGAL/Exact_integer.h>
+ #include <CGAL/Surface_mesh.h>
+ #include <CGAL/Cartesian_converter.h>
++#include <CGAL/AABB_traits.h>
+ #include <oneapi/tbb/blocked_range.h>
+ #include <oneapi/tbb/parallel_for.h>
+ #include <boost/property_map/property_map.hpp>
+@@ -1021,8 +1030,8 @@ priv::CutMesh priv::to_cgal(const ExPoly
+     if (shapes.empty()) return {};
+         
+     CutMesh result;
+-    EdgeShapeMap edge_shape_map = result.add_property_map<EI, IntersectingElement>(edge_shape_map_name).first;
+-    FaceShapeMap face_shape_map = result.add_property_map<FI, IntersectingElement>(face_shape_map_name).first;
++    EdgeShapeMap edge_shape_map = access_pmap((result.add_property_map<EI, IntersectingElement>(edge_shape_map_name)));
++    FaceShapeMap face_shape_map = access_pmap((result.add_property_map<FI, IntersectingElement>(face_shape_map_name)));
+ 
+     std::vector<VI> indices;
+     auto insert_contour = [&projection, &indices, &result, 
+@@ -1432,17 +1441,17 @@ priv::CutAOIs priv::cut_from_model(CutMe
+                                    const ExPolygonsIndices &s2i)
+ {
+     // pointer to edge or face shape_map
+-    VertexShapeMap vert_shape_map = cgal_model.add_property_map<VI, const IntersectingElement*>(vert_shape_map_name, nullptr).first;
++    VertexShapeMap vert_shape_map = access_pmap((cgal_model.add_property_map<VI, const IntersectingElement*>(vert_shape_map_name, nullptr)));
+     
+     // detect anomalities in visitor.
+     bool is_valid = true;
+     // NOTE: map are created when convert shapes to cgal model
+-    const EdgeShapeMap& edge_shape_map = cgal_shape.property_map<EI, IntersectingElement>(edge_shape_map_name).first;
+-    const FaceShapeMap& face_shape_map = cgal_shape.property_map<FI, IntersectingElement>(face_shape_map_name).first;
++    const EdgeShapeMap& edge_shape_map = access_pmap((cgal_shape.property_map<EI, IntersectingElement>(edge_shape_map_name)));
++    const FaceShapeMap& face_shape_map = access_pmap((cgal_shape.property_map<FI, IntersectingElement>(face_shape_map_name)));
+     Visitor visitor{cgal_model, cgal_shape, edge_shape_map, face_shape_map, vert_shape_map, &is_valid};
+ 
+     // a property map containing the constrained-or-not status of each edge
+-    EdgeBoolMap ecm = cgal_model.add_property_map<EI, bool>(is_constrained_edge_name, false).first;
++    EdgeBoolMap ecm = access_pmap((cgal_model.add_property_map<EI, bool>(is_constrained_edge_name, false)));
+     const auto &p = CGAL::parameters::visitor(visitor)
+                         .edge_is_constrained_map(ecm)
+                         .throw_on_self_intersection(false);
+@@ -1451,7 +1460,7 @@ priv::CutAOIs priv::cut_from_model(CutMe
+ 
+     if (!is_valid) return {};
+ 
+-    FaceTypeMap face_type_map = cgal_model.add_property_map<FI, FaceType>(face_type_map_name, FaceType::not_constrained).first;
++    FaceTypeMap face_type_map = access_pmap((cgal_model.add_property_map<FI, FaceType>(face_type_map_name, FaceType::not_constrained)));
+ 
+     // Select inside and outside face in model
+     set_face_type(face_type_map, cgal_model, vert_shape_map, ecm, cgal_shape, s2i);
+@@ -1587,8 +1596,8 @@ void priv::collect_surface_data(std::que
+ 
+ void priv::create_reduce_map(ReductionMap &reduction_map, const CutMesh &mesh)
+ {
+-    const VertexShapeMap &vert_shape_map = mesh.property_map<VI, const IntersectingElement*>(vert_shape_map_name).first;
+-    const EdgeBoolMap &ecm = mesh.property_map<EI, bool>(is_constrained_edge_name).first;
++    const VertexShapeMap &vert_shape_map = access_pmap((mesh.property_map<VI, const IntersectingElement*>(vert_shape_map_name)));
++    const EdgeBoolMap &ecm = access_pmap((mesh.property_map<EI, bool>(is_constrained_edge_name)));
+ 
+     // check if vertex was made by edge_2 which is diagonal of quad
+     auto is_reducible_vertex = [&vert_shape_map](VI reduction_from) -> bool {
+@@ -1773,10 +1782,10 @@ priv::VDistances priv::calc_distances(co
+     for (const SurfacePatch &patch : patches) {
+         // map is created during intersection by corefine visitor
+         const VertexShapeMap &vert_shape_map = 
+-            models[patch.model_id].property_map<VI, const IntersectingElement *>(vert_shape_map_name).first;
++            access_pmap((models[patch.model_id].property_map<VI, const IntersectingElement *>(vert_shape_map_name)));
+         uint32_t patch_index = &patch - &patches.front();
+         // map is created during patch creation / dividing
+-        const CvtVI2VI& cvt = patch.mesh.property_map<VI, VI>(patch_source_name).first;
++        const CvtVI2VI& cvt = access_pmap((patch.mesh.property_map<VI, VI>(patch_source_name)));
+         // for each point on outline
+         for (const Loop &loop : patch.loops) 
+         for (const VI &vi_patch : loop) {
+@@ -2666,7 +2675,7 @@ priv::SurfacePatch priv::create_surface_
+                                               /* const */ CutMesh   &mesh,
+                                               const ReductionMap    *rmap)
+ {
+-    auto is_counted = mesh.add_property_map<VI, bool>("v:is_counted").first;
++    auto is_counted = access_pmap((mesh.add_property_map<VI, bool>("v:is_counted")));
+     uint32_t count_vertices = 0;
+     if (rmap == nullptr) {
+         for (FI fi : fis) 
+@@ -2696,7 +2705,7 @@ priv::SurfacePatch priv::create_surface_
+     cm.reserve(count_vertices, count_edges, count_faces);
+ 
+     // vertex conversion function from mesh VI to result VI
+-    CvtVI2VI mesh2result = mesh.add_property_map<VI,VI>("v:mesh2result").first;
++    CvtVI2VI mesh2result = access_pmap((mesh.add_property_map<VI,VI>("v:mesh2result")));
+ 
+     if (rmap == nullptr) {
+         for (FI fi : fis) {
+@@ -2748,7 +2757,7 @@ priv::SurfacePatch priv::create_surface_
+     assert(count_edges >= cm.edges().size());
+     
+     // convert VI from this patch to source VI, when exist
+-    CvtVI2VI cvt = cm.add_property_map<VI, VI>(patch_source_name).first;
++    CvtVI2VI cvt = access_pmap((cm.add_property_map<VI, VI>(patch_source_name)));
+     // vi_s .. VertexIndex into mesh (source)
+     // vi_d .. new VertexIndex in cm (destination)
+     for (VI vi_s : mesh.vertices()) { 
+@@ -2939,7 +2948,7 @@ bool priv::is_patch_inside_of_model(cons
+ uint32_t priv::get_shape_point_index(const CutAOI &cut, const CutMesh &model)
+ {
+     // map is created during intersection by corefine visitor
+-    const VertexShapeMap &vert_shape_map = model.property_map<VI, const IntersectingElement *>(vert_shape_map_name).first;
++    const VertexShapeMap &vert_shape_map = access_pmap((model.property_map<VI, const IntersectingElement *>(vert_shape_map_name)));
+     // for each half edge of outline
+     for (HI hi : cut.second) {
+         VI vi = model.source(hi);
+@@ -2964,7 +2973,7 @@ priv::SurfacePatch priv::separate_patch(
+     patch_new.model_id     = patch.model_id;
+     patch_new.shape_id     = patch.shape_id;
+     // fix cvt
+-    CvtVI2VI cvt = patch_new.mesh.property_map<VI, VI>(patch_source_name).first;
++    CvtVI2VI cvt = access_pmap((patch_new.mesh.property_map<VI, VI>(patch_source_name)));
+     for (VI &vi : cvt) {
+         if (!vi.is_valid()) continue;
+         vi = cvt_from[vi];
+@@ -2982,9 +2991,9 @@ void priv::divide_patch(size_t i, Surfac
+     CutMesh& cm = patch.mesh;
+     assert(!cm.faces().empty());
+     std::string patch_number_name = "f:patch_number";
+-    CutMesh::Property_map<FI,bool> is_processed = cm.add_property_map<FI, bool>(patch_number_name, false).first;
++    CutMesh::Property_map<FI,bool> is_processed = access_pmap((cm.add_property_map<FI, bool>(patch_number_name, false)));
+     
+-    const CvtVI2VI& cvt_from = patch.mesh.property_map<VI, VI>(patch_source_name).first;
++    const CvtVI2VI& cvt_from = access_pmap((patch.mesh.property_map<VI, VI>(patch_source_name)));
+ 
+     std::vector<FI> fis;
+     fis.reserve(cm.faces().size());
+@@ -3085,7 +3094,7 @@ priv::SurfacePatches priv::diff_models(V
+         CutAOIs &model_cuts = cuts[model_index];
+         CutMesh &cut_model_ = cut_models[model_index];
+         const CutMesh &cut_model = cut_model_;
+-        ReductionMap vertex_reduction_map = cut_model_.add_property_map<VI, VI>(vertex_reduction_map_name).first;
++        ReductionMap vertex_reduction_map = access_pmap((cut_model_.add_property_map<VI, VI>(vertex_reduction_map_name)));
+         create_reduce_map(vertex_reduction_map, cut_model);
+ 
+         for (size_t cut_index = 0; cut_index < model_cuts.size(); ++cut_index, ++index) {
+@@ -3171,7 +3180,7 @@ bool priv::is_over_whole_expoly(const Cu
+                                 const CutMesh   &mesh)
+ {
+     // NonInterupted contour is without other point and contain all from shape    
+-    const VertexShapeMap &vert_shape_map = mesh.property_map<VI, const IntersectingElement*>(vert_shape_map_name).first;
++    const VertexShapeMap &vert_shape_map = access_pmap((mesh.property_map<VI, const IntersectingElement*>(vert_shape_map_name)));
+     for (HI hi : cutAOI.second) { 
+         const IntersectingElement *ie_s = vert_shape_map[mesh.source(hi)];
+         const IntersectingElement *ie_t = vert_shape_map[mesh.target(hi)];
+@@ -3559,7 +3568,7 @@ SurfaceCut priv::patch2cut(SurfacePatch 
+ 
+     std::string convert_map_name = "v:convert";
+     CutMesh::Property_map<VI, SurfaceCut::Index> convert_map = 
+-        mesh.add_property_map<VI, SurfaceCut::Index>(convert_map_name).first;
++        access_pmap((mesh.add_property_map<VI, SurfaceCut::Index>(convert_map_name)));
+ 
+     size_t indices_size  = mesh.faces().size();
+     size_t vertices_size = mesh.vertices().size();
+@@ -3708,7 +3717,7 @@ void priv::store(const CutMesh &mesh, co
+     }
+ 
+     CutMesh &mesh_ = const_cast<CutMesh &>(mesh);
+-    auto face_colors = mesh_.add_property_map<priv::FI, CGAL::Color>("f:color").first;    
++    auto face_colors = access_pmap((mesh_.add_property_map<priv::FI, CGAL::Color>("f:color")));
+     for (FI fi : mesh.faces()) { 
+         auto &color = face_colors[fi];
+         switch (face_type_map[fi]) {
+@@ -3734,7 +3743,7 @@ void priv::store(const CutMesh &mesh, co
+     std::string off_file = dir + "model" + std::to_string(reduction_order++) + ".off";
+ 
+     CutMesh &mesh_ = const_cast<CutMesh &>(mesh);
+-    auto vertex_colors = mesh_.add_property_map<priv::VI, CGAL::Color>("v:color").first;    
++    auto vertex_colors = access_pmap((mesh_.add_property_map<priv::VI, CGAL::Color>("v:color")));
+     // initialize to gray color
+     for (VI vi: mesh.vertices())
+         vertex_colors[vi] = CGAL::Color{127, 127, 127};
diff --git a/prusaslicer/patches/patch-src_slic3r_Config_Version.cpp b/prusaslicer/patches/patch-src_slic3r_Config_Version.cpp
deleted file mode 100644
index d7d954213b..0000000000
--- a/prusaslicer/patches/patch-src_slic3r_Config_Version.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-$NetBSD$
-
-Add missing include for new boost version.
-
---- src/slic3r/Config/Version.cpp.orig	2024-07-04 02:06:21.971201848 +0000
-+++ src/slic3r/Config/Version.cpp
-@@ -6,6 +6,7 @@
- 
- #include <cctype>
- 
-+#include <boost/filesystem/directory.hpp>
- #include <boost/filesystem/operations.hpp>
- #include <boost/nowide/fstream.hpp>
- 
diff --git a/prusaslicer/patches/patch-src_slic3r_GUI_GUI__App.cpp b/prusaslicer/patches/patch-src_slic3r_GUI_GUI__App.cpp
index 3d69b310fb..e2af64867c 100644
--- a/prusaslicer/patches/patch-src_slic3r_GUI_GUI__App.cpp
+++ b/prusaslicer/patches/patch-src_slic3r_GUI_GUI__App.cpp
@@ -4,7 +4,7 @@ Treat NetBSD like Linux.
 
 Silence wxSizer warnings introduced with 2.6.0rc1.
 
---- src/slic3r/GUI/GUI_App.cpp.orig	2024-09-18 13:39:04.000000000 +0000
+--- src/slic3r/GUI/GUI_App.cpp.orig	2024-12-20 11:54:34.000000000 +0000
 +++ src/slic3r/GUI/GUI_App.cpp
 @@ -412,7 +412,7 @@ private:
  };
@@ -15,7 +15,7 @@ Silence wxSizer warnings introduced with 2.6.0rc1.
  bool static check_old_linux_datadir(const wxString& app_name) {
      // If we are on Linux and the datadir does not exist yet, look into the old
      // location where the datadir was before version 2.3. If we find it there,
-@@ -1256,6 +1256,10 @@ bool GUI_App::on_init_inner()
+@@ -1344,6 +1344,10 @@ bool GUI_App::on_init_inner()
      // Set initialization of image handlers before any UI actions - See GH issue #7469
      wxInitAllImageHandlers();
  
@@ -26,7 +26,7 @@ Silence wxSizer warnings introduced with 2.6.0rc1.
      // Set our own gui log as an active target
      m_log_gui = new LogGui();
      wxLog::SetActiveTarget(m_log_gui);
-@@ -1391,7 +1395,7 @@ bool GUI_App::on_init_inner()
+@@ -1479,7 +1483,7 @@ bool GUI_App::on_init_inner()
          if (!default_splashscreen_pos)
              // revert "restore_win_position" value if application wasn't crashed
              get_app_config()->set("restore_win_position", "1");
@@ -35,7 +35,7 @@ Silence wxSizer warnings introduced with 2.6.0rc1.
          wxYield();
  #endif
          scrn->SetText(_L("Loading configuration")+ dots);
-@@ -1557,7 +1561,7 @@ bool GUI_App::on_init_inner()
+@@ -1649,7 +1653,7 @@ bool GUI_App::on_init_inner()
          // and wxEVT_SET_FOCUS before GUI_App::post_init is called) wasn't called before GUI_App::post_init and OpenGL wasn't initialized.
          // Since issue #9774 Where same problem occured on MacOS Ventura, we decided to have this check on MacOS as well.
  
@@ -44,7 +44,7 @@ Silence wxSizer warnings introduced with 2.6.0rc1.
          if (!m_post_initialized && m_opengl_initialized) {
  #else
          if (!m_post_initialized) {
-@@ -2247,7 +2251,7 @@ bool GUI_App::switch_language()
+@@ -2339,7 +2343,7 @@ bool GUI_App::switch_language()
      }
  }
  
@@ -53,7 +53,7 @@ Silence wxSizer warnings introduced with 2.6.0rc1.
  static const wxLanguageInfo* linux_get_existing_locale_language(const wxLanguageInfo* language,
                                                                  const wxLanguageInfo* system_language)
  {
-@@ -2449,7 +2453,7 @@ bool GUI_App::load_language(wxString lan
+@@ -2541,7 +2545,7 @@ bool GUI_App::load_language(wxString lan
  				m_language_info_best = wxLocale::FindLanguageInfo(best_language);
  	        	BOOST_LOG_TRIVIAL(trace) << boost::format("Best translation language detected (may be different from user locales): %1%") % m_language_info_best->CanonicalName.ToUTF8().data();
  			}
@@ -62,7 +62,7 @@ Silence wxSizer warnings introduced with 2.6.0rc1.
              wxString lc_all;
              if (wxGetEnv("LC_ALL", &lc_all) && ! lc_all.IsEmpty()) {
                  // Best language returned by wxWidgets on Linux apparently does not respect LC_ALL.
-@@ -2502,7 +2506,7 @@ bool GUI_App::load_language(wxString lan
+@@ -2594,7 +2598,7 @@ bool GUI_App::load_language(wxString lan
      } else if (m_language_info_system != nullptr && language_info->CanonicalName.BeforeFirst('_') == m_language_info_system->CanonicalName.BeforeFirst('_'))
          language_info = m_language_info_system;
  
@@ -71,7 +71,7 @@ Silence wxSizer warnings introduced with 2.6.0rc1.
      // If we can't find this locale , try to use different one for the language
      // instead of just reporting that it is impossible to switch.
      if (! wxLocale::IsAvailable(language_info->Language)) {
-@@ -2623,7 +2627,7 @@ wxMenu* GUI_App::get_config_menu(MainFra
+@@ -2715,7 +2719,7 @@ wxMenu* GUI_App::get_config_menu(MainFra
          local_menu->Append(config_id_base + ConfigMenuTakeSnapshot, _L("Take Configuration &Snapshot"), _L("Capture a configuration snapshot"));
          local_menu->Append(config_id_base + ConfigMenuUpdateConf, _L("Check for Configuration Updates"), _L("Check for configuration updates"));
          local_menu->Append(config_id_base + ConfigMenuUpdateApp, _L("Check for Application Updates"), _L("Check for new version of application"));
@@ -80,7 +80,7 @@ Silence wxSizer warnings introduced with 2.6.0rc1.
          //if (DesktopIntegrationDialog::integration_possible())
          local_menu->Append(config_id_base + ConfigMenuDesktopIntegration, _L("Desktop Integration"), _L("Desktop Integration"));    
  #endif //(__linux__) && defined(SLIC3R_DESKTOP_INTEGRATION)        
-@@ -2657,7 +2661,7 @@ wxMenu* GUI_App::get_config_menu(MainFra
+@@ -2749,7 +2753,7 @@ wxMenu* GUI_App::get_config_menu(MainFra
          case ConfigMenuUpdateApp:
              app_version_check(true);
              break;
@@ -88,8 +88,8 @@ Silence wxSizer warnings introduced with 2.6.0rc1.
 +#if defined(__linux__) || defined(__NetBSD__)
          case ConfigMenuDesktopIntegration:
              show_desktop_integration_dialog();
-             break;
-@@ -3336,7 +3340,7 @@ void GUI_App::update_wizard_login_page()
+             break;   
+@@ -3393,7 +3397,7 @@ void GUI_App::update_wizard_login_page()
  
  void GUI_App::show_desktop_integration_dialog()
  {
@@ -98,7 +98,7 @@ Silence wxSizer warnings introduced with 2.6.0rc1.
      //wxCHECK_MSG(mainframe != nullptr, false, "Internal error: Main frame not created / null");
      DesktopIntegrationDialog dialog(mainframe);
      dialog.ShowModal();
-@@ -3790,7 +3794,7 @@ void GUI_App::start_download(std::string
+@@ -3828,7 +3832,7 @@ void GUI_App::start_download(std::string
          return; 
      }
  
diff --git a/prusaslicer/patches/patch-src_slic3r_GUI_Plater.cpp b/prusaslicer/patches/patch-src_slic3r_GUI_Plater.cpp
index 732bf09530..3fff4fe53f 100644
--- a/prusaslicer/patches/patch-src_slic3r_GUI_Plater.cpp
+++ b/prusaslicer/patches/patch-src_slic3r_GUI_Plater.cpp
@@ -5,9 +5,9 @@ Treat NetBSD like Linux.
 Fix ambiguous overload errors with wxWidgets 3.2.4
 http://github.com/prusa3d/PrusaSlicer/issues/11768
 
---- src/slic3r/GUI/Plater.cpp.orig	2023-12-12 14:21:21.000000000 +0000
+--- src/slic3r/GUI/Plater.cpp.orig	2024-12-20 11:54:34.000000000 +0000
 +++ src/slic3r/GUI/Plater.cpp
-@@ -2527,7 +2527,7 @@ std::vector<size_t> Plater::priv::load_f
+@@ -1228,7 +1228,7 @@ std::vector<size_t> Plater::priv::load_f
      // when loading a project file. However, creating the dialog on heap causes issues on macOS, where it does not
      // appear at all. Therefore, we create the dialog on stack on Win and macOS, and on heap on Linux, which
      // is the only system that needed the workarounds in the first place.
@@ -16,16 +16,7 @@ http://github.com/prusa3d/PrusaSlicer/issues/11768
      auto progress_dlg = new wxProgressDialog(loading, "", 100, find_toplevel_parent(q), wxPD_APP_MODAL | wxPD_AUTO_HIDE);
      Slic3r::ScopeGuard([&progress_dlg](){ if (progress_dlg) progress_dlg->Destroy(); progress_dlg = nullptr; });
  #else
-@@ -2574,7 +2574,7 @@ std::vector<size_t> Plater::priv::load_f
-         bool is_project_file = type_prusa;
-         try {
-             if (type_3mf || type_zip_amf) {
--#ifdef __linux__
-+#if defined(__linux__) || defined(__NetBSD__)
-                 // On Linux Constructor of the ProgressDialog calls DisableOtherWindows() function which causes a disabling of all children of the find_toplevel_parent(q)
-                 // And a destructor of the ProgressDialog calls ReenableOtherWindows() function which revert previously disabled children.
-                 // But if printer technology will be changes during project loading, 
-@@ -4542,7 +4542,7 @@ void Plater::priv::on_right_click(RBtnEv
+@@ -3552,7 +3552,7 @@ void Plater::priv::on_right_click(RBtnEv
          Vec2d mouse_position = evt.data.first;
          wxPoint position(static_cast<int>(mouse_position.x()),
                           static_cast<int>(mouse_position.y()));
@@ -34,12 +25,12 @@ http://github.com/prusa3d/PrusaSlicer/issues/11768
          // For some reason on Linux the menu isn't displayed if position is
          // specified (even though the position is sane).
          position = wxDefaultPosition;
-@@ -5395,7 +5395,7 @@ void Plater::load_project(const wxString
- 
-     p->reset();
+@@ -4420,7 +4420,7 @@ void Plater::load_project(const wxString
+     s_multiple_beds.set_loading_project_flag(true);
+     ScopeGuard guard([](){ s_multiple_beds.set_loading_project_flag(false);});
  
 -    if (! load_files({ into_path(filename) }).empty()) {
-+    if (! load_files(std::vector<fs::path>({ into_path(filename) })).empty()) {
++    if (! load_files(std::vector<boost::filesystem::path>({ into_path(filename) })).empty()) {
          // At least one file was loaded.
          p->set_project_filename(filename);
          // Save the names of active presets and project specific config into ProjectDirtyStateManager.
diff --git a/prusaslicer/patches/patch-tests_arrange_test__arrange__integration.cpp b/prusaslicer/patches/patch-tests_arrange_test__arrange__integration.cpp
index 0278d83743..b789b48993 100644
--- a/prusaslicer/patches/patch-tests_arrange_test__arrange__integration.cpp
+++ b/prusaslicer/patches/patch-tests_arrange_test__arrange__integration.cpp
@@ -3,7 +3,7 @@ $NetBSD$
 Support Catch2 v3.
 Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
 
---- tests/arrange/test_arrange_integration.cpp.orig	2024-02-29 13:03:32.000000000 +0000
+--- tests/arrange/test_arrange_integration.cpp.orig	2024-12-20 11:54:34.000000000 +0000
 +++ tests/arrange/test_arrange_integration.cpp
 @@ -1,4 +1,10 @@
 -#include <catch2/catch.hpp>
@@ -16,17 +16,17 @@ Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
 +#include <catch2/matchers/catch_matchers_floating_point.hpp>
  #include "test_utils.hpp"
  
- #include <libslic3r/Arrange/Arrange.hpp>
-@@ -12,6 +18,8 @@
+ #include <arrange-wrapper/Arrange.hpp>
+@@ -11,6 +17,8 @@
+ #include "libslic3r/Geometry/ConvexHull.hpp"
  #include "libslic3r/Format/3mf.hpp"
- #include "libslic3r/ModelArrange.hpp"
  
 +using Catch::Matchers::WithinRel;
 +
  static Slic3r::Model get_example_model_with_20mm_cube()
  {
      using namespace Slic3r;
-@@ -560,10 +568,10 @@ TEST_CASE("Virtual bed handlers - Stride
+@@ -559,10 +567,10 @@ TEST_CASE("Virtual bed handlers - Stride
                  auto ref_pos = tr * Vec3d::Zero();
  
                  auto displace = bed_index * (unscaled(vbh.stride_scaled()));
@@ -39,7 +39,7 @@ Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
              }
          }
      }
-@@ -868,8 +876,8 @@ bool settings_eq(const Slic3r::arr2::Arr
+@@ -871,8 +879,8 @@ bool settings_eq(const Slic3r::arr2::Arr
  {
      return v1.is_rotation_enabled() == v2.is_rotation_enabled() &&
             v1.get_arrange_strategy() == v2.get_arrange_strategy() &&
diff --git a/prusaslicer/patches/patch-tests_fff__print_test__seam__scarf.cpp b/prusaslicer/patches/patch-tests_fff__print_test__seam__scarf.cpp
new file mode 100644
index 0000000000..a6efabb0f6
--- /dev/null
+++ b/prusaslicer/patches/patch-tests_fff__print_test__seam__scarf.cpp
@@ -0,0 +1,20 @@
+$NetBSD$
+
+Support Catch2 v3.
+Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
+
+--- tests/fff_print/test_seam_scarf.cpp.orig	2025-02-17 06:53:05.395956984 +0000
++++ tests/fff_print/test_seam_scarf.cpp
+@@ -1,9 +1,11 @@
+-#include <catch2/catch.hpp>
++#include <catch2/catch_approx.hpp>
++#include <catch2/catch_test_macros.hpp>
+ #include <libslic3r/GCode/SeamScarf.hpp>
+ #include <libslic3r/GCode/SmoothPath.hpp>
+ 
+ using namespace Slic3r;
+ using Seams::Scarf::Impl::PathPoint;
++using Catch::Approx;
+ 
+ TEST_CASE("Get path point", "[Seams][Scarf]") {
+     using Seams::Scarf::Impl::get_path_point;
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__emboss.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__emboss.cpp
index 18130c1c6f..70d40e46de 100644
--- a/prusaslicer/patches/patch-tests_libslic3r_test__emboss.cpp
+++ b/prusaslicer/patches/patch-tests_libslic3r_test__emboss.cpp
@@ -3,15 +3,36 @@ $NetBSD$
 Support Catch2 v3.
 Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
 
---- tests/libslic3r/test_emboss.cpp.orig	2024-02-29 13:03:32.000000000 +0000
+Patch for new CGAL 6.x based on
+https://github.com/prusa3d/PrusaSlicer/pull/13081
+
+--- tests/libslic3r/test_emboss.cpp.orig	2024-12-20 11:54:34.000000000 +0000
 +++ tests/libslic3r/test_emboss.cpp
 @@ -1,4 +1,4 @@
 -#include <catch2/catch.hpp>
-+#include <catch2/catch_test_macros.hpp>
++#include <catch2/catch_test_macros.hpp>
  
  #include <libslic3r/Emboss.hpp>
  #include <libslic3r/SVG.hpp> // only debug visualization
-@@ -412,7 +412,7 @@ TEST_CASE("ray segment intersection", "[
+@@ -9,8 +9,16 @@
+ #include <libslic3r/IntersectionPoints.hpp>
+ using namespace Slic3r;
+ 
+-namespace Private{
++template <typename T>
++auto access_pmap(std::optional<T> opt) -> T {
++    return opt.value_or(T{});
++}
++
++template <typename Pair>
++auto access_pmap(Pair pair) { return pair.first; }
+         
++namespace Private{
++
+ // calculate multiplication of ray dir to intersect - inspired by
+ // segment_segment_intersection when ray dir is normalized retur distance from
+ // ray point to intersection No value mean no intersection
+@@ -414,7 +422,7 @@ TEST_CASE("ray segment intersection", "[
      CHECK(abs(*t1 - *t2) < std::numeric_limits<double>::epsilon());
  }
  
@@ -20,7 +41,7 @@ Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
  {
      Vec2d                point(1, 1);
      Vec2d                dir(-1, 0);
-@@ -481,7 +481,7 @@ TEST_CASE("Italic check", "[Emboss]") 
+@@ -483,7 +491,7 @@ TEST_CASE("Italic check", "[Emboss]") 
  #endif // FONT_DIR_PATH
  
  #include "libslic3r/CutSurface.hpp"
@@ -29,3 +50,43 @@ Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
  {
      std::string  font_path  = get_font_filepath();
      char         letter     = '%';
+@@ -906,8 +914,8 @@ TEST_CASE("Emboss extrude cut", "[Emboss
+     // identify glyph for intersected vertex
+     std::string vert_shape_map_name = "v:glyph_id";
+     MyMesh cgal_object = MeshBoolean::cgal2::to_cgal(cube, face_map_name);
+-    auto face_map = cgal_object.property_map<MyMesh::Face_index, int32_t>(face_map_name).first;
+-    auto vert_shape_map = cgal_object.add_property_map<MyMesh::Vertex_index, IntersectingElemnt>(vert_shape_map_name).first;
++    auto face_map = access_pmap((cgal_object.property_map<MyMesh::Face_index, int32_t>(face_map_name)));
++    auto vert_shape_map = access_pmap((cgal_object.add_property_map<MyMesh::Vertex_index, IntersectingElemnt>(vert_shape_map_name)));
+ 
+     std::string edge_shape_map_name = "e:glyph_id";
+     std::string face_shape_map_name = "f:glyph_id";
+@@ -915,8 +923,8 @@ TEST_CASE("Emboss extrude cut", "[Emboss
+ 
+     MyMesh cgal_shape = MeshBoolean::cgal2::to_cgal(shape, projection, 0, edge_shape_map_name, face_shape_map_name, glyph_contours);    
+ 
+-    auto edge_shape_map = cgal_shape.property_map<MyMesh::Edge_index, IntersectingElemnt>(edge_shape_map_name).first;
+-    auto face_shape_map = cgal_shape.property_map<MyMesh::Face_index, IntersectingElemnt>(face_shape_map_name).first;
++    auto edge_shape_map = access_pmap((cgal_shape.property_map<MyMesh::Edge_index, IntersectingElemnt>(edge_shape_map_name)));
++    auto face_shape_map = access_pmap((cgal_shape.property_map<MyMesh::Face_index, IntersectingElemnt>(face_shape_map_name)));
+ 
+     // bool map for affected edge
+     using d_prop_bool = CGAL::dynamic_edge_property_t<bool>;
+@@ -1048,7 +1056,7 @@ TEST_CASE("Emboss extrude cut", "[Emboss
+         // face without constrained edge (In or Out)
+         not_constrained
+     };
+-    auto side_type_map = cgal_object.add_property_map<MyMesh::Face_index, SideType>("f:side").first;
++    auto side_type_map = access_pmap((cgal_object.add_property_map<MyMesh::Face_index, SideType>("f:side")));
+     for (auto fi : cgal_object.faces()) {
+         SideType side_type = SideType::not_constrained;
+         auto hi_end = cgal_object.halfedge(fi);
+@@ -1129,7 +1137,7 @@ TEST_CASE("Emboss extrude cut", "[Emboss
+     }
+     
+     // debug output
+-    auto face_colors = cgal_object.add_property_map<MyMesh::Face_index, CGAL::Color>("f:color").first;    
++    auto face_colors = access_pmap((cgal_object.add_property_map<MyMesh::Face_index, CGAL::Color>("f:color")));
+     for (auto fi : cgal_object.faces()) { 
+         auto &color = face_colors[fi];
+         switch (side_type_map[fi]) {
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__multiple__beds.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__multiple__beds.cpp
new file mode 100644
index 0000000000..0937ad19ea
--- /dev/null
+++ b/prusaslicer/patches/patch-tests_libslic3r_test__multiple__beds.cpp
@@ -0,0 +1,13 @@
+$NetBSD$
+
+Support Catch2 v3.
+Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
+
+--- tests/libslic3r/test_multiple_beds.cpp.orig	2025-02-17 06:55:16.992196764 +0000
++++ tests/libslic3r/test_multiple_beds.cpp
+@@ -1,4 +1,4 @@
+-#include <catch2/catch.hpp>
++#include <catch2/catch_test_macros.hpp>
+ 
+ #include <libslic3r/MultipleBeds.hpp>
+ #include <numeric>
diff --git a/prusaslicer/patches/patch-tests_libslic3r_test__point.cpp b/prusaslicer/patches/patch-tests_libslic3r_test__point.cpp
index 5557b26ee1..9d9c4c5d18 100644
--- a/prusaslicer/patches/patch-tests_libslic3r_test__point.cpp
+++ b/prusaslicer/patches/patch-tests_libslic3r_test__point.cpp
@@ -3,14 +3,16 @@ $NetBSD$
 Support Catch2 v3.
 Based on https://github.com/prusa3d/PrusaSlicer/issues/11567
 
---- tests/libslic3r/test_point.cpp.orig	2024-04-14 02:13:14.912947878 +0000
+--- tests/libslic3r/test_point.cpp.orig	2024-12-20 11:54:34.000000000 +0000
 +++ tests/libslic3r/test_point.cpp
-@@ -5,11 +5,13 @@
+@@ -5,11 +5,15 @@
   *  and cross product uses doubles
   */
  
 -#include <catch2/catch.hpp>
 +#include <catch2/catch_approx.hpp>
++#include <catch2/matchers/catch_matchers.hpp>
++#include <catch2/matchers/catch_matchers_floating_point.hpp>
 +#include <catch2/catch_test_macros.hpp>
  #include <libslic3r/Point.hpp>
  #include "test_utils.hpp"


Home | Main Index | Thread Index | Old Index