EDA365电子工程师网
标题:
过孔重叠检查 直接源码复制上来了 为了没有权限下载考虑 需要的可以复制去 PS 非原创
[打印本页]
作者:
l8877l
时间:
2015-10-28 20:45
标题:
过孔重叠检查 直接源码复制上来了 为了没有权限下载考虑 需要的可以复制去 PS 非原创
本帖最后由 l8877l 于 2015-10-28 20:48 编辑
axlCmdRegister("sv" `Stack_Vias)
procedure( Stack_Vias()
let(
(vias
lx
ly
ux
uy
StackVias
logfile
rep_file
)
axlClearSelSet()
axlVisibleDesign(nil)
axlVisibleLayer( "VIA CLASS/TOP" t)
axlVisibleLayer( "BOARD GEOMETRY/OUTLINE" t)
axlVisibleUpdate(t)
axlSetFindFilter(?enabled `("NOALL" "VIAS") ?onButtons `("VIAS"))
vias = axlGetSelSet(axlAddSelectAll())
StackVias=nil
foreach( via vias
axlClearSelSet()
axlSetFindFilter(?enabled `("NOALL" "VIAS") ?onButtons `("VIAS"))
lx=car(via->xy)-8
ly=cadr(via->xy)-8
ux=car(via->xy)+8
uy=cadr(via->xy)+8
axlAddSelectBox(list(lx:ly ux:uy))
n=axlGetSelSetCount()
if( axlGetSelSetCount()>1 then
StackVias=cons(via StackVias)
); end if
);end foreach
logfile="./Stack_Vias.txt"
rep_file=outfile(logfile)
fprintf(rep_file "\t Stack Vias Report\n\n Padstack Name\t\tLocation\n\n")
foreach( via StackVias
fprintf(rep_file "%L\t\t%L\n" via->name , via->xy )
);end foreach
if( length(StackVias)==0 then
axlMsgPut("No stack via.")
else
axlMsgPut("%d stack vias exist." length(StackVias))
);end if
axlClearSelSet()
close(rep_file)
axlUIViewFileCreate(logfile "Stack Vias Log" t)
);end let
);end defun
作者:
361553894
时间:
2015-11-2 08:30
本帖最后由 361553894 于 2015-11-2 08:46 编辑
axlAddSelectBox(list(lx:ly ux:uy))
这里的bBox不太合理,实际上这个bBox是包住REGULAR的正方形框,而不是实体圆形的框,所以斜对角上并没有重叠的也会误报
而且,左下右上拓宽8mil来寻找范围内的vias不太合理,斜对角的超过8mil,你的方法会漏掉很多
要检查过孔重叠,实际上ANTIPAD有重叠也需要考虑在内
正确的应该是
vPoly1 = axlPolyFromDB(via1, ?padType 'ANTI)
axlSetFindFilter(?enabled '("all") ?onButtons '("noall" "vias"))
axlSingleSelectBox(car(vPoly1)->bBox);这里抓到的依旧是方框,而不是圆形的框,所以需要下一步进行筛选
via2s = axlGetSelSet()
foreach(via2 via2s
unless(via2 == via1
vPoly2 = axlPolyFromDB(via2, ?padType padType)
...
;然后通过axlPolyOperation(vPoly1 vPoly2 'And)来判断俩via是否真的有重叠(具体筛选方法就不在这展开了)
欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/)
Powered by Discuz! X3.2