* Using bbs versioning for bbs atributes
* Orca tags
* Bump SLIC3R version to match current BBS
* New import logic
* to_string_sf
* 2.3.2 No tagged
* Update comment
* identified code for snapping to buidlplate
* rename internal name to ensure_on_bed to be consistent, saves option in 2mf, finish Move UI, use in both ensure_on_bed() functions
* makes auto_drop a per-object setting, removes global setting
* remove adUndef, add auto_drop to constructor/serialize
* fixes drop() button
* add "auto_drop" checkmark to "load as single object" dialog,
nothing changes if auto_drop == yes || "load as single object",
if auto_drop == false and "load as single object" == false the objects now retain their relative position to each other
* retains auto_drop (and printable) state when assembling or splitting objects,
adds ObjectList::printable_state_changed() overload to be able to only provide ModelObject* vector
* adds dialog when splitting to ask if auto_drop should be disabled,
only shows when auto_drop enabled and atleast one volume floating
* adds arrow indicator on bounding box if auto_drop == false
* removes unneeded code, keeps "auto_drop" naming consistent
* makes for loop simpler in set_printable, set_auto_drop and get_auto_drop,
makes get_auto_drop const,
fixes wording in Snapshot text
---------
Co-authored-by: Hanno Witzleb <hannowitzleb@gmail.com>
Co-authored-by: SoftFever <softfeverever@gmail.com>
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
* Add read support for Google's Draco (.drc) format.
* Fix build on Linux
* Use boost instead of fstat.
* Switch to boost memory-mapped file to save RAM and potentially improve performance.
* Trim trailing whitespace.
* Initial Draco write support.
Currently always exports with 16-bit precision and speed 0 (best compression).
The back-end function does have arguments to specify them, it's just not hooked into the GUI.
* Add Draco to the About dialogue.
* Fix Linux compile (hopefully)
* Add an option to associate DRC files on Windows.
* Implement a Preferences option to set Draco position quantization bits
* Update src/slic3r/GUI/Preferences.cpp
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
* Some slight changes to ianalexis's suggestion.
* Implement a create_item_spinctrl() function for numeric inputs, and use that instead of create_item_input().
* Move "bits" to inside the spinctrl box.
* Refactor following yw4z's feedback
* Update src/slic3r/GUI/Preferences.cpp
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
* Change to 0 bits as the default setting for Draco export precision.
* Change to a lossy checkbox and a bits field with a range of 8-30.
* Proper SpinInput code from yw4z
* Revert "Proper SpinInput code from yw4z"
This reverts commit 7e9c85f31a.
* Revert "Change to a lossy checkbox and a bits field with a range of 8-30."
This reverts commit d642c9bcc0.
* Redo preferences based on SoftFever's feedback
* Refactor to minimize code duplication
* Fix padding
* Improve Draco export quality level tooltip clarity
Clarify that 0 means lossless compression (not uncompressed),
document the valid lossy range (8-30), and better explain the
tradeoff between file size and geometric detail.
---------
Co-authored-by: SoftFever <softfeverever@gmail.com>
Co-authored-by: Noisyfox <timemanager.rick@gmail.com>
Co-authored-by: Ian Bassi <ian.bassi@outlook.com>
* Optimize and simplify MarchingSquares.hpp, and fix it's test.
This changes the implementation to get the possible next directions for a cell
when building the tags and clearing them as the cells are visited during the
march, instead of adding the visited previous direction to the tags during the
march. The Dir enum has been turned into bit flags that for the possible next
directions with boolean operators for testing/setting/clearing them. This
simplifies and optimizes many operations during the march and building the
polygons.
The complicated/broken and unused partial support for cell overlap has been
removed, simplifying the overly confusing grid iteration logic.
The broken test has been fixed by removing the now gone `RasterBase` namespace
from `sla::RasterBase::Pixeldim` and `sla:RasterBase:Resolution`, and the
CMakeLists.txt entry uncommented.
make Dir into flags
* Further optimize MarchingSquares.hpp and improve comments.
* Switch from a single byte-vector containing tags and dirs for each cell to a
m_tags vector of bit-packed tags for each grid corner and an m_dirs vector
of packed 4bit dirs for each cell. Since each grid corner tag is shared by
the 4 adjacent cells this significantly reduces storage space and avoids
redundantly calculating each tag 4x. It also significantly improves memory
locality with each phase of calculating tags, calculating dirs, calculating
rings operating only on the tags or dirs data required without them being
interleaved with the data they don't need.
* Change NEXT_CCW to be initialized with a static constexpr lambda instead of
a manually entered table. This avoids typo errors manually building the
table.
* Optimize search_start_cell() so it can efficiently skip over cleared blocks
of 8 dirs in the packed m_dirs vector.
* Change the tags logical labeling to better suit the packed tags vector data.
This makes it a tiny bit more efficient to extract from the m_tags bitmap.
* Remove the now unused SquareTag enum class.
* Add comments explaining the algorithm, including corner-cases in cell
iteration.
* Remove unused Dir operators and get_dirs() argument, and clang-format.
* Fix some bugs and add stream output operators for debugging.
* Fix a bug building tags where `step(gcrd, Dir::right)` was not assigned to
update the gcrd grid point. Perhaps this should be a mutating method, or
even a += operator? Also when wrapping at the end of a row it was updating
the gcrd grid point by mutating the p raster point instead of itself.
Perhaps Grid and Raster points should be different types? Maybe even
templated?
* Fix a bug in get_tags() when the second row tags are packed into any of the
2 LSB's of the uint32_t blocks. In hind-sight obviously `>>(o - 2)` will not
shift left when `o < 2`.
* Move interpolation of the edge-crossings into a `interpolate()` method, and
make it shift bottom and right side points "out" by one to account for
raster pixel width. This makes the results track the raster shapes much more
accurately for very small windows.
* Make `interpolate_rings()` check for and remove duplicated points. It turns
out it's pretty common that two edge-crossing-points at a corner interpolate
to the same point. This can also happen for the first and last points.
* For Coord add `==` and `!=` operators, and use them wherever Coord's are
compared.
* Add `<<` stream output operators for Coord, Ring, and Dir classes. Add
`streamtags(<stream>)` and `streamdirs(<stream>)` methods for dumping the
tags and dirs data in an easy to understand text format. These make
print-debugging much easier.
* Add `assert(idx < m_gridlen)` in a bunch of places where grid-indexes are
used.
* For test_clipper_utils.cpp fix three "ambiguous overloading" compiler errors.
This just adds three `Polygons` qualifications to fix compiler errors about
ambiguous overloaded methods.
Note this file was formated with a mixture of tabs and spaces and had lots of
trailing whitespace. My editor cleaned these up resulting in a large looking
diff, but if you use `git diff -w` to ignore the whitespace changes you will
see it is actually tiny.
errros
* Update SLA/RasterToPolygons.* for MarchingSquares.hpp improvements.
Change the minimum and default window size from 2x2 to 1x1. Also remove the
strange pixel size re-scaling by (resolution/resolution-1).
The old MarchingSquares implementation had complications around a default
minimum 1 pixel "overlap" between cells which messed with the scaling a tiny
bit and meant when you requested a 2x2 window size it actually used a 1x1
window. Both of these meant you had to specify a window 1 pixel larger than
you really wanted, and you needed to undo the strange scaling artifact for
accurate dimensions of your results.
This has been fixed/removed in the new implementation, so the window is the
window, there is no overlap, and no strange miss-scaling.
* Fix test_marchingsquares.cpp and add StreamUtils.hpp.
This fixes the MarchingSquares unittests to both pass and be more strict than
they were before.
It also adds libslic3r/StreamUtils.hpp which includes some handy streaming
operators for standard libslic3r classes used to show extracted polys in the
unittests.
* Change Format/SL1.cpp to support the min 1x1 window for MarchingSquares.
* Fix the ring-walk termination condition.
Terminate the ring-walk when we return to the starting cell instead of when we
reach a cell with no remaining directions. This ensures we don't merge two
polygons if we started on an ambiguous cell.
* Revert the removal of duplicate points in interpolate_rings().
It turns out that duplicate points are only relatively common when using a 1x1
window. These happen when the line passes through the corner pixel on a
top-left corner in the raster, and the probability of this rapidly declines as
the window increases, so in many cases this filtering is just overhead. It can
also be potentially useful to see the points for every edge crossing even if
they are duplicates. This kind of filtering is already done and done better in
the polygon post-processing.
* rename `interpolate()` to `interpolate_edge()`, make it update the point
in-place, and add asserts to ensure the input point is a valid edge
interpolation point.
* Remove the duplicate point filtering from `interpolate_rings()` and simplify
it.
* Optimize directions building.
This optimizes `get_dirs_block8()` to rapidly skip over blocks where the tags
produce no directions (all tags are 1's or 0's), and also to build the
directions faster when it has to by fetching the whole blocks worth of tags at
once instead of cell-by-cell.
* Rename `get_tags()` to `get_tags9()` and make it fetch a row of nine tags
instead of the tags for a single cell.
* Optimize `get_dirs_block8()` to use `get_tags9()` to get the next nine tags
for the current and next rows and then shift through them to generate the
tags and directions for each cell in the block. Also abort early and just
return an empty block if the tags are all 0's or all 1's.
* Tiny optimization for `get_tags_block32()`.
This avoids using the `step()` method for a simple step-right that can be done
with a simple increment of the column. It also avoids re-calculating the
raster-coodinates for every corner, instead incrementing the column by
`m_window.c` until the end of a row.
* Fix svg output in test_marchingsquares.cpp for recreate_object_from_rasters.
These SVG's were not properly centered...
* Fix 2 static_casts for compiling on Windows.
Thanks to RF47 for pointing this out on the #10747 pull request.
* Make edge iteration use O(ln(N)) binary search instead of linear.
This should be much faster when the window size is large.
* Make `CellIt` into a `std::random_access_iterator_tag` so that
`std::lower_bound()` can use a binary search to find the point on the edge
instead of a linear search.
* Change `step()` to support an optional distance argument and make it modify
the `Coord` in-place instead of return a new one.
* Update tests for the `step()` change.
* Add Catch2 BENCHMARK tests for MarchingSquares.
This required enabling the benchmarks in the tests/CMakeLists.txt config.
* Add a _Loop<> specialization for parallel execution using ExecutionTBB.
This is something that could be added wherever you are going to use this, but
I intend on using this in multiple places so we might as add this once in one
place where it can be reused.
* Fix whitespace in messed up by tab-replacements.
My editor renders, and replaces, tabs as 8 spaces. This messed up the
indenting in tests/libslic3r/CMakeLists.txt and
tests/libslic3r/test_clipper_utils.cpp when I made tiny changes in them.
This fixes the indenting using 4 chars. Note it will still show as a diff
because it is replacing tabs with 4 spaces, and removing trailing whitespace.
But at least it's now indented correctly...
---------
Co-authored-by: Donovan Baarda <dbaarda@google.com>
Co-authored-by: SoftFever <softfeverever@gmail.com>
1.Add more filament map modes
2.Filament map and mode are set as project config
3.Plate filament map is only valid when plate filament mode is
manual
jira:NONE
Signed-off-by: xun.zhang <xun.zhang@bambulab.com>
Change-Id: I33b2f853e0b77b9d605be1f2f1172b44df43da15
(cherry picked from commit e45f8c6dc2146e1e31a1c21e8aaada540af112d0)
and fix bug when switching printer preset between single-nozzle and double-nozzle, prompt the modification of extruder_count
jira:none
Change-Id: I1d5f0b2f002493378d2f482d08cfd5a72b35b99f
(cherry picked from commit ed9816397374116db37c2a76d11e0216df5aca1d)
* SPE-2486: Refactor function apply_mm_segmentation() to prepare support for fuzzy skin painting.
(cherry picked from commit 2c06c81159f7aadd6ac20c7a7583c8f4959a5601)
* SPE-2585: Fix empty layers when multi-material painting and modifiers are used.
(cherry picked from commit 4b3da02ec26d43bfad91897cb34779fb21419e3e)
* Update project structure to match Prusa
* SPE-2486: Add a new gizmo for fuzzy skin painting.
(cherry picked from commit 886faac74ebe6978b828f51be62d26176e2900e5)
* Fix render
* Remove duplicated painting gizmo `render_triangles` code
* SPE-2486: Extend multi-material segmentation to allow segmentation of any painted faces.
(cherry picked from commit 519f5eea8e3be0d7c2cd5d030323ff264727e3d0)
---------
Co-authored-by: Lukáš Hejl <hejl.lukas@gmail.com>
* SPE-2486: Implement segmentation of layers based on fuzzy skin painting.
(cherry picked from commit 800b742b950438c5ed8323693074b6171300131c)
* SPE-2486: Separate fuzzy skin implementation into the separate file.
(cherry picked from commit efd95c1c66dc09fca7695fb82405056c687c2291)
* Move more fuzzy code to separate file
* Don't hide fuzzy skin option, so it can be applied to paint on fuzzy
* Fix build
* Add option group for fuzzy skin
* Update icon color
* Fix reset painting
* Update UI style
* Store fuzzy painting in bbs_3mf
* Add missing fuzzy paint code
* SPE-2486: Limit the depth of the painted fuzzy skin regions to make regions cover just external perimeters.
This reduces the possibility of artifacts that could happen during regions merging.
(cherry picked from commit fa2663f02647f80b239da4f45d92ef66f5ce048a)
* Update icons
---------
Co-authored-by: yw4z <ywsyildiz@gmail.com>
* Make the region compatible check a separate function
* Only warn about multi-material if it's truly multi-perimeters
* Improve gizmo UI & tooltips
---------
Co-authored-by: Lukáš Hejl <hejl.lukas@gmail.com>
Co-authored-by: yw4z <ywsyildiz@gmail.com>
1.Put commctrl.h into pch precompilation(OCCT conflicts)
2.Replace input wxWidgets to support loss focus verification(STUDIO-8101)
3.Optimize slider interaction and trigger mesh when push up slider(STUDIO-8099)
4.Optimize step loading method, separate import of step and mesh
5.Fix dialog cancel button logic;
6.mesh tasks into sub-threads to prevent blocking the UI;
JIRA: STUDIO-8101 STUDIO-8099
Change-Id: I50bbb43953a5128f358c6880032d20693531333b
(cherry picked from commit ed7ab6b505a2becf8f38edb3c43b96e51eac3317)
* Fix linux deps debug build
* Use the same DL_CACHE for release build when building debug version of deps on Linux.
This prevents downloading the same source packages twice, and avoid downloading again after deleting the build dir.
* Fix debug build
* Fix warnings "loop variable creates a copy from type" and "loop variable binds to a temporary constructed from type"
* Fix calls to depreciated wxPen constructor
* Fix use of wxTimerEvent
* Fix unrecognized character escape sequence
* Fix signed/unsigned mismatch
At least as much as possible without significantly altering parts of the application
* Clean unreferenced variables
* fix mistyped namespace selector
* Update deprecated calls
* Fix preprocessor statement
* Remove empty switch statements
* Change int vector used as bool to bool vector
* Remove empty control statements and related unused code
* Change multi character constant to string constant
* Fix discarded return value
json::parse was being called on the object, rather than statically like it should be. Also, the value was not being captured.
* Rename ICON_SIZE def used by MultiMachine
By having the definition in the header, it causes issues when other files define ICON_SIZE. By renaming it to MM_ICON_SIZE, this lessens the issue. It would probably be ideal to have the definitions in the respective .cpp that use them, but it would make it less convenient to update the values if needed in the future.
* Remove unused includes
* Fix linux/macOS compilation
* Hide unused-function errors on non-Windows systems
* Disable signed/unsigned comparison mismatch error
* Remove/Disable more unused variables
Still TODO: check double for loop in Print.cpp
* Remove unused variable that was missed
* Remove unused variables in libraries in the src folder
* Apply temporary fix for subobject linkage error
* Remove/Disable last set of unused variables reported by GCC
* remove redundant for loop
* fix misspelled ifdef check
* Update message on dialog
* Fix hard-coded platform specific modifier keys
* Remove duplicate for loop
* Disable -Wmisleading-indentation warning
* disable -Wswitch warning
* Remove unused local typedefs
* Fix -Wunused-value
* Fix pragma error on Windows from subobject linkage fix
* Fix -Waddress
* Fix null conversions (-Wconversion-null)
---------
Co-authored-by: SoftFever <softfeverever@gmail.com>