• Skip to main content
  • Skip to search
  • Skip to footer
Cadence Home
  • This search text may be transcribed, used, stored, or accessed by our third-party service providers per our Cookie Policy and Privacy Policy.

  1. Community Forums
  2. Allegro X PCB Editor
  3. Copying symbols for creating padstacks.

Stats

  • Replies 7
  • Subscribers 159
  • Views 14462
  • Members are here 0
More Content

Copying symbols for creating padstacks.

mikebystedt
mikebystedt over 11 years ago

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.  **/

case(padId->type

("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!

-Mike 

  • Sign in to reply
  • Cancel
  • eDave
    eDave over 11 years ago

    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.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • mikebystedt
    mikebystedt over 11 years ago

    Hi Dave, that was just a snippet leading up to using the above functions.

    Regards, -Mike

    ---------------------------------------------------------------------------------------------------------------

    procedure( copyPadStack()

      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(

    ?fixed ps->fixed

    ?uvia   ps->uvia

    ?keepout   ps->keepout

    ?drillDiameter ps->drillDiamter

    ?figure ps->figure ;;symbol

    ?figureSize ps->figureSize

    ?offset ps->offset

    ?plating ps->plating ;;symbol

    ?drillChar ps->drillChar

    ?multiDrillData ps->multiDrillData

    ?holeType ps->holeType ;;symbol

    ?slotSize ps->slotSize

    ?holeTolerance ps->holeTolerance

    ?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)

    ;count++

    figureSize = pad->figureSize

    unless(figureSize figureSize = list(1,1)) ;;Don't send in nil values.

     

    case(pad->type

    ("ANTIPAD" type = 'ANTIPAD)

    ("THERMAL" type = 'THERMAL)

    ("REGULAR" type = 'REGULAR)

    (t type = nil)

    );End type case.

    case(pad->figureName

    ("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

    ?figure figure

    ?flash nil ;;String

    ?figureSize figureSize ;;Must adjust size to so that it matches the type.

    ?offset pad->offset

    )

    padList = cons(newPad, padList)

     

    )

     

    mikeDB = axlDBCreatePadStack(newPadStackName, drill_data, padList)

      

      );End let.

    );End copyPadStack(). 

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • eDave
    eDave over 11 years ago

    Hi Mike,

    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. 

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • mikebystedt
    mikebystedt over 11 years ago

    Thanks Dave, I appreciate you taking a peek at it.

    -Mike 

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • fxffxf
    fxffxf over 11 years ago

    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.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
>
Cadence Guidelines

Community Guidelines

The Cadence Design Communities support Cadence users and technologists interacting to exchange ideas, news, technical information, and best practices to solve problems and get the most from Cadence technology. The community is open to everyone, and to provide the most value, we require participants to follow our Community Guidelines that facilitate a quality exchange of ideas and information. By accessing, contributing, using or downloading any materials from the site, you agree to be bound by the full Community Guidelines.

© 2025 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information