• 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. Coordinates(bBoxes) of all the shapes(layers) in a layout...

Stats

  • Locked Locked
  • Replies 5
  • Subscribers 143
  • Views 1860
  • 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

Coordinates(bBoxes) of all the shapes(layers) in a layout view

Shankar
Shankar 10 months ago

Hello Community,

Is there any simple way how i can get the coordinates of all the shapes in a layout view?

Currently i'm flattening the layout, getting all the lpps from CV and using setof to get all the shapes of a layer and looping through them to get the coordinates.

Is there a way to do it without having to flatten the layout view and shapes merged or any other elegant way to do it if we flatten it?

Also, dbWriteSkill doesn't give output how i desired

Thanks,

Shankar

  • Cancel
Parents
  • RobMan
    RobMan 10 months ago

    This is possible, but some context as to why would help. There are multiple shape types... Rectangle, Polygon, Path, Elipse, Donut, pathSeg. The coordinates are expressed differently for the different objects. e.g. A rectangle has a bBox, a path a list of points with a width.... Or do you want the edge vertices for a path? An elipse has a bBox. That would not differentiate it from a rectangle. The object type is critical.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Shankar
    Shankar 10 months ago in reply to RobMan

    Thanks for the reply Rob,

    i want the coordinate information to get the positional data of layers such as vias, metals. Basically i want to create a 2-D maze by extracting this information. i can convert the coordinates in different form(list of pts or bBox. or xy) in the next step . Now i want all the layers(merges) and and its coordinates(with its respective object type is fine) 

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • RobMan
    RobMan 10 months ago in reply to Shankar

    OK, if you are willing to do this destructively with flattening and merging an easier solution is available. First; flatten, merge, and convert all shapes to polygons. N.B. "rect" will remain as rect despite the convert to polygon. Load the following...

    procedure(rdmShapeCoords(cv)
    let((shapeCoordList )
    foreach(shape cv~>shapes
    case(shape~>objType
    ("rect" shapeCoordList=cons(list(shape~>objType shape~>lpp shape~>bBox) shapeCoordList))
    ("polygon" shapeCoordList=cons(list(shape~>objType shape~>lpp shape~>points) shapeCoordList))
    )
    )
    shapeCoordList
    )
    )

    All as    rdmShapeCoords(geGetEditCellView())

    This will return a list of rect and polygon obects with layer and bBox/points info. If you want you can convert the bBox into the equivalent points list.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Shankar
    Shankar 10 months ago in reply to RobMan

    Thanks rob, I will try it out!!

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
  • Andrew Beckett
    Andrew Beckett 10 months ago in reply to Shankar

    If the objects you are dealing with are octilinear (i.e. only multiples of 90 and 45 degrees) then you could use the abe* functions. These can retrieve a representation of a layer throughout the hierarchy and avoid the flattening. For example:

    abeInit(cv)
    m1=abeLayerFromCellView("Metal1")
    iter=abeIslandIterator(m1)
    while(polygon=iter->next
      println(polygon)
    )
    abeDone()

    The polygon variable will be the list of points for the outline of each "island".

    Andrew

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett 10 months ago in reply to Shankar

    If the objects you are dealing with are octilinear (i.e. only multiples of 90 and 45 degrees) then you could use the abe* functions. These can retrieve a representation of a layer throughout the hierarchy and avoid the flattening. For example:

    abeInit(cv)
    m1=abeLayerFromCellView("Metal1")
    iter=abeIslandIterator(m1)
    while(polygon=iter->next
      println(polygon)
    )
    abeDone()

    The polygon variable will be the list of points for the outline of each "island".

    Andrew

    • 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