Bitbybit Docs
    Preparing search index...

    Class OCCTWire

    OpenCascade 中的线框:首尾相接的边链,可以像路径一样开放,也可以像轮廓一样闭合。可以从点和曲线(折线、B-spline、贝塞尔曲线、插值曲线、螺旋线、螺线)构建它们,构建为现成的平面轮廓(圆、矩形、星形、梁轮廓、文本),这些轮廓位于地平面上,除非 direction 另有指定,或者通过连接和分割现有的边和线框构建;将它们读回为点、切线、长度和中心;将它们映射到面上或投影到形状上。沿线框的参数从起点的 0 到终点的 1,并遵循每条边自身的参数而非距离。闭合线框是 shapes.face 用来填充生成面的对象。

    Index

    Constructors

    beam profiles

    build

    debug

    edit

    extract

    extract from wires

    from base

    get

    multiple

    place

    primitives

    rebuild

    seam

    via points

    via wires

    Constructors

    beam profiles

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

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

      Parameters

      • inputs: IBeamProfileDto

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

      Returns Promise<TopoDSWirePointer>

      工字梁轮廓线框

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

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

      Parameters

      • inputs: HBeamProfileDto

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

      Returns Promise<TopoDSWirePointer>

      H 形梁轮廓线框

      const profile = await bitbybit.occt.shapes.wire.createHBeamProfileWire({
      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<TopoDSWirePointer>

      T 形梁轮廓线框

      const profile = await bitbybit.occt.shapes.wire.createTBeamProfileWire({
      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<TopoDSWirePointer>

      U 形梁轮廓线框

      const profile = await bitbybit.occt.shapes.wire.createUBeamProfileWire({
      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],
      });

    build

    • 将首尾相接的边和线框连接成一个线框。

      各部分必须相连;有缺口或有游离部分的集合会抛出错误。列表中其他种类的形状被忽略。

      Parameters

      Returns Promise<TopoDSWirePointer>

      连接后的线框

      const outline = await bitbybit.occt.shapes.wire.combineEdgesAndWiresIntoAWire({ shapes: [arc, line1, line2] });
      

    debug

    • 收集关于线框的诊断信息:它有多少条边、是否闭合、其总长度,以及每条边由 shapes.edge.debugInfo 给出的曲线报告。

      空的或 null 的线框给出标记为无效且计数为零的报告。

      Parameters

      Returns Promise<WireDebugInfo>

      包含边数、闭合标志、长度以及每条边一个条目的报告

      const info = await bitbybit.occt.shapes.wire.debugInfo({ shape: wire });
      console.log(info.nbEdges, info.closed, info.totalLength);

    edit

    extract

    • 在给定的点处将线框切成几段。

      切割前每个点都被移到线框上最近的位置,因此它不必精确位于线框上;重复的点被忽略。各段按沿线框从起点到终点的顺序返回。

      Parameters

      Returns Promise<TopoDSWirePointer[]>

      线框的各段,按顺序排列

      const pieces = await bitbybit.occt.shapes.wire.splitOnPoints({ shape: wire, points: [[3, 0, 0], [7, 0, 0]] });
      
    • 将形状的每个线框转成一串足以描绘其曲线的点,每个线框一个列表。

      偏差设置决定点贴合弯曲边的紧密程度;一条边结束、下一条边开始处的共享点只出现一次。

      Parameters

      Returns Promise<Point3[][]>

      每个线框一个点列表

      const polylines = await bitbybit.occt.shapes.wire.wiresToPoints({
      shape: wire,
      angularDeflection: 0.1,
      curvatureDeflection: 0.1,
      minimumOfPoints: 2,
      uTolerance: 1e-9,
      minimumLength: 1e-7,
      });
    • 从起点到终点,以参数的等步长沿线框放置点。

      nrOfDivisions 步给出比该数多一个的点;removeStartPointremoveEndPoint 丢弃两端。参数遵循每条边自身的曲线参数,因此等步长并不是等距离;需要等距离时使用 divideWireByEqualDistanceToPoints

      Parameters

      Returns Promise<Point3[]>

      沿线框的点,按顺序排列

      const points = await bitbybit.occt.shapes.wire.divideWireByParamsToPoints({ shape: wire, nrOfDivisions: 10, removeStartPoint: false, removeEndPoint: false });
      
    • 从起点到终点,以沿其曲线测量的等距离沿线框放置点。

      nrOfDivisions 步给出比该数多一个的点;removeStartPointremoveEndPoint 丢弃两端。

      Parameters

      Returns Promise<Point3[]>

      沿线框的点,按顺序排列

      const points = await bitbybit.occt.shapes.wire.divideWireByEqualDistanceToPoints({ shape: wire, nrOfDivisions: 10, removeStartPoint: false, removeEndPoint: false });
      
    • 找出线框上某一分数位置处的点:0 是起点,1 是终点。

      分数遵循各边的参数而不是距离,因此 0.5 并不总是按长度的中点;需要按距离时使用 pointOnWireAtLength

      Parameters

      Returns Promise<Point3>

      线框上的点

      const point = await bitbybit.occt.shapes.wire.pointOnWireAtParam({ shape: wire, param: 0.25 });
      
    • 找出线框上距其起点多个距离处的点,沿其曲线以模型单位测量。

      Parameters

      Returns Promise<Point3[]>

      每个距离一个点,顺序相同

      const points = await bitbybit.occt.shapes.wire.pointsOnWireAtLengths({ shape: wire, lengths: [1, 2.5, 4] });
      
    • 从线框起点开始每隔 length 个模型单位放置一个点,能放多少放多少。

      includeFirst 保留起点处的点,includeLast 不论间距如何都追加终点,tryNext 请求在最后一个放得下的点之外再多放一步的一个点。

      Parameters

      Returns Promise<Point3[]>

      沿线框的点,按顺序排列

      const points = await bitbybit.occt.shapes.wire.pointsOnWireAtEqualLength({ shape: wire, length: 2, tryNext: false, includeFirst: true, includeLast: false });
      
    • 沿线框按重复的间隔模式放置点,例如 1, 3, 1, 3,直到线框用完。

      lengths 是以模型单位表示、从起点开始重复的间隔模式;includeFirst 保留起点,includeLast 追加终点,tryNext 请求在最后一个点之后的下一个间隔处再多放一个点。

      Parameters

      Returns Promise<Point3[]>

      沿线框的点,按顺序排列

      const points = await bitbybit.occt.shapes.wire.pointsOnWireAtPatternOfLengths({ shape: wire, lengths: [1, 3], tryNext: false, includeFirst: true, includeLast: false });
      
    • 找出线框在某一分数位置处的前进方向,从起点的 0 到终点的 1。

      分数遵循各边的参数而不是距离。

      Parameters

      Returns Promise<Vector3>

      切线方向

      const tangent = await bitbybit.occt.shapes.wire.tangentOnWireAtParam({ shape: wire, param: 0.5 });
      
    • 计算线框曲线在距其起点给定距离处的一阶、二阶和三阶导数。

      一阶导数是带速度的切线,二阶表示曲线如何弯曲,三阶表示该弯曲如何变化;全部相对于曲线的参数。距离沿曲线以模型单位测量。

      Parameters

      Returns Promise<[Vector3, Vector3, Vector3]>

      三个导数向量,从一阶到三阶

      const [first, second, third] = await bitbybit.occt.shapes.wire.derivativesOnWireAtLength({ shape: wire, length: 2.5 });
      
    • 计算线框曲线在某一分数位置处的一阶、二阶和三阶导数,从起点的 0 到终点的 1。

      一阶导数是带速度的切线,二阶表示曲线如何弯曲,三阶表示该弯曲如何变化;全部相对于曲线的参数。

      Parameters

      Returns Promise<[Vector3, Vector3, Vector3]>

      三个导数向量,从一阶到三阶

      const [first, second, third] = await bitbybit.occt.shapes.wire.derivativesOnWireAtParam({ shape: wire, param: 0.5 });
      
    • 读取线框开始的点,按线框自身的方向。

      Parameters

      Returns Promise<Point3>

      起点

      const start = await bitbybit.occt.shapes.wire.startPointOnWire({ shape: wire });
      
    • 找出线框参数范围一半处的点。

      参数遵循各边自身的曲线而不是距离,因此在边长不等的线框上这并不总是按长度的中点;pointOnWireAtLength 配合 getWireLength 的一半可给出那个点。

      Parameters

      Returns Promise<Point3>

      参数 0.5 处的点

      const middle = await bitbybit.occt.shapes.wire.midPointOnWire({ shape: wire });
      
    • 读取线框结束的点,按线框自身的方向。

      Parameters

      Returns Promise<Point3>

      终点

      const end = await bitbybit.occt.shapes.wire.endPointOnWire({ shape: wire });
      

    extract from wires

    • 用相同的设置对多个线框运行 divideWireByParamsToPoints

      Parameters

      Returns Promise<Point3[][]>

      每个线框一个点列表,顺序相同

      const lists = await bitbybit.occt.shapes.wire.divideWiresByParamsToPoints({ shapes: wires, nrOfDivisions: 10, removeStartPoint: false, removeEndPoint: false });
      
    • 用相同的设置对多个线框运行 divideWireByEqualDistanceToPoints

      Parameters

      Returns Promise<Point3[][]>

      每个线框一个点列表,顺序相同

      const lists = await bitbybit.occt.shapes.wire.divideWiresByEqualDistanceToPoints({ shapes: wires, nrOfDivisions: 10, removeStartPoint: false, removeEndPoint: false });
      

    from base

    • 由形如 { start, end } 的直线对象创建直的单边线框。

      Parameters

      Returns Promise<TopoDSWirePointer>

      直线框

      const wire = await bitbybit.occt.shapes.wire.fromBaseLine({ line: { start: [0, 0, 0], end: [10, 0, 0] } });
      
    • 为每个形如 { start, end } 的直线对象创建一个直的单边线框。

      Parameters

      Returns Promise<TopoDSWirePointer[]>

      每条直线一个线框,顺序相同

      const wires = await bitbybit.occt.shapes.wire.fromBaseLines({ lines: [{ start: [0, 0, 0], end: [10, 0, 0] }, { start: [10, 0, 0], end: [10, 10, 0] }] });
      
    • 由线段(一对点 [start, end])创建直的单边线框。

      Parameters

      Returns Promise<TopoDSWirePointer>

      直线框

      const wire = await bitbybit.occt.shapes.wire.fromBaseSegment({ segment: [[0, 0, 0], [10, 0, 0]] });
      
    • 为每条线段(各为一对点 [start, end])创建一个直的单边线框。

      Parameters

      Returns Promise<TopoDSWirePointer[]>

      每条线段一个线框,顺序相同

      const wires = await bitbybit.occt.shapes.wire.fromBaseSegments({ segments: [[[0, 0, 0], [10, 0, 0]], [[10, 0, 0], [10, 10, 0]]] });
      
    • 将一列点按顺序用直边连接成一个线框。

      少于两个点会抛出错误。当最后一个点与第一个点重复时,该重复点被 丢弃,线框闭合回到第一个点;否则线框保持开放。要得到不重复点的 闭合轮廓,请使用 createPolygonWire

      Parameters

      Returns Promise<TopoDSWirePointer>

      经过这些点的线框

      const path = await bitbybit.occt.shapes.wire.fromPoints({ points: [[0, 0, 0], [10, 0, 0], [10, 10, 0]] });
      const outline = await bitbybit.occt.shapes.wire.fromPoints({ points: [[0, 0, 0], [10, 0, 0], [10, 10, 0], [0, 0, 0]] });
    • 由折线对象创建线框,每段一条直边;标记为闭合的折线还会得到从其最后一个点回到第一个点的边。

      Parameters

      Returns Promise<TopoDSWirePointer>

      线框

      const outline = await bitbybit.occt.shapes.wire.fromBasePolyline({ polyline: { points: [[0, 0, 0], [10, 0, 0], [10, 0, 10]], isClosed: true } });
      
    • 由以三个点给出的三角形创建闭合的三边线框。

      Parameters

      Returns Promise<TopoDSWirePointer>

      闭合线框

      const outline = await bitbybit.occt.shapes.wire.fromBaseTriangle({ triangle: [[0, 0, 0], [10, 0, 0], [0, 0, 10]] });
      
    • 为网格的每个三角形创建一个闭合的三边线框。

      无法构建其线框的三角形会带着警告被跳过,而不是中止其余部分。

      Parameters

      Returns Promise<TopoDSWirePointer[]>

      每个能够构建的三角形一个线框

      const outlines = await bitbybit.occt.shapes.wire.fromBaseMesh({ mesh: triangles });
      

    get

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

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

      Parameters

      Returns Promise<TopoDSWirePointer>

      该索引处的线框

      const outer = await bitbybit.occt.shapes.wire.getWire({ shape: face, index: 0 });
      
    • 找出线框的质心,即其曲线的平衡点;对于圆这是其圆心,不在线框本身上。

      Parameters

      Returns Promise<Point3>

      质心点

      const center = await bitbybit.occt.shapes.wire.getWireCenterOfMass({ shape: wire });
      
    • 找出列表中每个线框的质心。

      Parameters

      Returns Promise<Point3[]>

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

      const centers = await bitbybit.occt.shapes.wire.getWiresCentersOfMass({ shapes: wires });
      
    • 翻转线框的方向,使其起点变为终点。

      各边保留自己的顺序和方向标志;线框整体被标记为反转,这是大多数操作所读取的。reversedWireFromReversedEdges 则逐边重建线框。

      Parameters

      Returns Promise<TopoDSWirePointer>

      一个方向相反的新线框

      const back = await bitbybit.occt.shapes.wire.reversedWire({ shape: wire });
      
    • 通过反转每条边并按相反顺序重新连接来翻转线框的方向。

      结果是彻底反向的线框,某些操作在单纯的 reversedWire 标志不够用时需要它。

      Parameters

      Returns Promise<TopoDSWirePointer>

      一个方向相反的新线框

      const back = await bitbybit.occt.shapes.wire.reversedWireFromReversedEdges({ shape: wire });
      
    • 判断线框是否闭合,即其起点和终点在很小的容差内重合。

      Parameters

      Returns Promise<boolean>

      当两端相接时为 true

      const wireIsClosed = await bitbybit.occt.shapes.wire.isWireClosed({ shape: wire });
      
    • 沿曲线测量线框的长度,以模型单位表示。

      Parameters

      Returns Promise<number>

      长度

      const len = await bitbybit.occt.shapes.wire.getWireLength({ shape: wire });
      
    • 沿曲线测量列表中每个线框的长度,以模型单位表示。

      Parameters

      Returns Promise<number[]>

      每个线框一个长度,顺序相同

      const lengths = await bitbybit.occt.shapes.wire.getWiresLengths({ shapes: wires });
      

    multiple

    • 为每个点列表创建一个闭合多边形线框,与 createPolygonWire 所做的相同。

      returnCompound 为 true 时,线框被打包成一个复合体形状而不是列表。

      Parameters

      • inputs: PolygonsDto

        多边形以及是否将它们打包为一个复合体

      Returns Promise<TopoDSCompoundPointer | TopoDSWirePointer[]>

      按顺序排列的线框,或容纳它们的一个复合体

      const outlines = await bitbybit.occt.shapes.wire.createPolygons({
      polygons: [{ points: [[0, 0, 0], [5, 0, 0], [5, 0, 5]] }, { points: [[10, 0, 0], [15, 0, 0], [15, 0, 5]] }],
      returnCompound: false,
      });
    • 为每个直线定义创建一个直的单边线框。

      returnCompound 为 true 时,线框被打包成一个复合体形状而不是列表。

      Parameters

      Returns Promise<TopoDSCompoundPointer | TopoDSWirePointer[]>

      按顺序排列的线框,或容纳它们的一个复合体

      const lines = await bitbybit.occt.shapes.wire.createLines({
      lines: [{ start: [0, 0, 0], end: [10, 0, 0] }, { start: [0, 0, 5], end: [10, 0, 5] }],
      returnCompound: false,
      });
    • 为每个点列表创建一个开放折线线框,与 createPolylineWire 所做的相同。

      returnCompound 为 true 时,线框被打包成一个复合体形状而不是列表。

      Parameters

      Returns Promise<TopoDSCompoundPointer | TopoDSWirePointer[]>

      按顺序排列的线框,或容纳它们的一个复合体

      const paths = await bitbybit.occt.shapes.wire.createPolylines({
      polylines: [{ points: [[0, 0, 0], [5, 0, 0], [5, 0, 5]] }, { points: [[10, 0, 0], [15, 0, 0]] }],
      returnCompound: false,
      });
    • 为每个定义创建一个 Bezier 线框,与 createBezier 所做的相同。

      returnCompound 为 true 时,线框被打包成一个复合体形状而不是列表。

      Parameters

      • inputs: BezierWiresDto

        贝塞尔定义以及是否将它们打包为一个复合体

      Returns Promise<TopoDSCompoundPointer | TopoDSWirePointer[]>

      按顺序排列的线框,或容纳它们的一个复合体

      const curves = await bitbybit.occt.shapes.wire.createBezierWires({
      bezierWires: [{ points: [[0, 0, 0], [5, 0, 10], [10, 0, 0]], closed: false }, { points: [[0, 0, 5], [5, 0, 15], [10, 0, 5]], closed: false }],
      returnCompound: false,
      });
    • 为每个定义创建一个插值的 B-spline 线框,与 interpolatePoints 所做的相同。

      returnCompound 为 true 时,线框被打包成一个复合体形状而不是列表。

      Parameters

      Returns Promise<TopoDSCompoundPointer | TopoDSWirePointer[]>

      按顺序排列的线框,或容纳它们的一个复合体

      const curves = await bitbybit.occt.shapes.wire.interpolateWires({
      interpolations: [{ points: [[0, 0, 0], [5, 0, 5], [10, 0, 0]], periodic: false, tolerance: 1e-7 }, { points: [[0, 0, 5], [5, 0, 10], [10, 0, 5]], periodic: false, tolerance: 1e-7 }],
      returnCompound: false,
      });
    • 为每个定义创建一个逼近的 B-spline 线框,与 createBSpline 所做的相同。

      returnCompound 为 true 时,线框被打包成一个复合体形状而不是列表。

      Parameters

      • inputs: BSplinesDto

        B-spline 定义以及是否将它们打包为一个复合体

      Returns Promise<TopoDSCompoundPointer | TopoDSWirePointer[]>

      按顺序排列的线框,或容纳它们的一个复合体

      const curves = await bitbybit.occt.shapes.wire.createBSplines({
      bSplines: [{ points: [[0, 0, 0], [5, 0, 5], [10, 0, 0]], closed: false }, { points: [[0, 0, 5], [5, 0, 10], [10, 0, 5]], closed: false }],
      returnCompound: false,
      });

    place

    • 将绘制在地平面上的平面线框映射到面的曲面上,就像把图案包在它上面一样。

      线框的 Z 坐标被读作 U,X 坐标被读作 V,采用面的真实 UV 值,即 shapes.face.getUMinBound 及其同类方法报告的值;能放入这些边界内的图案会落在面上。

      Parameters

      Returns Promise<TopoDSWirePointer>

      位于面的曲面上的线框

      const onSurface = await bitbybit.occt.shapes.wire.placeWireOnFace({ wire: flatWire, face: cylinderFace });
      
    • 沿某方向将线框投射到形状上,就像将其影子投到曲面上。

      结果是投射与形状各面相交处曲线的复合体,可能同时出现在其近侧和远侧。可通过 shapes.face.createFaceFromWireOnFace 用它切割面,或将其用作路径。

      Parameters

      Returns Promise<TopoDSCompoundPointer>

      投影曲线的复合体

      const shadow = await bitbybit.occt.shapes.wire.project({ wire: circle, shape: sphere, direction: [0, -1, 0] });
      

    primitives

    • 创建一个完整的圆作为闭合的单边线框,位于法线为 direction 的平面内;默认的 [0, 1, 0] 将其平放在地面上。

      Parameters

      Returns Promise<TopoDSWirePointer>

      圆线框

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

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

      Parameters

      • inputs: HexagonsInGridDto

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

      Returns Promise<TopoDSWirePointer[]>

      每个六边形一个线框,逐行排列

      const cells = await bitbybit.occt.shapes.wire.hexagonsInGrid({
      width: 20,
      height: 10,
      nrHexagonsInWidth: 8,
      nrHexagonsInHeight: 4,
      flatTop: false,
      scalePatternWidth: [0.9],
      scalePatternHeight: [0.9],
      });
    • 创建以 center 为中心的闭合正方形线框。

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

      Parameters

      Returns Promise<TopoDSWirePointer>

      正方形线框

      const square = await bitbybit.occt.shapes.wire.createSquareWire({ size: 10, center: [0, 0, 0], direction: [0, 1, 0] });
      
    • 创建带 numRays 个角的闭合星形线框。

      角伸到 outerRadius,角之间的凹口到 innerRadiusoffsetOuterEdges 将角尖抬出平面该距离,形成 3D 星形,half 保留前一半的角作为开放线框。除非 direction 另有指定,否则它平放在地面上。

      Parameters

      Returns Promise<TopoDSWirePointer>

      星形线框

      const star = await bitbybit.occt.shapes.wire.createStarWire({ 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<TopoDSWirePointer>

      圣诞树线框

      const tree = await bitbybit.occt.shapes.wire.createChristmasTreeWire({
      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],
      });
    • 创建带 nrCorners 个角的闭合正多边形线框,所有角都在半径为 radius 的圆上。

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

      Parameters

      • inputs: NGonWireDto

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

      Returns Promise<TopoDSWirePointer>

      多边形线框

      const hexagon = await bitbybit.occt.shapes.wire.createNGonWire({ nrCorners: 6, radius: 5, center: [0, 0, 0], direction: [0, 1, 0] });
      
    • 创建闭合平行四边形线框:一个 widthheight 的矩形,其边倾斜 angle 度。

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

      Parameters

      • inputs: ParallelogramDto

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

      Returns Promise<TopoDSWirePointer>

      平行四边形线框

      const shape = await bitbybit.occt.shapes.wire.createParallelogramWire({ 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<TopoDSWirePointer>

      心形线框

      const heart = await bitbybit.occt.shapes.wire.createHeartWire({ sizeApprox: 10, rotation: 0, center: [0, 0, 0], direction: [0, 1, 0] });
      
    • 创建以 center 为中心的闭合矩形线框。

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

      Parameters

      Returns Promise<TopoDSWirePointer>

      矩形线框

      const rectangle = await bitbybit.occt.shapes.wire.createRectangleWire({ width: 20, length: 10, center: [0, 0, 0], direction: [0, 1, 0] });
      
    • 创建闭合的 L 形线框:两条在角处相接的矩形腿。

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

      Parameters

      • inputs: LPolygonDto

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

      Returns Promise<TopoDSWirePointer>

      L 形线框

      const outline = await bitbybit.occt.shapes.wire.createLPolygonWire({
      widthFirst: 2,
      lengthFirst: 10,
      widthSecond: 2,
      lengthSecond: 6,
      align: Bit.Inputs.OCCT.directionEnum.outside,
      rotation: 0,
      center: [0, 0, 0],
      direction: [0, 1, 0],
      });
    • 创建一个完整的椭圆作为闭合的单边线框,位于法线为 direction 的平面内。

      radiusMajor 不得小于 radiusMinor,否则内核拒绝该椭圆;默认方向 [0, 1, 0] 将其平放在地面上。

      Parameters

      Returns Promise<TopoDSWirePointer>

      椭圆线框

      const ellipse = await bitbybit.occt.shapes.wire.createEllipseWire({ center: [0, 0, 0], direction: [0, 1, 0], radiusMinor: 3, radiusMajor: 6 });
      
    • 创建螺旋线线框,即半径恒为 radius、每圈上升 pitch 个模型单位、直到达到 height 的螺旋。

      它从 center 旁开始并沿 direction 上升;clockwise 反转绕向。螺旋线由 tolerance 内的光滑曲线逼近。半径、螺距或高度为 0 或更小时给出 null 线框。

      Parameters

      • inputs: HelixWireDto

        半径、螺距、高度、底部中心、轴方向、旋向和容差

      Returns Promise<TopoDSWirePointer>

      螺旋线线框

      const spring = await bitbybit.occt.shapes.wire.createHelixWire({ radius: 2, pitch: 1, height: 10, center: [0, 0, 0], direction: [0, 1, 0], clockwise: false, tolerance: 1e-4 });
      
    • createHelixWire 一样创建螺旋线线框,但按 numTurns 而不是高度确定大小:螺旋每圈上升 pitch 个模型单位,共 numTurns 圈。

      Parameters

      • inputs: HelixWireByTurnsDto

        半径、螺距、圈数、底部中心、轴方向、旋向和容差

      Returns Promise<TopoDSWirePointer>

      螺旋线线框

      const spring = await bitbybit.occt.shapes.wire.createHelixWireByTurns({ radius: 2, pitch: 1, numTurns: 5, center: [0, 0, 0], direction: [0, 1, 0], clockwise: false, tolerance: 1e-4 });
      
    • 创建锥形螺旋线线框,其半径从底部的 startRadius 均匀变化到顶部的 endRadius,每圈上升 pitch 个模型单位,直到达到 height

      它从 center 旁开始并沿 direction 上升;clockwise 反转绕向。曲线在 tolerance 内逼近。

      Parameters

      • inputs: TaperedHelixWireDto

        起始和结束半径、螺距、高度、底部中心、轴方向、旋向和容差

      Returns Promise<TopoDSWirePointer>

      锥形螺旋线线框

      const cone = await bitbybit.occt.shapes.wire.createTaperedHelixWire({ startRadius: 3, endRadius: 0.5, pitch: 1, height: 8, center: [0, 0, 0], direction: [0, 1, 0], clockwise: false, tolerance: 1e-4 });
      
    • 在法线为 direction 的平面内创建平面螺线线框:numTurns 圈,半径从 startRadius 均匀增长到 endRadius

      默认方向 [0, 1, 0] 将其平放在地面上;clockwise 反转绕向,曲线在 tolerance 内逼近。

      Parameters

      • inputs: FlatSpiralWireDto

        起始和结束半径、圈数、中心、平面法线、旋向和容差

      Returns Promise<TopoDSWirePointer>

      螺线线框

      const spiral = await bitbybit.occt.shapes.wire.createFlatSpiralWire({ startRadius: 0.5, endRadius: 5, numTurns: 4, center: [0, 0, 0], direction: [0, 1, 0], clockwise: false, tolerance: 1e-4 });
      
    • 用单线 Hershey simplex 字体在地平面上将文本写成笔画线框,每个笔画一个开放折线线框。

      height 是大写字母的高度,以模型单位表示,lineSpacingletterSpacing 是它的倍数,align 对齐长度不同的行,centerOnOrigin 将文本块移到原点。

      Parameters

      • inputs: TextWiresDto

        文本、其大小和间距、对齐方式和放置选项

      Returns Promise<TopoDSWirePointer[]>

      每个笔画一个线框,按书写顺序排列

      const strokes = await bitbybit.occt.shapes.wire.textWires({
      text: "Hello",
      height: 5,
      lineSpacing: 1.5,
      letterSpacing: 0,
      align: Bit.Inputs.Base.horizontalAlignEnum.left,
      centerOnOrigin: true,
      });
    • textWires 一样将文本写成笔画线框,并将它们打包成复合体,同时附带 文本块的尺寸。

      结果带有 compound,包含整段文本;characters,按书写顺序每个字符一个 复合体;widthheight,为文本块沿 X 和沿 Z 的范围;以及 center,为文本块的中点。

      Parameters

      • inputs: TextWiresDto

        文本、其大小和间距、对齐方式和放置选项

      Returns Promise<TextWiresDataDto<TopoDSCompoundPointer>>

      文本复合体、各字符复合体和测得的尺寸

      const text = await bitbybit.occt.shapes.wire.textWiresWithData({
      text: "Hi",
      height: 5,
      lineSpacing: 1.5,
      letterSpacing: 0,
      align: Bit.Inputs.Base.horizontalAlignEnum.left,
      centerOnOrigin: false,
      });
      console.log(text.width, text.height, text.characters.length);

    rebuild

    • 在容差内将线框的每条边重建为给定阶数的 B-spline,并将结果重新连接成线框。

      降低阶数会简化曲线,提高阶数则给后续操作更多自由;无论哪种,每条新曲线都保持在与旧曲线相差 tolerance 以内。

      Parameters

      Returns Promise<TopoDSWirePointer>

      带有重建边的新线框

      const simpler = await bitbybit.occt.shapes.wire.rebuildWireDegree({ shape: wire, degree: 3, tolerance: 1e-3 });
      

    seam

    • 将闭合周期性线框的接缝(即其起点和终点所在的点)移动到其曲线上的给定参数处。

      几何不变;只有线框被视为开始的位置改变。适用于圆等单边线框:每条周期性边都被移动,非周期性的边保持原样。

      Parameters

      Returns Promise<TopoDSWirePointer>

      从接缝处开始的新线框

      const rotated = await bitbybit.occt.shapes.wire.moveWireSeamByParameter({ shape: circle, parameter: 1.57 });
      
    • 将闭合周期性线框的接缝(即其起点和终点所在的点)从当前起点沿曲线移动一段距离。

      几何不变;只有线框被视为开始的位置改变。适用于圆等单边线框:每条周期性边都被移动,非周期性的边保持原样。

      Parameters

      Returns Promise<TopoDSWirePointer>

      从接缝处开始的新线框

      const rotated = await bitbybit.occt.shapes.wire.moveWireSeamByLength({ shape: circle, length: 2.5 });
      

    via points

    • 创建经过一列角点的直边闭合线框,添加从最后一个点回到第一个点的边。

      这些点不必在同一平面内;不过平面需要平面的轮廓。

      Parameters

      Returns Promise<TopoDSWirePointer>

      闭合线框

      const square = await bitbybit.occt.shapes.wire.createPolygonWire({ points: [[0, 0, 0], [10, 0, 0], [10, 0, 10], [0, 0, 10]] });
      
    • 在两点之间创建直的单边线框,并将其延长到两点之外。

      extensionStartextensionEnd 是以模型单位表示、沿直线加在起点和终点之外的距离;两点必须不同,否则抛出错误。

      Parameters

      Returns Promise<TopoDSWirePointer>

      延长后的直线框

      const longer = await bitbybit.occt.shapes.wire.createLineWireWithExtensions({ start: [0, 0, 0], end: [10, 0, 0], extensionStart: 2, extensionEnd: 5 });
      
    • 创建按顺序经过一列点的直边开放线框。

      线框不闭合;createPolygonWire 会添加回到第一个点的边。

      Parameters

      Returns Promise<TopoDSWirePointer>

      开放线框

      const path = await bitbybit.occt.shapes.wire.createPolylineWire({ points: [[0, 0, 0], [10, 0, 0], [10, 0, 10]] });
      
    • 创建由控制点引导的光滑 Bezier 线框:它从第一个点开始,在最后一个点结束,并被中间的点吸引但不经过它们。

      closed 再次追加第一个点使两端相接;periodic 则构建在接缝处光滑的闭合曲线。degree 限制有多少相邻点影响每一部分。

      Parameters

      • inputs: BezierDto

        控制点以及闭合和阶数选项

      Returns Promise<TopoDSWirePointer>

      贝塞尔线框

      const curve = await bitbybit.occt.shapes.wire.createBezier({ points: [[0, 0, 0], [5, 0, 10], [10, 0, -10], [15, 0, 0]], closed: false, periodic: false });
      
    • createBezier 一样创建 Bezier 线框,每个控制点带一个权重,表示它吸引曲线的强度。

      大于 1 的权重将曲线拉向其点,小于 1 则放松。权重必须与点匹配:数量相同,或当 closed 为 true 且 periodic 为 false 时多一个,因为第一个点会重复。

      Parameters

      Returns Promise<TopoDSWirePointer>

      带权重的贝塞尔线框

      const curve = await bitbybit.occt.shapes.wire.createBezierWeights({
      points: [[0, 0, 0], [5, 0, 10], [10, 0, 0]],
      weights: [1, 3, 1],
      closed: false,
      periodic: false,
      });
    • 创建按顺序经过每个点的光滑 B-spline 线框。

      periodic 闭合曲线使其在接缝处光滑,这能得到形状优美的环。parametrization 控制点之间的间距:当点不均匀时,centripetal 能抑制尖点和过冲。startTangentendTangent,或每个点一个 tangents 条目,强制曲线在该处的方向。

      Parameters

      • inputs: InterpolationDto

        点、是否闭合曲线、容差、参数化方式和可选的切线

      Returns Promise<TopoDSWirePointer>

      经过这些点的 B-spline 线框

      const loop = await bitbybit.occt.shapes.wire.interpolatePoints({
      points: [[0, 0, 0], [10, 0, 5], [10, 0, 15], [0, 0, 10]],
      periodic: true,
      tolerance: 1e-7,
      parametrization: Bit.Inputs.OCCT.bSplineParametrizationEnum.centripetal,
      });
    • 创建经过这些点的闭合光滑 B-spline 线框,只要点是镜像对称的,其形状也是镜像对称的,没有看起来奇怪的起点或终点。

      普通的周期性 interpolatePoints 对正方形或三角形等对称输入在接缝处可能显得歪斜;此变体不会。如果无法对这些点进行插值,它会以错误失败。

      Parameters

      Returns Promise<TopoDSWirePointer>

      闭合的对称 B-spline 线框

      const rounded = await bitbybit.occt.shapes.wire.interpolatePointsSymmetric({ points: [[0, 0, 0], [10, 0, 0], [10, 0, 10], [0, 0, 10]], tolerance: 1e-7 });
      
    • 创建逼近一列点的光滑 B-spline 线框:它紧密地跟随这些点,但不必精确经过每一个。

      closed 再次追加第一个点使两端相接。拟合使用 3 到 8 之间的阶数和 0.001 模型单位的容差;当曲线必须经过这些点时使用 interpolatePoints

      Parameters

      Returns Promise<TopoDSWirePointer>

      B-spline 线框

      const curve = await bitbybit.occt.shapes.wire.createBSpline({ points: [[0, 0, 0], [5, 0, 5], [10, 0, 0], [15, 0, 5]], closed: false });
      

    via wires

    • 绘制在两个线框之间来回弹跳的锯齿线:两者被分成相同数量的点,一条折线交替访问它们。

      nrZigZags 设置弹跳次数;inverse 从第二个线框开始;divideByEqualDistance 按长度而不是按参数分布点;zigZagsPerEdge 为 true 时每条边有自己的锯齿,因此边的数量必须匹配。

      Parameters

      Returns Promise<TopoDSWirePointer>

      锯齿线框

      const zigzag = await bitbybit.occt.shapes.wire.createZigZagBetweenTwoWires({ wire1: lower, wire2: upper, nrZigZags: 20, inverse: false, divideByEqualDistance: true, zigZagsPerEdge: false });
      
    • 将多个线框或边的起点连接成一个新线框,将它们的终点连接成另一个。

      wireType 使它们成为折线或光滑插值曲线,closed 将最后一个点连回第一个点,tolerance 用于插值。少于两个形状会抛出错误。

      Parameters

      Returns Promise<TopoDSWirePointer[]>

      两个线框:一个经过各起点,一个经过各终点

      const [starts, ends] = await bitbybit.occt.shapes.wire.createWiresBetweenStartEndPointsOfWiresAndEdges({
      shapes: [wireA, wireB, wireC],
      wireType: Bit.Inputs.OCCT.wireFromPointsTypeEnum.interpolated,
      closed: false,
      tolerance: 1e-7,
      });
    • 将多个线框或边分成相同数量的点,并将每个位置上的点连接成一个新线框,就像梯子的横档。

      nrOfDivisions 步给出比该数多一个的横档;divideByEqualDistance 按长度而不是按参数分布点;wireType 使横档成为折线或光滑曲线,closed 将每条连接成环。

      Parameters

      Returns Promise<TopoDSWirePointer[]>

      每个分割点一个线框,沿形状顺序排列

      const rungs = await bitbybit.occt.shapes.wire.createWiresBetweenSubdividedPointsOfWiresAndEdges({
      shapes: [rail1, rail2],
      nrOfDivisions: 10,
      divideByEqualDistance: true,
      wireType: Bit.Inputs.OCCT.wireFromPointsTypeEnum.polyline,
      closed: false,
      tolerance: 1e-7,
      });
    • 绘制绕位于同一平面内的两个圆的闭合轮廓,用切线连接它们:皮带或胶囊形状。

      keepLines 选择外切线(皮带)或交叉的内切线;circleRemainders 选择每个圆的哪段圆弧保留在轮廓中。每个圆线框必须由单条边构成。

      Parameters

      Returns Promise<TopoDSWirePointer>

      闭合的轮廓线框

      const belt = await bitbybit.occt.shapes.wire.createWireFromTwoCirclesTan({
      circle1,
      circle2,
      keepLines: Bit.Inputs.OCCT.twoSidesStrictEnum.outside,
      circleRemainders: Bit.Inputs.OCCT.fourSidesStrictEnum.outside,
      tolerance: 1e-7,
      });