mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-04 14:20:58 +00:00
* Make Painted Multi-Material Slicing Deterministic Painted (multi-material) models sliced to slightly different G-code on every run: ±1 µm wall coordinates and reordered islands. Hashing each stage of the segmentation across runs showed the projected painted lines and the per-layer Voronoi segmentation were stable; the raw top/bottom projections from slice_mesh_slabs() were not. Three causes, all thread-order dependent: - slice_slabs_make_lines() appends each slab's intersection lines from a parallel facet loop and never restored a canonical order, so the loop start vertices and polygon order from make_slab_loops() depended on scheduling. Sort every slab's lines with the same key slice_make_lines() already uses. - segmentation_top_and_bottom_layers() wrote a layer's shell projections into neighbouring layers' vectors from the parallel loop, relying on a parity double-buffer that assumes TBB ranges are exactly one group wide and aligned, which blocked_range does not guarantee; two threads could append to the same vector. Each source layer now records its projections in its own slot and they are gathered per target layer in source order. - The painted-line sort in post_process_painted_lines() was not a total order: projections of one span from facets of different colours tied on every key and the first one won the span. Colour and end points now break the tie. Three multi-threaded runs of each painted fixture now give one G-code; unpainted output is unchanged. * Test That Slab Slicing Does Not Depend on the Thread Schedule Projects a dense, tilted sphere with slice_mesh_slabs() on one thread and then three times multi-threaded, and requires the polygons to match exactly, vertex order included. Fails without the canonical line sort, passes with it.
89 lines
2.5 KiB
CMake
89 lines
2.5 KiB
CMake
get_filename_component(_TEST_NAME ${CMAKE_CURRENT_LIST_DIR} NAME)
|
|
|
|
add_executable(${_TEST_NAME}_tests
|
|
${_TEST_NAME}_tests.cpp
|
|
test_3mf.cpp
|
|
# Round-trip seam metadata and active/dormant volume settings in both formats.
|
|
test_precise_seam_3mf.cpp
|
|
test_aabbindirect.cpp
|
|
test_appconfig.cpp
|
|
test_arachne_walls.cpp
|
|
test_arrange.cpp
|
|
test_bambu_networking.cpp
|
|
test_buildvolume.cpp
|
|
test_calib.cpp
|
|
test_clipper_offset.cpp
|
|
test_clipper_utils.cpp
|
|
test_config.cpp
|
|
test_config_variant_expansion.cpp
|
|
test_locales_utils.cpp
|
|
test_drc.cpp
|
|
test_toolordering_nozzle_group.cpp
|
|
test_parallel_resolve.cpp
|
|
test_preset_bundle_loading.cpp
|
|
test_preset_setting_id.cpp
|
|
test_preset_diff.cpp
|
|
test_vendor_cache.cpp
|
|
test_preset_options.cpp
|
|
test_elephant_foot_compensation.cpp
|
|
test_fill_corner_smoothing.cpp
|
|
test_filament_mixer.cpp
|
|
test_fill_plane_path.cpp
|
|
test_geometry.cpp
|
|
test_multimaterial_segmentation.cpp
|
|
test_placeholder_parser.cpp
|
|
test_polygon.cpp
|
|
test_mutable_polygon.cpp
|
|
test_mutable_priority_queue.cpp
|
|
test_minimum_spanning_tree.cpp
|
|
test_nozzle_volume_type.cpp
|
|
test_obj.cpp
|
|
test_step.cpp
|
|
test_stl.cpp
|
|
test_triangle_selector.cpp
|
|
test_meshboolean.cpp
|
|
test_trianglemesh_slicer.cpp
|
|
test_marchingsquares.cpp
|
|
test_lay_on_face.cpp
|
|
test_model.cpp
|
|
test_utils.cpp
|
|
test_miniz_extension.cpp
|
|
test_timeutils.cpp
|
|
test_voronoi.cpp
|
|
test_wipe_tower_estimate.cpp
|
|
test_wipe_tower.cpp
|
|
test_wipe_path.cpp
|
|
test_optimizers.cpp
|
|
test_ordering_strategies.cpp
|
|
# test_png_io.cpp
|
|
test_indexed_triangle_set.cpp
|
|
test_texture_displacement.cpp
|
|
test_instance_lock.cpp
|
|
../libnest2d/printer_parts.cpp
|
|
)
|
|
|
|
if (SLIC3R_CAD)
|
|
target_sources(${_TEST_NAME}_tests PRIVATE
|
|
test_caddocument.cpp
|
|
test_sketchconstraints.cpp
|
|
test_sketchedit.cpp
|
|
test_sketchprofile.cpp
|
|
test_sketchimport.cpp
|
|
test_sketchinference.cpp
|
|
test_slvs_constraints.cpp)
|
|
endif ()
|
|
|
|
if (TARGET OpenVDB::openvdb)
|
|
target_sources(${_TEST_NAME}_tests PRIVATE test_hollowing.cpp)
|
|
endif()
|
|
|
|
# libslic3r links Draco privately; test_drc.cpp encodes its own fixtures.
|
|
find_package(Draco REQUIRED)
|
|
target_link_libraries(${_TEST_NAME}_tests test_common libslic3r draco::draco Catch2::Catch2WithMain)
|
|
target_include_directories(${_TEST_NAME}_tests PRIVATE ${CMAKE_SOURCE_DIR}/src)
|
|
set_property(TARGET ${_TEST_NAME}_tests PROPERTY FOLDER "tests")
|
|
|
|
orcaslicer_copy_test_dlls()
|
|
|
|
orcaslicer_discover_tests(${_TEST_NAME}_tests)
|