Skip to content

Commit 85f5301

Browse files
committed
Update Euclid to 0.8.12
1 parent 140c390 commit 85f5301

31 files changed

+573
-295
lines changed

Euclid/CHANGELOG.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
11
# Change Log
22

3+
## [0.8.12](https://github.com/nicklockwood/Euclid/releases/tag/0.8.12) (2025-10-25)
4+
5+
- Fixed crash when creating a path from empty subpaths
6+
- Fixed `Mesh.minkowskiSum()` output for off-center input meshes
7+
- Improved `Mesh.detesselate()` algorithm (now merges more polygons than before)
8+
- The `Path.closed()` method and `Path.isClosed` property now behave correctly for subpaths
9+
- Improved subpaths implementation (more reliably preserves distinct subpaths)
10+
- Fixed assertion in `Plane.init` for very small or degenerate triangles
11+
- Fixed assertion in internal `Polygon.insertPoint()` method
12+
- Fixed assertion in internal `detessellate()` method
13+
- Fixed bug with internal `sanitizePoints()` method introducing neighboring duplicate points
14+
- Deprecated optional cancellation handlers in `Path.clipped()` and `Polygon.clipped()`
15+
- Added optional `color` parameter to `Path.text()` constructor
16+
317
## [0.8.11](https://github.com/nicklockwood/Euclid/releases/tag/0.8.11) (2025-10-12)
418

5-
- Fix regression in `Mesh.loft()` method when one or more input paths has a single point
19+
- Fixed regression in `Mesh.loft()` method when one or more input paths has a single point
620
- Made more long-running Mesh shape operations cancellable
721

822
## [0.8.10](https://github.com/nicklockwood/Euclid/releases/tag/0.8.10) (2025-10-05)

Euclid/Euclid.docc/Extensions/Path.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
### Creating Text Paths
3030

31-
- ``Path/text(_:font:width:detail:)``
31+
- ``Path/text(_:font:width:detail:color:)``
3232
- ``Path/text(_:width:detail:)``
3333

3434
### Path Properties

Euclid/Euclid.podspec.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "Euclid",
3-
"version": "0.8.11",
3+
"version": "0.8.12",
44
"license": {
55
"type": "MIT",
66
"file": "LICENSE.md"
@@ -10,7 +10,7 @@
1010
"authors": "Nick Lockwood",
1111
"source": {
1212
"git": "https://github.com/nicklockwood/Euclid.git",
13-
"tag": "0.8.11"
13+
"tag": "0.8.12"
1414
},
1515
"source_files": "Sources",
1616
"requires_arc": true,

Euclid/Euclid.xcodeproj/project.pbxproj

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -912,7 +912,7 @@
912912
"@executable_path/../Frameworks",
913913
"@loader_path/Frameworks",
914914
);
915-
MARKETING_VERSION = 0.8.11;
915+
MARKETING_VERSION = 0.8.12;
916916
MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
917917
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14";
918918
OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-expression-type-checking=75";
@@ -951,7 +951,7 @@
951951
"@executable_path/../Frameworks",
952952
"@loader_path/Frameworks",
953953
);
954-
MARKETING_VERSION = 0.8.11;
954+
MARKETING_VERSION = 0.8.12;
955955
MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++";
956956
MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu11 gnu++14";
957957
OTHER_SWIFT_FLAGS = "-Xfrontend -warn-long-expression-type-checking=75";
@@ -1035,7 +1035,7 @@
10351035
"$(inherited)",
10361036
"@executable_path/Frameworks",
10371037
);
1038-
MARKETING_VERSION = 0.8.11;
1038+
MARKETING_VERSION = 0.8.12;
10391039
PRODUCT_BUNDLE_IDENTIFIER = com.charcoaldesign.EuclidExample;
10401040
PRODUCT_NAME = EuclidExample;
10411041
SDKROOT = iphoneos;
@@ -1068,7 +1068,7 @@
10681068
"$(inherited)",
10691069
"@executable_path/Frameworks",
10701070
);
1071-
MARKETING_VERSION = 0.8.11;
1071+
MARKETING_VERSION = 0.8.12;
10721072
PRODUCT_BUNDLE_IDENTIFIER = com.charcoaldesign.EuclidExample;
10731073
PRODUCT_NAME = EuclidExample;
10741074
SDKROOT = iphoneos;
@@ -1097,7 +1097,7 @@
10971097
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
10981098
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
10991099
MACOSX_DEPLOYMENT_TARGET = 10.14;
1100-
MARKETING_VERSION = 0.8.11;
1100+
MARKETING_VERSION = 0.8.12;
11011101
PRODUCT_BUNDLE_IDENTIFIER = com.charcoaldesign.PerformanceTests;
11021102
PRODUCT_NAME = "$(TARGET_NAME)";
11031103
SDKROOT = auto;
@@ -1127,7 +1127,7 @@
11271127
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
11281128
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
11291129
MACOSX_DEPLOYMENT_TARGET = 10.14;
1130-
MARKETING_VERSION = 0.8.11;
1130+
MARKETING_VERSION = 0.8.12;
11311131
PRODUCT_BUNDLE_IDENTIFIER = com.charcoaldesign.PerformanceTests;
11321132
PRODUCT_NAME = "$(TARGET_NAME)";
11331133
SDKROOT = auto;

