leilei4908 发表于 2015-8-28 16:21:19

请问skill怎么获取antipad的大小?

怎么获取via的坐标,antipad regularpad等参数???
我需要检查俩via的antipad小于4mil的函数
目前用的axlAirGap,但是antipad与regularpad大小差不是固定的

vivienluo 发表于 2015-8-28 17:23:38

1.首先获取到via的DBID,这个就不用我多说了吧。
2.获取via的坐标直接通过viaDbid->xy
2.获取VIA的其他参数,通过viaDbid->definition获取到via所使用的padstack,这个padstack包含了过孔的所有属性。比如你所需要的反焊盘大小。

如面的代码所示:
目前我把via的DBID存储到变量a中的

Skill > a->?
(parentGroups symbolEtch branch pads definition
    isMirrored isThrough name objType parent
    net rotation mirrorType startEnd testPoint
    xy readOnly bBox prop fixedByTestPoint
)
Skill > a->definition->??
(prop nil bBox
    ((-16.0 -16.0)
        (16.0 16.0)
    ) readOnly
    t pads
    (pad:259453216 pad:259453192 pad:259453168 pad:259453144 pad:259453120
        pad:259453096 pad:259453072 pad:259453048 pad:259453024 pad:259453000
        pad:259452976 pad:259452952
    ) objType "padstack"
    startEnd
    ("ETCH/TOP" "ETCH/BOTTOM") parent dbid:151934960 name
    "VIA10-GEN" drillChar "10" plating "PLATED"
    holeType "circle_drill" drillNonStandard nil multiDrillData
    nil padSuppresion t uvia nil
    type "through" keepout nil holeTolerance
    (0.0 0.0) drillFigureHeight 20.0 drillFigureWidth 20.0
    drillFigureName "CIRCLE" drillSizeHeight 0.0 drillSizeWidth
    0.0 drillDiameter 10.0 drillOffset
    (0.0 0.0)
    isThrough t definition nil isPadRef
    nil
)
Skill > b =a->definition->pads
(pad:259453216 pad:259453192 pad:259453168 pad:259453144 pad:259453120
    pad:259453096 pad:259453072 pad:259453048 pad:259453024 pad:259453000
    pad:259452976 pad:259452952
)
Skill > car(b)->??
(readOnly t objType "pad" bBox
    ((-11.0 -11.0)
        (11.0 11.0)
    ) type "REGULAR" parent dbid:313075792
    offset
    (0.0 0.0) layer "ETCH/TOP" flash
    "" figureName "CIRCLE" figure
    (_axlPath@0x8dce048)
)

leilei4908 发表于 2015-8-28 18:00:13

如果我要获得antipad的大小,利用
car(viaDbid->definition->pads)
能获取pads的dbid,那我怎么判断哪个是antipad,并且获得他的大小呢?

leilei4908 发表于 2015-8-28 18:19:22

viaDbid->definition->pads->type怎么都是nil呢。。。

XYX365 发表于 2015-8-28 19:22:28

本帖最后由 XYX365 于 2015-8-28 19:24 编辑

是不是類似圖片所顯示的值,
如果是的話可以參考下列代碼,
而via的antipad應該是內曾和負片時,才有的

axlSetFindFilter(?enabled list("noall" "pins" "vias") ?onButtons list("noall" "pins" "vias"))
axlClearSelSet()
axlAddSelectPoint() ;自己要選擇兩個via
axlAddSelectPoint()
lSelectVias = axlGetSelSet()
via1 = car(lSelectVias)
via2 = cadr(lSelectVias)
axlSetActiveLayer("ETCH/INT1") ;設定Active為內層名稱
axlAirGap(via1 via2)

=>
axlAirGap(via1 via2)
((4922.22 1141.22)
    (4917.22 1134.3) 8.54935
)

leilei4908 发表于 2015-8-31 08:40:02

本帖最后由 leilei4908 于 2015-8-31 10:22 编辑

XYX365 发表于 2015-8-28 19:22
是不是類似圖片所顯示的值,
如果是的話可以參考下列代碼,
而via的antipad應該是內曾和負片時,才有的

其实我要的是Dist,Dist减去俩Antipad大小就是负片上俩via间铜箔的最小宽度了
能直接获得这个Dist值么?如果是通过计算斜边获取的,计算量会很大。
我的目的是高亮所有via间铜箔在0到4mil间的via。
目前用airgap方式,比较任意两个via间的airgap,数据量很大,会无响应一两分钟,有没有更好的方案?

比如Dx超过一定的值就跳出for循环,但又回到之前没解决的一个问题了,怎么跳出for循环。。。[已解决]
方法:在for循环下增加if判断,虽然没有跳出for循环,但是实际上并没有执行下面的语句

现在用的方法是自己设定via to via的距离,从而判断铜箔宽度
如果能直接获取antipad大小那再好不过了,就不需要自己考虑了,毕竟antipad大小不是固定的
页: [1]
查看完整版本: 请问skill怎么获取antipad的大小?