You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Inventor中结构化BOM的缩进列表编号?

缩进式BOM层级编号实现方案

核心思路

用层级计数器列表跟踪各层级的当前编号,依托BOM行的正确父子顺序,通过调整计数器列表的长度和数值,生成符合缩进层级的编号(如1, 1.1, 1.2, 2, 2.1...),逻辑简单且效率较高。

具体步骤

  • 初始化空的计数器列表,用于存储每个层级的当前编号
  • 逐行处理BOM数据:
    1. 按|分割每行,提取当前缩进层级(转成整数)、组件路径、父级关联信息
    2. 根据当前层级调整计数器列表:
      • 若当前层级 > 计数器列表长度:进入子层级,向列表末尾添加1
      • 若当前层级 == 计数器列表长度:当前层级的编号加1
      • 若当前层级 < 计数器列表长度:截断列表到当前层级的长度,再将最后一个元素加1
    3. 将计数器列表用.拼接,得到当前行的层级编号
    4. 组合编号与组件信息,生成新的条目

代码示例(Python)

# 模拟Inventor导出的BOM数据,每行格式:缩进层级|组件路径|父级组件
bom_lines = [
    "1|MainAssembly.iam|",
    "2|FramePart.ipt|MainAssembly.iam",
    "2|SubAssembly.iam|MainAssembly.iam",
    "3|ScrewPart.ipt|SubAssembly.iam",
    "3|NutPart.ipt|SubAssembly.iam",
    "1|OtherAssembly.iam|",
    "2|CoverPart.ipt|OtherAssembly.iam"
]

level_counters = []
numbered_bom = []

for line in bom_lines:
    parts = line.split('|')
    current_level = int(parts[0].strip())
    component_path = parts[1].strip()
    parent_component = parts[2].strip()
    
    # 调整层级计数器
    if current_level > len(level_counters):
        level_counters.append(1)
    elif current_level == len(level_counters):
        level_counters[-1] += 1
    else:
        level_counters = level_counters[:current_level]
        level_counters[-1] += 1
    
    # 生成格式化编号
    item_number = '.'.join(map(str, level_counters))
    numbered_bom.append(f"{item_number} | {component_path} | {parent_component}")

# 输出结果
for item in numbered_bom:
    print(item)

方案说明

  • 利用列表动态调整匹配缩进层级,无需复杂的字典映射,逻辑清晰且执行高效
  • 因为Inventor生成的BOM行顺序已严格遵循父子结构,所以仅靠缩进层级即可完成编号,无需额外校验父级关联
  • 若需适配特殊场景(如异常层级跳转),可结合父级组件信息增加校验逻辑,当前方案已覆盖常规BOM编号需求

内容的提问来源于stack exchange,提问作者Check Master

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:41:04