mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-20 06:01:16 +00:00
* Export G-code statistics as JSON Add an export of a plate's G-code statistics for scripts and spreadsheets that compare prints or settings: print time, travel, filament and feature totals, the same per layer, and the filament of each object instance and its supports. The times are the preview's estimates, summed the way the preview sums them. The GUI writes <name>.statistics.json next to an exported G-code when "Export statistics with G-code" is enabled in Preferences (Control > Slicing). The CLI writes plate_N.statistics.json to the output directory with --export-statistics, and exits with -25 when it cannot. The per-instance masses now carry the object's name and the instance's index, so the export can name them. The vertices the processor adds inside a move for the actual speed view repeat the move's extrusion, so the filament sums skip them. * Move the statistics export preference to the Developer tab "Export statistics with G-code" now sits in Developer > Settings instead of Control > Slicing. * Store the G-code statistics inside exported 3MF files With the preference on, an exported sliced 3MF file holds each plate's statistics as Metadata/plate_N.statistics.json, next to its G-code. The print job sent to a printer and the autosave backup leave them out. The CLI does the same with --export-3mf, and writes the separate file only next to the G-code in --outputdir, as without it the G-code is a temporary file. The file is written in binary mode, so it reads the same on every platform and matches the copy in the 3MF. * Address review of the statistics export - Number each object instance by its position among its model object's copies. A copy of another rotation or scale, and every copy on a belt printer, slices as a print object of its own, where it was always instance 0; a copy after a non-printable one shifted too. - Take the filament totals from the processor's statistics, which count the flush as the preview's filament table does, and list each filament's model, support, prime tower and flush use. The summary's cost is now filament_cost, as the preview's cost adds the time cost. - State when the version goes up. - Drop the preference's default, which get_bool already gives.
827 lines
24 KiB
CMake
827 lines
24 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
|
|
BeltBrim.cpp
|
|
BeltBrim.hpp
|
|
BeltGCode.cpp
|
|
BeltGCode.hpp
|
|
BeltPurge.cpp
|
|
BeltSliceStrategy.cpp
|
|
BeltSliceStrategy.hpp
|
|
BeltTransform.cpp
|
|
BeltTransform.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
|
|
ConnectedBodies.cpp
|
|
ConnectedBodies.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/FillTpmsAdaptive.cpp
|
|
Fill/FillTpmsAdaptive.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/BeltBackTransform.cpp
|
|
GCode/BeltBackTransform.hpp
|
|
GCode/MachineFrameTransform.cpp
|
|
GCode/MachineFrameTransform.hpp
|
|
GCode/BeltKinematics.cpp
|
|
GCode/BeltKinematics.hpp
|
|
GCode/MachineKinematics.cpp
|
|
GCode/MachineKinematics.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/GCodeStatistics.cpp
|
|
GCode/GCodeStatistics.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
|
|
GCode/PreciseSeamInternal.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
|
|
IMEXArrange.cpp
|
|
IMEXArrange.hpp
|
|
IMEXHelpers.cpp
|
|
IMEXHelpers.hpp
|
|
IMEXZones.cpp
|
|
IMEXZones.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
|
|
PrinterBedAssets.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/SupportTreeMesher.cpp
|
|
SLA/SupportTreeMesher.hpp
|
|
SlicesToTriangleMesh.cpp
|
|
SlicesToTriangleMesh.hpp
|
|
SlicingAdaptive.cpp
|
|
SlicingAdaptive.hpp
|
|
Slicing.cpp
|
|
Slicing.hpp
|
|
Support/BeltFloorContext.cpp
|
|
Support/BeltFloorContext.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.31), 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 6.2 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
|
|
MeshRepair.hpp MeshRepair.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 ()
|
|
|
|
# Lets CGAL algorithms given CGAL::Parallel_if_available_tag run on TBB.
|
|
target_compile_definitions(libslic3r_cgal PRIVATE CGAL_LINKED_WITH_TBB)
|
|
target_link_libraries(libslic3r_cgal PRIVATE ${_cgal_tgt} admesh libigl mcut boost_libs TBB::tbb)
|
|
|
|
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
|
|
TKDESTEP
|
|
TKDE
|
|
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")
|
|
if (WIN32)
|
|
# OCCT installs RelWithDebInfo and Debug builds to bin/occti and bin/occtd, so each build
|
|
# type's DLL directory is read from the imported target, falling back to the first installed
|
|
# build, as CMake does when linking.
|
|
get_target_property(_occt_configs TKernel IMPORTED_CONFIGURATIONS)
|
|
list(GET _occt_configs 0 _occt_fallback)
|
|
foreach (_build_config IN ITEMS DEBUG RELEASE RELWITHDEBINFO MINSIZEREL)
|
|
set(_occt_config ${_occt_fallback})
|
|
if (_build_config IN_LIST _occt_configs)
|
|
set(_occt_config ${_build_config})
|
|
endif ()
|
|
get_target_property(_occt_dll TKernel IMPORTED_LOCATION_${_occt_config})
|
|
get_filename_component(_occt_bin "${_occt_dll}" DIRECTORY)
|
|
set(OCCT_BIN_DIR_${_build_config} "${_occt_bin}" CACHE INTERNAL "OCCT DLL directory for ${_build_config} builds")
|
|
endforeach ()
|
|
endif ()
|
|
|
|
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)
|
|
# OCCT's static targets name FreeType as a bare "freetype", which the macOS linker cannot
|
|
# find; this target maps that name to FREETYPE_LIBRARIES.
|
|
if (NOT TARGET freetype)
|
|
add_library(freetype INTERFACE IMPORTED GLOBAL)
|
|
target_link_libraries(freetype INTERFACE ${FREETYPE_LIBRARIES})
|
|
endif ()
|
|
# 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 ()
|