# SPDX-License-Identifier: LGPL-2.1-or-later add_library(Mesh SHARED) if(WIN32) add_definitions(-DFCAppMesh -DWM4_FOUNDATION_DLL_EXPORT) endif(WIN32) target_include_directories( Mesh PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ) target_include_directories( Mesh SYSTEM PUBLIC ${CMAKE_SOURCE_DIR}/src/3rdParty/libkdtree ${EIGEN3_INCLUDE_DIR} ${QtConcurrent_INCLUDE_DIRS} ) set(Mesh_LIBS FreeCADBase FreeCADApp ) list(APPEND Mesh_LIBS ${QtConcurrent_LIBRARIES} ) generate_from_py(Edge) generate_from_py(Facet) generate_from_py(MeshFeature) generate_from_py(MeshPoint) generate_from_py(Mesh) SET(Mesh_XML_SRCS Edge.pyi Facet.pyi MeshFeature.pyi MeshPoint.pyi Mesh.pyi ) SOURCE_GROUP("XML" FILES ${Mesh_XML_SRCS}) SET(Core_SRCS Core/Algorithm.cpp Core/Algorithm.h Core/Approximation.cpp Core/Approximation.h Core/Builder.cpp Core/Builder.h Core/Curvature.cpp Core/Curvature.h Core/Decimation.cpp Core/Decimation.h Core/Definitions.cpp Core/Definitions.h Core/Degeneration.cpp Core/Degeneration.h Core/Elements.cpp Core/Elements.h Core/Evaluation.cpp Core/Evaluation.h Core/Grid.cpp Core/Grid.h Core/Helpers.h Core/Info.cpp Core/Info.h Core/Iterator.h Core/KDTree.cpp Core/KDTree.h Core/MeshIO.cpp Core/MeshIO.h Core/MeshKernel.cpp Core/MeshKernel.h Core/Projection.cpp Core/Projection.h Core/Segmentation.cpp Core/Segmentation.h Core/SetOperations.cpp Core/SetOperations.h Core/Smoothing.cpp Core/Smoothing.h Core/Tools.cpp Core/Tools.h Core/TopoAlgorithm.cpp Core/TopoAlgorithm.h Core/Triangulation.cpp Core/Triangulation.h Core/Trim.cpp Core/Trim.h Core/TrimByPlane.cpp Core/TrimByPlane.h Core/tritritest.h Core/Utilities.h Core/Visitor.cpp Core/Visitor.h Core/CylinderFit.cpp Core/CylinderFit.h Core/SphereFit.cpp Core/SphereFit.h Core/IO/Reader3MF.cpp Core/IO/Reader3MF.h Core/IO/ReaderOBJ.cpp Core/IO/ReaderOBJ.h Core/IO/ReaderPLY.cpp Core/IO/ReaderPLY.h Core/IO/Writer3MF.cpp Core/IO/Writer3MF.h Core/IO/WriterInventor.cpp Core/IO/WriterInventor.h Core/IO/WriterOBJ.cpp Core/IO/WriterOBJ.h ) SOURCE_GROUP("Core" FILES ${Core_SRCS}) SET(WildMagic4_SRCS WildMagic4/Wm4ApprCylinderFit3.cpp WildMagic4/Wm4ApprCylinderFit3.h WildMagic4/Wm4ApprGaussPointsFit2.cpp WildMagic4/Wm4ApprGaussPointsFit2.h WildMagic4/Wm4ApprGaussPointsFit3.cpp WildMagic4/Wm4ApprGaussPointsFit3.h WildMagic4/Wm4ApprLineFit3.cpp WildMagic4/Wm4ApprLineFit3.h WildMagic4/Wm4ApprPlaneFit3.cpp WildMagic4/Wm4ApprPlaneFit3.h WildMagic4/Wm4ApprPolyFit3.cpp WildMagic4/Wm4ApprPolyFit3.h WildMagic4/Wm4ApprQuadraticFit3.cpp WildMagic4/Wm4ApprQuadraticFit3.h WildMagic4/Wm4ApprSphereFit3.cpp WildMagic4/Wm4ApprSphereFit3.h WildMagic4/Wm4BandedMatrix.h WildMagic4/Wm4BandedMatrix.inl WildMagic4/Wm4Box2.h WildMagic4/Wm4Box2.inl WildMagic4/Wm4Box3.h WildMagic4/Wm4Box3.inl WildMagic4/Wm4ContBox2.cpp WildMagic4/Wm4ContBox2.h WildMagic4/Wm4ContBox3.cpp WildMagic4/Wm4ContBox3.h WildMagic4/Wm4ConvexHull.cpp WildMagic4/Wm4ConvexHull.h WildMagic4/Wm4ConvexHull1.cpp WildMagic4/Wm4ConvexHull1.h WildMagic4/Wm4ConvexHull2.cpp WildMagic4/Wm4ConvexHull2.h WildMagic4/Wm4ConvexHull3.cpp WildMagic4/Wm4ConvexHull3.h WildMagic4/Wm4DelPolygonEdge.cpp WildMagic4/Wm4DelPolygonEdge.h WildMagic4/Wm4DelPolyhedronFace.cpp WildMagic4/Wm4DelPolyhedronFace.h WildMagic4/Wm4DelTetrahedron.cpp WildMagic4/Wm4DelTetrahedron.h WildMagic4/Wm4DelTriangle.cpp WildMagic4/Wm4DelTriangle.h WildMagic4/Wm4Delaunay.cpp WildMagic4/Wm4Delaunay.h WildMagic4/Wm4Delaunay1.cpp WildMagic4/Wm4Delaunay1.h WildMagic4/Wm4Delaunay2.cpp WildMagic4/Wm4Delaunay2.h WildMagic4/Wm4Delaunay3.cpp WildMagic4/Wm4Delaunay3.h WildMagic4/Wm4DistLine3Segment3.cpp WildMagic4/Wm4DistLine3Segment3.h WildMagic4/Wm4DistLine3Triangle3.cpp WildMagic4/Wm4DistLine3Triangle3.h WildMagic4/Wm4DistSegment3Segment3.cpp WildMagic4/Wm4DistSegment3Segment3.h WildMagic4/Wm4DistSegment3Triangle3.cpp WildMagic4/Wm4DistSegment3Triangle3.h WildMagic4/Wm4DistVector3Plane3.cpp WildMagic4/Wm4DistVector3Plane3.h WildMagic4/Wm4DistVector3Segment3.cpp WildMagic4/Wm4DistVector3Segment3.h WildMagic4/Wm4DistVector3Triangle3.cpp WildMagic4/Wm4DistVector3Triangle3.h WildMagic4/Wm4Distance.cpp WildMagic4/Wm4Distance.h WildMagic4/Wm4ETManifoldMesh.cpp WildMagic4/Wm4ETManifoldMesh.h WildMagic4/Wm4ETManifoldMesh.inl WildMagic4/Wm4EdgeKey.h WildMagic4/Wm4EdgeKey.inl WildMagic4/Wm4Eigen.cpp WildMagic4/Wm4Eigen.h WildMagic4/Wm4Foundation.h WildMagic4/Wm4FoundationLIB.h WildMagic4/Wm4FoundationPCH.cpp WildMagic4/Wm4FoundationPCH.h WildMagic4/Wm4GMatrix.h WildMagic4/Wm4GMatrix.inl WildMagic4/Wm4GVector.h WildMagic4/Wm4GVector.inl WildMagic4/Wm4ImplicitSurface.cpp WildMagic4/Wm4ImplicitSurface.h WildMagic4/Wm4Intersector.cpp WildMagic4/Wm4Intersector.h WildMagic4/Wm4Intersector1.cpp WildMagic4/Wm4Intersector1.h WildMagic4/Wm4IntrLine3Box3.cpp WildMagic4/Wm4IntrLine3Box3.h WildMagic4/Wm4IntrLine3Plane3.cpp WildMagic4/Wm4IntrLine3Plane3.h WildMagic4/Wm4IntrSegment3Box3.cpp WildMagic4/Wm4IntrSegment3Box3.h WildMagic4/Wm4IntrSegment3Plane3.cpp WildMagic4/Wm4IntrSegment3Plane3.h WildMagic4/Wm4IntrTriangle2Triangle2.cpp WildMagic4/Wm4IntrTriangle2Triangle2.h WildMagic4/Wm4IntrTriangle3Triangle3.cpp WildMagic4/Wm4IntrTriangle3Triangle3.h WildMagic4/Wm4LinComp.h WildMagic4/Wm4LinComp.inl WildMagic4/Wm4Line3.h WildMagic4/Wm4Line3.inl WildMagic4/Wm4LinearSystem.cpp WildMagic4/Wm4LinearSystem.h WildMagic4/Wm4Mapper2.h WildMagic4/Wm4Mapper2.inl WildMagic4/Wm4Mapper3.h WildMagic4/Wm4Mapper3.inl WildMagic4/Wm4Math.cpp WildMagic4/Wm4Math.h WildMagic4/Wm4Math.inl WildMagic4/Wm4MathMCR.h WildMagic4/Wm4Matrix2.cpp WildMagic4/Wm4Matrix2.h WildMagic4/Wm4Matrix2.inl WildMagic4/Wm4Matrix3.cpp WildMagic4/Wm4Matrix3.h WildMagic4/Wm4Matrix3.inl WildMagic4/Wm4Matrix4.cpp WildMagic4/Wm4Matrix4.h WildMagic4/Wm4Matrix4.inl WildMagic4/Wm4Memory.cpp WildMagic4/Wm4Memory.h WildMagic4/Wm4Memory.inl WildMagic4/Wm4MeshCurvature.cpp WildMagic4/Wm4MeshCurvature.h WildMagic4/Wm4MeshSmoother.cpp WildMagic4/Wm4MeshSmoother.h WildMagic4/Wm4ParametricSurface.cpp WildMagic4/Wm4ParametricSurface.h WildMagic4/Wm4Plane3.h WildMagic4/Wm4Plane3.inl WildMagic4/Wm4Platforms.h WildMagic4/Wm4PolynomialRoots.cpp WildMagic4/Wm4PolynomialRoots.h WildMagic4/Wm4Polynomial1.h WildMagic4/Wm4Polynomial1.inl WildMagic4/Wm4QuadricSurface.cpp WildMagic4/Wm4QuadricSurface.h WildMagic4/Wm4Quaternion.cpp WildMagic4/Wm4Quaternion.h WildMagic4/Wm4Quaternion.inl WildMagic4/Wm4Query.h WildMagic4/Wm4Query.inl WildMagic4/Wm4Query2.h WildMagic4/Wm4Query2.inl WildMagic4/Wm4Query2Filtered.h WildMagic4/Wm4Query2Filtered.inl WildMagic4/Wm4Query2Int64.h WildMagic4/Wm4Query2Int64.inl WildMagic4/Wm4Query2TInteger.h WildMagic4/Wm4Query2TInteger.inl WildMagic4/Wm4Query2TRational.h WildMagic4/Wm4Query2TRational.inl WildMagic4/Wm4Query3.h WildMagic4/Wm4Query3.inl WildMagic4/Wm4Query3Filtered.h WildMagic4/Wm4Query3Filtered.inl WildMagic4/Wm4Query3Int64.h WildMagic4/Wm4Query3Int64.inl WildMagic4/Wm4Query3TInteger.h WildMagic4/Wm4Query3TInteger.inl WildMagic4/Wm4Query3TRational.h WildMagic4/Wm4Query3TRational.inl WildMagic4/Wm4RVector2.h WildMagic4/Wm4RVector2.inl WildMagic4/Wm4RVector3.h WildMagic4/Wm4RVector3.inl WildMagic4/Wm4Segment3.h WildMagic4/Wm4Segment3.inl WildMagic4/Wm4Sphere3.h WildMagic4/Wm4Sphere3.inl WildMagic4/Wm4Surface.cpp WildMagic4/Wm4Surface.h WildMagic4/Wm4System.cpp WildMagic4/Wm4System.h WildMagic4/Wm4System.inl WildMagic4/Wm4THashSet.h WildMagic4/Wm4THashSet.inl WildMagic4/Wm4THashTable.h WildMagic4/Wm4THashTable.inl WildMagic4/Wm4TInteger.h WildMagic4/Wm4TInteger.inl WildMagic4/Wm4TMinHeap.h WildMagic4/Wm4TMinHeap.inl WildMagic4/Wm4TRVector.h WildMagic4/Wm4TRVector.inl WildMagic4/Wm4TRational.h WildMagic4/Wm4TRational.inl WildMagic4/Wm4TSmallUnorderedSet.h WildMagic4/Wm4TSmallUnorderedSet.inl WildMagic4/Wm4TStringHashTable.h WildMagic4/Wm4TStringHashTable.inl WildMagic4/Wm4TTuple.h WildMagic4/Wm4TTuple.inl WildMagic4/Wm4Triangle2.h WildMagic4/Wm4Triangle2.inl WildMagic4/Wm4Triangle3.h WildMagic4/Wm4Triangle3.inl WildMagic4/Wm4TriangleKey.h WildMagic4/Wm4TriangleKey.inl WildMagic4/Wm4TriangulateEC.cpp WildMagic4/Wm4TriangulateEC.h WildMagic4/Wm4UniqueVerticesTriangles.h WildMagic4/Wm4UniqueVerticesTriangles.inl WildMagic4/Wm4VEManifoldMesh.cpp WildMagic4/Wm4VEManifoldMesh.h WildMagic4/Wm4VEManifoldMesh.inl WildMagic4/Wm4Vector2.cpp WildMagic4/Wm4Vector2.h WildMagic4/Wm4Vector2.inl WildMagic4/Wm4Vector3.cpp WildMagic4/Wm4Vector3.h WildMagic4/Wm4Vector3.inl WildMagic4/Wm4Vector4.cpp WildMagic4/Wm4Vector4.h WildMagic4/Wm4Vector4.inl ) SOURCE_GROUP("WildMagic4" FILES ${WildMagic4_SRCS}) SET(Mesh_SRCS ${Mesh_XML_SRCS} AppMesh.cpp AppMeshPy.cpp Exporter.cpp Exporter.h Importer.cpp Importer.h Edge.cpp Edge.h EdgePyImp.cpp Facet.cpp Facet.h FacetPyImp.cpp FeatureMeshCurvature.cpp FeatureMeshCurvature.h FeatureMeshDefects.cpp FeatureMeshDefects.h FeatureMeshExport.cpp FeatureMeshExport.h FeatureMeshImport.cpp FeatureMeshImport.h FeatureMeshSegmentByMesh.cpp FeatureMeshSegmentByMesh.h FeatureMeshSetOperations.cpp FeatureMeshSetOperations.h FeatureMeshSolid.cpp FeatureMeshSolid.h FeatureMeshTransform.cpp FeatureMeshTransform.h FeatureMeshTransformDemolding.cpp FeatureMeshTransformDemolding.h Mesh.cpp Mesh.h MeshFeature.cpp MeshFeature.h MeshFeaturePyImp.cpp MeshPointPyImp.cpp MeshPoint.h MeshProperties.cpp MeshProperties.h MeshPyImp.cpp MeshTexture.cpp MeshTexture.h PreCompiled.h Segment.cpp Segment.h ) # Suppress -Wundefined-var-template if (MINGW AND CMAKE_COMPILER_IS_CLANGXX) unset(_flag_found CACHE) check_cxx_compiler_flag("-Wno-undefined-var-template" _flag_found) if (_flag_found) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-undefined-var-template") endif() endif() if(FREECAD_USE_PCH) target_precompile_headers(Mesh PRIVATE $<$:"${CMAKE_CURRENT_LIST_DIR}/PreCompiled.h"> ) endif(FREECAD_USE_PCH) # Suppress some very long Eigen3 warnings of older versions if (EIGEN3_NO_DEPRECATED_COPY) set_source_files_properties( Core/Approximation.cpp Core/CylinderFit.cpp Core/SphereFit.cpp Core/KDTree.cpp PROPERTIES COMPILE_FLAGS ${EIGEN3_NO_DEPRECATED_COPY}) endif () target_sources(Mesh PRIVATE ${Core_SRCS} ${WildMagic4_SRCS} ${Mesh_SRCS}) target_link_libraries(Mesh ${Mesh_LIBS}) if (MSVC) target_compile_options(Mesh PRIVATE /wd4251 /wd4275 /wd4661) endif() if (FREECAD_WARN_ERROR) target_compile_warn_error(Mesh) endif() SET_BIN_DIR(Mesh Mesh /Mod/Mesh) SET_PYTHON_PREFIX_SUFFIX(Mesh) INSTALL(TARGETS Mesh DESTINATION ${CMAKE_INSTALL_LIBDIR})