Manifold-Swift

一个 Swift 接口,用于 Manifold 几何库,以操作实体 3D 网格。

CI status Platforms

这个 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。