Files
ViewDesignEngine/src/CMakeLists.txt
T
茂之钳 11b606bd39
CI / Build & Test (push) Failing after 33s
CI / Release Build (push) Failing after 32s
Build & Test / build-and-test (push) Has been cancelled
Build & Test / python-bindings (push) Has been cancelled
feat(v6.0): FFD freeform deformation + auto-dimensioning + PMI/MBD + Web viewer
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
2026-07-26 21:55:16 +08:00

318 lines
10 KiB
CMake
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ── 编译选项接口目标 ──────────────────────────────
# ── 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()