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 });
      
    • Оставляет только объем, общий для двух тел, то же, что intersect.

      Parameters

      Returns Promise<ManifoldPointer>

      Общий объем

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

    a to b

    • Вырезает второе тело из первого, оставляя то, что от первого остается.

      Parameters

      Returns Promise<ManifoldPointer>

      Первое тело минус второе

      const holed = await bitbybit.manifold.manifold.booleans.subtract({ manifold1: cube, manifold2: sphere });
      
    • Оставляет только объем, общий для двух тел, отбрасывая все остальное.

      Parameters

      Returns Promise<ManifoldPointer>

      Общий объем

      const common = await bitbybit.manifold.manifold.booleans.intersect({ 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

      • inputs: ManifoldsDto<ManifoldPointer>

        Тела, первое из которых является тем, из которого вырезают

      Returns Promise<ManifoldPointer>

      Первое тело минус все остальные

      const holed = await bitbybit.manifold.manifold.booleans.difference({ manifolds: [cube, sphere, cylinder] });
      
    • Оставляет только объем, общий для всех тел в списке.

      Parameters

      Returns Promise<ManifoldPointer>

      Объем, общий для всех них

      const common = await bitbybit.manifold.manifold.booleans.intersection({ manifolds: [cube, sphere] });
      

    split

    • Режет тело другим телом и сохраняет обе части: часть внутри резака и часть снаружи.

      Дешевле, чем пересечение с последующим вычитанием, когда нужны обе.

      Parameters

      Returns Promise<ManifoldPointer[]>

      Два тела: часть внутри режущего тела, затем часть снаружи

      const [inside, outside] = await bitbybit.manifold.manifold.booleans.split({ manifoldToSplit: cube, manifoldCutter: sphere });
      
    • Режет тело плоскостью и сохраняет обе части.

      Плоскость задается ее нормалью и расстоянием от начала координат вдоль этой нормали; первая часть лежит на стороне, куда указывает нормаль, вторая на другой стороне.

      Parameters

      • inputs: SplitByPlaneDto<ManifoldPointer>

        Тело, нормаль плоскости и расстояние плоскости от начала координат

      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

      • inputs: TrimByPlaneDto<ManifoldPointer>

        Тело, нормаль плоскости и расстояние плоскости от начала координат

      Returns Promise<ManifoldPointer>

      Часть тела со стороны нормали

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