mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-13 02:41:16 +00:00
Make the connected-net layout affordable on a dense patch Laying a patch out as a connected net cost ~175 ms on a 42k-triangle patch, against ~21 ms for the unwrap it works from, and the gizmo asks for it on every preview, overlay and bake. Measured on a real project the grid behind it ran ~19 million triangle-pair tests per net, nearly all of them misses: a cell holds every triangle whose box touches it, and a candidate really meets a couple of them. Keep a bounding box with each stored triangle and answer those misses with four comparisons instead of a full intersection. The net drops to ~53 ms with identical output - the seam metrics on the test project did not move by one. Two further attempts were measured and dropped, and are recorded in the comment so they are not tried again: a free-space pre-check per chart came out slower, because a folded chart lands against the net by construction and the cells under it are occupied anyway, and splitting the boxes into their own array for locality lost more to growing two vectors per bucket than it gained. Also pick a pair's fold line from the longest boundary they share rather than whichever edge came first, and grow the net strongest-adjacency-first rather than breadth-first by area. Only the fold a chart is reached by comes out matching, so a chart claimed across a short boundary leaves the long one it shared with its true neighbour torn. texture_unwrap_dump reports an unwrap from a saved project - charts, their topology, folded triangles, where the texture is discontinuous and how long those seams are. All of the above was found with it, and it is what keeps a claim about this code honest; reading the 3D view and guessing had produced three wrong diagnoses in a row.
85 lines
3.6 KiB
CMake
85 lines
3.6 KiB
CMake
|
|
option(SLIC3R_ENC_CHECK "Verify encoding of source files" 1)
|
|
|
|
if (IS_CROSS_COMPILE)
|
|
# Force disable due to cross compilation. This fact is already printed on cli for users
|
|
set(SLIC3R_ENC_CHECK OFF CACHE BOOL "" FORCE)
|
|
endif ()
|
|
|
|
if (SLIC3R_ENC_CHECK)
|
|
add_executable(encoding-check encoding-check.cpp)
|
|
|
|
# A global no-op target which depends on all encodings checks,
|
|
# and on which in turn all checked targets depend.
|
|
# This is done to make encoding checks the first thing to be
|
|
# performed before actually compiling any sources of the checked targets
|
|
# to make the check fail as early as possible.
|
|
add_custom_target(global-encoding-check
|
|
ALL
|
|
DEPENDS encoding-check
|
|
)
|
|
endif()
|
|
|
|
if (ORCA_TOOLS)
|
|
set(_DEV_DEFS -DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x602 -DBOOST_SYSTEM_USE_UTF8)
|
|
|
|
# generate_system_cache: pre-generates per-vendor <vendor>.opc files under resources/profiles for CI bundling.
|
|
add_executable(generate_system_cache generate_system_cache.cpp)
|
|
target_link_libraries(generate_system_cache libslic3r boost_headeronly)
|
|
target_compile_definitions(generate_system_cache PRIVATE ${_DEV_DEFS})
|
|
|
|
# texture_unwrap_dump: reports the LSCM unwrap of a saved project's texture displacement layers,
|
|
# chart by chart, so a defect can be reproduced from the project file instead of from a screenshot.
|
|
add_executable(texture_unwrap_dump texture_unwrap_dump.cpp)
|
|
target_link_libraries(texture_unwrap_dump libslic3r boost_headeronly nanosvg)
|
|
target_compile_definitions(texture_unwrap_dump PRIVATE ${_DEV_DEFS})
|
|
|
|
# profile_include_dump: prints what included templates contribute to a vendor's presets,
|
|
# to diff against the same tool built in BambuStudio. Built only on request.
|
|
add_executable(profile_include_dump EXCLUDE_FROM_ALL profile_include_dump.cpp)
|
|
target_link_libraries(profile_include_dump libslic3r boost_headeronly)
|
|
target_compile_definitions(profile_include_dump PRIVATE ${_DEV_DEFS})
|
|
|
|
endif()
|
|
|
|
# Function that adds source file encoding check to a target
|
|
# using the above encoding-check binary
|
|
|
|
function(encoding_check TARGET)
|
|
if (SLIC3R_ENC_CHECK)
|
|
# Obtain target source files
|
|
get_target_property(T_SOURCES ${TARGET} SOURCES)
|
|
|
|
set(STAMP_FILE "${CMAKE_CURRENT_BINARY_DIR}/encoding-check-${TARGET}.stamp")
|
|
set(RSP_FILE "${CMAKE_CURRENT_BINARY_DIR}/encoding-check-${TARGET}.rsp")
|
|
|
|
# Resolve absolute paths
|
|
set(ABS_SOURCES "")
|
|
foreach(file ${T_SOURCES})
|
|
if(IS_ABSOLUTE "${file}")
|
|
list(APPEND ABS_SOURCES "${file}")
|
|
else()
|
|
list(APPEND ABS_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/${file}")
|
|
endif()
|
|
endforeach()
|
|
|
|
# Write response file at configure time
|
|
string(REPLACE ";" "\n" RSP_CONTENT "${ABS_SOURCES}")
|
|
file(WRITE "${RSP_FILE}" "${RSP_CONTENT}")
|
|
|
|
# Single process call via response file — no command line length limit
|
|
add_custom_command(
|
|
OUTPUT "${STAMP_FILE}"
|
|
DEPENDS encoding-check ${ABS_SOURCES}
|
|
COMMENT "Checking source files encodings for target ${TARGET}"
|
|
COMMAND $<TARGET_FILE:encoding-check> ${TARGET} "@${RSP_FILE}"
|
|
COMMAND ${CMAKE_COMMAND} -E touch "${STAMP_FILE}"
|
|
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
|
)
|
|
|
|
add_custom_target(encoding-check-${TARGET} DEPENDS "${STAMP_FILE}")
|
|
add_dependencies(global-encoding-check encoding-check-${TARGET})
|
|
add_dependencies(${TARGET} global-encoding-check)
|
|
endif()
|
|
endfunction()
|