• 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. How to Retrieve the value of dX and dY in the current w...

Stats

  • Locked Locked
  • Replies 18
  • Subscribers 143
  • Views 22021
  • 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

How to Retrieve the value of dX and dY in the current window

ClintMeyer
ClintMeyer over 14 years ago

I would like to create a script that will automatically move whatever I have selected in a layout window by the same amount as the last move.  The last move/copy/stretch relative distance is displayed in the layout window as dX and dY (standing for delta X and delta Y i presume).  Is there a skill function that returns that value?  I looked under the hiGetCurrentWindow() and it was not there.

 Thanks for any help

 Clint

 

  • Cancel
Parents
  • ClintMeyer
    ClintMeyer over 14 years ago

    Guys

     Thanks for the help, this is a very useful function that will see a lot of use across my entire layout team.  Your effort and expertise is greatly appreciated.   

    I have brought all the pieces together and fixed a couple issues.  I also have a couple questions  (See end)

    Functional Bug

    needed absolute value when evaluating which term of delta variable was larger

    Code Bug 

    added =list( to the abGetDxDy.lastDelta variable in orthogonal and diagonal mode

     

    ;Procedure to set a variable that represents the relative X and Y for the last move, copy or stretch

     procedure(abGetDxDy(@optional (win hiGetCurrentWindow()))
     let((refPoint curPoint)
      refPoint=leGetRefPoint(geGetEditCellView(win))
      curPoint=hiGetCommandPoint(win)
      when(refPoint && curPoint && member(hiGetCurrentCmd(win) '("Move" "Copy" "Stretch"))
       case(hiGetCurrentWindow()~>snapMode
             ("anyAngle"
             abGetDxDy.lastDelta=mapcar('difference curPoint refPoint)
             )
             ("orthogonal"
               delta = mapcar('difference curPoint refPoint)
               if(abs(car(delta)) >= abs(cadr(delta))
               abGetDxDy.lastDelta=list(car(delta) 0.0 )
               abGetDxDy.lastDelta=list(0.0 cadr(delta))
               )
             )     
             ("diagonal"
               delta = mapcar('difference curPoint refPoint)
               if(abs(car(delta)) >= abs(cadr(delta))
               abGetDxDy.lastDelta=list(car(delta) 0.0 )
               abGetDxDy.lastDelta=list(0.0 cadr(delta))
               )    
             )
           )
      )
     )
    )

    ;bindkey to make it work 

    hiSetBindKey("Layout" "<Btn1down>EF" "abGetDxDy() mouseAddPt()")

     Now my questions. 

    I have the variable working as I want inside of stretch/move commands.  However in my quest to get it working inside of copy I am having an issue.  With the bindkey below I need to press it TWICE to make it work ONCE and I get a warning in the icfb.  I think this comes back to my lack of understanding of enter function.  The reason I am trying to do it this way is because I want to maintain the selected set after the copy. 

    Can you give me a hint on how to make this bindkey work?

    hiSetBindKey("Layout" "Meta<Key>=" "leHiCopy() le0CopyForm->segSnapMode->value = \"anyAngle\" le0CopyForm->DeltaXField->value = car(abGetDxDy.lastDelta) le0CopyForm->DeltaYField->value = cadr(abGetDxDy.lastDelta) _leApplyDeltaCB (hiGetCurrentWindow()) " )

    *WARNING* hiGetWindowStackPts: enter function is inactive

    Thanks 

    Clint

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • ClintMeyer
    ClintMeyer over 14 years ago

    Guys

     Thanks for the help, this is a very useful function that will see a lot of use across my entire layout team.  Your effort and expertise is greatly appreciated.   

    I have brought all the pieces together and fixed a couple issues.  I also have a couple questions  (See end)

    Functional Bug

    needed absolute value when evaluating which term of delta variable was larger

    Code Bug 

    added =list( to the abGetDxDy.lastDelta variable in orthogonal and diagonal mode

     

    ;Procedure to set a variable that represents the relative X and Y for the last move, copy or stretch

     procedure(abGetDxDy(@optional (win hiGetCurrentWindow()))
     let((refPoint curPoint)
      refPoint=leGetRefPoint(geGetEditCellView(win))
      curPoint=hiGetCommandPoint(win)
      when(refPoint && curPoint && member(hiGetCurrentCmd(win) '("Move" "Copy" "Stretch"))
       case(hiGetCurrentWindow()~>snapMode
             ("anyAngle"
             abGetDxDy.lastDelta=mapcar('difference curPoint refPoint)
             )
             ("orthogonal"
               delta = mapcar('difference curPoint refPoint)
               if(abs(car(delta)) >= abs(cadr(delta))
               abGetDxDy.lastDelta=list(car(delta) 0.0 )
               abGetDxDy.lastDelta=list(0.0 cadr(delta))
               )
             )     
             ("diagonal"
               delta = mapcar('difference curPoint refPoint)
               if(abs(car(delta)) >= abs(cadr(delta))
               abGetDxDy.lastDelta=list(car(delta) 0.0 )
               abGetDxDy.lastDelta=list(0.0 cadr(delta))
               )    
             )
           )
      )
     )
    )

    ;bindkey to make it work 

    hiSetBindKey("Layout" "<Btn1down>EF" "abGetDxDy() mouseAddPt()")

     Now my questions. 

    I have the variable working as I want inside of stretch/move commands.  However in my quest to get it working inside of copy I am having an issue.  With the bindkey below I need to press it TWICE to make it work ONCE and I get a warning in the icfb.  I think this comes back to my lack of understanding of enter function.  The reason I am trying to do it this way is because I want to maintain the selected set after the copy. 

    Can you give me a hint on how to make this bindkey work?

    hiSetBindKey("Layout" "Meta<Key>=" "leHiCopy() le0CopyForm->segSnapMode->value = \"anyAngle\" le0CopyForm->DeltaXField->value = car(abGetDxDy.lastDelta) le0CopyForm->DeltaYField->value = cadr(abGetDxDy.lastDelta) _leApplyDeltaCB (hiGetCurrentWindow()) " )

    *WARNING* hiGetWindowStackPts: enter function is inactive

    Thanks 

    Clint

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Children
No Data

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