描述从另一个文档(通常是从 STEP 加载的)取来的零件,使其带有子装配体、名称和颜色的整棵标签树被复制到新装配体中。
sourceDocumentIndex 指向传给 buildAssemblyDocument 的 sourceDocuments 列表,sourceLabel 选取一棵子树而不是整个文档。实例节点像任何零件一样按 partId 放置它。
零件 id、源文档的索引,以及可选的源标签、名称和颜色
导入零件定义,可用于 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] });
为装配体结构描述一个零件:用于引用它的 id、其形状、名称和可选的颜色。
此时尚未构建任何东西;只有当包含它的结构经过 buildAssemblyDocument 时,零件才真正存在。实例节点按其 id 放置零件,次数不限。
零件 id、其形状、其名称和可选的颜色
零件定义,可用于 combineStructure
描述一个装配体节点,即在层级结构中将实例和其他装配体分组的容器。
parentId 指定它所在的装配体;省略则为根。可选的矩阵放置整个组。
节点 id、其名称、可选的父节点 id、可选的颜色和可选的位置矩阵
节点定义,可用于 combineStructure
描述一个实例节点,即零件的一次放置:按 partId 指定哪个零件、放在哪里以及在哪个装配体之下。
translation 移动它,rotation 以绕 X、Y 和 Z 的欧拉角(以度为单位)转动它,scale 均匀缩放它;matrix 可以替代这三者。同一个零件可以由许多实例放置。
节点 id、零件 id、名称、可选的父节点 id 和位置
节点定义,可用于 combineStructure
描述对文档中已有零件的更改:新形状、新名称或新颜色,或它们的任意组合,按零件的标签定位。
在 combineStructure 中将更新收集到 partUpdates 下,并将结构与现有文档一起传给 buildAssemblyDocument。
零件的标签以及可选的新形状、名称和颜色
更新定义,可用于 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 时,将结构应用于现有文档时保留其已有内容。
零件、节点,以及可选的移除项、零件更新、导入零件和清除标志
结构,可用于构建
由结构构建装配体文档,或将结构应用于现有文档。
给出 existingDocument 时,先丢弃 removals 中的标签,应用 partUpdates,然后添加新的零件和节点;两者都没有的结构会清空文档,除非 clearDocument 为 false。sourceDocuments 提供导入零件从中复制的文档。文档保留在内存中直到被删除。
结构、可选的要更新的文档和可选的源文档
文档句柄,新建或已更新
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 导出的那样)以其放置的零件命名,同一零件在其旁边重复出现时加上编号。
STEP 文件内容
文档句柄
将装配体文档连同其层级结构、名称和颜色写为 STEP 文件,并返回文件的字节。
author 和 organization 写入文件头;compress 改为写出 gzip 压缩的 STEP-Z。失败时抛出错误。
文档、文件名、头信息、压缩标志和下载选项
以字节表示的 STEP 文件
将装配体文档三角化并写为二进制 glTF(GLB),层级结构、名称和颜色保留为 glTF 节点和材质。
meshDeflection 和 meshAngle 设置曲面三角化的精细程度;mergeFaces 将零件的各面合并成一个网格。失败时抛出错误。
文档、网格化设置、导出标志、文件名和下载选项
以字节表示的 GLB 文件
像 exportDocumentToGltf 一样将装配体文档写为二进制 glTF(GLB),并用 Draco 压缩几何,这使文件小得多,代价是需要支持 Draco 的加载器。
Draco 设置决定压缩级别以及位置、法线、纹理坐标和颜色各保留多少位。
文档、网格化设置、导出标志和 Draco 设置
以字节表示的 GLB 文件
删除装配体文档并释放它占用的内存。
用 buildAssemblyDocument 构建或用 loadStepToDoc 加载的文档在调用此方法之前一直保留在内存中,因此在读取其形状和导出内容之后删除它。
要删除的文档
无;此后文档句柄不再有效
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 });
用 0 到 1 的红、绿、蓝和透明度为文档的一个标签(零件、实例或装配体)着色。
将文档导出为 STEP 或 glTF 时颜色会被保留。
文档、标签和四个颜色通道
当颜色已设置时为 true
重命名文档的一个标签,即零件、实例或装配体。
文档、标签和新名称
当名称已设置时为 true
构建和更改装配文档:逐个对象描述零件、装配节点和实例节点,将它们组合成结构,再由此构建文档;或者将 STEP 文件加载到文档中。然后为标签重新着色和重命名,更新或移除零件,并导出为 STEP 或 glTF。文档是一个内存句柄,在被删除之前一直有效,因此构建一次即可按需多次查询或导出。