• 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. Script for finding same Metal type Shape Overlapping a ...

Stats

  • Locked Locked
  • Replies 23
  • Subscribers 152
  • Views 28772
  • 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

Script for finding same Metal type Shape Overlapping a Trace

RFStuff
RFStuff over 12 years ago

Dear All,

I want to find whether same metal type shape  is overlapping another shape of the same metal.

If it is overlapping, then the overlap area should blink.

Basically this I need for finding SHORT with undesired trace.

For example: I have a trace ( may be a Rectangle/Path). I select this. Then an enabled SKILL script should find a same metal type shape overlapping with the trace and highligting the overlapped area with the trace.

Can anybody show me some light  for this.

Kind Regards,

  • Cancel
Parents
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    A picture might help, but I suspect that the problem is that the dbGetTrueOverlaps is finding all the objects which interact with the bounding box of obj1. See the attached picture. In this case, the selected object is obj1, and I get:

    (db:0x17511f12
        (db:0x17511f92 db:0x17512292)
        (db:0x17511f92 db:0x17512293)
    )

    The top right path iteracts with the bounding box of the first shape - that's correct. If the path had moved a little to the right so that it didn't interact with the bBox of the fat path, then dbGetTrueOverlaps wouldn't return it - however, dbGetOverlaps (in IC5141) would still return it if the bBox of the lower shape interacts with the bBox of the selected shape. That's what the difference between the two functions (in IC61 dbGetOverlaps always returns the "true" overlaps).

    That's why you need to do the dbLayerAnd as well. Here's what I did to do that:

    overlaps=dbGetTrueOverlaps(cv obj1~>bBox obj1~>layer 0:5)
    shapeList=nil
    foreach(overlap overlaps
      unless(overlap==obj1
        shapeList=cons(dbCopyFig(abGetOverlapShape(overlap) cv abGetOverlapTransform(overlap)) shapeList)
      )
    )
    interactingRegions=dbLayerAnd(cv "y0" list(obj1) shapeList)
    foreach(shape shapeList
      dbDeleteObject(shape)
    )
    ; if a shape on y0 isn't enough, you can convert to markers
    foreach(shape interactingRegions
      if(shape~>objType=="polygon" then
        geCreateMarkerByBBox(cv "warning" "SHORT" "shorting shape" "some reason" shape~>points)
      else
        geCreateMarkerByBBox(cv "warning" "SHORT" "shorting shape" "some reason" shape~>bBox)
      )
      dbDeleteObject(shape)
    )

    Regards,

    Andrew.

    • Cancel
    • Vote Up 0 Vote Down
    • Cancel
Reply
  • Andrew Beckett
    Andrew Beckett over 12 years ago

    A picture might help, but I suspect that the problem is that the dbGetTrueOverlaps is finding all the objects which interact with the bounding box of obj1. See the attached picture. In this case, the selected object is obj1, and I get:

    (db:0x17511f12
        (db:0x17511f92 db:0x17512292)
        (db:0x17511f92 db:0x17512293)
    )

    The top right path iteracts with the bounding box of the first shape - that's correct. If the path had moved a little to the right so that it didn't interact with the bBox of the fat path, then dbGetTrueOverlaps wouldn't return it - however, dbGetOverlaps (in IC5141) would still return it if the bBox of the lower shape interacts with the bBox of the selected shape. That's what the difference between the two functions (in IC61 dbGetOverlaps always returns the "true" overlaps).

    That's why you need to do the dbLayerAnd as well. Here's what I did to do that:

    overlaps=dbGetTrueOverlaps(cv obj1~>bBox obj1~>layer 0:5)
    shapeList=nil
    foreach(overlap overlaps
      unless(overlap==obj1
        shapeList=cons(dbCopyFig(abGetOverlapShape(overlap) cv abGetOverlapTransform(overlap)) shapeList)
      )
    )
    interactingRegions=dbLayerAnd(cv "y0" list(obj1) shapeList)
    foreach(shape shapeList
      dbDeleteObject(shape)
    )
    ; if a shape on y0 isn't enough, you can convert to markers
    foreach(shape interactingRegions
      if(shape~>objType=="polygon" then
        geCreateMarkerByBBox(cv "warning" "SHORT" "shorting shape" "some reason" shape~>points)
      else
        geCreateMarkerByBBox(cv "warning" "SHORT" "shorting shape" "some reason" shape~>bBox)
      )
      dbDeleteObject(shape)
    )

    Regards,

    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