• 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. Custom IC SKILL
  3. snapping to edges when invoking an enterBox

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 145
  • Views 16628
  • Members are here 0
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

snapping to edges when invoking an enterBox

Adhil
Adhil over 13 years ago

hey!!!

how can you make an enterBox cursor to snap to edges, i am trying to automatically place vias on an intersection after i draw an enterbox covering that intersection.

the script is working properly,however, it would be more convenient if the enterBox cursor could automatically snap to edges.

 

Adhil

  • Cancel
  • dmay
    dmay over 13 years ago

    The easiest way to do this is to use the built-in snapping (or gravity) functions. Since not everyone has the same preferences for these, I would do the following:

    1. get the current settings for the user
    2. set the default gravity options for your command
    3. run your enter function
    4. reset the user's settings

                ;Get user settings
                gravity = envGetVal("layout" "gravityOn")
                depth   = envGetVal("layout" "gravityDepth")
                type    = envGetVal("layout" "gravityType")
                bouncex = envGetVal("layout" "gravityBounceX")
                bouncey = envGetVal("layout" "gravityBounceY")
                ;Set your commands preferences
                envSetVal("layout" "gravityOn"      'boolean t)
                envSetVal("layout" "gravityDepth"   'int     20)
                envSetVal("layout" "gravityType"    'string  "edge")
                envSetVal("layout" "gravityBounceX" 'float   0)
                envSetVal("layout" "gravityBounceY" 'float   0)
                ;
                ; Do your stuff here
                enterBox ...
                ;
                ;Reset to the user's settings
                envSetVal("layout" "gravityOn"      'boolean gravity)
                envSetVal("layout" "gravityDepth"   'int     depth)
                envSetVal("layout" "gravityType"    'string  type)
                envSetVal("layout" "gravityBounceX" 'float   bouncex)
                envSetVal("layout" "gravityBounceY" 'float   bouncey)

    If your command errors out, you could end up changing the default gravity settings for the user (since the code doesn't made it to the reset step). To avoid this, you should probably wrap your command with errset to trap the error.

    errset(enterBox(...) t)

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Adhil
    Adhil over 13 years ago

    i use the the code that you provided but the cursor point fails to snap on to edges... i also toggled the infix option in the bbox but no change was observed. in addition, in layout editor options i unclicked turn off infix in smart snapping, but still the same.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • dmay
    dmay over 13 years ago

    Here are some things you should try to get this working:

    1. Test the gravity control settings in the leHiEditEditorOptions() form until you can get them to work the way you want for this command. Then set the appropriate cdsenv variables before and after your command.
    2. One other variable you may need to set is the gravityAperture. Maybe this variable isn't big enough so you aren't seeing any significant snap. This setting indicates how close you need to get to an edge before snapping occurs. The code I sent left this at the default which is 0.3 as provided by Cadence.
    envSetVal("layout" "gravityAperture" 'float   1.0)
    3. You will not see the edges highlighted like when you are using the ruler command. I don't know how to enable this or if it is even possible. These settings will simply snap the cursor to an edge.
    4. The settings I provided only enable snapping to edges. If you are wanting to snap to vertices or centerlines, you'll to update the gravityType string.
    5. The layers must be selectable for snapping to work.

    I hope this helps.

    Derek

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • psill
    psill over 13 years ago
    It's not the fix you probably want, but the I think the you might want to try the function:

    geAdjustPoint(
    l_point
    [ w_windowId ]
     )
         => l_point | nil


    Returns the point after applying the adjustment associated to the window Id provided. Adjustment is defined using gravity, the current snap grid, and any snap mode defined in the window interface.

     

    It does not have the graphic gravity snap you may want, but it is suppose to adjust for gravity.
    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • maxaniertud
    maxaniertud over 5 years ago

    It's probably a little bit late, but maybe it will help others:

    You have to give the enterBox function a cmdName and then use leRegisterUseGravity to enable gravity for this command.

    Example:

     enterBox(
          ?cmdName "mbMultiLayerRect"
          ?prompts list("Enter the first corner of your box."
                       "Enter the last corner of your box.")
          ?doneProc "boxDone"
          ?formProc "boxForm"
          ?alwaysMap t
          ?form eval(mbMultiLayerDrawForm)
          )

    leRegisterUseGravity("mbMultiLayerRect")

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel

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