Bitbybit Docs
    Preparing search index...

    Class OCCTAssemblyManager

    构建和更改装配文档:逐个对象描述零件、装配节点和实例节点,将它们组合成结构,再由此构建文档;或者将 STEP 文件加载到文档中。然后为标签重新着色和重命名,更新或移除零件,并导出为 STEP 或 glTF。文档是一个内存句柄,在被删除之前一直有效,因此构建一次即可按需多次查询或导出。

    Index

    Constructors

    Methods

    • 描述从另一个文档(通常是从 STEP 加载的)取来的零件,使其带有子装配体、名称和颜色的整棵标签树被复制到新装配体中。

      sourceDocumentIndex 指向传给 buildAssemblyDocumentsourceDocuments 列表,sourceLabel 选取一棵子树而不是整个文档。实例节点像任何零件一样按 partId 放置它。

      Parameters

      • inputs: CreateImportedPartDto

        零件 id、源文档的索引,以及可选的源标签、名称和颜色

      Returns Promise<AssemblyLoadedPartDef>

      导入零件定义,可用于 combineStructure

      const chairDoc = await bitbybit.occt.assembly.manager.loadStepToDoc({ stepData });
      const chair = await bitbybit.occt.assembly.manager.createImportedPart({ id: "chair", sourceDocumentIndex: 0, name: "Chair" });
      const c1 = await bitbybit.occt.assembly.manager.createInstanceNode({ id: "c1", partId: "chair", name: "Chair 1", translation: [0, 0, 0] });
      const c2 = await bitbybit.occt.assembly.manager.createInstanceNode({ id: "c2", partId: "chair", name: "Chair 2", translation: [500, 0, 0] });
      const structure = await bitbybit.occt.assembly.manager.combineStructure({ parts: [], nodes: [c1, c2], loadedParts: [chair], clearDocument: false });
      const doc = await bitbybit.occt.assembly.manager.buildAssemblyDocument({ structure, sourceDocuments: [chairDoc] });

    assembly

    • 为装配体结构描述一个零件:用于引用它的 id、其形状、名称和可选的颜色。

      此时尚未构建任何东西;只有当包含它的结构经过 buildAssemblyDocument 时,零件才真正存在。实例节点按其 id 放置零件,次数不限。

      Parameters

      Returns Promise<AssemblyPartDef<TopoDSShapePointer>>

      零件定义,可用于 combineStructure

      const box = await bitbybit.occt.shapes.solid.createBox({ width: 10, length: 10, height: 10, center: [0, 0, 0] });
      const part = await bitbybit.occt.assembly.manager.createPart({ id: "box", shape: box, name: "Box", colorRgba: { r: 1, g: 0, b: 0, a: 1 } });
    • 描述一个装配体节点,即在层级结构中将实例和其他装配体分组的容器。

      parentId 指定它所在的装配体;省略则为根。可选的矩阵放置整个组。

      Parameters

      • inputs: CreateAssemblyNodeDto

        节点 id、其名称、可选的父节点 id、可选的颜色和可选的位置矩阵

      Returns Promise<AssemblyNodeDef>

      节点定义,可用于 combineStructure

      const root = await bitbybit.occt.assembly.manager.createAssemblyNode({ id: "root", name: "Root Assembly" });
      const sub = await bitbybit.occt.assembly.manager.createAssemblyNode({ id: "sub", name: "Sub Assembly", parentId: "root" });
    • 描述一个实例节点,即零件的一次放置:按 partId 指定哪个零件、放在哪里以及在哪个装配体之下。

      translation 移动它,rotation 以绕 X、Y 和 Z 的欧拉角(以度为单位)转动它,scale 均匀缩放它;matrix 可以替代这三者。同一个零件可以由许多实例放置。

      Parameters

      Returns Promise<AssemblyNodeDef>

      节点定义,可用于 combineStructure

      const first = await bitbybit.occt.assembly.manager.createInstanceNode({ id: "box1", partId: "box", name: "Box 1" });
      const second = await bitbybit.occt.assembly.manager.createInstanceNode({ id: "box2", partId: "box", name: "Box 2", translation: [20, 0, 0], rotation: [0, 0, 45] });
    • 描述对文档中已有零件的更改:新形状、新名称或新颜色,或它们的任意组合,按零件的标签定位。

      combineStructure 中将更新收集到 partUpdates 下,并将结构与现有文档一起传给 buildAssemblyDocument

      Parameters

      Returns Promise<AssemblyPartUpdateDef<TopoDSShapePointer>>

      更新定义,可用于 combineStructure

      const parts = await bitbybit.occt.assembly.query.getDocumentParts({ document: doc });
      const bigger = await bitbybit.occt.shapes.solid.createBox({ width: 20, length: 20, height: 20, center: [0, 0, 0] });
      const update = await bitbybit.occt.assembly.manager.createPartUpdate({ label: parts[0].label, shape: bigger, name: "Bigger Box" });
      const structure = await bitbybit.occt.assembly.manager.combineStructure({ parts: [], nodes: [], partUpdates: [update], clearDocument: false });
      await bitbybit.occt.assembly.manager.buildAssemblyDocument({ structure, existingDocument: doc });
    • 将零件、节点以及用于更新的移除项、零件更新和导入零件汇集成一个结构定义,这是 buildAssemblyDocument 之前的最后一步。

      clearDocument 为 false 时,将结构应用于现有文档时保留其已有内容。

      Parameters

      Returns Promise<AssemblyStructureDef<TopoDSShapePointer>>

      结构,可用于构建

      const structure = await bitbybit.occt.assembly.manager.combineStructure({ parts: [part], nodes: [root, first, second], clearDocument: false });
      const doc = await bitbybit.occt.assembly.manager.buildAssemblyDocument({ structure });
    • 由结构构建装配体文档,或将结构应用于现有文档。

      给出 existingDocument 时,先丢弃 removals 中的标签,应用 partUpdates,然后添加新的零件和节点;两者都没有的结构会清空文档,除非 clearDocument 为 false。sourceDocuments 提供导入零件从中复制的文档。文档保留在内存中直到被删除。

      Parameters

      Returns Promise<TDocStdDocumentPointer>

      文档句柄,新建或已更新

      Error if assembly building fails

      const structure = await bitbybit.occt.assembly.manager.combineStructure({ parts: [part], nodes: [root, first], clearDocument: false });
      const doc = await bitbybit.occt.assembly.manager.buildAssemblyDocument({ structure });
      const glb = await bitbybit.occt.assembly.manager.exportDocumentToGltf({ document: doc, meshDeflection: 0.1, meshAngle: 0.5, internalVerticesMode: false, controlSurfaceDeflection: false, mergeFaces: false, forceUVExport: false, fileName: "assembly.glb", tryDownload: false });
    • 将 STEP 文件加载到新的装配体文档中,包含其零件、子装配体、名称、颜色和放置信息。

      stepData 是文本或二进制形式的文件;也接受 gzip 压缩的 STEP-Z。无法加载的文件会抛出错误。文件未命名的实例(如 SolidWorks 导出的那样)以其放置的零件命名,同一零件在其旁边重复出现时加上编号。

      Parameters

      Returns Promise<TDocStdDocumentPointer>

      文档句柄

      Error if STEP loading fails

      const doc = await bitbybit.occt.assembly.manager.loadStepToDoc({ stepData: stepText });
      const parts = await bitbybit.occt.assembly.query.getDocumentParts({ document: doc });

    export

    • 将装配体文档连同其层级结构、名称和颜色写为 STEP 文件,并返回文件的字节。

      authororganization 写入文件头;compress 改为写出 gzip 压缩的 STEP-Z。失败时抛出错误。

      Parameters

      Returns Promise<Uint8Array<ArrayBufferLike>>

      以字节表示的 STEP 文件

      const step = await bitbybit.occt.assembly.manager.exportDocumentToStep({ document: doc, fileName: "assembly.step", author: "Bitbybit user", organization: "Bitbybit", compress: false, tryDownload: false });
      
    • 将装配体文档三角化并写为二进制 glTF(GLB),层级结构、名称和颜色保留为 glTF 节点和材质。

      meshDeflectionmeshAngle 设置曲面三角化的精细程度;mergeFaces 将零件的各面合并成一个网格。失败时抛出错误。

      Parameters

      Returns Promise<Uint8Array<ArrayBufferLike>>

      以字节表示的 GLB 文件

      const glb = await bitbybit.occt.assembly.manager.exportDocumentToGltf({ document: doc, meshDeflection: 0.1, meshAngle: 0.5, internalVerticesMode: false, controlSurfaceDeflection: false, mergeFaces: false, forceUVExport: false, fileName: "assembly.glb", tryDownload: false });
      
    • exportDocumentToGltf 一样将装配体文档写为二进制 glTF(GLB),并用 Draco 压缩几何,这使文件小得多,代价是需要支持 Draco 的加载器。

      Draco 设置决定压缩级别以及位置、法线、纹理坐标和颜色各保留多少位。

      Parameters

      Returns Promise<Uint8Array<ArrayBufferLike>>

      以字节表示的 GLB 文件

      const options = new Bit.Inputs.OCCT.ExportDocumentToGltfWithDracoDto<Bit.Inputs.OCCT.TDocStdDocumentPointer>();
      options.document = doc;
      options.meshDeflection = 0.1;
      options.dracoCompressionLevel = 7;
      const glb = await bitbybit.occt.assembly.manager.exportDocumentToGltfWithDraco(options);

    lifecycle

    • 删除装配体文档并释放它占用的内存。

      buildAssemblyDocument 构建或用 loadStepToDoc 加载的文档在调用此方法之前一直保留在内存中,因此在读取其形状和导出内容之后删除它。

      Parameters

      Returns Promise<void>

      无;此后文档句柄不再有效

      const doc = await bitbybit.occt.assembly.manager.buildAssemblyDocument({ structure });
      const glb = await bitbybit.occt.assembly.manager.exportDocumentToGltf({ document: doc, meshDeflection: 0.1, meshAngle: 0.5, internalVerticesMode: false, controlSurfaceDeflection: false, mergeFaces: false, forceUVExport: false, fileName: "assembly.glb", tryDownload: false });
      await bitbybit.occt.assembly.manager.deleteDocument({ document: doc });

    modify

    • 用 0 到 1 的红、绿、蓝和透明度为文档的一个标签(零件、实例或装配体)着色。

      将文档导出为 STEP 或 glTF 时颜色会被保留。

      Parameters

      Returns Promise<boolean>

      当颜色已设置时为 true

      const done = await bitbybit.occt.assembly.manager.setDocLabelColor({ document: doc, label: "0:1:1:1", r: 1, g: 0, b: 0, a: 1 });
      
    • 重命名文档的一个标签,即零件、实例或装配体。

      Parameters

      Returns Promise<boolean>

      当名称已设置时为 true

      const done = await bitbybit.occt.assembly.manager.setDocLabelName({ document: doc, label: "0:1:1:1", name: "Left bracket" });