ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Allegro中Line与Shape互转全攻略:从Z-Copy到避坑指南

Allegro中Line与Shape互转全攻略:从Z-Copy到避坑指南 1. 为什么说互转是PCB设计里绕不开的“保命操作”在说具体命令之前先聊聊我自己的经历。刚接触Allegro那会儿有一次要做一块电源板结构那边发来的DXF板框文件里面是一条条的Line线段而Allegro里做板框、做Route Keepin、做禁布区用的都是Shape。我当时不知道有互转这个说法傻乎乎地拿着光标沿着线段边界一点点描花了将近一个小时才描出一个勉强闭合的边框还因为没有完全闭合后面Z-Copy各种报错。后来被旁边一位老工程师看到他一句话点醒我“你先用Compose Shape把线转成Shape或者直接用Z-Copy两分钟的事。” 那一刻我才意识到Line和Shape互转这件小事是真的能决定一块板子设计效率的关键操作。再看看现在热词里提到的“Allegro铜皮只有轮廓”、“修改板框”、“导入DXF”这些高频问题本质上都绕不开Line与Shape的相互转换。所以这篇文章我就把这块内容系统拆一遍包括两条主路线Shape → Line把铜皮边界、禁布区边界变成可编辑的线条Line → Shape把板框线、结构线、异形走线路径变成真正的铜皮或约束区顺便把我这些年用下来踩过的坑、排查过的奇怪问题一并整理出来。每个操作步骤背后是什么原理、为什么必须这样设置我都会尽量讲透而不是只丢一个菜单路径给你。2. Shape转Line操作路径、参数含义和底层原理2.1 菜单命令与基本操作Allegro从16.x到17.x、甚至最新版本Shape转Line的入口基本集中在同一个位置菜单栏的Shape → Convert Shape to Lines。点击之后命令行会提示你选择一个Shape对象。这个对象可以是动态铜皮、静态铜皮也可以是Route Keepin、Package Keepin这类约束形状。选中后右键Done系统会弹出转换选项对话框。不同版本对话框里的叫法略有不同但核心参数基本一致。我习惯的操作顺序是先选Shape、再在对话框里确认输出层和转换类型。举个例子假如我在TOP层有一块动态铜皮想把它变成单独的闭合线条输出到Board Geometry的Silkscreen层用来做丝印边框标注我会执行Shape → Convert Shape to Lines点击Top层那块铜皮右键Done在弹出的选项中选择输出层为 Board Geometry / Silkscreen_Top勾选 Delete original shape删除原Shape这样不会在板子上留两份同样边界的数据确认后执行检查线条是否闭合、线宽是否合适。这个功能最常见的用途是把铜皮边界提取出来做工艺边、做外形标注或者把原本整块铜皮的轮廓输出给结构工程师做干涉检查。还有一个高频场景是出光绘时有些工厂要求特定标记必须用Line而不是Shape这时互转就能快速搞定。2.2 转换面板里的关键选项一个都别瞎选这个对话框里的参数看似简单实际上每一项都可能影响最终结果。对话框中的常见选项可以对照着看参数项作用我的建议Layer / Subclass指定转换后线条所在的层务必先想清楚线条用途再选层Delete original shape是否删除原Shape建议勾选避免出现相同边界的两份对象Line width转换后线条的宽度按实际出图需求设置别用默认0Convert to Lines or Composing是否将多段线段合并为闭合折线建议选择合并为闭合线便于后续操作这里特别说一下Line width。Allegro在把Shape转换成Line时如果不在设计里给线条指定宽度转换出来的Line会是一段宽度为0的路径。屏幕上看可能没问题但出光绘或者后续转DXF时就会遇到“图形太细看不清”甚至“工厂那边说线没了”的问题。我自己的习惯是如果线条只是用来做标注或辅助线宽度设成0.1mm到0.2mm就够了如果是要用来做金属加工或外形切割路径那就要跟板厂确认线宽通常设置在0.2mm以上比较稳。2.3 为什么转完只剩“空壳”Shape与Line的本质区别很多新手在转换后容易疑惑明明是一块填实的铜皮怎么转换完变成一条细线了这里需要理解Allegro对Shape和Line的底层定义。Shape在Allegro里是一个具备边界和填充属性的闭合区域对象它内部的填充信息比如填充网络、填充间距、热焊盘连接方式都跟着Shape走。当执行Convert Shape to Lines时Allegro只是把Shape的“边界”提取出来转换结果是一个闭合的多段线原来Shape内部的填充信息、网络属性、挖空区域void统统不会保留。所以这个命令天然就不适合用来“复制一块铜皮出来”更适合用来提取边界轮廓。如果你想保留铜皮的形状信息同时又想得到一组可独立编辑的线条更稳妥的做法是把铜皮复制一份、然后把副本转成线条留着原件继续用。复制快捷键是CtrlC/CtrlV或者用Duplicate命令这样原件和转换结果互不影响。3. Line转ShapeZ-Copy命令才是真正的“万能钥匙”3.1 典型场景板框线、结构线、异形走线路径反过来把Line转成Shape我在实际项目里用得比Shape转Line还要多。最典型的是这几个场景从DXF导入的结构外形线闭合后转成板框Shape用Route Keepin时先有板框Line再用Z-Copy生成禁止布线区画异形焊盘时先用Line勾出外形路径再转成Shape铜皮用走线路径生成局部铜皮比如某些大电流区域需要根据走线形状铺铜。这些场景里最核心的命令就是Edit → Z-Copy。Z-Copy的官方定义是把已有的Line、Shape、Symbol等对象按一定偏移量“复制”生成一个Shape对象。它的适用范围非常广能处理的对象类型包括Line、Arc、Circle、Polyline、甚至Shape本身。3.2 参数详解线宽和偏移方向决定边界Z-Copy的面板我用了很多年每次用都会提醒自己检查三个核心参数Copy to Class/Subclass、Offset Type、Line width。第一个参数决定你要把新的Shape放到哪一层、哪个类。比如从板框生成Route Keepin就选Route Keepin / All从板框生成Package Keepin就选Package Keepin / All从结构线生成板框Shape就选Board Geometry / Outline。第二个参数是偏移方向Offset Type可以选择Center、Inside或Outside。这个偏移方向是相对于原始线的中心线来算的Center方式生成的Shape边界会落在原始线条的中心线上适合“严格按线框位置生成”的场景Inside方式生成的Shape边界会落在原始线条的内侧适合做内缩禁布区比如板框内生成Shape时留出走线空间Outside方式生成的Shape边界会落在原始线条的外侧适合做外扩的包络区域。第三个参数就是Line width很容易被忽略但影响很大。Z-Copy在生成Shape时会把原始线条的宽度也考虑进去。如果你的原始线条宽度是0那么Shape边界就严格按照线条的几何位置来如果线条本身设置了宽度比如一条10mil宽的Line那么生成的Shape边界会向外各偏移5mil也就是半个线宽再加上你设置的偏移值。这个细节为什么重要因为很多人从DXF导入的结构线默认是0宽度但有些同事喜欢在板框线上设置宽度这样Z-Copy生成Route Keepin时如果没注意Keepin会比预想的大出一圈或者小一圈等到布局布线时才发现在板边附近老是报DRC就是这里埋下的坑。3.3 从DXF导入的Line如何顺利转成Shape再说一个高频痛点DXF导入的线经常是“碎片化”的。结构工程师导出的外形可能每个边就是一条独立线段甚至在圆弧处被拆成了几十个小段。如果直接用Z-CopyAllegro会提示无法生成Shape根本原因就是对象不是闭合的。所以从DXF导入后先别急着转养成一套固定流程导入DXF后把所有线放到一个临时层比如Board Geometry / DXF_Temp检查线条是否闭合用Display → Element去查询线条端点或者直接用Visibility面板把层打开肉眼观察断口如果有断口用Edit → Delete删掉多余短线用Edit → Move/Copy或Edit → Vertex调整端点位置确保首尾相接用合并命令把相邻线段变成多段线让整个外形是一个连续对象确认闭合后再用Z-Copy生成Shape。还有一个更省事的做法直接用Shape → Compose Shape。这个命令把封闭区域的Line/Arc/Circle组合成一个Shape它比Z-Copy更能容忍线条之间的微小间隙。我实测过当线端间隙小于设定的snap距离时Compose Shape能自动把缝隙补上。所以在DXF导入的场景下Compose Shape往往是更优选择。4. 常见问题排查我踩过的坑和解决办法4.1 铜皮只有轮廓没有填充先别急着重画热词里就有“Allegro铜皮只有轮廓”这个我来说说。它和Shape转Line、以及动态铜皮的状态都有关系。一个Shape在屏幕上显示成空壳通常有三个原因原因一Shape处于Unfilled状态。执行Display → Status或者按快捷键看看有没有显示Shape填充不完整的提示。动态Shape在移动、修改边界之后有时候填充不会实时更新需要执行Shape → Update Shapes或按Update快捷键让它重新填充。原因二颜色开关没打开。有些层的填充层和轮廓层是分开显示的如果只在颜色面板里勾了轮廓层把填充层关掉了看起来自然就是空壳。去Color/Visibility面板里检查对应层级的Fill和Silver是否打开。原因三Shape本身已经变成了Line。之前转换操作后原Shape被删除只剩下一圈线框如果线宽又很小屏幕上看着就像只留了个轮廓。排查顺序我建议是先查颜色设置最快的再查Shape填充状态动态Shape需要Update最后确认对象类型是不是已经被转换成了Line。三步走完绝大部分“空壳”问题都能找到答案。4.2 Z-Copy出来的Shape整体偏移或尺寸不对这个问题的根源我在前面也提到了基本上离不开两点一是Offset Type选错了方向二是Line width影响了边界计算。举个真实的例子有一次我用Z-Copy做板框内缩5mm的Route Keepin。板框是用0宽度的Line画的Offset Type我选了InsideOffset距离填了5mm。结果生成出来的Shape歪歪扭扭某些位置离板框比预期远某些位置又比预期近。查了一会儿才发现那条板框线并不是一条连续的多段线而是由好几段不同方向的Line组成的其中有一段圆弧线本身的宽度是0.3mm。Allegro在处理有宽度的圆弧时Z-Copy的边界计算会以圆弧的中心线为基准再叠加半个线宽所以那一段侧边就比其他段多退出了0.15mm。后来我的做法是在做Z-Copy之前统一把所有参与转换的线设置为0宽度这样结果完全可控。如果只是为了显示好看可以在转换完成后再改线宽Shape的边界不受影响改的只是线条本身的视觉效果。4.3 线条明明闭合了怎么还是生成不了Shape“Cant create shape”这类提示我碰到过好几次每次都让人头大。线条看起来首尾相连但Allegro就是不认。这里要区分Allegro的“视觉闭合”和“几何闭合”。视觉上两条线端点重叠不代表它们在数据库里的坐标完全一致。可能是0.0001mm级别的微小间隙或者存在重叠的重复线段。排查技巧用Display → Element查询线段端点坐标肉眼对比两段线的End Coord和下一段的Start Coord是否完全一致用Setup → Design Parameter Editor把全局线宽改小然后把视图放得很大沿着整条线走一遍看有没有颜色变浅的交叠区域善用Edit → Delete中的“删除重复对象”筛选把重叠线段清理掉还不行的话用Edit → Change把线宽全部改成0有时线段叠加重叠是因为线宽渲染造成的“看起来重叠”。一旦找出问题线段要么重新捕捉端点要么直接删除后重新画一小段连接再执行Z-Copy或Compose Shape就能成功了。4.4 转换后到了错误的层怎么批量挪回来我在Shape转Line或者Z-Copy时经常因为面板上的目标层选错导致生成的Line或Shape跑到了别的层。比如想把Route Keepin生成到All楼层结果选成了TOP层这样整块板的禁布区域只在顶层生效底层照样自由布线后期查DRC时才反应过来。解决办法有两种如果是少量对象直接选中后用Edit → Change修改Class和Subclass如果是大量对象用Tools → Quick Report先确认哪些对象在当前层再用Edit → Group批量选中统一Change。这里还有一个喝酒后容易犯错的点Edit → Change修改层时选项栏里的“Update symbol instances”不要勾选否则可能会把所有引用该封装的实例全部改掉到时候板子上几百个封装层信息全乱了就等着哭吧。4.5 转换后出光绘线条以“0宽度”输出Shape转Line后如果线宽是0出光绘时可能只在Gerber里留下一段极细或者不显示的图形导致板厂那边出现资料缺失或短路风险。这类问题在有铜皮边界走线输出的场景下特别危险因为0宽度的线条在光绘解释器里可能被当作没有实际铜箔加工出来就是断开的。所以每次转完线我都要求自己执行一遍Display → Element去检查线宽属性。如果你的项目里线条就是用来做参考线的出光绘时也可以单独设置某个层的线条统一加粗。在Artwork Control Form里有个“Line Width”的全局设置选项可以把所有0宽度线条按统一宽度输出。但这个方法只影响输出不能替代设计文件里实际的线宽所以保险起见还是回到设计里把线宽改掉再出光绘。5. 把互转变成“肌肉记忆”快捷键、Script与避坑清单5.1 快捷键设置把常用命令绑到顺手的位置Allegro里几乎所有命令都可以绑定快捷键。在env文件中添加自定义alias即可env文件一般在安装目录的share/pcb/text下或者用Setup → User Preference Editor里的“UI/Common”相关配置。我自己常用的是alias sz edit z-copy alias sc shape convert shape to lines alias cc compose shape alias up update shapes如果你是17.2以上版本还可以用Tools → Utilities → Keyboard Shortcuts界面去改不用手动编辑env文件。绑定好之后我平时做板框转Route Keepin基本就是按两下键、点两下鼠标十几秒搞定。5.2 Script脚本把重复操作录下来一键重放Allegro自带Script录制功能在File → Script里可以开始录制。录制时它会记录你的鼠标点击和键盘输入生成一个.scr文件。下次执行File → Replay选择该脚本就能重复之前的操作。这个功能特别适合线路图一致、只是坐标不同的重复性转换。比如给你十个相同的结构外形线每个都要转换成Route Keepin手动做十遍确实浪费时间。你只需要录制一遍完整操作后续替换选择对象引用即可。录制时有一点要注意脚本中记录的坐标是绝对的。如果你的每个目标对象位于不同位置脚本里的坐标就不会自动匹配。解决方法是先全选所有目标对象用Find面板按Line选中然后在脚本中执行Z-Copy时对象选择用Previous Selection或All On这样就能对全部对象批量处理。5.3 实用避坑清单最后把我这些年总结的经验浓缩成一份清单每条都是真金白银换来的检查项操作建议对象是否闭合转Shape之前用Display→Element检查或者用Compose Shape自动补缝线宽是否为0转Shape前统一设置为0转Shape后按实际需求重新设置目标层是否正确每次转换前确认Class/Subclass下拉框特别是多层板时注意选择All或指定内层原始Shape是否保留需要保留原铜皮时先复制再转换别直接删除动态Shape是否需要更新修改边界后执行Shape→Update Shapes避免看起来像空壳出光绘前复查执行Tools→Database Check再Quick Report检查线宽、零长度对象等异常坐标精度从DXF导入的线有时会有微小偏差把全局Grid设小或开启Snap to Vertex再操作数据库检查这一项值得单独说。Allegro里有一些数据错误是光靠肉眼看不出来的但会在出光绘或后期仿真时突然爆发。每做完一次批量转换花个几十秒跑一遍Tools → Database Check勾上“Update all DRC”、“Check shape outlines”等选项能提前发现很多隐患。写在最后的一点体会Line与Shape互转这个功能单看命令好像很不起眼但它几乎贯穿了板级设计的整个流程从前期的结构导入、板框绘制到中期的禁布区约束、局部铜皮优化再到后期的工艺标注、光绘输出都会用到。把这个操作练熟你就能把更多精力放在布局布线的核心问题上而不是被这些“边角料”操作拖住。我自己现在做个新项目只要结构图一到手习惯性动作就是导入DXF、查闭合、Compose Shape成板框、Z-Copy生成Route Keepin和Package Keepin整套流程不超过五分钟。省下来的时间去多绕几条高难度走线、多调几版电源环路那才是真正创造价值的地方。希望这篇整理对你有帮助也欢迎你在评论区分享你遇到的互转怪问题我看到了会尽量回复。
返回列表