一个 Swift 接口,用于 Manifold 几何库,以操作实体 3D 网格。
这个 SPM 包包含了 Manifold,以及其依赖项 Clipper2 和 oneTBB 作为 Git 子模块,因此除了 C++ 标准库之外,不需要额外的依赖项。 Manifold-Swift 涵盖了 Manifold API 的大部分,并且命名方式相似,但使用了 Swift 约定。 它可以在所有 Apple 平台以及 Linux 和 Windows 上运行。
由于 Swift 中的一个 bug 在最新版本中尚未修复(截至 2025-01-13,版本 6.0.3),该库需要在 Windows 上构建 Swift 的最新开发快照。
在您的 Package.swift (或 Xcode 项目) 中将此包添加为依赖项。 因为该库与 C++ 交互,所以您需要启用 C++ 互操作性。
let package = Package(
name: "manifold-swift-example",
dependencies: [
.package(url: "https://github.com/tomasf/manifold-swift.git", .upToNextMinor(from: "0.1.0"))
],
targets: [
.executableTarget(
name: "manifold-swift-example",
dependencies: [.product(name: "Manifold", package: "manifold-swift")],
swiftSettings: [.interoperabilityMode(.Cxx)]
)
]
)
该库对向量和矩阵使用协议,因此您可以为您自己的类型添加符合性,并在不进行转换的情况下使用它们。
import Manifold3D
struct V: Vector3 {
let x: Double
let y: Double
let z: Double
}
let sphere = Manifold.sphere(radius: 10, segmentCount: 25)
let box = Manifold.cube(size: V(x: 12, y: 20, z: 20))
.rotate(V(x: 20, y: 25, z: 0))
let difference = sphere.boolean(.difference, with: box)
let meshGL = difference.meshGL()
// Render or save meshGL.vertices, meshGL.triangles, etc.
阅读 Manifold 文档 以获取更多信息。
欢迎贡献! 提交 Pull Request 或打开 Issue 来讨论改进或报告 Bug。