Bitbybit Docs
    Preparing search index...

    Class ManifoldTransforms

    Перемещение, поворот, масштабирование, отражение и деформация тел Manifold. Ядро объединяет преобразования отложенно, поэтому их цепочка обходится дешево; углы в градусах, а повороты выполняются вокруг начала координат, сначала X, затем Y, затем Z. Каждый метод возвращает новое тело.

    Index

    Constructors

    matrix

    • Применяет к телу матрицу 4x4.

      Матрица в порядке по столбцам, 16 чисел с переносом в индексах с 12 по 14; ядро читает ее как аффинное преобразование 3x4 и игнорирует последнюю строку.

      Parameters

      Returns Promise<ManifoldPointer>

      Преобразованное тело

      const moved = await bitbybit.manifold.manifold.transforms.transform({ manifold: cube, transform: matrix });
      
    • Применяет к телу список матриц 4x4 одну за другой, от первой к последней, и возвращает конечный результат.

      Пустой список выбрасывает ошибку.

      Parameters

      Returns Promise<ManifoldPointer>

      Тело после применения всех матриц

      const placed = await bitbybit.manifold.manifold.transforms.transforms({ manifold: cube, transforms: [turn, move] });
      

    multiple

    • Делает по одной перемещенной копии тела на вектор, для раскладки повторов.

      Parameters

      Returns Promise<ManifoldPointer[]>

      По одной перемещенной копии на вектор, в том же порядке

      const row = await bitbybit.manifold.manifold.transforms.translateByVectors({ manifold: cube, vectors: [[0, 0, 0], [10, 0, 0], [20, 0, 0]] });
      

    transforms

    • Масштабирует тело отдельным коэффициентом вдоль X, Y и Z, относительно начала координат.

      Parameters

      Returns Promise<ManifoldPointer>

      Масштабированное тело

      const stretched = await bitbybit.manifold.manifold.transforms.scale3D({ manifold: cube, vector: [1, 2, 1] });
      
    • Масштабирует тело коэффициентом на каждую ось, относительно начала координат; он принимает те же входы, что scale3D, так что используйте равные коэффициенты для равномерного масштаба.

      Parameters

      Returns Promise<ManifoldPointer>

      Масштабированное тело

      const bigger = await bitbybit.manifold.manifold.transforms.scale({ manifold: cube, vector: [2, 2, 2] });
      
    • Отражает тело относительно плоскости через начало координат с заданной нормалью.

      Нормаль нулевой длины дает пустое тело.

      Parameters

      Returns Promise<ManifoldPointer>

      Отраженное тело

      const other = await bitbybit.manifold.manifold.transforms.mirror({ manifold: shape, normal: [1, 0, 0] });
      
    • Перемещает тело на отдельные расстояния вдоль X, Y и Z, в единицах модели.

      Parameters

      Returns Promise<ManifoldPointer>

      Перемещенное тело

      const moved = await bitbybit.manifold.manifold.transforms.translateXYZ({ manifold: cube, x: 10, y: 0, z: 5 });
      
    • Поворачивает тело вокруг начала координат на углы Эйлера в градусах: сначала вокруг X, затем Y, затем Z.

      Кратные 90 градусов точны, без ошибки округления.

      Parameters

      Returns Promise<ManifoldPointer>

      Повернутое тело

      const turned = await bitbybit.manifold.manifold.transforms.rotate({ manifold: cube, vector: [0, 0, 45] });
      
    • Поворачивает тело вокруг начала координат на отдельные углы в градусах вокруг X, затем Y, затем Z.

      Кратные 90 градусов точны, без ошибки округления.

      Parameters

      Returns Promise<ManifoldPointer>

      Повернутое тело

      const turned = await bitbybit.manifold.manifold.transforms.rotateXYZ({ manifold: cube, x: 0, y: 0, z: 45 });
      
    • Перемещает каждую вершину тела вашей собственной функцией, которая изменяет позицию вершины на месте, для изгибов, сужений и других свободных деформаций.

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

      Parameters

      Returns Promise<ManifoldPointer>

      Деформированное тело

      const bent = await bitbybit.manifold.manifold.transforms.warp({
      manifold: cube,
      warpFunc: (vert) => { vert[0] += vert[2] * 0.2; },
      });