Euclid/Euclid.xcodeproj/xcshareddata/xcbaselines/01F995E62E6455BD0017AAC8.xcbaseline/8C068051-1BA5-4790-A538-AF1EC8F13366.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
<key>com.apple.XCTPerformanceMetric_WallClockTime</key>
5252
<dict>
5353
<key>baselineAverage</key>
54-
<real>1.296356</real>
54+
<real>1.300000</real>
5555
<key>baselineIntegrationDisplayName</key>
5656
<string>Local Baseline</string>
5757
</dict>
@@ -61,7 +61,7 @@
6161
<key>com.apple.XCTPerformanceMetric_WallClockTime</key>
6262
<dict>
6363
<key>baselineAverage</key>
64-
<real>0.342785</real>
64+
<real>0.343000</real>
6565
<key>baselineIntegrationDisplayName</key>
6666
<string>Local Baseline</string>
6767
</dict>

Euclid/Euclid.xcodeproj/xcshareddata/xcschemes/Euclid.xcscheme

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
33
LastUpgradeVersion = "2600"
4-
version = "1.7">
4+
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"
7-
buildImplicitDependencies = "YES"
8-
buildArchitectures = "Automatic">
7+
buildImplicitDependencies = "YES">
98
<BuildActionEntries>
109
<BuildActionEntry
1110
buildForTesting = "YES"
@@ -28,10 +27,21 @@
2827
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
2928
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
3029
shouldUseLaunchSchemeArgsEnv = "YES"
31-
shouldAutocreateTestPlan = "YES">
30+
codeCoverageEnabled = "YES">
31+
<MacroExpansion>
32+
<BuildableReference
33+
BuildableIdentifier = "primary"
34+
BlueprintIdentifier = "016FAB2821BFE78100AF60DC"
35+
BuildableName = "Euclid.framework"
36+
BlueprintName = "Euclid"
37+
ReferencedContainer = "container:Euclid.xcodeproj">
38+
</BuildableReference>
39+
</MacroExpansion>
3240
<Testables>
3341
<TestableReference
34-
skipped = "NO">
42+
skipped = "NO"
43+
parallelizable = "YES"
44+
testExecutionOrdering = "random">
3545
<BuildableReference
3646
BuildableIdentifier = "primary"
3747
BlueprintIdentifier = "016FAB3121BFE78100AF60DC"
@@ -40,21 +50,10 @@
4050
ReferencedContainer = "container:Euclid.xcodeproj">
4151
</BuildableReference>
4252
</TestableReference>
43-
<TestableReference
44-
skipped = "NO"
45-
parallelizable = "YES">
46-
<BuildableReference
47-
BuildableIdentifier = "primary"
48-
BlueprintIdentifier = "01F995E62E6455BD0017AAC8"
49-
BuildableName = "PerformanceTests.xctest"
50-
BlueprintName = "PerformanceTests"
51-
ReferencedContainer = "container:Euclid.xcodeproj">
52-
</BuildableReference>
53-
</TestableReference>
5453
</Testables>
5554
</TestAction>
5655
<LaunchAction
57-
buildConfiguration = "Debug"
56+
buildConfiguration = "Release"
5857
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
5958
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
6059
launchStyle = "0"
@@ -63,6 +62,15 @@
6362
debugDocumentVersioning = "YES"
6463
debugServiceExtension = "internal"
6564
allowLocationSimulation = "YES">
65+
<MacroExpansion>
66+
<BuildableReference
67+
BuildableIdentifier = "primary"
68+
BlueprintIdentifier = "016FAB2821BFE78100AF60DC"
69+
BuildableName = "Euclid.framework"
70+
BlueprintName = "Euclid"
71+
ReferencedContainer = "container:Euclid.xcodeproj">
72+
</BuildableReference>
73+
</MacroExpansion>
6674
</LaunchAction>
6775
<ProfileAction
6876
buildConfiguration = "Release"
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Scheme
3+
LastUpgradeVersion = "2600"
4+
version = "1.3">
5+
<BuildAction
6+
parallelizeBuildables = "YES"
7+
buildImplicitDependencies = "YES">
8+
<BuildActionEntries>
9+
<BuildActionEntry
10+
buildForTesting = "YES"
11+
buildForRunning = "YES"
12+
buildForProfiling = "YES"
13+
buildForArchiving = "YES"
14+
buildForAnalyzing = "YES">
15+
<BuildableReference
16+
BuildableIdentifier = "primary"
17+
BlueprintIdentifier = "016FABE921C078E400AF60DC"
18+
BuildableName = "EuclidExample.app"
19+
BlueprintName = "Example"
20+
ReferencedContainer = "container:Euclid.xcodeproj">
21+
</BuildableReference>
22+
</BuildActionEntry>
23+
</BuildActionEntries>
24+
</BuildAction>
25+
<TestAction
26+
buildConfiguration = "Debug"
27+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
28+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
29+
shouldUseLaunchSchemeArgsEnv = "YES">
30+
<Testables>
31+
<TestableReference
32+
skipped = "NO">
33+
<BuildableReference
34+
BuildableIdentifier = "primary"
35+
BlueprintIdentifier = "016FAB3121BFE78100AF60DC"
36+
BuildableName = "EuclidTests.xctest"
37+
BlueprintName = "EuclidTests"
38+
ReferencedContainer = "container:Euclid.xcodeproj">
39+
</BuildableReference>
40+
</TestableReference>
41+
</Testables>
42+
</TestAction>
43+
<LaunchAction
44+
buildConfiguration = "Debug"
45+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
46+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
47+
launchStyle = "0"
48+
useCustomWorkingDirectory = "NO"
49+
ignoresPersistentStateOnLaunch = "NO"
50+
debugDocumentVersioning = "YES"
51+
debugServiceExtension = "internal"
52+
allowLocationSimulation = "YES">
53+
<BuildableProductRunnable
54+
runnableDebuggingMode = "0">
55+
<BuildableReference
56+
BuildableIdentifier = "primary"
57+
BlueprintIdentifier = "016FABE921C078E400AF60DC"
58+
BuildableName = "EuclidExample.app"
59+
BlueprintName = "Example"
60+
ReferencedContainer = "container:Euclid.xcodeproj">
61+
</BuildableReference>
62+
</BuildableProductRunnable>
63+
</LaunchAction>
64+
<ProfileAction
65+
buildConfiguration = "Release"
66+
shouldUseLaunchSchemeArgsEnv = "YES"
67+
savedToolIdentifier = ""
68+
useCustomWorkingDirectory = "NO"
69+
debugDocumentVersioning = "YES">
70+
<BuildableProductRunnable
71+
runnableDebuggingMode = "0">
72+
<BuildableReference
73+
BuildableIdentifier = "primary"
74+
BlueprintIdentifier = "016FABE921C078E400AF60DC"
75+
BuildableName = "EuclidExample.app"
76+
BlueprintName = "Example"
77+
ReferencedContainer = "container:Euclid.xcodeproj">
78+
</BuildableReference>
79+
</BuildableProductRunnable>
80+
</ProfileAction>
81+
<AnalyzeAction
82+
buildConfiguration = "Debug">
83+
</AnalyzeAction>
84+
<ArchiveAction
85+
buildConfiguration = "Release"
86+
revealArchiveInOrganizer = "YES">
87+
</ArchiveAction>
88+
</Scheme>
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<Scheme
3+
LastUpgradeVersion = "2600"
4+
version = "1.7">
5+
<BuildAction
6+
parallelizeBuildables = "YES"
7+
buildImplicitDependencies = "YES"
8+
buildArchitectures = "Automatic">
9+
</BuildAction>
10+
<TestAction
11+
buildConfiguration = "Release"
12+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
13+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
14+
shouldUseLaunchSchemeArgsEnv = "YES"
15+
shouldAutocreateTestPlan = "YES">
16+
<Testables>
17+
<TestableReference
18+
skipped = "NO"
19+
parallelizable = "YES">
20+
<BuildableReference
21+
BuildableIdentifier = "primary"
22+
BlueprintIdentifier = "01F995E62E6455BD0017AAC8"
23+
BuildableName = "PerformanceTests.xctest"
24+
BlueprintName = "PerformanceTests"
25+
ReferencedContainer = "container:Euclid.xcodeproj">
26+
</BuildableReference>
27+
</TestableReference>
28+
</Testables>
29+
</TestAction>
30+
<LaunchAction
31+
buildConfiguration = "Debug"
32+
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
33+
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
34+
launchStyle = "0"
35+
useCustomWorkingDirectory = "NO"
36+
ignoresPersistentStateOnLaunch = "NO"
37+
debugDocumentVersioning = "YES"
38+
debugServiceExtension = "internal"
39+
allowLocationSimulation = "YES">
40+
</LaunchAction>
41+
<ProfileAction
42+
buildConfiguration = "Release"
43+
shouldUseLaunchSchemeArgsEnv = "YES"
44+
savedToolIdentifier = ""
45+
useCustomWorkingDirectory = "NO"
46+
debugDocumentVersioning = "YES">
47+
</ProfileAction>
48+
<AnalyzeAction
49+
buildConfiguration = "Debug">
50+
</AnalyzeAction>
51+
<ArchiveAction
52+
buildConfiguration = "Release"
53+
revealArchiveInOrganizer = "YES">
54+
</ArchiveAction>
55+
</Scheme>

