Bitbybit Docs
    Preparing search index...

    Class OCCTTransforms

    移动、旋转、缩放和镜像 OpenCascade 形状,以及构建描述这些移动的 4x4 矩阵。每个方法都返回新形状,并保持输入不变。角度以度为单位,距离以模型单位表示,除非方法接受中心,否则旋转轴经过原点。矩阵是按列主序排列的 16 个数值(平移位于索引 12 到 14);矩阵列表从头到尾依次应用,作为一次组合移动,这就是 transformByMatrix 和各 ...ToMatrix 构建器相互配合的方式。

    Index

    Constructors

    by matrix

    • 对形状应用一个 4x4 矩阵,或从头到尾依次应用一个矩阵列表。

      矩阵为列主序,因此平移位于索引 12 到 14。允许拉伸或错切的矩阵;用 ...ToMatrix 方法构建矩阵并用 multiplyTransforms 组合它们。内核无法应用的矩阵会抛出错误。

      Parameters

      Returns Promise<TopoDSShapePointer>

      变换后的形状

      const move = await bitbybit.occt.transforms.translationToMatrix({ translation: [10, 0, 0] });
      const turn = await bitbybit.occt.transforms.rotationAxisAngleToMatrix({ axis: [0, 1, 0], angle: 90, center: [0, 0, 0] });
      const placed = await bitbybit.occt.transforms.transformByMatrix({ shape: box, transformation: [turn, move] });
    • 读取形状携带的放置信息,即存储在其上而不是烘焙进其几何的变换,以矩阵加上其平移、旋转四元数和均匀缩放的形式给出。

      align 放置或通过装配体放置的形状携带这样的放置信息;此处的大多数其他方法将移动烘焙进几何,这样的形状报告单位变换。

      Parameters

      Returns Promise<ShapeTransformInfo>

      矩阵、平移、以 [x, y, z, w] 表示的四元数和缩放

      const placement = await bitbybit.occt.transforms.getShapeTransform({ shape: movedBox });
      console.log(placement.translation, placement.scale);

    matrix builders

    • 构建单位矩阵,即不改变任何东西的变换,作为组合其他变换的起点。

      Returns Promise<TransformMatrix>

      单位矩阵,列主序

      const identity = await bitbybit.occt.transforms.identityTransform();
      
    • 由一个平移、绕 X、Y 和 Z 的三个旋转角(以度为单位)和一个均匀缩放构建一个矩阵。

      先应用缩放,然后是旋转(先 Z,然后 Y,最后 X),最后是平移,这是装配体放置所用的顺序。省略的部分视为不变。

      Parameters

      Returns Promise<TransformMatrix>

      组合后的矩阵,列主序

      const placement = await bitbybit.occt.transforms.composeTransform({ translation: [10, 0, 0], rotation: [0, 90, 0], scale: 1 });
      
    • 将矩阵列表合并为一个,从头到尾依次应用,使一串移动成为单个矩阵。

      单个矩阵原样返回,空列表给出单位矩阵。

      Parameters

      Returns Promise<TransformMatrix>

      组合后的矩阵,列主序

      const combined = await bitbybit.occt.transforms.multiplyTransforms({ transformation: [turn, move] });
      
    • 求矩阵的逆,给出撤销它的变换:先应用一个矩阵再应用其逆,形状回到原处。

      Parameters

      Returns Promise<TransformMatrix>

      逆矩阵,列主序

      const back = await bitbybit.occt.transforms.invertTransform({ transformation: placement });
      
    • 构建按向量移动的矩阵,以模型单位表示。

      Parameters

      Returns Promise<TransformMatrix>

      平移矩阵,列主序

      const move = await bitbybit.occt.transforms.translationToMatrix({ translation: [10, 0, 0] });
      
    • 构建绕某轴旋转一个角度(以度为单位)的矩阵,该轴经过原点或可选的中心点。

      旋转遵循绕 axis 的右手定则。

      Parameters

      Returns Promise<TransformMatrix>

      旋转矩阵,列主序

      const turn = await bitbybit.occt.transforms.rotationAxisAngleToMatrix({ axis: [0, 1, 0], angle: 90, center: [5, 0, 5] });
      
    • 构建按系数绕原点或可选的中心点均匀缩放的矩阵。

      Parameters

      Returns Promise<TransformMatrix>

      缩放矩阵,列主序

      const grow = await bitbybit.occt.transforms.scaleUniformToMatrix({ factor: 2, center: [0, 0, 0] });
      
    • 构建关于一个点镜像的矩阵,即 mirrorAboutPoint 应用的变换。

      Parameters

      Returns Promise<TransformMatrix>

      镜像矩阵,列主序

      const invert = await bitbybit.occt.transforms.mirrorPointToMatrix({ point: [0, 0, 0] });
      
    • 构建关于一条直线镜像的矩阵,即 mirror 应用的变换:经过 origin 且沿 direction 的轴。

      Parameters

      Returns Promise<TransformMatrix>

      镜像矩阵,列主序

      const flip = await bitbybit.occt.transforms.mirrorAxisToMatrix({ origin: [0, 0, 0], direction: [0, 1, 0] });
      
    • 构建关于一个平面镜像的矩阵,即 mirrorAlongNormal 应用的变换:经过 origin 且具有给定法线的平面。

      Parameters

      Returns Promise<TransformMatrix>

      镜像矩阵,列主序

      const reflect = await bitbybit.occt.transforms.mirrorPlaneToMatrix({ origin: [0, 0, 0], normal: [1, 0, 0] });
      
    • 构建以 [x, y, z, w] 给出的四元数的旋转矩阵。

      四元数先被归一化,因此其长度无关紧要。

      Parameters

      Returns Promise<TransformMatrix>

      旋转矩阵,列主序

      const turn = await bitbybit.occt.transforms.quaternionToMatrix({ quaternion: [0, 0.7071, 0, 0.7071] });
      

    on shapes

    • 对多个形状应用 transform,每个有自己的平移、旋转轴、角度和缩放系数。

      所有列表的长度必须相同,否则抛出错误。

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      变换后的形状,顺序相同

      const moved = await bitbybit.occt.transforms.transformShapes({
      shapes: [box, sphere],
      translations: [[10, 0, 0], [-10, 0, 0]],
      rotationAxes: [[0, 1, 0], [0, 1, 0]],
      rotationAngles: [45, 0],
      scaleFactors: [1, 2],
      });
    • 对多个形状应用 rotate,每个绕自己经过原点的轴并按自己的角度(以度为单位)旋转。

      所有列表的长度必须相同,否则抛出错误。

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      旋转后的形状,顺序相同

      const turned = await bitbybit.occt.transforms.rotateShapes({ shapes: [box, sphere], axes: [[0, 1, 0], [1, 0, 0]], angles: [90, 45] });
      
    • 对多个形状应用 rotateAroundCenter,每个有自己的角度(以度为单位)、中心和轴。

      所有列表的长度必须相同,否则抛出错误。

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      旋转后的形状,顺序相同

      const turned = await bitbybit.occt.transforms.rotateAroundCenterShapes({
      shapes: [box, sphere],
      angles: [90, 45],
      centers: [[5, 0, 5], [0, 0, 0]],
      axes: [[0, 1, 0], [0, 1, 0]],
      });
    • 对多个形状应用 align,每个有自己的起始和目标坐标系。

      所有列表的长度必须相同,否则抛出错误。

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      对齐后的形状,顺序相同

      const placed = await bitbybit.occt.transforms.alignShapes({
      shapes: [cylinder, cylinder2],
      fromOrigins: [[0, 0, 0], [0, 0, 0]],
      fromDirections: [[0, 1, 0], [0, 1, 0]],
      toOrigins: [[10, 0, 0], [20, 0, 0]],
      toDirections: [[1, 0, 0], [0, 0, 1]],
      });
    • 对多个形状应用 alignAndTranslate,每个有自己的方向和中心。

      所有列表的长度必须相同,否则抛出错误。

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      放置后的形状,顺序相同

      const placed = await bitbybit.occt.transforms.alignAndTranslateShapes({
      shapes: [profile, profile2],
      directions: [[1, 0, 0], [0, 0, 1]],
      centers: [[10, 0, 0], [0, 0, 10]],
      });
    • 对多个形状应用 translate,每个按自己的向量移动。

      两个列表的长度必须相同,否则抛出错误。

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      移动后的形状,顺序相同

      const moved = await bitbybit.occt.transforms.translateShapes({ shapes: [box, sphere], translations: [[10, 0, 0], [-10, 0, 0]] });
      
    • 对多个形状应用 scale,每个按自己的系数绕原点均匀缩放。

      两个列表的长度必须相同,否则抛出错误。

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      缩放后的形状,顺序相同

      const scaled = await bitbybit.occt.transforms.scaleShapes({ shapes: [box, sphere], factors: [2, 0.5] });
      
    • 对多个形状应用 scale3d,每个有自己的三个系数和中心。

      所有列表的长度必须相同,否则抛出错误。

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      缩放后的形状,顺序相同

      const scaled = await bitbybit.occt.transforms.scale3dShapes({
      shapes: [box, sphere],
      scales: [[1, 2, 1], [2, 2, 2]],
      centers: [[0, 0, 0], [10, 0, 0]],
      });
    • 对多个形状应用 mirror,每个关于自己的轴镜像。

      所有列表的长度必须相同,否则抛出错误。

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      镜像后的形状,顺序相同

      const flipped = await bitbybit.occt.transforms.mirrorShapes({
      shapes: [box, sphere],
      origins: [[0, 0, 0], [0, 0, 0]],
      directions: [[0, 1, 0], [1, 0, 0]],
      });
    • 对多个形状应用 mirrorAlongNormal,每个关于自己的平面镜像。

      所有列表的长度必须相同,否则抛出错误。

      Parameters

      Returns Promise<TopoDSShapePointer[]>

      镜像后的形状,顺序相同

      const others = await bitbybit.occt.transforms.mirrorAlongNormalShapes({
      shapes: [leftArm, leftLeg],
      origins: [[0, 0, 0], [0, 0, 0]],
      normals: [[1, 0, 0], [1, 0, 0]],
      });

    on single shape

    • 一次完成对形状的缩放、旋转和移动:先绕原点缩放,然后绕经过原点的轴旋转,最后平移。

      因为缩放和旋转都绕原点进行,不在原点的形状也会绕原点摆动;先移动它,或者用 rotateAroundCenterscale3d 指定中心。

      Parameters

      Returns Promise<TopoDSShapePointer>

      变换后的形状

      const moved = await bitbybit.occt.transforms.transform({
      shape: box,
      translation: [10, 0, 0],
      rotationAxis: [0, 1, 0],
      rotationAngle: 45,
      scaleFactor: 2,
      });
    • 使形状绕经过原点的轴旋转一个角度,以度为单位。

      旋转遵循右手定则:拇指沿 axis,四指指示正方向。远离原点的形状会绕原点摆动;rotateAroundCenter 则绕指定的点旋转。

      Parameters

      Returns Promise<TopoDSShapePointer>

      旋转后的形状

      const turned = await bitbybit.occt.transforms.rotate({ shape: box, axis: [0, 1, 0], angle: 90 });
      
    • 使形状绕经过指定点的轴旋转一个角度,以度为单位。

      形状先被移动使该点位于原点,在那里按右手定则绕 axis 旋转,然后移回。

      Parameters

      Returns Promise<TopoDSShapePointer>

      旋转后的形状

      const turned = await bitbybit.occt.transforms.rotateAroundCenter({ shape: box, angle: 90, center: [5, 0, 5], axis: [0, 1, 0] });
      
    • 移动形状,使其上的一个点和方向落到另一个点和方向上:由 fromOriginfromDirection 构成的坐标系被带到 toOrigintoDirection 上。

      这是将形状立于曲面上或使其沿直线指向的方法:形状既被移动又被转动,从不缩放。

      Parameters

      Returns Promise<TopoDSShapePointer>

      对齐后的形状

      const standing = await bitbybit.occt.transforms.align({
      shape: cylinder,
      fromOrigin: [0, 0, 0],
      fromDirection: [0, 1, 0],
      toOrigin: [10, 5, 0],
      toDirection: [1, 0, 0],
      });
    • 移动形状,使其上的一个完整坐标系落到另一个坐标系上:一个点、其法线以及该法线平面内的一个轴被带到各自的目标上。

      align 固定一个方向而让绕它的转动自由,此方法还固定该转动,这对绕其轴不对称的形状很重要。

      Parameters

      Returns Promise<TopoDSShapePointer>

      对齐后的形状

      const placed = await bitbybit.occt.transforms.alignNormAndAxis({
      shape: bracket,
      fromOrigin: [0, 0, 0],
      fromNorm: [0, 1, 0],
      fromAx: [1, 0, 0],
      toOrigin: [10, 0, 0],
      toNorm: [0, 0, 1],
      toAx: [0, 1, 0],
      });
    • 转动形状使其 Y 轴沿 direction 指向,然后将其移动到 center

      本包的平面形状和基本体都以 Y 向上构建在地面上,因此这是放置它们中任何一个的那一个调用:方向成为它们新的向上方向,中心是它们所在的位置。

      Parameters

      Returns Promise<TopoDSShapePointer>

      放置后的形状

      const placed = await bitbybit.occt.transforms.alignAndTranslate({ shape: profile, direction: [1, 0, 0], center: [10, 0, 0] });
      
    • 绕指定的中心点,按沿 X、Y 和 Z 各自的系数缩放形状。

      不相等的系数会拉伸形状,使圆变成椭圆,并可能使后续操作(例如圆角)变慢或失败;当形状只需放大时保持系数相等。

      Parameters

      Returns Promise<TopoDSShapePointer>

      缩放后的形状

      const stretched = await bitbybit.occt.transforms.scale3d({ shape: box, scale: [1, 2, 1], center: [0, 0, 0] });
      
    • 将形状关于一条直线镜像:经过 origin 且沿 direction 的轴。

      每个点落到直线后方与其原先在前方相同的距离处,在 3D 中这等同于绕该轴转半圈。

      Parameters

      Returns Promise<TopoDSShapePointer>

      镜像后的形状

      const flipped = await bitbybit.occt.transforms.mirror({ shape: box, origin: [0, 0, 0], direction: [0, 1, 0] });
      
    • 将形状关于由其上一点及其法线给出的平面镜像。

      这是通常的镜像,对称零件所需要的那种;结果在左手形状变为右手形状的意义上被翻转。

      Parameters

      Returns Promise<TopoDSShapePointer>

      镜像后的形状

      const other = await bitbybit.occt.transforms.mirrorAlongNormal({ shape: leftHalf, origin: [0, 0, 0], normal: [1, 0, 0] });
      
    • 将形状关于一个点镜像:形状的每个点都落到该点另一侧与其原先距离相同的位置。

      结果被翻转,就像平面镜把左手变成右手一样。

      Parameters

      Returns Promise<TopoDSShapePointer>

      镜像后的形状

      const inverted = await bitbybit.occt.transforms.mirrorAboutPoint({ shape: box, point: [0, 0, 0] });
      
    • 按以 [x, y, z, w] 给出的四元数使形状绕原点旋转。

      四元数先被归一化,因此其长度无关紧要。四元数是动画和物理库输出的形式,因此这省去了将它们转换为轴和角度的步骤。

      Parameters

      Returns Promise<TopoDSShapePointer>

      旋转后的形状

      const turned = await bitbybit.occt.transforms.rotateByQuaternion({ shape: box, quaternion: [0, 0.7071, 0, 0.7071] });