当前位置: 首页 > news >正文

【agent辅助pcb routing coding学习】实践5 kicad类按类别理解

KiCad PCB 文件信息结构与类设计详解

概述

KiCad PCB文件包含了完整的电路板设计信息,本文档详细分析了PCB文件中9种主要信息类型在KiCad C++代码中的类表示和数据结构设计。

1. 网络定义 (Network Definitions)

核心类:NETINFO_ITEM

位置:pcbnew/netinfo.h

类定义:

classNETINFO_ITEM:publicBOARD_ITEM{private:intm_netCode;// 网络代码wxString m_netname;// 完整网络名称wxString m_shortNetname;// 简短网络名称wxString m_displayNetname;// 显示网络名称std::shared_ptr<NETCLASS>m_netClass;// 网络类引用boolm_isCurrent;// 网络活跃状态BOARD*m_parent;// 父级电路板};

关键特性:

  • 支持层次化网络名称(如/sheet/subsheet/vout
  • 自动生成简短网络名称用于显示
  • 通过m_netClass关联网络类参数

容器类:NETINFO_LIST

位置:pcbnew/netinfo.h

数据结构:

classNETINFO_LIST{private:BOARD*m_parent;// 父级电路板NETNAMES_MAP m_netNames;// 按名称索引NETCODES_MAP m_netCodes;// 按代码索引intm_newNetCode;// 网络代码分配器mutableboolm_DisplayNetnamesDirty;// 显示名称脏标志};

核心功能:

  • 双重索引: 同时按名称和代码索引,提高查找效率
  • 网络管理: 添加、删除、查找网络
  • 显示优化: 缓存显示网络名称,按需更新

网络连接基类:BOARD_CONNECTED_ITEM

所有需要网络连接的类(PAD、TRACK、VIA、ZONE等)都继承此类,包含:

  • NETINFO_ITEM* m_netinfo- 网络信息指针
  • int m_netCode- 网络代码
  • 网络设置和获取方法

2. 封装实例 (Footprint Instances)

核心类:FOOTPRINT

位置:pcbnew/footprint.h

类继承:FOOTPRINT : public BOARD_ITEM_CONTAINER, public EMBEDDED_FILES, public LIB_TREE_ITEM

核心成员变量:

classFOOTPRINT{private:// 定位和方向VECTOR2I m_pos;// 封装位置EDA_ANGLE m_orient;// 旋转角度// 标识信息LIB_ID m_fpid;// 库标识符wxString m_libDescription;// 库描述wxString m_keywords;// 搜索关键词KIID m_link;// 逻辑链接KIID_PATH m_path;// 符号路径wxString m_sheetname;// 图纸名称wxString m_sheetfile;// 图纸文件// 属性和状态intm_attributes;// 属性标志位intm_fpStatus;// 自动布局状态intm_arflag;// 布线标志timestamp_t m_lastEditTime;// 最后编辑时间// 容器成员std::deque<PCB_FIELD*>m_fields;// 字段std::deque<BOARD_ITEM*>m_drawings;// 绘图项std::deque<PAD*>m_pads;// 焊盘std::vector<ZONE*>m_zones;// 区域std::deque<PCB_GROUP*>m_groups;// 组std::deque<PCB_POINT*>m_points;// 点// 3D模型std::vector<FP_3DMODEL>m_3D_Drawings;// 3D模型// 变体管理CASE_INSENSITIVE_MAP<FOOTPRINT_VARIANT>m_variants;};

3D模型管理:

classFP_3DMODEL{public:VECTOR3D m_Scale;// 缩放因子VECTOR3D m_Rotation;// 旋转角度VECTOR3D m_Offset;// 偏移量doublem_Opacity;// 不透明度wxString m_Filename;// 模型文件名boolm_Show;// 显示标志};

封装变体:

classFOOTPRINT_VARIANT{public:wxString m_name;// 变体名称boolm_dnp;// 不装配标志boolm_excludedFromBOM;// 排出BOM标志boolm_excludedFromPosFiles;// 排出位置文件标志std::map<wxString,wxString>m_fields;// 字段值覆盖};

3. 焊盘 (Pads)

核心类:PAD

位置:pcbnew/pad.h

类继承:PAD : public BOARD_CONNECTED_ITEM

核心成员变量:

classPAD{private:// 基本属性wxString m_number;// 焊盘编号wxString m_pinFunction;// 引脚功能wxString m_pinType;// 引脚电气类型VECTOR2I m_pos;// 焊盘位置// 几何属性PADSTACK m_padStack;// 焊盘堆栈PAD_ATTRIB m_attribute;// 焊盘属性PAD_PROP m_property;// 制造属性// 电气参数intm_lengthPadToDie;// 焊盘到芯片长度intm_delayPadToDie;// 传播延迟intm_subRatsnest;// 子网编号// 缓存mutablestd::mutex m_dataMutex;mutableBOX2I m_effectiveBoundingBox;mutableLAYER_SHAPE_MAP m_effectiveShapes;mutableLAYER_POLYGON_MAP m_effectivePolygons;};

焊盘堆栈:PADSTACK

位置:pcbnew/padstack.h

核心结构:

classPADSTACK{public:enumclassMODE{NORMAL,// 所有层形状相同FRONT_INNER_BACK,// 最多三种形状CUSTOM// 自定义层形状};structSHAPE_PROPS{PAD_SHAPE shape;// 形状类型VECTOR2I size;// 尺寸VECTOR2I offset;// 偏移doubleround_rect_radius_ratio;doublechamfered_rect_ratio;VECTOR2I trapezoid_delta_size;};structCOPPER_LAYER_PROPS{SHAPE_PROPS shape;std::optional<ZONE_CONNECTION>zone_connection;std::optional<int>thermal_spoke_width;std::optional<int>thermal_gap;std::optional<int>clearance;};structDRILL_PROPS{VECTOR2I size;// 钻孔尺寸PAD_DRILL_SHAPE shape;// 钻孔形状PCB_LAYER_ID start;// 起始层PCB_LAYER_ID end;// 结束层std::optional<bool>is_filled;std::optional<bool>is_capped;};};

焊盘形状枚举

enumclassPAD_SHAPE{CIRCLE,// 圆形RECTANGLE,// 矩形OVAL,// 椭圆形TRAPEZOID,// 梯形ROUNDRECT,// 圆角矩形CHAMFERED_RECT,// 倒角矩形CUSTOM// 自定义形状};enumclassPAD_ATTRIB{PTH,// 镀通孔SMD,// 表面贴装CONN,// 连接器NPTH// 非镀通孔};

4. 轨道段 (Track Segments)

核心类:PCB_TRACK

位置:pcbnew/pcb_track.h

类继承:PCB_TRACK : public BOARD_CONNECTED_ITEM

核心成员变量:

classPCB_TRACK{protected:VECTOR2I m_Start;// 起点VECTOR2I m_End;// 终点intm_width;// 宽度boolm_hasSolderMask;// 阻焊层标志std::optional<int>m_solderMaskMargin;// 阻焊边距};

关键方法:

  • GetLength(): 计算轨道长度
  • GetDelay(): 计算时间延迟
  • HitTest(): 碰撞检测
  • GetEffectiveShape(): 获取几何形状

弧形轨道:PCB_ARC

类继承:PCB_ARC : public PCB_TRACK

特殊成员:

classPCB_ARC:publicPCB_TRACK{private:VECTOR2I m_Mid;// 弧形中点};

几何计算:

  • 三点定义:起点、中点、终点
  • GetRadius(): 计算半径
  • GetAngle(): 获取弧形角度
  • IsCCW(): 判断是否为逆时针弧形

5. 过孔 (Vias)

核心类:PCB_VIA

位置:pcbnew/pcb_track.h

类继承:PCB_VIA : public PCB_TRACK

特殊成员变量:

classPCB_VIA:publicPCB_TRACK{private:VIATYPE m_viaType;// 过孔类型PADSTACK m_padStack;// 焊盘堆栈boolm_isFree;// 自由过孔标志};

过孔类型枚举

enumclassVIATYPE:int{THROUGH=4,// 通孔 - 贯穿所有层BURIED=3,// 埋孔 - 内部层连接BLIND=2,// 盲孔 - 表层到内层MICROVIA=1,// 微过孔 - 高密度板用NOT_DEFINED=0// 未定义};

层对管理:

  • SetLayerPair(): 设置层对
  • TopLayer()/BottomLayer(): 获取顶层/底层
  • HasValidLayerPair(): 验证层对有效性

6. 填充区域 (Fill Zones)

核心类:ZONE

位置:pcbnew/zone.h

类继承:ZONE : public BOARD_CONNECTED_ITEM

核心成员变量:

classZONE{protected:// 几何属性SHAPE_POLY_SET*m_Poly;// 区域轮廓intm_cornerSmoothingType;// 角点平滑类型unsignedintm_cornerRadius;// 圆角半径// 层和优先级LSET m_layerSet;// 层集合unsignedm_priority;// 优先级// 网络连接ZONE_CONNECTION m_padConnection;// 焊盘连接模式intm_thermalReliefGap;// 热焊盘间隙intm_thermalReliefSpokeWidth;// 热焊盘辐条宽度// 特殊功能boolm_isRuleArea;// 规则区域标志TEARDROP_TYPE m_teardropType;// 泪滴类型wxString m_zoneName;// 区域名称// 缓存mutablestd::mutex m_layerSetMutex;std::map<PCB_LAYER_ID,std::shared_ptr<SHAPE_POLY_SET>>m_FilledPolysList;};

区域连接枚举

enumclassZONE_CONNECTION{INHERITED=-1,// 继承默认设置NONE,// 不覆盖焊盘THERMAL,// 热焊盘连接FULL,// 完全覆盖焊盘THT_THERMAL// 仅THT焊盘热焊盘};

区域填充器:ZONE_FILLER

核心功能:

classZONE_FILLER{private:boolfillCopperZone(constZONE*aZone,PCB_LAYER_ID aLayer,SHAPE_POLY_SET&aFillPolys);voidconnect_nearby_polys(SHAPE_POLY_SET&aPolys,doubleaDistance);voidbuildThermalSpokes(constZONE*aZone,PCB_LAYER_ID aLayer,conststd::vector<BOARD_ITEM*>&aPadsList,std::deque<SHAPE_LINE_CHAIN>&aSpokes);};

填充流程:

  1. 轮廓平滑处理
  2. 清除区域计算
  3. 热焊盘连接生成
  4. 最终填充多边形生成

7. 层定义 (Layer Definitions)

层管理系统

位置:include/layer_ids.h

层分类:

// 铜层 (最多32层)PCB_LAYER_ID F_Cu;// 顶层PCB_LAYER_ID In1_Cu;// 内层1// ... In2_Cu 到 In30_CuPCB_LAYER_ID B_Cu;// 底层// 技术层PCB_LAYER_ID F_Mask,B_Mask;// 阻焊层PCB_LAYER_ID F_SilkS,B_SilkS;// 丝印层PCB_LAYER_ID F_Paste,B_Paste;// 锡膏层// 用户层PCB_LAYER_ID Dwgs_User;// 绘图层PCB_LAYER_ID Cmts_User;// 注释层PCB_LAYER_ID Edge_Cuts;// 边缘层PCB_LAYER_ID User_1 到 User_45;// 用户定义层

层集合:LSET

位置:include/lset.h

类继承:LSET : public BASE_SET

核心功能:

classLSET{// 预设掩码staticLSETAllCuMask(intaCuLayerCount);staticLSETExternalCuMask();staticLSETFrontTechMask();staticLSETBackTechMask();// 层序列生成LSEQCuStack();// 铜层堆叠序列LSEQUIOrder();// UI显示序列};

特性:

  • 基于位集合的高效实现
  • 支持快速包含检查
  • 提供多种预设掩码
  • 支持层序列遍历

层属性管理

  • 固定名称: 用于文件格式兼容性
  • 显示名称: 支持本地化
  • 可见性控制: 通过GAL层系统
  • 颜色管理: 每层独立颜色设置

8. 设置和层叠 (Settings and Stackup)

设计规则:BOARD_DESIGN_SETTINGS

位置:include/board_design_settings.h

核心参数:

classBOARD_DESIGN_SETTINGS{private:// 走线和过孔尺寸std::vector<int>m_TrackWidthList;std::vector<VIA_DIMENSION>m_ViasDimensionsList;std::vector<DIFF_PAIR_DIMENSION>m_DiffPairDimensionsList;// 设计规则intm_MinClearance;// 最小间距intm_TrackMinWidth;// 最小走线宽度intm_ViasMinSize;// 最小过孔尺寸intm_CopperEdgeClearance;// 铜到边缘间距intm_SolderMaskExpansion;// 阻焊扩展// 层管理intm_copperLayerCount;// 铜层数量LSET m_enabledLayers;// 启用层掩码BOARD_STACKUP m_stackup;// 层叠管理};

层叠管理:BOARD_STACKUP

位置:pcbnew/board_stackup_manager/board_stackup.h

层叠项目类型:

enumBOARD_STACKUP_ITEM_TYPE{BS_ITEM_TYPE_COPPER,// 铜层BS_ITEM_TYPE_DIELECTRIC,// 介质层BS_ITEM_TYPE_SOLDERPASTE,// 锡膏层BS_ITEM_TYPE_SOLDERMASK,// 阻焊层BS_ITEM_TYPE_SILKSCREEN,// 丝印层};

介质层参数:

classDIELECTRIC_PRMS{wxString m_Material;// 材料类型intm_Thickness;// 厚度doublem_EpsilonR;// 介电常数doublem_LossTangent;// 损耗tangentwxString m_Color;// 颜色};

绘图参数:PCB_PLOT_PARAMS

位置:pcbnew/pcb_plot_params.h

主要设置:

classPCB_PLOT_PARAMS{private:PLOT_FORMAT m_format;// 绘图格式LSET m_layerSelection;// 层选择DRILL_MARKS m_drillMarks;// 钻孔标记// Gerber特定设置boolm_useGerberX2format;boolm_includeGerberNetlistInfo;intm_gerberPrecision;};

网络类:NETCLASS

位置:include/netclass.h

网络类参数:

classNETCLASS{private:std::optional<int>m_Clearance;// 间距std::optional<int>m_TrackWidth;// 走线宽度std::optional<int>m_ViaDia;// 过孔直径std::optional<int>m_ViaDrill;// 过孔钻孔std::optional<int>m_diffPairWidth;// 差分对宽度std::optional<int>m_diffPairGap;// 差分对间距COLOR4D m_pcbColor;// PCB颜色};

9. 图形对象 (Graphical Objects)

图形形状:PCB_SHAPE

位置:pcbnew/pcb_shape.h

类继承:PCB_SHAPE : public BOARD_CONNECTED_ITEM, public EDA_SHAPE

支持的形状类型:

enumSHAPE_T{SEGMENT,// 线段RECTANGLE,// 矩形ARC,// 弧形CIRCLE,// 圆形POLY,// 多边形BEZIER// 贝塞尔曲线};

核心属性:

classPCB_SHAPE{private:SHAPE_T m_shape;// 形状类型STROKE_PARAMS m_stroke;// 描边参数FILL_T m_fill;// 填充模式COLOR4D m_fillColor;// 填充颜色VECTOR2I m_start,m_end;// 起点和终点SHAPE_POLY_SET m_poly;// 多边形形状};

文本对象:PCB_TEXT

位置:pcbnew/pcb_text.h

类继承:PCB_TEXT : public BOARD_ITEM, public EDA_TEXT

核心功能:

  • 文本属性:字体、大小、颜色、样式
  • 位置变换:位置、旋转、直立保持
  • 变量处理:GetShownText()处理文本变量
  • 多边形转换:TransformTextToPolySet()

尺寸标注:PCB_DIMENSION_BASE

位置:pcbnew/pcb_dimension.h

支持的标注类型:

  • PCB_DIM_ALIGNED- 对齐尺寸
  • PCB_DIM_ORTHOGONAL- 正交尺寸
  • PCB_DIM_RADIAL- 径向尺寸
  • PCB_DIM_LEADER- 引导线尺寸
  • PCB_DIM_CENTER- 中心标记

核心属性:

classPCB_DIMENSION_BASE:publicPCB_TEXT{private:DIM_UNITS_FORMAT m_unitsFormat;// 单位格式DIM_PRECISION m_precision;// 精度DIM_TEXT_POSITION m_textPosition;// 文本位置intm_lineThickness;// 线条粗细intm_arrowLength;// 箭头长度};

其他图形对象

PCB_TARGET(目标标记)
classPCB_TARGET{private:intm_shape;// 形状(0=+, 1=X)intm_size;// 大小intm_lineWidth;// 线宽VECTOR2I m_pos;// 位置};
PCB_MARKER(错误标记)
classPCB_MARKER:publicBOARD_ITEM,publicMARKER_BASE{private:std::vector<SHAPE*>m_pathShapes;// 路径形状};
PCB_TEXTBOX(文本框)
classPCB_TEXTBOX:publicPCB_SHAPE,publicEDA_TEXT{private:intm_marginLeft,m_marginTop;// 边距intm_marginRight,m_marginBottom;};

数据结构设计特点

1. 继承层次设计

EDA_ITEM (基础类) ↓ BOARD_ITEM (PCB项目基类) ↓ BOARD_CONNECTED_ITEM (有网络连接的项目) ↓ 具体项目类 (PAD, TRACK, VIA, ZONE等)

2. 容器模式

  • BOARD: 顶层容器,包含所有PCB项目
  • FOOTPRINT: 封装容器,包含焊盘和图形
  • BOARD_ITEM_CONTAINER: 容器接口类

3. 缓存优化

  • 几何形状缓存:m_effectiveShapes
  • 边界框缓存:m_cachedBoundingBox
  • 多边形缓存:m_FilledPolysList
  • 文本缓存:m_knockout_cache

4. 智能指针使用

  • std::shared_ptr<NETCLASS>: 网络类管理
  • std::shared_ptr<SHAPE_POLY_SET>: 多边形共享
  • std::optional<T>: 可选属性管理

5. 线程安全

  • std::mutex: 互斥锁保护
  • mutable std::mutex: 缓存保护
  • 原子操作和锁分离

6. 现代C++特性

  • 强类型枚举:enum class
  • 右值引用和移动语义
  • 模板和泛型编程
  • RAII资源管理

性能优化策略

1. 内存管理

  • 对象池复用
  • 延迟加载
  • 智能指针生命周期管理

2. 渲染优化

  • LOD(细节层次)控制
  • 视口裁剪
  • 批量渲染

3. 计算缓存

  • 几何计算结果缓存
  • 脏标志机制
  • 按需计算

4. 并发处理

  • 多线程区域填充
  • 读写锁分离
  • 无锁数据结构

扩展性设计

1. 插件系统

  • 外部插件接口
  • 自定义对象支持
  • 脚本扩展能力

2. 自定义层

  • 用户定义层支持
  • 层属性自定义
  • 层显示配置

3. 网络类扩展

  • 模式匹配分配
  • 聚合网络类
  • 参数继承机制

4. 文本变量系统

  • 动态文本变量
  • 表式计算
  • 条件显示

总结

KiCad的PCB文件信息结构设计体现了现代EDA软件的复杂性和专业性:

  1. 完整性: 涵盖了PCB设计的所有方面,从网络定义到图形标注
  2. 层次性: 清晰的继承层次和容器关系
  3. 性能: 大量缓存和优化机制确保高效操作
  4. 扩展性: 支持自定义和扩展,适应不同需求
  5. 现代化: 采用现代C++特性和设计模式

这种设计使KiCad能够处理从简单的双面板到复杂的多层高速板设计的各种需求,同时保持良好的性能和用户体验。

http://www.jsqmd.com/news/486375/

相关文章:

  • 随诊包厂家哪家好:乐普云智以AI赋能基层医疗新生态 - 品牌2026
  • Claude 免费交互式图表功能重磅上线 百余家 SaaS 企业迎行业变局
  • OpenClaw安全漏洞深度剖析:间接提示注入与数据泄露防御实战
  • python学习笔记——基础变量类型知识
  • 谁在守护黄金四分钟?2026年高口碑、高可靠AED厂家推荐 - 品牌2026
  • 2026 年 3 月 15 日刷题
  • 便捷省心!手机数码租赁小程序前端功能玩法详解
  • 接收单元之变:SPAD-SoC如何重构激光雷达的“视网膜”
  • 2026贵阳装修公司专业实力TOP5名单出炉,权威数据揭示行业格局 - 精选优质企业推荐榜
  • 基于最小二乘支持向量机(LSSVM)的多输出数据回归预测
  • 蛋白质表达技术要点分析:从载体构建到系统选择的全面指南
  • 在线问诊系统, 在线问诊平台, 互联网医院,2026java毕业设计项目, 简历项目, 个人学习项目
  • 从零起步学习MySQL 第十二章:MySQL分页性能如何优化?
  • 2026多平台后台模板,包括:Html、Laravel、react、VUE、dotnet、angular
  • CUDA编程学习(四)内存拷贝
  • 基于FPGA的AM调制解调:包含ModelSim仿真、Quartus 18.1与Vivado ...
  • RFID读写器怎么选更适合企业现场?
  • 国内知名半导体核心部件论坛盘点,2026从业者必关注(附核心亮点) - 品牌2025
  • 2026贵阳室内装修数据出炉:本地口碑TOP5品牌权威盘点 - 精选优质企业推荐榜
  • 文件包含PHP_INCLUDE_TO_SHELL_CHAR_DICT工具详解
  • 2026贵阳装修公司5强名单公布,本地市场格局数据出炉 - 精选优质企业推荐榜
  • 4节点光储直流微网:多目标控制下的光伏MPPT与储能双向DCDC的二次优化与多智能体一致性研究
  • 2026贵阳室内设计5强名单出炉,权威机构发布行业现状 - 精选优质企业推荐榜
  • 2026年三防布批发TOP10企业揭晓,谁将领跑行业?
  • 虚拟机(Red Hat)部署后的优化
  • 2026高二生免高考留学新加坡全指南:避开内卷,直通世界名校 - 品牌2026
  • 超绝openclaw技能skill,herHug让AI更懂你
  • 计算机毕业设计 java 虚拟股票交易系统 Java+SpringBoot 模拟股票交易平台 Web 版股市虚拟交易实训系统
  • 【云藏山鹰代数信息系统】琴语言基础100讲之琴语言解析器梅开二度设计
  • 技术裸奔时代:软件测试行业的社交货币陷阱与专业重构