mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-04 06:11:02 +00:00
Behaviour-preserving move of the --load-assemble-list JSON parser and its plate/object structs from the CLI into libslic3r/Format/AssembleList, so the format can be unit tested. The parser returns its own AssembleListResult and takes the plate limit as a parameter; CLI::run maps the result to the same exit codes as before. Every validation rule and log message is unchanged. Adds Catch2 coverage of the valid layout and each validation rule.
775 lines
22 KiB
CMake
775 lines
22 KiB
CMake
cmake_minimum_required(VERSION 3.13)
|
|
project(libslic3r)
|
|
|
|
include(PrecompiledHeader)
|
|
|
|
if(NOT DEFINED ORCA_CHECK_GCODE_PLACEHOLDERS)
|
|
set(ORCA_CHECK_GCODE_PLACEHOLDERS "0")
|
|
endif()
|
|
|
|
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/libslic3r_version.h.in ${CMAKE_CURRENT_BINARY_DIR}/libslic3r_version.h @ONLY)
|
|
|
|
if (MINGW)
|
|
add_compile_options(-Wa,-mbig-obj)
|
|
endif ()
|
|
|
|
set(OpenVDBUtils_SOURCES "")
|
|
if (TARGET OpenVDB::openvdb)
|
|
set(OpenVDBUtils_SOURCES OpenVDBUtils.cpp OpenVDBUtils.hpp)
|
|
endif()
|
|
|
|
option(BUILD_SHARED_LIBS "Build shared libs" OFF)
|
|
option(USE_SLIC3R_CONSOLE_LOG "Enable console logging in RelWithDebInfo builds" OFF)
|
|
|
|
# SolveSpace constraint solver (2D sketch solver backbone), built in deps/SLVS.
|
|
if (SLIC3R_CAD)
|
|
find_package(SLVS REQUIRED)
|
|
endif ()
|
|
|
|
set(lisbslic3r_sources
|
|
AABBMesh.cpp
|
|
AABBMesh.hpp
|
|
AABBTreeIndirect.hpp
|
|
AABBTreeLines.hpp
|
|
Algorithm/LineSplit.cpp
|
|
Algorithm/LineSplit.hpp
|
|
Algorithm/RegionExpansion.cpp
|
|
Algorithm/RegionExpansion.hpp
|
|
AnyPtr.hpp
|
|
AppConfig.cpp
|
|
AppConfig.hpp
|
|
Arachne/BeadingStrategy/BeadingStrategy.cpp
|
|
Arachne/BeadingStrategy/BeadingStrategyFactory.cpp
|
|
Arachne/BeadingStrategy/BeadingStrategyFactory.hpp
|
|
Arachne/BeadingStrategy/BeadingStrategy.hpp
|
|
Arachne/BeadingStrategy/DistributedBeadingStrategy.cpp
|
|
Arachne/BeadingStrategy/DistributedBeadingStrategy.hpp
|
|
Arachne/BeadingStrategy/LimitedBeadingStrategy.cpp
|
|
Arachne/BeadingStrategy/LimitedBeadingStrategy.hpp
|
|
Arachne/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp
|
|
Arachne/BeadingStrategy/OuterWallInsetBeadingStrategy.hpp
|
|
Arachne/BeadingStrategy/RedistributeBeadingStrategy.cpp
|
|
Arachne/BeadingStrategy/RedistributeBeadingStrategy.hpp
|
|
Arachne/BeadingStrategy/WideningBeadingStrategy.cpp
|
|
Arachne/BeadingStrategy/WideningBeadingStrategy.hpp
|
|
Arachne/SkeletalTrapezoidation.cpp
|
|
Arachne/SkeletalTrapezoidationEdge.hpp
|
|
Arachne/SkeletalTrapezoidationGraph.cpp
|
|
Arachne/SkeletalTrapezoidationGraph.hpp
|
|
Arachne/SkeletalTrapezoidation.hpp
|
|
Arachne/SkeletalTrapezoidationJoint.hpp
|
|
Arachne/utils/ExtrusionJunction.hpp
|
|
Arachne/utils/ExtrusionLine.cpp
|
|
Arachne/utils/ExtrusionLine.hpp
|
|
Arachne/utils/HalfEdgeGraph.hpp
|
|
Arachne/utils/HalfEdge.hpp
|
|
Arachne/utils/HalfEdgeNode.hpp
|
|
Arachne/utils/PolygonsPointIndex.hpp
|
|
Arachne/utils/PolygonsSegmentIndex.hpp
|
|
Arachne/utils/PolylineStitcher.cpp
|
|
Arachne/utils/PolylineStitcher.hpp
|
|
Arachne/utils/SparseGrid.hpp
|
|
Arachne/utils/SparseLineGrid.hpp
|
|
Arachne/utils/SparsePointGrid.hpp
|
|
Arachne/utils/SquareGrid.cpp
|
|
Arachne/utils/SquareGrid.hpp
|
|
Arachne/WallToolPaths.cpp
|
|
Arachne/WallToolPaths.hpp
|
|
ArcFitter.cpp
|
|
ArcFitter.hpp
|
|
Arrange.cpp
|
|
Arrange.hpp
|
|
BlacklistedLibraryCheck.cpp
|
|
BlacklistedLibraryCheck.hpp
|
|
BoundingBox.cpp
|
|
BoundingBox.hpp
|
|
BridgeDetector.cpp
|
|
BridgeDetector.hpp
|
|
Brim.cpp
|
|
BrimEarsPoint.hpp
|
|
Brim.hpp
|
|
BuildVolume.cpp
|
|
BuildVolume.hpp
|
|
calib.cpp
|
|
calib.hpp
|
|
Circle.cpp
|
|
Circle.hpp
|
|
ClipperUtils.cpp
|
|
ClipperUtils.hpp
|
|
ClipperZUtils.cpp
|
|
ClipperZUtils.hpp
|
|
Color.cpp
|
|
Color.hpp
|
|
CommonDefs.hpp
|
|
Config.cpp
|
|
Config.hpp
|
|
ContourZ.cpp
|
|
CustomGCode.cpp
|
|
CustomGCode.hpp
|
|
CutUtils.cpp
|
|
CutUtils.hpp
|
|
EdgeGrid.cpp
|
|
EdgeGrid.hpp
|
|
ElephantFootCompensation.cpp
|
|
ElephantFootCompensation.hpp
|
|
Emboss.cpp
|
|
Emboss.hpp
|
|
EmbossShape.hpp
|
|
enum_bitmask.hpp
|
|
Execution/Execution.hpp
|
|
Execution/ExecutionSeq.hpp
|
|
Execution/ExecutionTBB.hpp
|
|
ExPolygon.cpp
|
|
ExPolygon.hpp
|
|
ExPolygonSerialize.hpp
|
|
ExPolygonsIndex.cpp
|
|
ExPolygonsIndex.hpp
|
|
Extruder.cpp
|
|
Extruder.hpp
|
|
ExtrusionEntityCollection.cpp
|
|
ExtrusionEntityCollection.hpp
|
|
ExtrusionEntity.cpp
|
|
ExtrusionEntity.hpp
|
|
ExtrusionSimulator.cpp
|
|
ExtrusionSimulator.hpp
|
|
FaceDetector.cpp
|
|
FaceDetector.hpp
|
|
Feature/FuzzySkin/FuzzySkin.cpp
|
|
Feature/FuzzySkin/FuzzySkin.hpp
|
|
Feature/Interlocking/InterlockingGenerator.cpp
|
|
Feature/Interlocking/InterlockingGenerator.hpp
|
|
Feature/Interlocking/VoxelUtils.cpp
|
|
Feature/Interlocking/VoxelUtils.hpp
|
|
FileParserError.hpp
|
|
Fill/Fill3DHoneycomb.cpp
|
|
Fill/Fill3DHoneycomb.hpp
|
|
Fill/FillAdaptive.cpp
|
|
Fill/FillAdaptive.hpp
|
|
Fill/FillBase.cpp
|
|
Fill/FillBase.hpp
|
|
Fill/FillConcentric.cpp
|
|
Fill/FillConcentric.hpp
|
|
Fill/FillSpiralInset.cpp
|
|
Fill/FillSpiralInset.hpp
|
|
Fill/FillConcentricInternal.cpp
|
|
Fill/FillConcentricInternal.hpp
|
|
Fill/FillCornerSmoothing.cpp
|
|
Fill/FillCornerSmoothing.hpp
|
|
Fill/Fill.cpp
|
|
Fill/FillCrossHatch.cpp
|
|
Fill/FillCrossHatch.hpp
|
|
Fill/FillGyroid.cpp
|
|
Fill/FillGyroid.hpp
|
|
Fill/FillHoneycomb.cpp
|
|
Fill/FillHoneycomb.hpp
|
|
Fill/Fill.hpp
|
|
Fill/FillLightning.cpp
|
|
Fill/FillLightning.hpp
|
|
Fill/FillLine.cpp
|
|
Fill/FillLine.hpp
|
|
Fill/FillPlanePath.cpp
|
|
Fill/FillPlanePath.hpp
|
|
Fill/FillRectilinear.cpp
|
|
Fill/FillRectilinear.hpp
|
|
Fill/FillTpmsD.cpp
|
|
Fill/FillTpmsD.hpp
|
|
Fill/FillTpmsFK.cpp
|
|
Fill/FillTpmsFK.hpp
|
|
Fill/Lightning/DistanceField.cpp
|
|
Fill/Lightning/DistanceField.hpp
|
|
Fill/Lightning/Generator.cpp
|
|
Fill/Lightning/Generator.hpp
|
|
Fill/Lightning/Layer.cpp
|
|
Fill/Lightning/Layer.hpp
|
|
Fill/Lightning/TreeNode.cpp
|
|
Fill/Lightning/TreeNode.hpp
|
|
FilamentMixer.cpp
|
|
FilamentMixer.hpp
|
|
FilamentMixerModel.hpp
|
|
ColorDecomposeRecipe.cpp
|
|
ColorDecomposeRecipe.hpp
|
|
TexturePainting.hpp
|
|
TexturePainting.cpp
|
|
TextureToColor/TextureToColor.hpp
|
|
TextureToColor/TextureToColor.cpp
|
|
TextureToColor/ColorUtils.hpp
|
|
TextureToColor/ColorUtils.cpp
|
|
Flow.cpp
|
|
Flow.hpp
|
|
FlushVolCalc.cpp
|
|
FlushVolCalc.hpp
|
|
Format/3mf.cpp
|
|
Format/3mf.hpp
|
|
Format/AMF.cpp
|
|
Format/AMF.hpp
|
|
Format/AssembleList.cpp
|
|
Format/AssembleList.hpp
|
|
Format/DRC.cpp
|
|
Format/DRC.hpp
|
|
Format/bbs_3mf.cpp
|
|
Format/bbs_3mf.hpp
|
|
format.hpp
|
|
Format/OBJ.cpp
|
|
Format/OBJ.hpp
|
|
Format/AssimpImport.hpp
|
|
Format/AssimpImport.cpp
|
|
Format/ResourcePathUtils.hpp
|
|
Format/objparser.cpp
|
|
Format/objparser.hpp
|
|
Format/SL1.cpp
|
|
Format/SL1.hpp
|
|
Format/STEP.cpp
|
|
Format/STEP.hpp
|
|
Format/STL.cpp
|
|
Format/STL.hpp
|
|
Format/svg.cpp
|
|
Format/svg.hpp
|
|
Format/ZipperArchiveImport.cpp
|
|
Format/ZipperArchiveImport.hpp
|
|
GCode/AdaptivePAInterpolator.cpp
|
|
GCode/AdaptivePAInterpolator.hpp
|
|
GCode/AdaptivePAProcessor.cpp
|
|
GCode/AdaptivePAProcessor.hpp
|
|
GCode/AvoidCrossingPerimeters.cpp
|
|
GCode/AvoidCrossingPerimeters.hpp
|
|
GCode/ConflictChecker.cpp
|
|
GCode/ConflictChecker.hpp
|
|
GCode/CoolingBuffer.cpp
|
|
GCode/CoolingBuffer.hpp
|
|
GCode/TimelapsePosPicker.cpp
|
|
GCode/TimelapsePosPicker.hpp
|
|
GCode.cpp
|
|
GCode/ExtrusionProcessor.hpp
|
|
GCode/FanMover.cpp
|
|
GCode/FanMover.hpp
|
|
GCode/GCodeProcessor.cpp
|
|
GCode/GCodeProcessor.hpp
|
|
GCode/ElegooGCodeProcessorHelper.cpp
|
|
GCode.hpp
|
|
GCode/PchipInterpolatorHelper.cpp
|
|
GCode/PchipInterpolatorHelper.hpp
|
|
GCode/PressureEqualizer.cpp
|
|
GCode/PressureEqualizer.hpp
|
|
GCode/PrintExtents.cpp
|
|
GCode/PrintExtents.hpp
|
|
GCodeReader.cpp
|
|
GCodeReader.hpp
|
|
GCode/RetractWhenCrossingPerimeters.cpp
|
|
GCode/RetractWhenCrossingPerimeters.hpp
|
|
GCode/SeamPlacer.cpp
|
|
GCode/SeamPlacer.hpp
|
|
GCode/PreciseSeam.cpp
|
|
GCode/PreciseSeam.hpp
|
|
#GCodeSender.cpp
|
|
#GCodeSender.hpp
|
|
GCode/SmallAreaInfillFlowCompensator.cpp
|
|
GCode/SmallAreaInfillFlowCompensator.hpp
|
|
GCode/SpiralVase.cpp
|
|
GCode/SpiralVase.hpp
|
|
GCode/WipePathHelpers.cpp
|
|
GCode/WipePathHelpers.hpp
|
|
GCode/ThumbnailData.cpp
|
|
GCode/ThumbnailData.hpp
|
|
GCode/Thumbnails.cpp
|
|
GCode/Thumbnails.hpp
|
|
GCode/ToolOrdering.cpp
|
|
GCode/ToolOrdering.hpp
|
|
GCode/OrderingStrategies.cpp
|
|
GCode/OrderingStrategies.hpp
|
|
GCode/WipeTower2.cpp
|
|
GCode/WipeTower2.hpp
|
|
GCode/WipeTower.cpp
|
|
GCode/WipeTower.hpp
|
|
GCode/WipeTowerEstimate.cpp
|
|
GCode/WipeTowerEstimate.hpp
|
|
GCodeWriter.cpp
|
|
GCodeWriter.hpp
|
|
Geometry/ArcWelder.hpp
|
|
Geometry/ArcWelder.cpp
|
|
Geometry/Bicubic.hpp
|
|
Geometry/Circle.cpp
|
|
Geometry/Circle.hpp
|
|
Geometry/ConvexHull.cpp
|
|
Geometry/ConvexHull.hpp
|
|
Geometry.cpp
|
|
Geometry/Curves.hpp
|
|
Geometry.hpp
|
|
Geometry/MedialAxis.cpp
|
|
Geometry/MedialAxis.hpp
|
|
Geometry/Voronoi.cpp
|
|
Geometry/Voronoi.hpp
|
|
Geometry/VoronoiOffset.cpp
|
|
Geometry/VoronoiOffset.hpp
|
|
Geometry/VoronoiUtilsCgal.cpp
|
|
Geometry/VoronoiUtilsCgal.hpp
|
|
Geometry/VoronoiUtils.cpp
|
|
Geometry/VoronoiUtils.hpp
|
|
Geometry/VoronoiVisualUtils.hpp
|
|
InstanceLock.cpp
|
|
InstanceLock.hpp
|
|
Int128.hpp
|
|
KDTreeIndirect.hpp
|
|
Layer.cpp
|
|
Layer.hpp
|
|
LayerRegion.cpp
|
|
LayOnFace.cpp
|
|
LayOnFace.hpp
|
|
libslic3r.cpp
|
|
libslic3r.h
|
|
Line.cpp
|
|
Line.hpp
|
|
LocalesUtils.cpp
|
|
LocalesUtils.hpp
|
|
MarchingSquares.hpp
|
|
Measure.cpp
|
|
Measure.hpp
|
|
MeasureUtils.hpp
|
|
MeshSplitImpl.hpp
|
|
MinAreaBoundingBox.cpp
|
|
MinAreaBoundingBox.hpp
|
|
MinimumSpanningTree.cpp
|
|
MinimumSpanningTree.hpp
|
|
miniz_extension.cpp
|
|
miniz_extension.hpp
|
|
ModelArrange.cpp
|
|
ModelArrange.hpp
|
|
Model.cpp
|
|
Model.hpp
|
|
MTUtils.hpp
|
|
MultiMaterialSegmentation.cpp
|
|
MultiMaterialSegmentation.hpp
|
|
MultiPoint.cpp
|
|
MultiPoint.hpp
|
|
MutablePolygon.cpp
|
|
MutablePolygon.hpp
|
|
MutablePriorityQueue.hpp
|
|
NormalUtils.cpp
|
|
NormalUtils.hpp
|
|
NSVGUtils.cpp
|
|
NSVGUtils.hpp
|
|
ObjColorUtils.cpp
|
|
ObjColorUtils.hpp
|
|
ObjectID.cpp
|
|
ObjectID.hpp
|
|
Optimize/BruteforceOptimizer.hpp
|
|
Optimize/NLoptOptimizer.hpp
|
|
Optimize/Optimizer.hpp
|
|
Orient.cpp
|
|
Orient.hpp
|
|
ParallelResolve.hpp
|
|
ParameterUtils.cpp
|
|
ParameterUtils.hpp
|
|
pchheader.cpp
|
|
pchheader.hpp
|
|
PerimeterGenerator.cpp
|
|
PerimeterGenerator.hpp
|
|
PlaceholderParser.cpp
|
|
PlaceholderParser.hpp
|
|
Platform.cpp
|
|
Platform.hpp
|
|
PNGReadWrite.cpp
|
|
PNGReadWrite.hpp
|
|
Point.cpp
|
|
Point.hpp
|
|
Polygon.cpp
|
|
Polygon.hpp
|
|
PolygonTrimmer.cpp
|
|
PolygonTrimmer.hpp
|
|
Polyline.cpp
|
|
Polyline.hpp
|
|
PresetBundle.cpp
|
|
PresetBundle.hpp
|
|
PresetCacheFormat.cpp
|
|
PresetCacheFormat.hpp
|
|
Preset.cpp
|
|
Preset.hpp
|
|
PrincipalComponents2D.cpp
|
|
PrincipalComponents2D.hpp
|
|
PublishSettings.cpp
|
|
PublishSettings.hpp
|
|
PrintApply.cpp
|
|
PrintBase.cpp
|
|
PrintBase.hpp
|
|
MaterialType.cpp
|
|
MaterialType.hpp
|
|
PrintConfig.cpp
|
|
PrintConfig.hpp
|
|
Print.cpp
|
|
Print.hpp
|
|
PrintObject.cpp
|
|
PrintObjectSlice.cpp
|
|
PrintRegion.cpp
|
|
ProjectTask.cpp
|
|
ProjectTask.hpp
|
|
QuadricEdgeCollapse.cpp
|
|
QuadricEdgeCollapse.hpp
|
|
Semver.cpp
|
|
Shape/TextShape.cpp
|
|
Shape/TextShape.hpp
|
|
ShortEdgeCollapse.cpp
|
|
ShortEdgeCollapse.hpp
|
|
ShortestPath.cpp
|
|
ShortestPath.hpp
|
|
SLA/AGGRaster.hpp
|
|
SLA/BoostAdapter.hpp
|
|
SLA/Clustering.cpp
|
|
SLA/Clustering.hpp
|
|
SLA/ConcaveHull.cpp
|
|
SLA/ConcaveHull.hpp
|
|
SLA/Concurrency.hpp
|
|
SLA/Hollowing.cpp
|
|
SLA/Hollowing.hpp
|
|
SLA/IndexedMesh.cpp
|
|
SLA/IndexedMesh.hpp
|
|
SLA/JobController.hpp
|
|
SLA/Pad.cpp
|
|
SLA/Pad.hpp
|
|
SLAPrint.cpp
|
|
SLAPrint.hpp
|
|
SLAPrintSteps.cpp
|
|
SLAPrintSteps.hpp
|
|
SLA/RasterBase.cpp
|
|
SLA/RasterBase.hpp
|
|
SLA/RasterToPolygons.cpp
|
|
SLA/RasterToPolygons.hpp
|
|
SLA/ReprojectPointsOnMesh.hpp
|
|
SLA/Rotfinder.cpp
|
|
SLA/Rotfinder.hpp
|
|
SLA/SpatIndex.cpp
|
|
SLA/SpatIndex.hpp
|
|
SLA/SupportPointGenerator.cpp
|
|
SLA/SupportPointGenerator.hpp
|
|
SLA/SupportPoint.hpp
|
|
SLA/SupportTreeBuilder.cpp
|
|
SLA/SupportTreeBuilder.hpp
|
|
SLA/SupportTreeBuildsteps.cpp
|
|
SLA/SupportTreeBuildsteps.hpp
|
|
SLA/SupportTree.cpp
|
|
SLA/SupportTree.hpp
|
|
#SLA/SupportTreeIGL.cpp
|
|
SLA/SupportTreeMesher.cpp
|
|
SLA/SupportTreeMesher.hpp
|
|
SlicesToTriangleMesh.cpp
|
|
SlicesToTriangleMesh.hpp
|
|
SlicingAdaptive.cpp
|
|
SlicingAdaptive.hpp
|
|
Slicing.cpp
|
|
Slicing.hpp
|
|
Support/SupportCommon.cpp
|
|
Support/SupportCommon.hpp
|
|
Support/SupportLayer.hpp
|
|
Support/SupportMaterial.cpp
|
|
Support/SupportMaterial.hpp
|
|
Support/SupportParameters.hpp
|
|
Support/SupportSpotsGenerator.cpp
|
|
Support/SupportSpotsGenerator.hpp
|
|
Support/TreeModelVolumes.cpp
|
|
Support/TreeModelVolumes.hpp
|
|
Support/TreeSupport3D.cpp
|
|
Support/TreeSupport3D.hpp
|
|
Support/TreeSupportCommon.hpp
|
|
Support/TreeSupport.cpp
|
|
Support/TreeSupport.hpp
|
|
SurfaceCollection.cpp
|
|
SurfaceCollection.hpp
|
|
Surface.cpp
|
|
Surface.hpp
|
|
SurfaceMesh.hpp
|
|
SVG.cpp
|
|
SVG.hpp
|
|
Technologies.hpp
|
|
Tesselate.cpp
|
|
Tesselate.hpp
|
|
TextConfiguration.hpp
|
|
TextureDisplacement.cpp
|
|
TextureDisplacement.hpp
|
|
TextureBake/TextureBakeIndex.cpp
|
|
TextureBake/TextureBakeIndex.hpp
|
|
TextureBake/TextureBakeSubdivide.cpp
|
|
TextureBake/TextureBakeSubdivide.hpp
|
|
TextureBake/TextureBakeRegularize.cpp
|
|
TextureBake/TextureBakeRegularize.hpp
|
|
TextureBake/TextureBakeRelocate.cpp
|
|
TextureBake/TextureBakeRelocate.hpp
|
|
TextureBake/TextureBakeFlip.cpp
|
|
TextureBake/TextureBakeFlip.hpp
|
|
TextureBake/TextureBakeDebug.cpp
|
|
TextureBake/TextureBakeDebug.hpp
|
|
TextureBake/TextureBakeDisplace.cpp
|
|
TextureBake/TextureBakeDisplace.hpp
|
|
TextureBake/TextureBakeDecimate.cpp
|
|
TextureBake/TextureBakeDecimate.hpp
|
|
TextureBake/TextureBakeRepair.cpp
|
|
TextureBake/TextureBakeRepair.hpp
|
|
TextureBake/TextureBakePipeline.cpp
|
|
TextureBake/TextureBakePipeline.hpp
|
|
TextureBake/TextureBakeMesh.cpp
|
|
TextureBake/TextureBakeMesh.hpp
|
|
Thread.cpp
|
|
Thread.hpp
|
|
Time.cpp
|
|
Time.hpp
|
|
Timer.cpp
|
|
Timer.hpp
|
|
TriangleMesh.cpp
|
|
TriangleMesh.hpp
|
|
TriangleMeshDeal.cpp
|
|
TriangleMeshDeal.hpp
|
|
TriangleMeshSlicer.cpp
|
|
TriangleMeshSlicer.hpp
|
|
TriangleSelector.cpp
|
|
TriangleSelector.hpp
|
|
TriangleSetSampling.cpp
|
|
TriangleSetSampling.hpp
|
|
TriangulateWall.cpp
|
|
TriangulateWall.hpp
|
|
utils.cpp
|
|
Utils.hpp
|
|
VariableWidth.cpp
|
|
VariableWidth.hpp
|
|
Zipper.cpp
|
|
Zipper.hpp
|
|
FilamentGroup.hpp
|
|
FilamentGroup.cpp
|
|
FilamentGroupUtils.hpp
|
|
FilamentGroupUtils.cpp
|
|
MultiNozzleUtils.hpp
|
|
MultiNozzleUtils.cpp
|
|
GCode/ToolOrderUtils.hpp
|
|
GCode/ToolOrderUtils.cpp
|
|
FlushVolPredictor.hpp
|
|
FlushVolPredictor.cpp
|
|
)
|
|
|
|
# Parametric Design/CAD kernel. Needs OCCT's ModelingAlgorithms module and the
|
|
# vendored SolveSpace solver; both are pulled in only when SLIC3R_CAD is ON.
|
|
if (SLIC3R_CAD)
|
|
list(APPEND lisbslic3r_sources
|
|
CAD/GeometryEngine.cpp
|
|
CAD/GeometryEngine.hpp
|
|
CAD/SketchEngine.cpp
|
|
CAD/SketchEngine.hpp
|
|
CAD/SketchConstraints.cpp
|
|
CAD/SketchConstraints.hpp
|
|
CAD/SketchSolver.cpp
|
|
CAD/SketchSolver.hpp
|
|
CAD/SketchInference.cpp
|
|
CAD/SketchInference.hpp
|
|
CAD/SketchImport.cpp
|
|
CAD/SketchImport.hpp
|
|
CAD/CadDocument.cpp
|
|
CAD/CadDocument.hpp
|
|
CAD/ThreadStandards.cpp
|
|
CAD/ThreadStandards.hpp
|
|
)
|
|
endif ()
|
|
|
|
if (APPLE)
|
|
list(APPEND lisbslic3r_sources
|
|
MacUtils.mm
|
|
Format/ModelIO.hpp
|
|
Format/ModelIO.mm
|
|
)
|
|
endif ()
|
|
|
|
add_library(libslic3r STATIC ${lisbslic3r_sources}
|
|
"${CMAKE_CURRENT_BINARY_DIR}/libslic3r_version.h"
|
|
${OpenVDBUtils_SOURCES})
|
|
source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES ${lisbslic3r_sources})
|
|
|
|
if (SLIC3R_STATIC)
|
|
set(CGAL_Boost_USE_STATIC_LIBS ON CACHE BOOL "" FORCE)
|
|
endif ()
|
|
set(CGAL_DO_NOT_WARN_ABOUT_CMAKE_BUILD_TYPE ON CACHE BOOL "" FORCE)
|
|
|
|
cmake_policy(PUSH)
|
|
cmake_policy(SET CMP0011 NEW)
|
|
# CGAL's config resets policies (cmake_minimum_required ...3.23), so a plain SET
|
|
# can't reach it; the default opts its Boost lookup into BoostConfig (CMP0167).
|
|
set(CMAKE_POLICY_DEFAULT_CMP0167 NEW)
|
|
find_package(CGAL REQUIRED)
|
|
find_package(OpenCV REQUIRED core)
|
|
find_package(assimp REQUIRED)
|
|
unset(CMAKE_POLICY_DEFAULT_CMP0167)
|
|
cmake_policy(POP)
|
|
|
|
add_library(libslic3r_cgal STATIC
|
|
CutSurface.hpp CutSurface.cpp
|
|
IntersectionPoints.hpp IntersectionPoints.cpp
|
|
MeshBoolean.hpp MeshBoolean.cpp
|
|
TryCatchSignal.hpp TryCatchSignal.cpp
|
|
Triangulation.hpp Triangulation.cpp
|
|
)
|
|
target_include_directories(libslic3r_cgal PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
|
|
|
|
# Reset compile options of libslic3r_cgal. Despite it being linked privately, CGAL options
|
|
# (-frounding-math) still propagate to dependent libs which is not desired.
|
|
get_target_property(_cgal_tgt CGAL::CGAL ALIASED_TARGET)
|
|
if (NOT TARGET ${_cgal_tgt})
|
|
set (_cgal_tgt CGAL::CGAL)
|
|
endif ()
|
|
get_target_property(_opts ${_cgal_tgt} INTERFACE_COMPILE_OPTIONS)
|
|
if (_opts)
|
|
set(_opts_bad "${_opts}")
|
|
set(_opts_good "${_opts}")
|
|
list(FILTER _opts_bad INCLUDE REGEX frounding-math)
|
|
list(FILTER _opts_good EXCLUDE REGEX frounding-math)
|
|
set_target_properties(${_cgal_tgt} PROPERTIES INTERFACE_COMPILE_OPTIONS "${_opts_good}")
|
|
target_compile_options(libslic3r_cgal PRIVATE "${_opts_bad}")
|
|
endif()
|
|
|
|
if (IS_CLANG_CL)
|
|
# CGAL passes /fp:strict /fp:except-. clang-cl reports the second as overriding part of
|
|
# the first; the settings cc1 receives are the same ones MSVC produces from that pair.
|
|
target_compile_options(libslic3r_cgal PRIVATE -Wno-overriding-option)
|
|
endif ()
|
|
|
|
target_link_libraries(libslic3r_cgal PRIVATE ${_cgal_tgt} admesh libigl mcut boost_libs)
|
|
|
|
if (MSVC AND "${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") # 32 bit MSVC workaround
|
|
target_compile_definitions(libslic3r_cgal PRIVATE CGAL_DO_NOT_USE_MPZF)
|
|
endif ()
|
|
|
|
encoding_check(libslic3r)
|
|
|
|
target_compile_definitions(libslic3r PUBLIC -DUSE_TBB -DTBB_USE_CAPTURED_EXCEPTION=0)
|
|
if (USE_SLIC3R_CONSOLE_LOG)
|
|
target_compile_definitions(libslic3r PRIVATE $<$<CONFIG:RelWithDebInfo>:SLIC3R_CONSOLE_LOG>)
|
|
endif()
|
|
target_include_directories(libslic3r PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/TextureToColor PUBLIC ${CMAKE_CURRENT_BINARY_DIR})
|
|
target_include_directories(libslic3r SYSTEM PUBLIC ${EXPAT_INCLUDE_DIRS})
|
|
|
|
# Find the OCCT and related libraries
|
|
set(OpenCASCADE_DIR "${CMAKE_PREFIX_PATH}/lib/cmake/occt")
|
|
find_package(OpenCASCADE REQUIRED)
|
|
target_include_directories(libslic3r SYSTEM PUBLIC ${OpenCASCADE_INCLUDE_DIR})
|
|
|
|
find_package(JPEG REQUIRED)
|
|
find_package(Draco REQUIRED)
|
|
|
|
set(OCCT_LIBS
|
|
TKXDESTEP
|
|
TKSTEP
|
|
TKSTEP209
|
|
TKSTEPAttr
|
|
TKSTEPBase
|
|
TKXCAF
|
|
TKXSBase
|
|
TKVCAF
|
|
TKCAF
|
|
TKLCAF
|
|
TKCDF
|
|
TKV3d
|
|
TKService
|
|
TKMesh
|
|
TKBO
|
|
TKPrim
|
|
TKHLR
|
|
TKShHealing
|
|
TKTopAlgo
|
|
TKGeomAlgo
|
|
TKBRep
|
|
TKGeomBase
|
|
TKG3d
|
|
TKG2d
|
|
TKMath
|
|
TKernel
|
|
)
|
|
# The CAD kernel is the only consumer of OCCT's ModelingAlgorithms module: TKFillet
|
|
# (BRepFilletAPI), TKOffset (BRepOffsetAPI) and TKBool, which the other two need.
|
|
#
|
|
# PREPEND, never append: this list is single-pass static link order, dependents before
|
|
# dependencies — note TKernel, which everything needs, is deliberately last. TKOffset
|
|
# references BRepAlgo_Loop, which TKBool defines, so TKOffset must come BEFORE TKBool.
|
|
# Appending put it after, and a strictly single-pass linker (the Flatpak build) failed with
|
|
# libTKOffset.a(BRepOffset_MakeLoops.cxx.o): undefined reference to
|
|
# `BRepAlgo_Loop::BRepAlgo_Loop()'
|
|
# while the ordinary Linux, macOS and Windows links resolved it anyway. Use set() rather
|
|
# than list(PREPEND), which needs CMake 3.15 and this project supports 3.13.
|
|
if (SLIC3R_CAD)
|
|
set(OCCT_LIBS TKFillet TKOffset TKBool ${OCCT_LIBS})
|
|
# deps is configured separately, so its SLIC3R_CAD can differ from ours. The module is
|
|
# all-or-nothing, so one absent toolkit proves it; fail here rather than at link time.
|
|
if (NOT TARGET TKFillet)
|
|
message(FATAL_ERROR
|
|
"SLIC3R_CAD is ON, but the OpenCASCADE in ${CMAKE_PREFIX_PATH} was built without "
|
|
"BUILD_MODULE_ModelingAlgorithms. Rebuild the dependencies with -DSLIC3R_CAD=ON, "
|
|
"or configure this project with -DSLIC3R_CAD=OFF.")
|
|
endif ()
|
|
endif ()
|
|
# Published for the Windows packaging step in the top-level CMakeLists.txt.
|
|
set(OCCT_LIBS "${OCCT_LIBS}" CACHE INTERNAL "OCCT toolkits linked by libslic3r")
|
|
|
|
target_link_libraries(libslic3r
|
|
PUBLIC
|
|
Eigen3::Eigen
|
|
admesh
|
|
libigl
|
|
libnest2d
|
|
miniz
|
|
opencv_world
|
|
assimp::assimp
|
|
PRIVATE
|
|
${CMAKE_DL_LIBS}
|
|
${EXPAT_LIBRARIES}
|
|
${OCCT_LIBS}
|
|
boost_libs
|
|
cereal::cereal
|
|
Clipper2
|
|
draco::draco
|
|
glu-libtess
|
|
JPEG::JPEG
|
|
libslic3r_cgal
|
|
mcut
|
|
noise::noise
|
|
PNG::PNG
|
|
qhull
|
|
qoi
|
|
semver
|
|
TBB::tbb
|
|
TBB::tbbmalloc
|
|
ZLIB::ZLIB
|
|
OpenSSL::Crypto
|
|
)
|
|
|
|
if(NOT WIN32)
|
|
# Link freetype for OCCT dependency (CAD operations need font rendering)
|
|
target_link_libraries(libslic3r PRIVATE ${FREETYPE_LIBRARIES})
|
|
if (NOT APPLE)
|
|
target_link_libraries(libslic3r PRIVATE fontconfig)
|
|
endif()
|
|
endif()
|
|
|
|
if (APPLE)
|
|
find_library(FOUNDATION Foundation REQUIRED)
|
|
find_library(MODELIO ModelIO REQUIRED)
|
|
target_link_libraries(libslic3r PRIVATE ${FOUNDATION} ${MODELIO})
|
|
endif ()
|
|
|
|
if (TARGET OpenVDB::openvdb)
|
|
target_link_libraries(libslic3r PRIVATE OpenVDB::openvdb)
|
|
endif()
|
|
|
|
if (SLIC3R_CAD)
|
|
target_link_libraries(libslic3r PUBLIC SLVS::slvs)
|
|
endif ()
|
|
|
|
if(WIN32)
|
|
target_link_libraries(libslic3r PRIVATE Psapi.lib bcrypt.lib)
|
|
endif()
|
|
|
|
if(SLIC3R_PROFILE)
|
|
target_link_libraries(libslic3r PRIVATE Shiny)
|
|
endif()
|
|
|
|
if (WIN32)
|
|
# Public, since BlacklistedLibraryCheck.hpp includes windows.h. Empty
|
|
# WIN32_LEAN_AND_MEAN matches the sources that define it themselves; bare
|
|
# NOMINMAX matches the one libigl already passes.
|
|
target_compile_definitions(libslic3r PUBLIC "WIN32_LEAN_AND_MEAN=" "NOMINMAX")
|
|
endif ()
|
|
|
|
if (SLIC3R_PCH AND NOT SLIC3R_SYNTAXONLY)
|
|
add_precompiled_header(libslic3r pchheader.hpp FORCEINCLUDE)
|
|
endif ()
|