mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-06-28 14:41:58 +00:00
* Add test for Arachne duplicate wall segment detection Add test cases that reproduce an issue where Arachne generates duplicate/coinciding extrusion segments at certain min_bead_width settings. Test configuration: - Profile: 0.28mm Extra Draft @BBL X1C (0.4mm nozzle, 0.28mm layer) - outer_wall_line_width: 0.42mm, inner_wall_line_width: 0.45mm - wall_loops: 2, precise_outer_wall: enabled - Test polygon: outer rectangle (0,0)-(20,20) with inner cutout (0.5,0.5)-(19.5,19.5) This creates a 0.5mm wide frame around the perimeter. Results: - 50% min_bead_width (0.20mm): FAILS - detects 4 duplicate segments (all 4 sides) - 60% min_bead_width (0.24mm): PASSES - no duplicates At 50%, Arachne generates two separate closed loops that share all 4 edges of the inner square. At 60%, Arachne generates a single closed loop. SVG output is exported to /tmp/opencode/ for visual debugging. * Fix Arachne duplicate extrusion caused by bead count mismatch WideningBeadingStrategy::compute() used optimal_width (inner wall width) to determine if a thin wall should produce a single bead. However, getOptimalBeadCount() uses optimal_width_outer (outer wall width) via RedistributeBeadingStrategy to decide the bead count. This inconsistency caused situations where getOptimalBeadCount() returned 2 beads, but compute() produced only 1 bead at full thickness. The single bead was then generated for both inner and outer contours, resulting in duplicate extrusion paths. Fix: Use getTransitionThickness(1) instead of optimal_width. This method returns the exact threshold for the 1-to-2 bead transition, ensuring consistency between bead count calculation and bead generation. Reproduces with: 50% min_bead_width, 0.42mm outer wall, 0.45mm inner wall, 0.5mm polygon inset creating ~0.38mm wall thickness. Fixes #13917 --------- Co-authored-by: SoftFever <softfeverever@gmail.com>
42 lines
1.2 KiB
CMake
42 lines
1.2 KiB
CMake
get_filename_component(_TEST_NAME ${CMAKE_CURRENT_LIST_DIR} NAME)
|
|
|
|
add_executable(${_TEST_NAME}_tests
|
|
${_TEST_NAME}_tests.cpp
|
|
test_3mf.cpp
|
|
test_aabbindirect.cpp
|
|
test_appconfig.cpp
|
|
test_arachne_walls.cpp
|
|
test_bambu_networking.cpp
|
|
test_clipper_offset.cpp
|
|
test_clipper_utils.cpp
|
|
test_config.cpp
|
|
test_preset_bundle_loading.cpp
|
|
test_elephant_foot_compensation.cpp
|
|
test_geometry.cpp
|
|
test_placeholder_parser.cpp
|
|
test_polygon.cpp
|
|
test_mutable_polygon.cpp
|
|
test_mutable_priority_queue.cpp
|
|
test_stl.cpp
|
|
test_meshboolean.cpp
|
|
test_marchingsquares.cpp
|
|
test_timeutils.cpp
|
|
test_voronoi.cpp
|
|
test_optimizers.cpp
|
|
# test_png_io.cpp
|
|
test_indexed_triangle_set.cpp
|
|
../libnest2d/printer_parts.cpp
|
|
)
|
|
|
|
if (TARGET OpenVDB::openvdb)
|
|
target_sources(${_TEST_NAME}_tests PRIVATE test_hollowing.cpp)
|
|
endif()
|
|
|
|
target_link_libraries(${_TEST_NAME}_tests test_common libslic3r 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()
|
|
|
|
catch_discover_tests(${_TEST_NAME}_tests)
|