• 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 get point of layer that i want in window cell vi...

Stats

  • Replies 5
  • Subscribers 148
  • Views 696
  • Members are here 0

how to get point of layer that i want in window cell view

Noobnoob
Noobnoob 1 month ago

Hello, i am sorry for my English skill.

i am noob for cadence skill language.

As the title says, in window cell view, i want to know point(coordinate) of layer i want

i made a cell named "DECAP" and i placed "DECAP" as mosaic ...

Poly layers is in different hierarchy.

in order to find out all point of Poly layers, i made a script by using skill language...

Script :

wcv = geGetWindowCellView()
overlaps = dbGetTrueOverlaps(wcv wcv~>bBox list("POLY" "drawing") 32 t)

transform = nil
temp = nil
label = nil

foreach(overlap overlaps
transform = append( transform list(dbGetInstTransform(overlap)) )
);foreach
foreach(i transform
temp = append( temp list(nthelem(1 i)) )
);foreach

Result :

((4.2 4.2) "R0" 1.0)
((4.2 4.2) "R0" 1.0)
((4.2 4.2) "R0" 1.0)
((12.2 4.2) "R0" 1.0)
((12.2 4.2) "R0" 1.0)
((12.2 4.2) "R0" 1.0)
(((db:0x1fa1cc9b 0 0) db:0x1fa1ada3)
((db:0x1fa1cc9b 0 0) db:0x1fa1add4)
((db:0x1fa1cc9b 0 0)
(db:0x1fa14b9a db:0x1fa14ca0)
)
((db:0x1fa1cc9b 0 1) db:0x1fa1ada3)
((db:0x1fa1cc9b 0 1) db:0x1fa1add4)
((db:0x1fa1cc9b 0 1)
(db:0x1fa14b9a db:0x1fa14ca0)
)
)

i don't know meaning of (4.2 4.2), (12.2 4.2) ... as result of dbGetInstTransform.

please help me, i want to find out point of poly layer in different hierarhy, in mosaic cell... 

  • Cancel
  • Sign in to reply
  • Noobnoob
    Noobnoob 1 month ago

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Aurel B
    Aurel B 1 month ago in reply to Noobnoob

    ; Hi,
    
    ; You already asked a very similar question,
    ; community.cadence.com/.../by-using-dbgettrueoverlaps-how-to-get-coordinate-of-what-i-want
    
    ; You could re-use the answer I made there and just write the function to get a list of points from any shape.
    ; Otherwise, this is a simpler and probably more robust solution
    
    (defun get_layer_polygons ( @key cv ( box cv->bBox ) lpp )
      "Return the coordinates of LPP polygons in CV.
    (It only works for 90° and 45° angles, ellipses are not supported.)"
      (abeInit cv)
      (unwindProtect
        (letseq ( ( abe_lay (abeLayerFromCellView (car lpp) ?purpose (cadr lpp) ?bBox box) )
                  ( iter    (abeIslandIterator abe_lay) )
                  points
                  polygons
                  )
          (while (setq points iter->next)
            (push points polygons)
            )
          polygons)
        (abeDone)
        ))
    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
  • Andrew Beckett
    Andrew Beckett 1 month ago in reply to Noobnoob

    The return value of dbGetInstTransform is the transformation (i.e. offset, rotation, magnification tuple) needed to transform the shape to the top-level. The bit you're missing is to do the transformation. Rather than appending those lists (which is inefficient and doesn't really help you), you can process the overlaps this way:

    procedure(CCFgetHierPathShape(overlap)
      if(listp(overlap) then
        CCFgetHierPathShape(cadr(overlap))
      else
        overlap
      )
    )

    polyBBoxes=foreach(mapcar overlap overlaps
      dbTransformBBox(
        CCFgetHierPathShape(overlap)~>bBox
        dbGetInstTransform(overlap)
      )
    )

    Note, this is assuming that the shapes are rectangles (if polygons, you'll get the transformed bounding boxes of each shape regardless of the actual shape).

    Andrew

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • Cancel
  • Noobnoob
    Noobnoob 28 days ago

    thank you, guys!

    i took a first step for my problem and solved it !!

    as i want, i got a point list.

    next step, i'm going to apply point list to dbPointArrayOr function.

    for example, point_list = ( ((0 0) (5 5)) ((0 5) (5 10)) ((0 10) (5 15)) )

    i think that dbPointArrayOr(wcv point_list)'s result is ( (0 0) (5 15) )

    but, actually, dbPointArrayOr function don't operation.

    what's wrong for me...?

    Thank you for always leaving comments.

    • Cancel
    • Vote Up 0 Vote Down
    • Sign in to reply
    • Cancel
  • Andrew Beckett
    Andrew Beckett 28 days ago in reply to Noobnoob

    The “point list” you are providing is not a list of point lists but rather a list of bounding boxes. dbPointArrayOr will treat this as a list of point lists, and so each of your bounding boxes will be treated as a two-point diagonal line from the lower left to the upper right, and so you are trying to or three zero-area diagonal lines, and hence the result will be nothing.

    In other words, each point list needs to be the outline of a polygon; if you were starting from the coordinates in a bounding box ((llx lly) (urx ury)) then it would need to be ((llx lly) (urx lly) (urx ury) (llx ury))

    Andrew

    • Cancel
    • Vote Up +1 Vote Down
    • Sign in to reply
    • 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.

© 2026 Cadence Design Systems, Inc. All Rights Reserved.

  • Terms of Use
  • Privacy
  • Cookie Policy
  • US Trademarks
  • Do Not Sell or Share My Personal Information