11b606bd39
v6.0.1 — FFD Freeform Deformation: - ffd_deformation.h/.cpp: Bezier volume lattice, deform_brep/deform_mesh - Bernstein polynomial mapping, topology-preserving - Cage-based + lattice-based FFD, create_cage_lattice() v6.0.2 — Auto-Dimensioning + PMI/MBD + GD&T: - auto_dimensioning.h/.cpp: linear/angular/radial/diameter detection - ISO/ANSI/JIS drawing standards, smart label placement - gdt.h/.cpp: 14 GD&T symbols (ASME Y14.5), MMC/LMC/RFS material conditions - pmi_mbd.h/.cpp: PMIAnnotation, attach_pmi, PMIView, STEP AP242 export - 70/70 tests passing (23 auto-dim + 25 PMI + 22 GD&T regression) v6.0.3 — Web 3D Viewer Enhancement: - viewer/index.html + app.js: Three.js GLB/STL loading - OrbitControls, face coloring, dimension overlay, GD&T display - Measure tool (raycaster), clip plane slider, explode animation - Drag-and-drop file upload, responsive layout
318 lines
10 KiB
CMake
318 lines
10 KiB
CMake
# ── 编译选项接口目标 ──────────────────────────────
|
||
|
||
# ── foundation ─────────────────────────────────────
|
||
add_library(vde_foundation STATIC
|
||
foundation/tolerance.cpp
|
||
foundation/exact_predicates.cpp
|
||
foundation/io_obj.cpp
|
||
foundation/io_stl.cpp
|
||
foundation/serializer.cpp
|
||
foundation/io_ply.cpp
|
||
foundation/io_gltf.cpp
|
||
foundation/io_3mf.cpp
|
||
foundation/industrial_formats.cpp
|
||
)
|
||
target_include_directories(vde_foundation
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_foundation
|
||
PUBLIC vde_compile_options Eigen3::Eigen
|
||
)
|
||
|
||
# ── core ───────────────────────────────────────────
|
||
add_library(vde_core STATIC
|
||
core/polygon.cpp
|
||
core/voronoi.cpp
|
||
core/distance.cpp
|
||
core/convex_hull.cpp
|
||
core/icp.cpp
|
||
core/cam_toolpath.cpp
|
||
core/cam_strategies.cpp
|
||
core/exact_predicates.cpp
|
||
)
|
||
target_include_directories(vde_core
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_core
|
||
PUBLIC vde_foundation vde_compile_options
|
||
)
|
||
|
||
# ── curves ─────────────────────────────────────────
|
||
add_library(vde_curves STATIC
|
||
curves/bezier_curve.cpp
|
||
curves/bspline_curve.cpp
|
||
curves/nurbs_curve.cpp
|
||
curves/bezier_surface.cpp
|
||
curves/bspline_surface.cpp
|
||
curves/nurbs_surface.cpp
|
||
curves/nurbs_operations.cpp
|
||
curves/surface_intersection.cpp
|
||
curves/tessellation.cpp
|
||
curves/parallel_intersection.cpp
|
||
curves/surface_fairing.cpp
|
||
curves/exact_offset.cpp
|
||
curves/surface_extension.cpp
|
||
curves/surface_continuity.cpp
|
||
curves/surface_analysis.cpp
|
||
)
|
||
target_include_directories(vde_curves
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_curves
|
||
PUBLIC vde_core vde_compile_options
|
||
)
|
||
|
||
# ── mesh ────────────────────────────────────────────
|
||
add_library(vde_mesh STATIC
|
||
mesh/halfedge_mesh.cpp
|
||
mesh/delaunay_2d.cpp
|
||
mesh/cdt_2d.cpp
|
||
mesh/delaunay_3d.cpp
|
||
mesh/mesh_simplify.cpp
|
||
mesh/mesh_smooth.cpp
|
||
mesh/mesh_boolean.cpp
|
||
mesh/mesh_quality.cpp
|
||
mesh/mesh_repair.cpp
|
||
mesh/alpha_shapes.cpp
|
||
mesh/mesh_parameterize.cpp
|
||
mesh/geodesic.cpp
|
||
mesh/mesh_curvature.cpp
|
||
mesh/marching_cubes.cpp
|
||
mesh/mesh_lod.cpp
|
||
mesh/parallel_mc.cpp
|
||
)
|
||
target_include_directories(vde_mesh
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_mesh
|
||
PUBLIC vde_core vde_brep vde_compile_options
|
||
)
|
||
|
||
# ── spatial ─────────────────────────────────────────
|
||
add_library(vde_spatial STATIC
|
||
spatial/bvh.cpp
|
||
spatial/octree.cpp
|
||
spatial/kd_tree.cpp
|
||
spatial/r_tree.cpp
|
||
spatial/incremental_bvh.cpp
|
||
)
|
||
target_include_directories(vde_spatial
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_spatial
|
||
PUBLIC vde_core vde_compile_options
|
||
)
|
||
|
||
# ── boolean ─────────────────────────────────────────
|
||
add_library(vde_boolean STATIC
|
||
boolean/boolean_2d.cpp
|
||
boolean/boolean_mesh.cpp
|
||
boolean/polygon_offset.cpp
|
||
)
|
||
target_include_directories(vde_boolean
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_boolean
|
||
PUBLIC vde_mesh vde_spatial vde_compile_options
|
||
)
|
||
|
||
# ── collision ───────────────────────────────────────
|
||
add_library(vde_collision STATIC
|
||
collision/gjk.cpp
|
||
collision/sat.cpp
|
||
collision/ray_intersect.cpp
|
||
collision/tri_intersect.cpp
|
||
)
|
||
target_include_directories(vde_collision
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_collision
|
||
PUBLIC vde_core vde_spatial vde_compile_options
|
||
)
|
||
|
||
# ── 聚合库 ──────────────────────────────────────────
|
||
add_library(vde INTERFACE)
|
||
target_link_libraries(vde
|
||
INTERFACE vde_foundation
|
||
INTERFACE vde_core
|
||
INTERFACE vde_curves
|
||
INTERFACE vde_mesh
|
||
INTERFACE vde_spatial
|
||
INTERFACE vde_boolean
|
||
INTERFACE vde_collision
|
||
INTERFACE vde_sdf
|
||
INTERFACE vde_brep
|
||
INTERFACE vde_sketch
|
||
)
|
||
add_library(vde::engine ALIAS vde)
|
||
|
||
# ── brep ───────────────────────────────────────────
|
||
add_library(vde_brep STATIC
|
||
brep/brep.cpp
|
||
brep/interference_check.cpp
|
||
brep/motion_simulation.cpp
|
||
brep/explode_view.cpp
|
||
brep/gdt.cpp
|
||
brep/incremental_update.cpp
|
||
brep/large_assembly.cpp
|
||
brep/format_io.cpp
|
||
brep/tolerance.cpp
|
||
brep/modeling.cpp
|
||
brep/brep_drawing.cpp
|
||
brep/auto_dimensioning.cpp
|
||
brep/pmi_mbd.cpp
|
||
brep/step_export.cpp
|
||
brep/step_import.cpp
|
||
brep/iges_import.cpp
|
||
brep/iges_export.cpp
|
||
brep/brep_boolean.cpp
|
||
brep/ssi_boolean.cpp
|
||
brep/brep_validate.cpp
|
||
brep/brep_heal.cpp
|
||
brep/brep_face_split.cpp
|
||
brep/feature_tree.cpp
|
||
brep/assembly_constraints.cpp
|
||
brep/constraint_solver.cpp
|
||
brep/measure.cpp
|
||
brep/trimmed_surface.cpp
|
||
brep/dxf_import.cpp
|
||
brep/assembly_instance.cpp
|
||
brep/euler_op.cpp
|
||
brep/draft_analysis.cpp
|
||
brep/incremental_mesh.cpp
|
||
brep/kinematic_chain.cpp
|
||
brep/parallel_boolean.cpp
|
||
brep/feature_recognition.cpp
|
||
brep/defeature.cpp
|
||
brep/advanced_blend.cpp
|
||
brep/assembly_feature.cpp
|
||
brep/fastener_library.cpp
|
||
brep/flexible_assembly.cpp
|
||
brep/assembly_lod.cpp
|
||
brep/ffd_deformation.cpp
|
||
)
|
||
target_include_directories(vde_brep
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_brep
|
||
PUBLIC vde_curves vde_mesh vde_collision vde_compile_options
|
||
)
|
||
|
||
# ── sketch ─────────────────────────────────────────
|
||
add_library(vde_sketch STATIC
|
||
sketch/constraint_solver.cpp
|
||
)
|
||
target_include_directories(vde_sketch
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_sketch
|
||
PUBLIC vde_core vde_compile_options
|
||
)
|
||
|
||
# ── sdf ────────────────────────────────────────────
|
||
add_library(vde_sdf STATIC
|
||
sdf/sdf_primitives.cpp
|
||
sdf/sdf_tree.cpp
|
||
sdf/sdf_to_mesh.cpp
|
||
sdf/sdf_torch.cpp
|
||
sdf/sdf_optimize.cpp
|
||
)
|
||
target_include_directories(vde_sdf
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_sdf
|
||
PUBLIC vde_core vde_mesh vde_compile_options
|
||
)
|
||
|
||
# ── C API ──────────────────────────────────────────
|
||
add_library(vde_capi STATIC
|
||
capi/vde_capi.cpp
|
||
)
|
||
target_include_directories(vde_capi
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_capi
|
||
PUBLIC vde_brep vde_sketch vde_collision vde_boolean vde_spatial
|
||
PUBLIC vde_mesh vde_curves vde_core vde_foundation vde_compile_options
|
||
)
|
||
|
||
# ── GMP exact predicates (optional) ──
|
||
if(VDE_USE_GMP)
|
||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
|
||
find_package(GMP REQUIRED)
|
||
target_compile_definitions(vde_foundation PUBLIC VDE_USE_GMP)
|
||
target_include_directories(vde_foundation PUBLIC ${GMP_INCLUDE_DIRS})
|
||
target_link_libraries(vde_foundation PUBLIC ${GMP_LIBRARIES})
|
||
message(STATUS "GMP exact arithmetic: ${GMP_INCLUDE_DIRS}")
|
||
else()
|
||
message(STATUS "GMP disabled (-DVDE_USE_GMP=ON to enable)")
|
||
endif()
|
||
|
||
# ── OpenMP parallelization ──
|
||
if(VDE_USE_OPENMP)
|
||
find_package(OpenMP)
|
||
if(OpenMP_CXX_FOUND)
|
||
target_link_libraries(vde_brep PUBLIC OpenMP::OpenMP_CXX)
|
||
target_compile_definitions(vde_brep PUBLIC VDE_USE_OPENMP)
|
||
message(STATUS "OpenMP enabled")
|
||
else()
|
||
message(STATUS "OpenMP not found (parallelism disabled)")
|
||
endif()
|
||
endif()
|
||
|
||
# ── GPU (CUDA) acceleration ────────────────────────
|
||
if(VDE_USE_CUDA)
|
||
# 支持 CUDA 10.0+,兼容 CMake 3.16+ 的 FindCUDAToolkit
|
||
find_package(CUDAToolkit QUIET)
|
||
if(CUDAToolkit_FOUND)
|
||
enable_language(CUDA)
|
||
set(CMAKE_CUDA_STANDARD 14)
|
||
set(CMAKE_CUDA_STANDARD_REQUIRED ON)
|
||
|
||
# GPU 加速库(混合 C++ / CUDA)
|
||
add_library(vde_gpu STATIC
|
||
gpu/gpu_acceleration.cpp
|
||
gpu/gpu_acceleration.cu
|
||
)
|
||
target_include_directories(vde_gpu
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_compile_definitions(vde_gpu PUBLIC VDE_USE_CUDA=1)
|
||
target_link_libraries(vde_gpu
|
||
PUBLIC vde_mesh vde_compile_options CUDA::cudart
|
||
)
|
||
# 将 vde_gpu 加入聚合接口
|
||
target_link_libraries(vde INTERFACE vde_gpu)
|
||
message(STATUS "CUDA GPU acceleration enabled (${CUDAToolkit_VERSION})")
|
||
else()
|
||
message(STATUS "CUDAToolkit not found — GPU acceleration disabled")
|
||
set(VDE_USE_CUDA OFF)
|
||
endif()
|
||
else()
|
||
# 无 CUDA 时仍编译 CPU-only 库
|
||
add_library(vde_gpu STATIC
|
||
gpu/gpu_acceleration.cpp
|
||
)
|
||
target_include_directories(vde_gpu
|
||
PUBLIC ${CMAKE_SOURCE_DIR}/include
|
||
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
|
||
)
|
||
target_link_libraries(vde_gpu
|
||
PUBLIC vde_mesh vde_compile_options
|
||
)
|
||
target_link_libraries(vde INTERFACE vde_gpu)
|
||
message(STATUS "GPU library (CPU-only, use -DVDE_USE_CUDA=ON for CUDA)")
|
||
endif()
|