Home > Community > Forums > PCB SKILL > Copying symbols for creating padstacks.

Email

* Required Fields

Recipients email * (separate multiple addresses with commas)

Your name *

Your email *

Message *

Contact Us

* Required Fields
First Name *

Last Name *

Email *

Company / Institution *

Comments: *

 Copying symbols for creating padstacks. 

Last post Wed, Jan 8 2014 2:01 PM by mikebystedt. 7 replies.
Started by mikebystedt 07 Jan 2014 01:31 PM. Topic has 7 replies and 5153 views
Page 1 of 1 (8 items)
Sort Posts:
  • Tue, Jan 7 2014 1:31 PM

    Copying symbols for creating padstacks. Reply

    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 

    • Post Points: 20
  • Tue, Jan 7 2014 2:17 PM

    • eDave
    • Top 10 Contributor
    • Joined on Sun, Jul 13 2008
    • Christchurch, 00-NZ
    • Posts 744
    • Points 16,115
    Re: Copying symbols for creating padstacks. Reply

    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.

    Dave Elder, Tait Communications
    • Post Points: 20
  • Wed, Jan 8 2014 7:44 AM

    Re: Copying symbols for creating padstacks. Reply

    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(). 

    • Post Points: 50
  • Wed, Jan 8 2014 12:59 PM

    • eDave
    • Top 10 Contributor
    • Joined on Sun, Jul 13 2008
    • Christchurch, 00-NZ
    • Posts 744
    • Points 16,115
    Re: Copying symbols for creating padstacks. Reply

    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. 

    Dave Elder, Tait Communications
    • Post Points: 20
  • Wed, Jan 8 2014 1:08 PM

    Re: Copying symbols for creating padstacks. Reply

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

    -Mike 

    • Post Points: 5
  • Wed, Jan 8 2014 1:18 PM

    • fxffxf
    • Top 25 Contributor
    • Joined on Thu, Jul 17 2008
    • ., AK
    • Posts 298
    • Points 4,735
    Re: Copying symbols for creating padstacks. Reply

    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.

    • Post Points: 5
  • Wed, Jan 8 2014 1:36 PM

    • eDave
    • Top 10 Contributor
    • Joined on Sun, Jul 13 2008
    • Christchurch, 00-NZ
    • Posts 744
    • Points 16,115
    Re: Copying symbols for creating padstacks. Reply

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

    Dave Elder, Tait Communications
    • Post Points: 20
  • Wed, Jan 8 2014 2:01 PM

    Re: Copying symbols for creating padstacks. Reply
    Big thanks guys, I'll give it another shot.
    I could have possibly stared at that for days and still not eyeballed the difference.
    You guys are good!

    Best Regards,

    -Mike
    • Post Points: 5
Page 1 of 1 (8 items)
Sort Posts:
Started by mikebystedt at 07 Jan 2014 01:31 PM. Topic has 7 replies.