I'm trying to copy padstack information so that I can create a slightly modified version.
As an example:When I grab the data structure for the original pad type, it's a string ("ANTIPAD", "THERMAL", etc...) instead of a symbol.So I can't easily pass it along.I had to put it into a case statement to assign the type that I want. Then I tried to use stringToSymbol and use that so I didn't need a case statement at all.Any suggestions on why this doesn't seem to work?ps = axlLoadPadstack(padStackName)padId = car(ps->pads)
padId->type returns "THERMAL" (a string and not a symbol).newPad->type = stringToSymbol(padId->type)*This is no good.*
/*** This seems to work though. **/
("ANTIPAD" type = 'ANTIPAD)
("THERMAL" type = 'THERMAL)
("REGULAR" type = 'REGULAR)
(t type = nil)
);End type case.
newPad->type = type
I'm obviously doing something incorrectly here. Any help is greatly appreciated!
Neither should work. I'm reasonably sure that you can't edit pads that way. I think you need to create a new padstack using axlDBCreatePadstack and the make_axlPadStackPad defstruct method.
axlPadstackEdit(nil nil) will tell you which attributes are editable.
In reply to eDave:
Hi Dave, that was just a snippet leading up to using the above functions.Regards, -Mike---------------------------------------------------------------------------------------------------------------
let((form padStackName newPadStackName ps drill_data newPad padList figureSize )
form = ConnectivityForm
padStackName = axlFormGetField(form "padstack")
ps = axlLoadPadstack(padStackName)
newPadStackName = "Mike"
/*** Get Drill Data for padStack ***/
drill_data = make_axlPadStackDrill(
?figure ps->figure ;;symbol
?plating ps->plating ;;symbol
?holeType ps->holeType ;;symbol
?drillNonStandard ps->drillNonStandard ;;symbol
;count = 1
padList = nil
mikePad = nth(0 ps->pads)
foreach( pad ps->pads
;printf("Mike %d: pad->layer = %L\n" count pad->layer)
;printf(" Mike: figureSize = %L\n" pad->figureSize)
;printf(" Mike: padType = %L\n" pad->type)
figureSize = pad->figureSize
unless(figureSize figureSize = list(1,1)) ;;Don't send in nil values.
("CIRCLE" figure = 'CIRCLE)
(t figure = 'NULL)
;type = stringToSymbol(pad->type) ;;Doesn't work. Don't know why. Using above case statement.
newPad = make_axlPadStackPad(
?layer cadr(parseString(pad->layer "/"))
?type type ;;Symbol
;?figure pad->figureName ;;Symbol
?flash nil ;;String
?figureSize figureSize ;;Must adjust size to so that it matches the type.
padList = cons(newPad, padList)
mikeDB = axlDBCreatePadStack(newPadStackName, drill_data, padList)
In reply to mikebystedt:
This one has got me stumped. I can't see why the stringToSymbol method doesn't work.
Hopefully Frank can throw some light on this one.
Thanks Dave, I appreciate you taking a peek at it.
makeSymbol converts a string to a symbol
But I believe all of the axlDBCreatePadstack options that specify a symbol will also take a string, so I would try removing that code and see if passing a string for pad layer type and figureName will work. The only restriction with a string is that it must be upper case.
OK Mike, I figured it out:
The problem is with the ANTIPAD type. The pad type attribute is actually "ANTI" but you must pass 'ANTIPAD to ?type in make_axlPadStackPad. Passing nil won't report an error (but would not work properly) but passing 'ANTI will - hence the difference between the two methods.
You can use padType = stringToSymbol(pad ->type) but you will need to add an extra statement: when(padType == 'ANTI, padType = 'ANTIPAD).