Euclid/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,19 +35,19 @@ Euclid is packaged as a dynamic framework that you can import into your Xcode pr
3535
To install Euclid using CocoaPods, add the following to your Podfile:
3636

3737
```ruby
38-
pod 'Euclid', '~> 0.8.11'
38+
pod 'Euclid', '~> 0.8.12'
3939
```
4040

4141
To install using Carthage, add this to your Cartfile:
4242

4343
```ogdl
44-
github "nicklockwood/Euclid" ~> 0.8.11
44+
github "nicklockwood/Euclid" ~> 0.8.12
4545
```
4646

4747
To install using Swift Package Manager, add this to the `dependencies:` section in your Package.swift file:
4848

4949
```swift
50-
.package(url: "https://github.com/nicklockwood/Euclid.git", .upToNextMinor(from: "0.8.11")),
50+
.package(url: "https://github.com/nicklockwood/Euclid.git", .upToNextMinor(from: "0.8.12")),
5151
```
5252

5353

Euclid/Sources/BSP.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ extension BSP {
6464
batch(polygons, stride: 50) { polygons in
6565
var id = 0
6666
var out: [Polygon]?
67-
return clip(polygons.map { $0.withID(0) }, keeping, &out, &id, isCancelled)
67+
return clip(polygons.withID(0), keeping, &out, &id, isCancelled)
6868
}
6969
}
7070

@@ -98,7 +98,7 @@ extension BSP {
9898
) -> ([Polygon], [Polygon]) {
9999
var id = 0
100100
var rhs: [Polygon]? = []
101-
let lhs = clip(polygons.map { $0.withID(0) }, left, &rhs, &id, isCancelled)
101+
let lhs = clip(polygons.withID(0), left, &rhs, &id, isCancelled)
102102
switch (left, right) {
103103
case (.lessThan, .greaterThan),
104104
(.greaterThan, .lessThan):

0 commit comments

Comments
 (0)