No Venture license for Advanced DFx checking - So, as a novice at SKILL I am writing a Soldermask check to look for padstacks that have inaccurate mask openings. I am further trying to see if "tented" padstack definitions are cleared by Symbol shape definitions on the mask layer(s) within the Symbol. However I am having trouble as I loop through each symbol pin - how do I find out if it has a mask shape above or below it? I see the axlGeoPointInShape command, but I first have to get the shape. I have gone through manuals, examples and publicly released code but my efforts have failed me. What i've done so far isnt pretty but it works for the most part.... I'm doing testing with Place Bounds as a shape because I know all symbols have them, but I also know I am going at it wrong. Any help would be greatly appreciated. Thanks in Advance!
Bill
axlClearSelSet()
vis_list = axlVisibleGet()
axlVisibleDesign(nil)
axlVisibleLayer("PIN/TOP" t)
axlSetFindFilter(?enabled list("noall" "pins")
?onButtons list("noall" "pins"))
axlAddSelectAll()
pselect_list = axlGetSelSet()
axlClearSelSet()
axlVisibleSet(vis_list)
foreach(pin_db pselect_list
unless(pin_db->isMech ;must be doing it wrong - Mechanical pins still getting through
if(pin_db->isThrough
then
symbol_dbid = pin_db->parent
symbol_name = axlDbidName(symbol_dbid )
IsShape = pin_db->objType
shape_layer = pin_db->layer
if( equal(IsShape "shape") then
if( equal(shape_layer "PACKAGE GEOMETRY/PLACE_BOUND_TOP") then
println( "has a shape" )
);endif
);endif
location = pin_db->xy
tsm_pad = axlDBGetPad(pin_db "pin/soldermask_top" "regular")
cur_box = tsm_pad->bBox
tsm_box = tsm_pad->bBox
ComputeBBoxHeight( )
top_pad = axlDBGetPad(pin_db "etch/top" "regular")
cur_box = top_pad->bBox
top_box = top_pad->bBox
ComputeBBoxHeight( )
if(tsm_box == top_box
then
top_mask_same = "true"
else
println( symbol_name ); <-testing
println( shape_layer ); <- testing
);endif
bot_pad = axlDBGetPad(pin_db "etch/bottom" "regular")
cur_box = bot_pad->bBox
bot_box = bot_pad->bBox
ComputeBBoxHeight( )
bsm_pad = axlDBGetPad(pin_db "pin/soldermask_bottom" "regular")
cur_box = bsm_pad->bBox
bsm_box = bsm_pad->bBox
ComputeBBoxHeight( )
if(bsm_box == bot_box
then
bot_mask_same = "true"
else
println( location )
);endif
else
pin_type = "smd"
);endif
);unless
);foreach
);
procedure( ComputeBBoxHeight( )
bBox = cur_box
ll = car( bBox )
ur = cadr( bBox )
lly = yCoord( ll )
ury = yCoord( ur )
ury - lly
) ;procedure