• 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. Procedure in the while loop

Stats

  • State Suggested Answer
  • Replies 11
  • Answers 2
  • Subscribers 160
  • Views 10445
  • Members are here 0
More Content

Procedure in the while loop

JuriV
JuriV over 2 years ago

Hi everybody,

I want to execute a procedure until the Escape key will be pressed.

Example:

continue = t
while( continue

        ....execute procedure

if (cancel or escape) then
continue = nil

);end while

How could I Do that?

Thanks

  • Sign in to reply
  • Cancel
  • DavidJHutchins
    0 DavidJHutchins over 2 years ago

    From the 'Cadence SKILL Language User Guide' documentation:

    Use the prog function and the return function to exit early from a for loop. This example
    finds the first odd integer less than or equal to 10.

    prog( ( )
    for( i 0 10
    when( oddp( i )
    return( i )
    ) ; when
    ) ; for
    ) ; prog

    However, I don't know of any way of detecting a key press ( such as 'escape' ) since Allegro doesn't appear to support bindkeys

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • B Bruekers
    0 B Bruekers over 2 years ago

    What are you planning  to do in the loop? 

    If it is some user interaction with selection then use the axlEnterEvent() .

    Otherwise look at the axlCancelOff, axlCancelOn, axlCancelTest  functions.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • JuriV
    0 JuriV over 2 years ago in reply to B Bruekers

    Hi B Bruekers,

    I have a code to align the vias (vertical or horizonthal). I want to align the VIAS inside of the while loop. The VIAs are selected using

    dbid_vias = axlGetSelSet(axlSingleSelectBox()). For example I select three VIAs to aligne them, then next four VIAs, then next ten Vias and so on.

    This function should work until Escape (or another termination) is pressed, which means "No more VIAs to aligned".

    I hope this explained a function.

    Best regards

    Juri

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • B Bruekers
    0 B Bruekers over 2 years ago in reply to JuriV

    Then you need to use axlEnterEvent().  So something like this:

    ;start "myselection" from the command line of Allegro
    axlCmdRegister( "myselection" 'SelectonLoop  ?cmdType "interactive")

    procedure( SelectonLoop()
        let( (loop msg event StartXY)
             axlSetFindFilter( ?enabled '("noall" "vias") ?onButtons "vias")
            msg= "Select vias"
            loop = t
            while( loop
                event = axlEnterEvent(list('PICK 'PICK_EXTEND 'PICK_TOGGLE 'STARTDRAG 'STARTDRAG_EXTEND 'STARTDRAG_TOGGLE 'STOPDRAG 'STOPDRAG_EXTEND 'STOPDRAG_TOGGLE ) msg nil)
                caseq(event->type
                    (PICK                  when(axlAddSelectPoint(event->xy), doSomethingWithSelection()))
                    (PICK_EXTEND     when(axlAddSelectPoint(event->xy), doSomethingWithSelection()))
                    (PICK_TOGGLE     when(axlSubSelectPoint(event->xy), doSomethingWithSelection()))
                    (STARTDRAG
                        axlAddSimpleRbandDynamics(event->xySnap "box" ?var_point 0-car(event->xySnap):0-cadr(event->xySnap))
                        StartXY= event->xy
                    )
                    ((STARTDRAG_EXTEND STARTDRAG_TOGGLE)
                        axlAddSimpleRbandDynamics(event->xySnap "box" ?var_point 0-car(event->xySnap):0-cadr(event->xySnap))
                        StartXY= event->xy
                    )
                    (STOPDRAG                  
                        axlClearDynamics()
                        when(axlAddSelectBox(list(StartXY event->xy))
                            doSomethingWithSelection()
                        )
                        StartXY = 0
                    )
                    (STOPDRAG_EXTEND     axlClearDynamics(), when(axlAddSelectBox(list(StartXY event->xy)), doSomethingWithSelection()),    StartXY=0 )
                    (STOPDRAG_TOGGLE    axlClearDynamics(), when(axlSubSelectBox(list(StartXY event->xy)), doSomethingWithSelection()),    StartXY=0 )
                    (DONE         
                        doSomethingWithSelection()
                        loop = nil
                    )
                    (CANCEL     
                        loop = nil
                    )
                )
            )
        )
    )

    procedure( doSomethingWithSelection()
        let( (selectedItems)
            when(selectedItems = axlGetSelSet()
                pp(selectedItems)
            )
        )
    )

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • Cancel
  • JuriV
    0 JuriV over 2 years ago in reply to B Bruekers

    OK, Thank you.
    I used such function for PICK, but not for CANCEL or DONE. Are CANCEL and DONE like Escape or the popup for RMB with Cancel and Done functions should be define?

    Best regards

    Juri

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Verify Answer
    • 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