Bitbybit Docs
    Preparing search index...

    Class ManifoldBooleans

    组合 Manifold 实体:一次融合、切割和求交两个或多个实体,以及用另一个实体或平面分割实体。由于内核作用于闭合三角形网格,这些操作速度快且始终给出水密结果;双形状和多形状形式给出相同的结果,仅为方便而存在。每个方法都返回新实体,并保持输入不变。

    Index

    Constructors

    2 manifolds

    • 从第一个实体中切除第二个实体,与 subtract 相同。

      Parameters

      Returns Promise<ManifoldPointer>

      第一个实体减去第二个

      const holed = await bitbybit.manifold.manifold.booleans.differenceTwo({ manifold1: cube, manifold2: sphere });
      

    a to b

    • 从第一个实体中切除第二个实体,留下第一个剩余的部分。

      Parameters

      Returns Promise<ManifoldPointer>

      第一个实体减去第二个

      const holed = await bitbybit.manifold.manifold.booleans.subtract({ manifold1: cube, manifold2: sphere });
      

    minkowski

    • 将第二个实体沿第一个实体的整个表面扫掠,并融合它所经过的一切,使第一个实体按第二个实体的形状增长 - 即闵可夫斯基和,用球体对实体进行圆角或加厚就是这样做的。

      Parameters

      Returns Promise<ManifoldPointer>

      增长后的实体

      const padded = await bitbybit.manifold.manifold.booleans.minkowskiSum({ manifold1: cube, manifold2: sphere });
      
    • 将第二个实体沿第一个实体的整个表面扫掠,并切除它所经过的一切,使第一个实体按第二个实体的形状收缩 - 即闵可夫斯基差,撤销闵可夫斯基和的腐蚀操作。

      Parameters

      Returns Promise<ManifoldPointer>

      收缩后的实体

      const eroded = await bitbybit.manifold.manifold.booleans.minkowskiDifference({ manifold1: cube, manifold2: sphere });
      

    multiple

    • 从第一个实体中切除列表中之后的每个实体。

      Parameters

      Returns Promise<ManifoldPointer>

      第一个实体减去其余所有实体

      const holed = await bitbybit.manifold.manifold.booleans.difference({ manifolds: [cube, sphere, cylinder] });
      

    split

    • 用另一个实体切割实体并保留两块:切割体内部的部分和外部的部分。

      当两者都需要时,这比先求交再相减更省。

      Parameters

      Returns Promise<ManifoldPointer[]>

      两个实体:切割体内部的部分,然后是外部的部分

      const [inside, outside] = await bitbybit.manifold.manifold.booleans.split({ manifoldToSplit: cube, manifoldCutter: sphere });
      
    • 用平面切割实体并保留两块。

      平面由其法线和沿该法线距原点的距离给出;第一块位于法线所指的一侧,第二块位于另一侧。

      Parameters

      Returns Promise<ManifoldPointer[]>

      两个实体:法线一侧的部分,然后是其余部分

      const [top, bottom] = await bitbybit.manifold.manifold.booleans.splitByPlane({ manifold: cube, normal: [0, 0, 1], originOffset: 0.5 });
      
    • 用多个法线相同的平行平面在距原点给定的距离处将实体切成多块板。

      每次切割将法线远侧的部分作为完成的一块保留,并将其余部分带到下一个距离,因此偏移量应递增;n 个偏移量给出 n + 1 块,空的被丢弃。

      Parameters

      Returns Promise<ManifoldPointer[]>

      各层板块,数量比给定的偏移多一个

      const slabs = await bitbybit.manifold.manifold.booleans.splitByPlaneOnOffsets({ manifold: cube, normal: [0, 0, 1], originOffsets: [0.25, 0.5, 0.75] });
      

    trim

    • 用平面切割实体,只保留法线所指一侧的部分。

      平面由其法线和沿该法线距原点的距离给出。

      Parameters

      Returns Promise<ManifoldPointer>

      实体位于法线一侧的部分

      const half = await bitbybit.manifold.manifold.booleans.trimByPlane({ manifold: sphere, normal: [0, 0, 1], originOffset: 0 });