BezierKit 0.15.0

BezierKit 0.15.0

Holmes Futrell 维护。



BezierKit 0.15.0

  • Holmes Futrell

BezierKit

License: MIT codecov CocoaPods Compatible

BezierKit 是一个用 Swift 编写的全面的贝塞尔路径库。

警告!预发布软件!

请注意,BezierKit 目前是预发布软件。它的发布遵循 语义化版本控制,这意味着在达到 1.0 状态之前,API 可能会不稳定或向后不兼容。

功能

  • 构建线性(线段)、二次和三次贝塞尔曲线
  • 通过 CoreGraphics 绘制曲线
  • 确定曲线上的位置、导数和法线
  • 通过勒让德-高斯求积法计算曲线长度
  • 相交曲线并计算任何精度的三次曲线自交
  • 确定边界框、极值
  • 找到与点最近的曲线上的位置
  • 到任意的精度
  • 将曲线分割成子曲线
  • 偏移和轮廓曲线
  • 综合单元和集成测试覆盖率
  • 完整文档

安装

CocoaPods

CocoaPods 是 Cocoa 项目的依赖管理工具。您可以使用以下命令安装它:

$ gem install cocoapods

要使用 CocoaPods 将 BezierKit 集成到您的 Xcode 项目中,将其添加到您的 Podfile 中的目标。

target '<Your Target Name>' do
    pod 'BezierKit', '>= 0.15.0'
end

然后,运行以下命令:

$ pod install

Swift 包管理器

Swift 包管理器(Swift Package Manager)是一个用于自动分发 Swift 代码的工具,并集成到 swift 编译器中。一旦您的 Swift 包设置完成,将 BezierKit 作为依赖项添加到 Package.swiftdependencies 值就像一样简单。

// swift-tools-version:5.0
import PackageDescription

let package = Package(
    name: "<Your Target Name>",
    dependencies: [
        .package(url: "https://github.com/hfutrell/BezierKit.git", from: "0.15.0"),
    ]
)

用法

构造和绘制曲线

BezierKit 支持三次贝塞尔曲线(CubicCurve)、二次贝塞尔曲线(QuadraticCurve)以及线段(LineSegment),每个都采用了包含大部分 API 功能的 BezierCurve 协议。

import BezierKit

let curve = CubicCurve(
    p0: CGPoint(x: 100, y: 25),
    p1: CGPoint(x: 10, y: 90),
    p2: CGPoint(x: 110, y: 100),
    p3: CGPoint(x: 150, y: 195)
 )
 
 let context: CGContext = ...       // your graphics context here
 Draw.drawSkeleton(context, curve)  // draws visual representation of curve control points
 Draw.drawCurve(context, curve)     // draws the curve itself

相交曲线

intersections(with:curve:) -> [Intersection] 方法确定 selfcurve 之间的每个交集,作为 Intersection 对象数组。每个交集有两个字段:t1 代表交集处的 selft 值,而 t2 代表交集处的 curvet 值。您可以使用曲线上的 point(at:) 方法通过传递曲线的相应 t 值来计算交集的坐标。

三次曲线可能自相交,这可以通过调用selfIntersections()方法来确定。

let intersections: [Intersection] = curve1.intersections(with: curve2)
let points: [CGPoint] = intersections.map { curve1.point(at: $0.t1) }

Draw.drawCurve(context, curve: curve1)
Draw.drawCurve(context, curve: curve2)
for p in points {
    Draw.drawPoint(context, origin: p)
}

分割曲线

split(from:,: to:j)方法可生成一个在给定t值范围内的子曲线。可以使用split(at:)方法进行分割,从而在特定的t值处创建左子曲线和右子曲线。

Draw.setColor(context, color: Draw.lightGrey)
Draw.drawSkeleton(context, curve: curve)
Draw.drawCurve(context, curve: curve)
let subcurve = curve.split(from: 0.25, to: 0.75) // or try (leftCurve, rightCurve) = curve.split(at:)
Draw.setColor(context, color: Draw.red)
Draw.drawCurve(context, curve: subcurve)
Draw.drawCircle(context, center: curve.point(at: 0.25), radius: 3)
Draw.drawCircle(context, center: curve.point(at: 0.75), radius: 3)

确定边界框

let boundingBox = curve.boundingBox
Draw.drawSkeleton(context, curve: curve)
Draw.drawCurve(context, curve: curve)
Draw.setColor(context, color: Draw.pinkish)
Draw.drawBoundingBox(context, boundingBox: curve.boundingBox)

更多

BezierKit是一个强大的库,功能非常丰富。目前,最好的方式是构建MacDemos目标并查看提供的每个演示。

许可证

BezierKit在MIT许可证下发布。有关详细信息,请参阅LICENSE