InteractiveHtmlBom项目PCB数据结构解析

InteractiveHtmlBom项目PCB数据结构解析

InteractiveHtmlBom Interactive HTML BOM generation plugin for KiCad, EasyEDA, Eagle, Fusion360 and Allegro PCB designer InteractiveHtmlBom 项目地址: https://gitcode.com/gh_mirrors/in/InteractiveHtmlBom

项目概述

InteractiveHtmlBom是一个用于生成交互式HTML格式PCB物料清单(BOM)的工具。它通过解析PCB设计文件,提取关键信息并转换为结构化的JSON数据,最终生成可在浏览器中交互查看的BOM文档。本文将深入解析其核心数据结构,帮助开发者理解其工作原理。

坐标系与单位系统

在开始解析数据结构前,需要了解两个基础概念:

  1. 坐标系:采用左上角为原点(0,0),Y轴向下增长的正方向
  2. 角度系统:所有角度以度为单位,从正X轴向量开始顺时针测量
  3. 单位系统:虽然支持任意单位,但建议使用mm或mils以避免浏览器处理大数时的问题

核心数据结构:pcbdata

pcbdata是整个项目的核心数据结构,包含了PCB的所有关键信息:

1. 板框与边缘信息

"edges_bbox": {
  "minx": 1,    // 最小X坐标
  "miny": 2,    // 最小Y坐标
  "maxx": 100,  // 最大X坐标
  "maxy": 200   // 最大Y坐标
},
"edges": [drawing1, drawing2, ...]  // 所有边缘切割绘图

这部分定义了PCB的物理边界,用于确定默认的缩放和平移值,确保整个板子能完整显示在画布上。

2. 绘图层信息

"drawings": {
  "silkscreen": {  // 丝印层
    "F": [...],    // 正面
    "B": [...]     // 背面
  },
  "fabrication": { // 制造层
    "F": [...],
    "B": [...]
  }
}

包含所有丝印层和制造层的绘图元素,按正反面分组。

3. 封装(Footprint)信息

"footprints": [
  footprint1,
  footprint2,
  ...
]

每个元素对应一个元器件的封装信息,索引对应组件的数字ID。

4. 走线与区域信息(可选)

"tracks": {
  "F": [...],  // 正面走线
  "B": [...]   // 背面走线
},
"zones": {
  "F": [...],  // 正面区域
  "B": [...]   // 背面区域
}

包含PCB的走线(包括过孔)和铺铜区域信息。

5. 其他信息

  • nets: 网络名称列表
  • metadata: PCB元数据(标题、版本、公司等)
  • bom: 物料清单数据
  • font_data: 用于PCB上文字的字体数据

绘图元素(drawing)详解

绘图元素是PCB上各种图形的基础构建块,分为图形元素和文本两大类。

图形元素类型

  1. 线段(segment)

    {
      "type": "segment",
      "start": [x, y],
      "end": [x, y],
      "width": width
    }
    
  2. 矩形(rect)

    {
      "type": "rect",
      "start": [x, y],
      "end": [x, y],
      "width": width
    }
    
  3. 圆形(circle)

    {
      "type": "circle",
      "start": [x, y],
      "radius": radius,
      "filled": 0,  // 是否填充
      "width": width
    }
    
  4. 圆弧(arc)

    {
      "type": "arc",
      "width": width,
      "start": [x, y],  // 圆心
      "radius": radius,
      "startangle": angle1,
      "endangle": angle2
    }
    
  5. 贝塞尔曲线(curve)

    {
      "type": "curve",
      "start": [x, y],
      "end": [x, y],
      "cpa": [x, y],  // 控制点A
      "cpb": [x, y],  // 控制点B
      "width": width
    }
    
  6. 多边形(polygon)

    {
      "type": "polygon",
      "filled": 1,  // 默认填充
      "width": width,
      "pos": [x, y],
      "angle": angle,
      "polygons": [
        [[x1,y1], [x2,y2], ...],  // 外轮廓
        [...]  // 可能的内部孔洞
      ]
    }
    

文本元素

{
  "pos": [x, y],
  "text": "显示文本",
  "height": 文字高度,
  "width": 文字宽度,
  "justify": [水平对齐, 垂直对齐],  // -1:左/上 0:居中 1:右/下
  "thickness": 线宽,
  "attr": ["italic", "mirrored"],  // 属性:斜体、镜像
  "angle": 旋转角度,
  "ref": 1,  // 如果是参考标志符
  "val": 1   // 如果是元件值
}

封装(Footprint)结构

封装是PCB上元器件的基础表示,包含焊盘、绘图和元数据:

{
  "ref": "参考标志符",
  "center": [x, y],  // 中心位置
  "bbox": {  // 边界框信息
    "pos": [x, y],
    "angle": 旋转角度,
    "relpos": [x, y],  // 相对于中心的位置
    "size": [x, y]     // 尺寸
  },
  "pads": [  // 焊盘列表
    {
      "layers": ["F", "B"],  // 所在层
      "pos": [x, y],         // 位置
      "size": [x, y],        // 尺寸
      "angle": 角度,
      "pin1": 1,             // 是否是第一引脚
      "shape": "形状",       // rect/oval/circle等
      "type": "类型",        // th(通孔)/smd(表贴)
      "net": "网络名称"      // 连接的网络
    },
    ...
  ],
  "drawings": [  // 铜层绘图
    {
      "layer": "F"或"B",
      "drawing": drawing对象
    }
  ],
  "layer": "F"或"B"  // 封装所在层
}

BOM行结构

BOM行是参考集的列表,每个参考集是(参考名称, 封装ID)的元组数组:

[
  ["R1", 1],
  ["R2", 2],
  ...
]

配置(config)结构

配置决定了BOM的显示和行为:

{
  "dark_mode": 是否暗黑模式,
  "show_pads": 是否显示焊盘,
  "show_fabrication": 是否显示制造层,
  "show_silkscreen": 是否显示丝印层,
  "highlight_pin1": "引脚1高亮方式",  // none/all/selected
  "redraw_on_drag": 拖动时是否重绘,
  "board_rotation": 板子旋转角度,
  "bom_view": "BOM显示方式",  // bom-only/left-right/top-bottom
  "layer_view": "层显示方式",  // F/FB/B
  "extra_fields": ["额外字段1", ...]
}

实际应用建议

  1. 性能优化:对于复杂PCB,考虑简化非必要图形元素
  2. 单位选择:优先使用mm单位,避免浏览器数值处理问题
  3. 字体处理:预解析常用字符可提高文本渲染效率
  4. 交互设计:合理配置highlight_pin1等参数增强用户体验

通过深入理解这些数据结构,开发者可以更好地定制和扩展InteractiveHtmlBom的功能,满足特定项目的需求。

InteractiveHtmlBom Interactive HTML BOM generation plugin for KiCad, EasyEDA, Eagle, Fusion360 and Allegro PCB designer InteractiveHtmlBom 项目地址: https://gitcode.com/gh_mirrors/in/InteractiveHtmlBom

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

喻建涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值