Bitbybit Docs
    Preparing search index...

    Class OCCTFace

    OpenCascade 中的面:曲面的有界部分,平面或曲面,带有一个外边界线框和可选的形成孔洞的内线框。可以从线框或曲面构建它们,或构建为现成的平面形状(圆、矩形、星形、梁轮廓),这些形状位于地平面上,除非 direction 另有指定;通过 UV 参数遍历其曲面以获取点、法线和线框网格;在其上切出孔洞图案;以及测量面积和质心。U 和 V 是曲面的两个方向,这里以面自身范围的 0 到 1 比例给出。面沿边相接形成壳体,由 shapes.shell 处理。

    Index

    Constructors

    beam profiles

    • 创建工字梁的平面横截面:由竖直腹板连接的两个水平翼缘。

      width 是翼缘宽度,height 是总高度,webThicknessflangeThickness 是壁厚;alignment 指定轮廓盒的哪个点位于 center 上,rotation 使其在平面内转动,以度为单位。它位于地面上,可直接沿 Y 拉伸。

      Parameters

      • inputs: IBeamProfileDto

        轮廓尺寸、两个厚度、对齐方式、旋转、中心和平面法线

      Returns Promise<TopoDSFacePointer>

      工字梁轮廓面

      const profile = await bitbybit.occt.shapes.face.createIBeamProfileFace({
      width: 10,
      height: 20,
      webThickness: 2,
      flangeThickness: 3,
      alignment: Bit.Inputs.Base.basicAlignmentEnum.midMid,
      rotation: 0,
      center: [0, 0, 0],
      direction: [0, 1, 0],
      });
      const beam = await bitbybit.occt.operations.extrude({ shape: profile, direction: [0, 100, 0] });
    • 创建 H 形梁的平面横截面:由水平腹板连接的两个竖直翼缘,即侧放的工字梁。

      width 是总宽度,height 是翼缘高度,webThicknessflangeThickness 是壁厚;alignment 指定轮廓盒的哪个点位于 center 上,rotation 使其在平面内转动,以度为单位。它位于地面上。

      Parameters

      • inputs: HBeamProfileDto

        轮廓尺寸、两个厚度、对齐方式、旋转、中心和平面法线

      Returns Promise<TopoDSFacePointer>

      H 形梁轮廓面

      const profile = await bitbybit.occt.shapes.face.createHBeamProfileFace({
      width: 20,
      height: 10,
      webThickness: 2,
      flangeThickness: 3,
      alignment: Bit.Inputs.Base.basicAlignmentEnum.midMid,
      rotation: 0,
      center: [0, 0, 0],
      direction: [0, 1, 0],
      });
    • 创建 T 形梁的平面横截面:一个水平翼缘,中间垂下一块竖直腹板。

      width 是翼缘宽度,height 是总高度,webThicknessflangeThickness 是壁厚;alignment 指定轮廓盒的哪个点位于 center 上,rotation 使其在平面内转动,以度为单位。它平放在地面上。

      Parameters

      • inputs: TBeamProfileDto

        轮廓尺寸、两个厚度、对齐方式、旋转、中心和平面法线

      Returns Promise<TopoDSFacePointer>

      T 形梁轮廓面

      const profile = await bitbybit.occt.shapes.face.createTBeamProfileFace({
      width: 10,
      height: 12,
      webThickness: 2,
      flangeThickness: 2,
      alignment: Bit.Inputs.Base.basicAlignmentEnum.midMid,
      rotation: 0,
      center: [0, 0, 0],
      direction: [0, 1, 0],
      });
    • 创建 U 形梁(槽钢)的平面横截面:一块腹板,两端立起两个宽为 flangeWidth 的翼缘。

      widthheight 是总尺寸,webThicknessflangeThickness 是壁厚;alignment 指定轮廓盒的哪个点位于 center 上,rotation 使其在平面内转动,以度为单位。它平放在地面上。

      Parameters

      • inputs: UBeamProfileDto

        轮廓尺寸、厚度、翼缘宽度、对齐方式、旋转、中心和平面法线

      Returns Promise<TopoDSFacePointer>

      U 形梁轮廓面

      const profile = await bitbybit.occt.shapes.face.createUBeamProfileFace({
      width: 10,
      height: 6,
      webThickness: 1,
      flangeThickness: 1,
      flangeWidth: 3,
      alignment: Bit.Inputs.Base.basicAlignmentEnum.midMid,
      rotation: 0,
      center: [0, 0, 0],
      direction: [0, 1, 0],
      });

    debug

    • 收集关于面的诊断信息:其曲面类型、U 和 V 阶数、控制点和节点数量、U 或 V 是否闭合、周期性或有理、UV 边界、面积、平面性、朝向以及线框和边的数量。

      空的或 null 的面给出标记为无效的报告。

      Parameters

      Returns Promise<FaceDebugInfo>

      报告

      const info = await bitbybit.occt.shapes.face.debugInfo({ shape: face });
      console.log(info.type, info.isPlanar, info.area);

    extract

    • 通过在面的 U 和 V 范围内均匀步进,在面上铺一个点网格。

      nrDivisionsUnrDivisionsV 个点从边到边覆盖面,逐行列出:先是第一个 U 的所有 V 值,然后是下一个 U。移除标志丢弃第一行或最后一行;偏移标志将每个点推移半步。

      Parameters

      Returns Promise<Point3[]>

      点,逐行排列

      const points = await bitbybit.occt.shapes.face.subdivideToPoints({
      shape: face,
      nrDivisionsU: 10,
      nrDivisionsV: 5,
      shiftHalfStepU: false,
      removeStartEdgeU: false,
      removeEndEdgeU: false,
      shiftHalfStepV: false,
      removeStartEdgeV: false,
      removeEndEdgeV: false,
      });
    • 沿一个参数方向在面上绘制均匀分布的线框,就像横格纸上的线。

      nrDivisions 步给出比该数多一个的线框,包括边界线;removeStartremoveEnd 丢弃它们,shiftHalfStep 将每个线框移动半步。isU 为 true 时每个线框位于固定的 U 并横跨 V;为 false 时角色互换。

      Parameters

      Returns Promise<TopoDSWirePointer[]>

      线框,沿所选方向按顺序排列

      const lines = await bitbybit.occt.shapes.face.subdivideToWires({ shape: face, nrDivisions: 10, isU: true, shiftHalfStep: false, removeStart: false, removeEnd: false });
      
    • subdivideToPoints 一样在面上铺点网格,但在每第 n 行或列上移动和移除点,用于砖状和交错的图案。

      每条规则是一对:shiftHalfStepNthU 指定每隔多少个 V 行在 U 方向移动半步,shiftHalfStepUOffsetN 指定从哪里开始计数;移除规则丢弃边缘行的每第 n 个点。

      Parameters

      Returns Promise<Point3[]>

      点,逐行排列

      const staggered = await bitbybit.occt.shapes.face.subdivideToPointsControlled({
      shape: face,
      nrDivisionsU: 10,
      nrDivisionsV: 10,
      shiftHalfStepNthU: 2,
      shiftHalfStepUOffsetN: 0,
      removeStartEdgeNthU: 0,
      removeStartEdgeUOffsetN: 0,
      removeEndEdgeNthU: 0,
      removeEndEdgeUOffsetN: 0,
      shiftHalfStepNthV: 0,
      shiftHalfStepVOffsetN: 0,
      removeStartEdgeNthV: 0,
      removeStartEdgeVOffsetN: 0,
      removeEndEdgeNthV: 0,
      removeEndEdgeVOffsetN: 0,
      });
    • 计算 subdivideToPoints 会在面上铺出的网格每个点处的曲面法线,选项相同,顺序相同。

      法线是单位向量并遵循面的朝向,因此反转的面给出翻转的法线。将该列表与 subdivideToPoints 配对,可放置立于曲面上的东西。

      Parameters

      Returns Promise<Vector3[]>

      单位法线,逐行排列

      const normals = await bitbybit.occt.shapes.face.subdivideToNormals({
      shape: face,
      nrDivisionsU: 10,
      nrDivisionsV: 5,
      shiftHalfStepU: false,
      removeStartEdgeU: false,
      removeEndEdgeU: false,
      shiftHalfStepV: false,
      removeStartEdgeV: false,
      removeEndEdgeV: false,
      });
    • 列出 subdivideToPoints 会在面上铺出的网格的 UV 参数对,选项相同,顺序相同。

      这些对采用面的真实 UV 值,而不是分数。

      Parameters

      Returns Promise<Point2[]>

      UV 对,逐行排列

      const uvs = await bitbybit.occt.shapes.face.subdivideToUV({
      shape: face,
      nrDivisionsU: 10,
      nrDivisionsV: 5,
      shiftHalfStepU: false,
      removeStartEdgeU: false,
      removeEndEdgeU: false,
      shiftHalfStepV: false,
      removeStartEdgeV: false,
      removeEndEdgeV: false,
      });
    • 找出面上给定 UV 分数处的点。

      paramUparamV 在面的 U 和 V 范围内从 0 到 1,因此 0.5, 0.5 是范围的中间,在修剪过的面上这并不总是在面内。

      Parameters

      Returns Promise<Point3>

      曲面上的点

      const middle = await bitbybit.occt.shapes.face.pointOnUV({ shape: face, paramU: 0.5, paramV: 0.5 });
      
    • 找出面在给定 UV 分数处的曲面法线。

      paramUparamV 在面的 U 和 V 范围内从 0 到 1。法线是单位向量并遵循面的朝向,因此反转的面给出翻转的法线。

      Parameters

      Returns Promise<Vector3>

      单位法线

      const normal = await bitbybit.occt.shapes.face.normalOnUV({ shape: face, paramU: 0.5, paramV: 0.5 });
      
    • 一次找出面上多个 UV 分数对处的点。

      每对包含 U 然后 V,都在面的范围内从 0 到 1。

      Parameters

      Returns Promise<Point3[]>

      每对一个点,顺序相同

      const points = await bitbybit.occt.shapes.face.pointsOnUVs({ shape: face, paramsUV: [[0, 0], [0.5, 0.5], [1, 1]] });
      
    • 一次找出面在多个 UV 分数对处的曲面法线。

      每对包含 U 然后 V,都在面的范围内从 0 到 1。法线是底层曲面的单位向量;与 normalOnUV 不同,对于反转的面它们不会翻转。

      Parameters

      Returns Promise<Vector3[]>

      每对一个单位法线,顺序相同

      const normals = await bitbybit.occt.shapes.face.normalsOnUVs({ shape: face, paramsUV: [[0, 0], [0.5, 0.5], [1, 1]] });
      
    • 沿横跨面 UV 范围的一条直线放置均匀分布的点。

      isU 为 true 时该线位于 param(U 范围的 0 到 1 的分数)处,nrPoints 个点分布在整个 V 范围上;为 false 时角色互换。removeStartPointremoveEndPoint 丢弃两端,shiftHalfStep 将每个点移动半步。

      Parameters

      Returns Promise<Point3[]>

      沿该线的点,按顺序排列

      const midline = await bitbybit.occt.shapes.face.subdivideToPointsOnParam({ shape: face, isU: true, param: 0.5, nrPoints: 10, shiftHalfStep: false, removeStartPoint: false, removeEndPoint: false });
      
    • 沿一条参数线在面上绘制一个线框,跟随曲面。

      isU 为 true 时线框位于 param(U 范围的 0 到 1 的分数)处并横跨整个 V 范围;为 false 时角色互换。

      Parameters

      Returns Promise<TopoDSWirePointer>

      曲面上的线框

      const middle = await bitbybit.occt.shapes.face.wireAlongParam({ shape: face, isU: true, param: 0.5 });
      
    • 在面上绘制多个线框,每个参数值一个,跟随曲面。

      isU 为 true 时每个线框位于其在 U 范围内的分数处并横跨整个 V 范围;为 false 时角色互换。

      Parameters

      Returns Promise<TopoDSWirePointer[]>

      每个比例一个线框,顺序相同

      const wires = await bitbybit.occt.shapes.face.wiresAlongParams({ shape: face, isU: false, params: [0.25, 0.5, 0.75] });
      

    filter

    • 将点分类为在面内、在面的边界上或在面外,并保留所选的组。

      keepInkeepOnkeepOutkeepUnknown 选择要保留的组;tolerance 决定距边界 多近算作在边界上。使用 useBndBox 时,位于按 gapTolerance 扩大后的包围盒之外的点 算作在面外。

      Parameters

      Returns Promise<Point3[]>

      通过筛选的点,保持原有顺序

      const onFace = await bitbybit.occt.shapes.face.filterFacePoints({
      shape: face,
      points: grid,
      tolerance: 1e-4,
      useBndBox: false,
      gapTolerance: 0.1,
      keepIn: true,
      keepOn: true,
      keepOut: false,
      keepUnknown: false,
      });
    • 用相同的点和选项对多个面运行 filterFacePoints

      默认结果为每个面一个列表;flatPointsArray 为 true 时各列表被合并为一个,因此位于两个面上的点出现两次。

      Parameters

      Returns Promise<Point3[] | Point3[][]>

      每个面一个点列表,或合并后的单个列表

      const perFace = await bitbybit.occt.shapes.face.filterFacesPoints({
      shapes: faces,
      points: grid,
      tolerance: 1e-4,
      useBndBox: false,
      gapTolerance: 0.1,
      keepIn: true,
      keepOn: true,
      keepOut: false,
      keepUnknown: false,
      flatPointsArray: false,
      });

    from

    • 为每个线框创建一个面,每个都从引导面的曲面上切出,因此具有该曲面的曲率。

      线框必须位于曲面上。inside 为 true 时每个线框被转向,使其面为它所包围的区域;为 false 时由线框自身的方向决定,反向的线框给出外部区域。

      Parameters

      Returns Promise<TopoDSFacePointer[]>

      每个线框一个面,顺序相同

      const patches = await bitbybit.occt.shapes.face.createFacesFromWiresOnFace({ wires: circlesOnSphere, face: sphereFace, inside: true });
      
    • 创建以闭合线框为边界的面。

      planar 为 true 时线框必须位于同一平面内,面是平的;为 false 时会通过线框的边拟合一个光滑曲面,从而填充不平的线框。不是线框的形状会抛出错误。

      Parameters

      Returns Promise<TopoDSFacePointer>

      新面

      const wire = await bitbybit.occt.shapes.wire.createCircleWire({ radius: 5, center: [0, 0, 0], direction: [0, 1, 0] });
      const disc = await bitbybit.occt.shapes.face.createFaceFromWire({ shape: wire, planar: true });
    • 由多个线框创建一个面:第一个线框是外边界,之后的每个线框在其中切一个孔。

      planar 为 true 时线框必须位于同一平面内。孔线框必须位于外线框内部,且不与它或彼此相交。

      Parameters

      Returns Promise<TopoDSFacePointer>

      带孔的面

      const outer = await bitbybit.occt.shapes.wire.createRectangleWire({ width: 20, length: 10, center: [0, 0, 0], direction: [0, 1, 0] });
      const hole = await bitbybit.occt.shapes.wire.createCircleWire({ radius: 2, center: [0, 0, 0], direction: [0, 1, 0] });
      const plate = await bitbybit.occt.shapes.face.createFaceFromWires({ shapes: [outer, hole], planar: true });
    • 由引导面曲面上的多个线框创建一个面:第一个线框是外边界,之后的每个线框切一个孔。

      面具有引导曲面的曲率。inside 应用于第一个线框:true 将其转向使面为它所包围的区域;false 由其自身的方向决定。

      Parameters

      Returns Promise<TopoDSFacePointer>

      带孔的面

      const perforated = await bitbybit.occt.shapes.face.createFaceFromWiresOnFace({ wires: [outerOnCylinder, holeOnCylinder], face: cylinderFace, inside: true });
      
    • 为每个闭合线框创建一个面,各与 createFaceFromWire 所做的相同。

      planar 为 true 时每个线框必须位于一个平面内;为 false 时会通过每个线框拟合一个光滑曲面。

      Parameters

      Returns Promise<TopoDSFacePointer[]>

      每个线框一个面,顺序相同

      const faces = await bitbybit.occt.shapes.face.createFacesFromWires({ shapes: wires, planar: true });
      
    • 用切线皮带连接圆:对每一对,它绘制两条外切线和它们之间的外侧圆弧,并用平面填充该轮廓。

      combination 选择配对:allWithAll 每个圆与其他每个圆,inOrder 列表中的相邻圆,inOrderClosed 还包括最后一个与第一个。unify 融合这些面;否则它们构成复合体。

      Parameters

      Returns Promise<TopoDSShapePointer>

      融合后的形状,或带状面的复合体

      const a = await bitbybit.occt.shapes.wire.createCircleWire({ radius: 3, center: [0, 0, 0], direction: [0, 1, 0] });
      const b = await bitbybit.occt.shapes.wire.createCircleWire({ radius: 1, center: [10, 0, 0], direction: [0, 1, 0] });
      const c = await bitbybit.occt.shapes.wire.createCircleWire({ radius: 2, center: [5, 0, 8], direction: [0, 1, 0] });
      const belt = await bitbybit.occt.shapes.face.createFaceFromMultipleCircleTanWires({
      circles: [a, b, c],
      combination: Bit.Inputs.OCCT.combinationCirclesForFaceEnum.inOrderClosed,
      unify: true,
      tolerance: 1e-7,
      });
    • 用切线皮带连接相邻列表中的圆,方式与 createFaceFromMultipleCircleTanWires 连接单个圆相同。

      allWithAll 将一个列表的每个圆与下一个列表的每个圆连接;inOrder 连接相邻列表中相同位置的圆,这需要列表长度相等;inOrderClosed 还将每个列表闭合成环。unify 融合这些面;否则它们构成复合体。

      Parameters

      Returns Promise<TopoDSShapePointer>

      融合后的形状,或带状面的复合体

      const mesh = await bitbybit.occt.shapes.face.createFaceFromMultipleCircleTanWireCollections({
      listsOfCircles: [bottomRow, middleRow, topRow],
      combination: Bit.Inputs.OCCT.combinationCirclesForFaceEnum.inOrderClosed,
      unify: true,
      tolerance: 1e-7,
      });

    from base

    • 由三个点创建平面三角形面。

      Parameters

      Returns Promise<TopoDSFacePointer>

      const face = await bitbybit.occt.shapes.face.fromBaseTriangle({ triangle: [[0, 0, 0], [10, 0, 0], [0, 0, 10]] });
      
    • 为网格的每个三角形创建一个平面三角形面。

      无法形成面的三角形(例如有重复点的)会带着控制台警告被跳过。

      Parameters

      Returns Promise<TopoDSFacePointer[]>

      每个能够构建的三角形一个面

      const faces = await bitbybit.occt.shapes.face.fromBaseMesh({
      mesh: [[[0, 0, 0], [10, 0, 0], [0, 0, 10]], [[10, 0, 0], [10, 0, 10], [0, 0, 10]]],
      });

    get

    • 按位置从形状中选取一个面,从 0 开始计数,顺序为内核遍历形状的顺序。

      形状必须是面或由面构建的东西;超出最后一个面的索引会抛出错误。

      Parameters

      Returns Promise<TopoDSFacePointer>

      该索引处的面

      const first = await bitbybit.occt.shapes.face.getFace({ shape: box, index: 0 });
      
    • 翻转面,使其法线指向另一侧。

      几何保持不变;只有朝向改变,它决定壳体的外侧以及 normalOnUV 报告的方向。

      Parameters

      Returns Promise<TopoDSFacePointer>

      翻转后的面

      const flipped = await bitbybit.occt.shapes.face.reversedFace({ shape: face });
      
    • 读取面的最小 U 参数值,以曲面自身的单位表示。

      它与 getUMaxBoundgetVMinBoundgetVMaxBound 一起给出本类中其他地方所用 UV 分数映射到的范围。

      Parameters

      Returns Promise<number>

      U 的下界

      const uMin = await bitbybit.occt.shapes.face.getUMinBound({ shape: face });
      
    • 读取面的最大 U 参数值,以曲面自身的单位表示。

      Parameters

      Returns Promise<number>

      U 的上界

      const uMax = await bitbybit.occt.shapes.face.getUMaxBound({ shape: face });
      
    • 读取面的最小 V 参数值,以曲面自身的单位表示。

      Parameters

      Returns Promise<number>

      V 的下界

      const vMin = await bitbybit.occt.shapes.face.getVMinBound({ shape: face });
      
    • 读取面的最大 V 参数值,以曲面自身的单位表示。

      Parameters

      Returns Promise<number>

      V 的上界

      const vMax = await bitbybit.occt.shapes.face.getVMaxBound({ shape: face });
      
    • 测量面的表面积,以平方模型单位表示。

      Parameters

      Returns Promise<number>

      面积

      const area = await bitbybit.occt.shapes.face.getFaceArea({ shape: face });
      
    • 测量列表中每个面的表面积,以平方模型单位表示。

      Parameters

      Returns Promise<number[]>

      每个面一个面积,顺序相同

      const areas = await bitbybit.occt.shapes.face.getFacesAreas({ shapes: faces });
      
    • 找出面的质心,即其面积的平衡点。

      在弯曲或环形的面上该点可能不在曲面上。

      Parameters

      Returns Promise<Point3>

      质心

      const center = await bitbybit.occt.shapes.face.getFaceCenterOfMass({ shape: face });
      
    • 找出列表中每个面的质心。

      Parameters

      Returns Promise<Point3[]>

      每个面一个点,顺序相同

      const centers = await bitbybit.occt.shapes.face.getFacesCentersOfMass({ shapes: faces });
      

    patterns

    • 在面上铺矩形线框,其 UV 范围按 nrRectanglesUnrRectanglesV 划分,每个单元一个,跟随曲面。

      边框偏移在每端修剪范围。每个矩形居中于其单元内,按缩放模式以单元的分数确定大小;圆角模式倒圆角,包含模式跳过单元。

      Parameters

      Returns Promise<TopoDSWirePointer[]>

      矩形线框,逐单元排列

      const cells = await bitbybit.occt.shapes.face.subdivideToRectangleWires({
      shape: face,
      nrRectanglesU: 6,
      nrRectanglesV: 4,
      scalePatternU: [0.8, 0.5],
      scalePatternV: [0.8],
      filletPattern: [0.3],
      inclusionPattern: [true, true, false],
      offsetFromBorderU: 0.05,
      offsetFromBorderV: 0.05,
      });
    • 在面上切出矩形孔的网格并返回穿孔后的面。

      孔遵循与 subdivideToRectangleWires 相同的单元和模式;未给出缩放模式时每个孔覆盖其单元的一半。holesToFaces 为 true 时,结果在穿孔面之后还包含每个孔一个面,便于制作盖子或填充物。

      Parameters

      Returns Promise<TopoDSFacePointer[]>

      穿孔后的面,按要求后接孔面

      const [perforated] = await bitbybit.occt.shapes.face.subdivideToRectangleHoles({
      shape: face,
      nrRectanglesU: 6,
      nrRectanglesV: 4,
      scalePatternU: [0.6],
      scalePatternV: [0.6],
      filletPattern: [0.5],
      inclusionPattern: [true],
      holesToFaces: false,
      offsetFromBorderU: 0.05,
      offsetFromBorderV: 0.05,
      });
    • 在面上铺六边形线框的蜂窝,nrHexagonsUnrHexagonsV 个放入其 UV 范围,每个都跟随曲面。

      边框偏移在每端修剪范围的一部分;flatU 将平边朝向 U,扩展标志将外侧行拉伸到边缘之外。缩放、圆角和包含模式逐个六边形重复。

      Parameters

      Returns Promise<TopoDSWirePointer[]>

      六边形线框,逐行排列

      const cells = await bitbybit.occt.shapes.face.subdivideToHexagonWires({
      shape: face,
      nrHexagonsU: 8,
      nrHexagonsV: 6,
      flatU: false,
      scalePatternU: [0.9],
      scalePatternV: [0.9],
      filletPattern: [0.2],
      inclusionPattern: [true],
      offsetFromBorderU: 0,
      offsetFromBorderV: 0,
      });
    • 在面上切出六边形孔的蜂窝并返回穿孔后的面。

      孔遵循与 subdivideToHexagonWires 相同的布局和模式;未给出缩放模式时每个孔是其六边形大小的一半。holesToFaces 为 true 时,结果在穿孔面之后还包含每个孔一个面。

      Parameters

      Returns Promise<TopoDSFacePointer[]>

      穿孔后的面,按要求后接孔面

      const [perforated] = await bitbybit.occt.shapes.face.subdivideToHexagonHoles({
      shape: face,
      nrHexagonsU: 8,
      nrHexagonsV: 6,
      flatU: false,
      holesToFaces: false,
      scalePatternU: [0.7],
      scalePatternV: [0.7],
      filletPattern: [0],
      inclusionPattern: [true],
      offsetFromBorderU: 0.05,
      offsetFromBorderV: 0.05,
      });

    primitives

    • 由一列角点创建平面,从最后一个点回到第一个点闭合轮廓。

      这些点必须位于同一平面内。

      Parameters

      Returns Promise<TopoDSFacePointer>

      const face = await bitbybit.occt.shapes.face.createPolygonFace({ points: [[0, 0, 0], [10, 0, 0], [10, 0, 10], [0, 0, 10]] });
      
    • 创建平面圆形面,即圆盘。

      direction 是其平面的法线:默认的 [0, 1, 0] 将其平放在地面上。

      Parameters

      Returns Promise<TopoDSFacePointer>

      圆盘面

      const disc = await bitbybit.occt.shapes.face.createCircleFace({ radius: 5, center: [0, 0, 0], direction: [0, 1, 0] });
      
    • 在地平面上用平面六边形面的网格填充一个矩形,以原点为中心。

      六边形被缩放,使 nrHexagonsInWidth 个横跨 widthnrHexagonsInHeight 个横跨 height。缩放、圆角和包含模式逐个六边形读取并重复;扩展标志将外侧行拉伸到边缘之外以覆盖矩形。

      Parameters

      • inputs: HexagonsInGridDto

        矩形尺寸、六边形数量、延伸标志和可选的图案

      Returns Promise<TopoDSFacePointer[]>

      每个六边形一个面,逐行排列

      const cells = await bitbybit.occt.shapes.face.hexagonsInGrid({
      width: 20,
      height: 10,
      nrHexagonsInWidth: 8,
      nrHexagonsInHeight: 4,
      flatTop: false,
      scalePatternWidth: [0.9],
      scalePatternHeight: [0.9],
      });
    • 创建平面椭圆面。

      direction 是其平面的法线:默认的 [0, 1, 0] 将其平放在地面上。radiusMajor 必须至少为 radiusMinor

      Parameters

      Returns Promise<TopoDSFacePointer>

      椭圆面

      const face = await bitbybit.occt.shapes.face.createEllipseFace({ radiusMinor: 3, radiusMajor: 6, center: [0, 0, 0], direction: [0, 1, 0] });
      
    • 创建以 center 为中心的平面正方形面。

      direction 是其平面的法线:默认的 [0, 1, 0] 将其平放在地面上。

      Parameters

      Returns Promise<TopoDSFacePointer>

      正方形面

      const face = await bitbybit.occt.shapes.face.createSquareFace({ size: 10, center: [0, 0, 0], direction: [0, 1, 0] });
      
    • 创建以 center 为中心的平面矩形面。

      在地平面上 width 沿 X,length 沿 Z;direction 是平面的法线,默认的 [0, 1, 0] 使面平放在地面上。

      Parameters

      Returns Promise<TopoDSFacePointer>

      矩形面

      const face = await bitbybit.occt.shapes.face.createRectangleFace({ width: 20, length: 10, center: [0, 0, 0], direction: [0, 1, 0] });
      
    • 创建平面 L 形面:两条在角处相接的矩形腿。

      第一条腿有 widthFirstlengthFirst,第二条有 widthSecondlengthSecondalign 将角放在腿的外侧、内侧或中间,rotation 使形状在其平面内转动,以度为单位。除非 direction 另有指定,否则它平放在地面上。

      Parameters

      • inputs: LPolygonDto

        两条边的尺寸、对齐方式、旋转、中心和平面法线

      Returns Promise<TopoDSFacePointer>

      L 形面

      const face = await bitbybit.occt.shapes.face.createLPolygonFace({
      widthFirst: 2,
      lengthFirst: 10,
      widthSecond: 2,
      lengthSecond: 6,
      align: Bit.Inputs.OCCT.directionEnum.outside,
      rotation: 0,
      center: [0, 0, 0],
      direction: [0, 1, 0],
      });
    • 创建带 numRays 个角的平面星形面。

      角伸到 outerRadius,角之间的凹口到 innerRadiushalf 只保留前一半的角。offsetOuterEdges 将角尖抬出平面,是为线框准备的;平面需要它为 0。除非 direction 另有指定,否则它平放在地面上。

      Parameters

      Returns Promise<TopoDSFacePointer>

      星形面

      const star = await bitbybit.occt.shapes.face.createStarFace({ outerRadius: 5, innerRadius: 2, numRays: 5, center: [0, 0, 0], direction: [0, 1, 0], offsetOuterEdges: 0, half: false });
      
    • 创建形如风格化圣诞树的平面:nrSkirts 层树枝,从距树干线 outerDist 收窄到 innerDist,立于 trunkHeighttrunkWidth 的树干上。

      与此处其他平面形状不同,它在 XY 平面内竖立,树尖沿 Y;direction 是树干到树尖的方向,rotation 使其绕该轴旋转,以度为单位。

      Parameters

      • inputs: ChristmasTreeDto

        树的比例、树干尺寸、选项、原点以及从树干到树尖的方向

      Returns Promise<TopoDSFacePointer>

      圣诞树面

      const tree = await bitbybit.occt.shapes.face.createChristmasTreeFace({
      height: 10,
      innerDist: 1.5,
      outerDist: 4,
      nrSkirts: 4,
      trunkHeight: 1.5,
      trunkWidth: 1,
      half: false,
      rotation: 0,
      origin: [0, 0, 0],
      direction: [0, 1, 0],
      });
    • 创建平面平行四边形面:一个 widthheight 的矩形,其边倾斜 angle 度。

      aroundCenter 为 true 时形状以 center 为中心;否则从该点开始并向正方向延伸。direction 是平面的法线;默认的 [0, 1, 0] 将其平放在地面上。

      Parameters

      • inputs: ParallelogramDto

        宽度、高度、倾斜角度、是否居中、中心和平面法线

      Returns Promise<TopoDSFacePointer>

      平行四边形面

      const face = await bitbybit.occt.shapes.face.createParallelogramFace({ width: 10, height: 5, angle: 30, aroundCenter: true, center: [0, 0, 0], direction: [0, 1, 0] });
      
    • 创建大致能放入边长为 sizeApprox 的正方形的平面心形面。

      rotation 使其在平面内转动,以度为单位。direction 是平面的法线;默认的 [0, 1, 0] 将其平放在地面上。

      Parameters

      • inputs: Heart2DDto

        近似尺寸、旋转、中心和平面法线

      Returns Promise<TopoDSFacePointer>

      心形面

      const heart = await bitbybit.occt.shapes.face.createHeartFace({ sizeApprox: 10, rotation: 0, center: [0, 0, 0], direction: [0, 1, 0] });
      
    • 创建带 nrCorners 个角的平面正多边形面,所有角都在半径为 radius 的圆上。

      direction 是平面的法线;默认的 [0, 1, 0] 将其平放在地面上。

      Parameters

      • inputs: NGonWireDto

        角数、半径、中心和平面法线

      Returns Promise<TopoDSFacePointer>

      多边形面

      const hexagon = await bitbybit.occt.shapes.face.createNGonFace({ nrCorners: 6, radius: 5, center: [0, 0, 0], direction: [0, 1, 0] });
      

    rebuild

    • 将面的曲面重建为给定 U 和 V 阶数的 B-spline。

      降低阶数会将曲面平滑为 tolerance 内的更简单逼近;提高阶数则是精确的。keepTrim 保留原始边界线框,在提高阶数时可靠;否则面覆盖整个新曲面。重建失败给出 null 面。

      Parameters

      Returns Promise<TopoDSFacePointer>

      重建后的面

      const smoother = await bitbybit.occt.shapes.face.rebuildFaceDegree({ shape: face, uDegree: 2, vDegree: 2, tolerance: 0.01, keepTrim: true });
      
    • 更改 UV 参数在面上的走向:交换 U 和 V、反转 U、反转 V,或任意组合。

      几何保持不变;只有参数方向改变,这对此处每个在 UV 中工作的方法都有影响,例如 subdivideToPointswireAlongParam。面在曲面的自然边界上重建。

      Parameters

      Returns Promise<TopoDSFacePointer>

      参数化方式已更改的面

      const flipped = await bitbybit.occt.shapes.face.flipFaceUV({ shape: face, swapUV: true, reverseU: false, reverseV: false });
      
    • 重新参数化面,使 U 或 V 的等步长在曲面上给出大致相等的距离。

      许多曲面的参数在某些地方挤在一起,因此其上的 UV 网格看起来不均匀;此方法在每个方向以 samples 个点重新采样曲面并重新拟合,从而使 subdivideToPoints 及其同类方法更均匀。面在新的边界上重建。

      Parameters

      Returns Promise<TopoDSFacePointer>

      重新参数化后的面

      const even = await bitbybit.occt.shapes.face.normalizeFaceParametrization({ shape: face, normalizeU: true, normalizeV: true, samples: 50, tolerance: 0.001 });