在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1897|回复: 2

[转贴] Finding overlapping shapes/instances over instances

[复制链接]
发表于 2021-3-19 13:05:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x





  1. procedure(CCScreateOverlapArea(dst src)
  2. let((llAx llBx llAy llBy urAx urBx urAy urBy boxLL boxUR )
  3.                 llAx = xCoord( lowerLeft( dst ))
  4.                 llBx = xCoord( lowerLeft( src ))
  5.                 llAy = yCoord( lowerLeft( dst ))
  6.                 llBy = yCoord( lowerLeft( src ))
  7.                 urAx = xCoord( upperRight( dst ))
  8.                 urBx = xCoord( upperRight( src ))
  9.                 urAy = yCoord( upperRight( dst ))
  10.                 urBy = yCoord( upperRight( src ))
  11.                 boxLL = max( llAx llBx ):max( llAy llBy )
  12.                 boxUR = min( urAx urBx ):min( urAy urBy )
  13.                 list( boxLL boxUR )
  14. );let
  15. );proc

  16. procedure(CCScheckInstOverlap( @optional (cv geGetEditCellView()))
  17. let(( visited dinstList dbox sbox overlap ignoreCellList)

  18. ignoreCellList=list("abc" "sealring" "mycell")

  19. foreach(sinst cv~>instances
  20.         unless(member(sinst~>cellName ignoreCellList)
  21.         dinstList=dbGetOverlaps(cv dbTransformBBox(sinst~>master~>prBoundary~>bBox list(sinst~>xy sinst~>orient)) nil )
  22.                 foreach(dinst dinstList
  23.                         when(dinst~>objType=="inst" && dinst~>name != sinst~>name && !member(dinst~>cellName ignoreCellList) && !member(dinst visited)
  24.                         dbox=dbTransformBBox(dinst~>master~>prBoundary~>bBox list(dinst~>xy dinst~>orient) )
  25.                         sbox=dbTransformBBox(sinst~>master~>prBoundary~>bBox list(sinst~>xy sinst~>orient) )            
  26.                         overlap=CCScreateOverlapArea(dbox sbox)

  27.                         unless(abs(caar(overlap) - caadr(overlap)) < 1e-6 || abs(cadar(overlap) - cadadr(overlap)) < 1e-6
  28.                                 dbCreateMarker(cv sprintf(nil "Instance %s overlaps with instance %s" dinst~>name sinst~>name) "CCS"
  29.                                                  list(car(overlap) list(caadr(overlap) cadar(overlap)) cadr(overlap)
  30.                                                  list(caar(overlap) cadadr(overlap))) nil t t "warning" "overlap"
  31.                                                 )
  32.                          printf("Instance %s overlaps with instance %s \n" dinst~>name sinst~>name)
  33.                                         )
  34.                                 )
  35.                         )
  36.                 visited=cons(sinst visited)
  37.                 );unless
  38.         );foreach
  39.         t
  40. );let
  41. );proc


复制代码

发表于 2021-3-19 20:53:02 | 显示全部楼层
kankan
发表于 2021-8-6 20:11:41 | 显示全部楼层
Processed in 0.062343 second(s), 11 queries , Gzip On, Redis On.

好东西啊,谢谢楼主
感谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

×

小黑屋| 手机版| 关于我们| 联系我们| 在线咨询| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2024-12-22 19:36 , Processed in 0.013960 second(s), 6 queries , Gzip On, Redis On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表