• 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. RAVEL DRC Programming for IC Packaging and…
  3. How do I get a line's Angle?

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 23
  • Views 10769
  • 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 do I get a line's Angle?

Rian
Rian over 10 years ago

How to you get at the angle of a line in Ravel land? Here's a snapshot of what I am after. We need to make sure the line is around 30 degrees. i.e. Between MIN=29.9 and MAX=30.1

  • Cancel
Parents
  • Rian
    Rian over 9 years ago

    Thanks. Turned out just the angle function and that "normalized" principal_value function did the trick (which is good because I never could get that CREATE_VECTOR to work). Here's the complete code:

    (constraint MIN_ANGLE 29.9)
    (constraint MAX_ANGLE 30.1)

    (define PlatingTrace
      (select (mLine) line
        (and
          (layer? mLine, "SUBSTRATE GEOMETRY/UNITBOT_PLTG_RT") ; RT = Routed
          (length mLine) < 10000.0 ; Exclude main vertical line segment
         )
       )
    )

    ; Go 1000 out on the X axis but same Y axis so it is horizontal
    ; Yes end_point is the end of the line next to the middle vertical line

    (define BadAngles
      (select (mLine, mAngle)
        (transform (mLine) PlatingTrace
          (mLine, (abs (principal_value (angle mLine, (connecting_line (end_point mLine), (create_point 1000.0           (ycoordinate (end_point mLine))))))))
         )
         (or ; angle must be between 29.9 and 30.1 so errors are outside this range < 29.9 OR > 30.1
          (mAngle < (value MIN_ANGLE))
          (mAngle > (value MAX_ANGLE))
         )
       )
    )

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Rian
    Rian over 9 years ago

    Thanks. Turned out just the angle function and that "normalized" principal_value function did the trick (which is good because I never could get that CREATE_VECTOR to work). Here's the complete code:

    (constraint MIN_ANGLE 29.9)
    (constraint MAX_ANGLE 30.1)

    (define PlatingTrace
      (select (mLine) line
        (and
          (layer? mLine, "SUBSTRATE GEOMETRY/UNITBOT_PLTG_RT") ; RT = Routed
          (length mLine) < 10000.0 ; Exclude main vertical line segment
         )
       )
    )

    ; Go 1000 out on the X axis but same Y axis so it is horizontal
    ; Yes end_point is the end of the line next to the middle vertical line

    (define BadAngles
      (select (mLine, mAngle)
        (transform (mLine) PlatingTrace
          (mLine, (abs (principal_value (angle mLine, (connecting_line (end_point mLine), (create_point 1000.0           (ycoordinate (end_point mLine))))))))
         )
         (or ; angle must be between 29.9 and 30.1 so errors are outside this range < 29.9 OR > 30.1
          (mAngle < (value MIN_ANGLE))
          (mAngle > (value MAX_ANGLE))
         )
       )
    )

    • 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