Skip to content

Commit 796e118

Browse files
open method for ensure the continuous of a bezier curve
minor changes
1 parent 6bec049 commit 796e118

File tree

1 file changed

+28
-12
lines changed

1 file changed

+28
-12
lines changed

BezierKit/Library/BezierCurve.swift

Lines changed: 28 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ extension BezierCurve {
196196
public func offset(distance d: CGFloat) -> [BezierCurve] {
197197
// for non-linear curves we need to create a set of curves
198198
var result: [BezierCurve] = self.reduce().compactMap { $0.curve.scale(distance: d) }
199-
ensureContinuous(&result)
199+
ensureContinuous(&result, isClosed: false)
200200
return result
201201
}
202202

@@ -214,24 +214,17 @@ extension BezierCurve {
214214
return internalOutline(d1: d1, d2: d2)
215215
}
216216

217-
private func ensureContinuous(_ curves: inout [BezierCurve]) {
218-
for i in 0..<curves.count {
219-
if i > 0 {
220-
curves[i].startingPoint = curves[i-1].endingPoint
221-
}
222-
if i < curves.count-1 {
223-
curves[i].endingPoint = 0.5 * ( curves[i].endingPoint + curves[i+1].startingPoint )
224-
}
225-
}
217+
private func ensureContinuous(_ curves: inout [BezierCurve], isClosed: Bool) {
218+
BezierCurveType.ensureContinuous(&curves, isClosed: isClosed)
226219
}
227220

228221
private func internalOutline(d1: CGFloat, d2: CGFloat) -> PathComponent {
229222
let reduced = self.reduce()
230223
let length = reduced.count
231224
var forwardCurves: [BezierCurve] = reduced.compactMap { $0.curve.scale(distance: d1) }
232225
var backCurves: [BezierCurve] = reduced.compactMap { $0.curve.scale(distance: -d2) }
233-
ensureContinuous(&forwardCurves)
234-
ensureContinuous(&backCurves)
226+
ensureContinuous(&forwardCurves, isClosed: false)
227+
ensureContinuous(&backCurves, isClosed: false)
235228
// reverse the "return" outline
236229
backCurves = backCurves.reversed().map { $0.reversed() }
237230
// form the endcaps as lines
@@ -263,6 +256,29 @@ extension BezierCurve {
263256
}
264257
}
265258

259+
enum BezierCurveType {
260+
static func ensureContinuous(_ curves: inout [BezierCurve], isClosed: Bool) {
261+
for i in 0..<curves.count {
262+
if i > 0 {
263+
curves[i].startingPoint = curves[i-1].endingPoint
264+
}
265+
if i < curves.count-1 {
266+
curves[i].endingPoint = 0.5 * ( curves[i].endingPoint + curves[i+1].startingPoint )
267+
}
268+
}
269+
if isClosed, curves.count > 1 {
270+
curves[curves.count - 1].endingPoint = curves[0].startingPoint
271+
}
272+
}
273+
}
274+
extension Array where Element == BezierCurve {
275+
public func ensureContinuous(isClosed: Bool) -> [BezierCurve] {
276+
var result = Array(self)
277+
BezierCurveType.ensureContinuous(&result, isClosed: isClosed)
278+
return result
279+
}
280+
}
281+
266282
public let defaultIntersectionAccuracy = CGFloat(0.5)
267283
internal let reduceStepSize: CGFloat = 0.01
268284

0 commit comments

Comments
 (0)