Bitbybit Docs
    Preparing search index...

    Class ManifoldOperations

    Изменение тел Manifold за пределами булевых операций: обертывание их в выпуклую оболочку, срезы и проецирование в сечения, уточнение и сглаживание их мешей, упрощение, составление и разложение, а также вычисление нормалей и кривизны в каналы свойств вершин. Канал свойства - это одно число на вершину, хранящееся в меше, например три канала нормали. Каждый метод возвращает новое тело.

    Index

    Constructors

    adjustments

    • Вычисляет нормаль для каждой вершины из меша и сохраняет ее в трех каналах свойств, начиная с normalIdx.

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

      Parameters

      Returns Promise<ManifoldPointer>

      Тело с сохраненными нормалями

      const withNormals = await bitbybit.manifold.manifold.operations.calculateNormals({ manifold: shape, normalIdx: 0, minSharpAngle: 60 });
      
    • Вычисляет, насколько сильно поверхность изгибается в каждой вершине, и сохраняет это в каналах свойств: гауссову кривизну в gaussianIdx, среднюю кривизну в meanIdx.

      Кривизна - величина, обратная радиусу изгиба, положительная там, где поверхность выпукла, и отрицательная там, где вогнута; индекс меньше 0 пропускает этот канал.

      Parameters

      Returns Promise<ManifoldPointer>

      Тело с сохраненной кривизной

      const withCurvature = await bitbybit.manifold.manifold.operations.calculateCurvature({ manifold: shape, gaussianIdx: 0, meanIdx: 1 });
      
    • Добавляет треугольники к сглаженному телу, пока каждая точка его меша не окажется в пределах tolerance от гладкой поверхности, так что сильно изогнутые области получают больше треугольников, чем плоские.

      Меняется только тело, сглаженное через smoothOut или smoothByNormals; любое другое возвращается копией.

      Parameters

      Returns Promise<ManifoldPointer>

      Уточненное тело

      const finer = await bitbybit.manifold.manifold.operations.refineToTolerance({ manifold: smoothed, tolerance: 0.01 });
      
    • Добавляет треугольники к телу, разбивая каждое ребро на части примерно заданной длины, добавляя внутренние вершины, чтобы треугольники оставались ровными.

      На теле, сглаженном через smoothOut или smoothByNormals, новые вершины перемещаются на гладкую поверхность; иначе поверхность остается как есть.

      Parameters

      Returns Promise<ManifoldPointer>

      Уточненное тело

      const finer = await bitbybit.manifold.manifold.operations.refineToLength({ manifold: smoothed, length: 0.5 });
      
    • Добавляет треугольники к телу, разбивая каждое ребро на number частей; при 2 каждый треугольник становится четырьмя.

      На теле, сглаженном через smoothOut или smoothByNormals, новые вершины перемещаются на гладкую поверхность; иначе новые треугольники остаются плоскими.

      Parameters

      Returns Promise<ManifoldPointer>

      Уточненное тело

      const finer = await bitbybit.manifold.manifold.operations.refine({ manifold: smoothed, number: 2 });
      
    • Помечает тело для сглаживания, вычисляя касательные из его треугольников, так что последующий refine или refineToLength изгибает новые треугольники в гладкую поверхность.

      Ребра острее minSharpAngle, в градусах, остаются острыми; minSmoothness больше 0 немного скругляет их, а 1 сглаживает все. Сама геометрия не меняется, пока не уточнена.

      Parameters

      Returns Promise<ManifoldPointer>

      Тело со сглаживающими касательными

      const smoothed = await bitbybit.manifold.manifold.operations.smoothOut({ manifold: cube, minSharpAngle: 60, minSmoothness: 0 });
      const rounded = await bitbybit.manifold.manifold.operations.refineToLength({ manifold: smoothed, length: 0.5 });
    • Помечает тело для сглаживания, используя нормали, хранящиеся в его свойствах вершин, так что последующий refine или refineToLength изгибает новые треугольники в гладкую поверхность.

      normalIdx - первый из трех каналов нормалей, как их хранит calculateNormals; там, где нормали в вершине расходятся, ребро остается острым.

      Parameters

      Returns Promise<ManifoldPointer>

      Тело со сглаживающими касательными

      const smoothed = await bitbybit.manifold.manifold.operations.smoothByNormals({ manifold: withNormals, normalIdx: 0 });
      
    • Удаляет вершины из меша тела, удерживая каждую поверхность в пределах tolerance от того, где она была, чтобы сократить число треугольников.

      Результат сохраняет подмножество исходных вершин; собственное значение допуска тела остается неизменным.

      Parameters

      Returns Promise<ManifoldPointer>

      Упрощенное тело

      const lighter = await bitbybit.manifold.manifold.operations.simplify({ manifold: shape, tolerance: 0.05 });
      
    • Переписывает свойства вершин тела функцией, которая получает позицию каждой вершины и старые свойства и заполняет новые.

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

      Parameters

      Returns Promise<ManifoldPointer>

      Тело с новыми свойствами

      const colored = await bitbybit.manifold.manifold.operations.setProperties({
      manifold: shape,
      numProp: 3,
      propFunc: (newProp, position) => { newProp[0] = position[0]; newProp[1] = position[1]; newProp[2] = position[2]; },
      });

    basic

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

      Треугольники тоньше допуска считаются вырожденными и удаляются.

      Parameters

      Returns Promise<ManifoldPointer>

      Тело с новым допуском

      const coarser = await bitbybit.manifold.manifold.operations.setTolerance({ manifold: shape, tolerance: 0.01 });
      
    • Резервирует серию из count уникальных id мешей и возвращает первый, для пометки наборов треугольников, которые можно найти снова после последующих операций.

      Присвойте их runOriginalID меша перед построением из него тела, например чтобы держать раздельно несколько материалов.

      Parameters

      • inputs: CountDto

        Сколько id зарезервировать

      Returns Promise<number>

      Первый из зарезервированных id; остальные следуют по порядку

      const firstId = await bitbybit.manifold.manifold.operations.reserveIds({ count: 2 });
      
    • Делает копию тела, которая считается новым оригиналом, так что копия может нести собственные свойства вершин, например другое отображение UV, и отличаться от того, из чего она построена.

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

      Parameters

      Returns Promise<ManifoldPointer>

      Копия, помеченная как оригинал

      const original = await bitbybit.manifold.manifold.operations.asOriginal({ manifold: shape });
      

    composition

    • Упаковывает несколько тел в одно, обратное к decompose.

      Перекрывающиеся тела сливаются, как при булевом объединении; тела, разнесённые друг от друга, остаются отдельными частями одного результата.

      Parameters

      Returns Promise<ManifoldPointer>

      Одно тело, содержащее все их

      const packed = await bitbybit.manifold.manifold.operations.compose({ manifolds: [cube, sphere] });
      
    • Разбивает тело на его отдельные, несвязанные части, обратное к compose.

      Тело, являющееся одним целым, возвращается списком из одной копии.

      Parameters

      Returns Promise<ManifoldPointer[]>

      Отдельные части

      const pieces = await bitbybit.manifold.manifold.operations.decompose({ manifold: packed });
      

    cross sections

    • Режет тело плоскостью, параллельной плоскости XY, на заданной высоте Z и возвращает плоское сечение как сечение.

      Высота на дне ограничивающего бокса тела дает его нижние грани; высота на верху дает пустое сечение.

      Parameters

      Returns Promise<CrossSectionPointer>

      Срез как сечение

      const section = await bitbybit.manifold.manifold.operations.slice({ manifold: sphere, height: 2 });
      
    • Сплющивает тело на плоскость XY и возвращает его очертание как сечение, как его тень при свете прямо сверху.

      Parameters

      Returns Promise<CrossSectionPointer>

      Очертание как сечение

      const shadow = await bitbybit.manifold.manifold.operations.project({ manifold: shape });
      

    hulls

    • Оборачивает тело его выпуклой оболочкой, наименьшей формой без вмятин, содержащей его, как термоусадочная пленка, туго натянутая на него.

      Parameters

      Returns Promise<ManifoldPointer>

      Выпуклая оболочка

      const wrapped = await bitbybit.manifold.manifold.operations.hull({ manifold: shape });
      
    • Оборачивает точки, тела или их смесь одной выпуклой оболочкой, наименьшей формой без вмятин, содержащей их все.

      Parameters

      Returns Promise<ManifoldPointer>

      Выпуклая оболочка

      const wrapped = await bitbybit.manifold.manifold.operations.hullPoints({ points: [[0, 0, 0], [10, 0, 0], [0, 10, 0], [0, 0, 10]] });