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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: sunxeu

[转贴] SKILL程序收集

[复制链接]
 楼主| 发表于 2020-9-9 10:23:31 | 显示全部楼层


zhaoxu12 发表于 2020-9-8 15:43
你好,请问打散的layout里,shapes的width和height怎么获取?


width=cadr(cadr(car(geGetSelSet())~>bBox))-cadr(car(car(geGetSelSet())~>bBox))
length=car(cadr(car(geGetSelSet())~>bBox))-car(car(car(geGetSelSet())~>bBox))
可以试试这个,应该还有更好的方法,感觉这个比较笨
 楼主| 发表于 2020-9-10 16:20:17 | 显示全部楼层




  1. procedure(CreateCrossRuler()
  2.           let( ( windowID enterpoint point cvID x y )
  3. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  4.                cvID = geGetEditCellView(getCurrentWindow());geGetWindowCellView()
  5.                windowID = getCurrentWindow()
  6.                enterpoint = enterPoint()
  7.                x = car(enterpoint)
  8.                y = cadr(enterpoint)
  9.                point = geWindowToEditPoint(windowID x:y)
  10. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  11.                dbCreateRuler(cvID list(point xCoord(point)+100:yCoord(point)))
  12.                dbCreateRuler(cvID list(point xCoord(point)-100:yCoord(point)))
  13.                dbCreateRuler(cvID list(point xCoord(point):yCoord(point)+100))
  14.                dbCreateRuler(cvID list(point xCoord(point):yCoord(point)-100))
  15.              ); end of let
  16. ); end procedure CreateCrossRuler
  17. hiSetBindKey("Layout" "<Key>6" "CreateCrossRuler()")



复制代码
发表于 2020-9-16 10:23:58 | 显示全部楼层
你好  打扰了  去线头的脚本只能用path线,而且只能是直线,不能带拐角  我是小白  请问这个有修改过的嘛
 楼主| 发表于 2020-9-16 10:28:41 | 显示全部楼层


wx148520 发表于 2020-9-16 10:23
你好  打扰了  去线头的脚本只能用path线,而且只能是直线,不能带拐角  我是小白  请问这个有修改过的嘛 ...


抱歉,我也是才开始学习SKILL不久,那个去线头的程序还没有研究到,所以我也不太清楚。
发表于 2020-9-16 11:09:09 | 显示全部楼层


sunxeu 发表于 2020-9-16 10:28
抱歉,我也是才开始学习SKILL不久,那个去线头的程序还没有研究到,所以我也不太清楚。
...


谢谢  谢谢
发表于 2020-9-16 21:45:13 | 显示全部楼层
好东西啊 感谢
发表于 2020-9-17 10:53:32 | 显示全部楼层
image.png
大佬,我load脚本的时候出现了这个错误,不知道是因为什么原因引起的
 楼主| 发表于 2020-9-21 10:29:48 | 显示全部楼层




  1. hiSetBindKey("Layout" "None<Btn2Down>" "xiubian()")

  2. procedure(xiubian()
  3.       let((windowID cvID point viaList bBox pointbBox layer1 layer2 netList net via path Rect netAbBox notcutnet
  4.            pathList1 pathList2 pathList RectangleList Rectlayer via2List via2 net2 pathlayer width polygonList
  5.            viabBox viax viay netEndPoints netBeginPoints netBeginx netBeginy netEndx netEndy netmetal net2List
  6.            path2List Rect2List pathSeg2List netBeginxbk netBeginybk polygon)
  7.           windowID = getCurrentWindow()
  8.           cvID = geGetEditCellView(windowID)
  9.           point=enterPoint()
  10.           pointbBox = list(xCoord(point)-0.01:yCoord(point)-0.01 xCoord(point)+0.01:yCoord(point)+0.01)
  11.           viaList = leSearchHierarchy(cvID pointbBox 0 "via" nil)
  12.           foreach(via viaList
  13.                   layer1 = dbGetViaLayer(via "layer1")
  14.                   layer2 = dbGetViaLayer(via "layer2")
  15.                   viabBox = via~>bBox
  16.                   RectangleList = leSearchHierarchy(cvID viabBox 0 "rectangle" nil)
  17.                   foreach(Rect RectangleList
  18.                           Rectlayer=Rect~>layerName
  19.                           if(Rectlayer==layer1 || Rectlayer==layer2
  20.                              leConvertPolygonToPath(Rect)
  21.                             );if
  22.                          );foreach
  23.                   polygonList = leSearchHierarchy(cvID viabBox 0 "polygon" nil)
  24.                   foreach(polygon polygonList
  25.                           polygonlayer=polygon~>layerName
  26.                           if(polygonlayer==layer1 || polygonlayer==layer2
  27.                              leConvertPolygonToPath(polygon)
  28.                             );if
  29.                          );foreach
  30.                   pathList = leSearchHierarchy(cvID viabBox 0 "path" nil)
  31.                   foreach(path pathList
  32.                           pathlayer=path~>layerName
  33.                           if(pathlayer==layer1 || pathlayer==layer2
  34.                              leConvertShapeToPathSeg(path)
  35.                             );if
  36.                          );foreach
  37.                   netList = leSearchHierarchy(cvID viabBox 0 "pathSeg" nil)
  38.                   foreach(net netList
  39.                        netmetal = net~>layerName
  40.                        if(netmetal==layer1 || netmetal==layer2 then
  41. ;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~            
  42.                           net~>endStyle = "truncate"
  43.                           net~>beginStyle = "truncate"
  44.                           width = net~>width
  45.                           netType = net~>objType
  46.                           viabBox = via~>bBox
  47.                           viax = car(via~>origin)
  48.                           viay = cadr(via~>origin)
  49.                           notcutnet = 0
  50.                           netEndPoints = net~>endPt
  51.                           netBeginPoints = net~>beginPt
  52.                           netBeginx = car(netBeginPoints)            
  53.                           netBeginy = cadr(netBeginPoints)
  54.                           netEndx = car(netEndPoints)
  55.                           netEndy = cadr(netEndPoints)
  56.                           if(netBeginy!=netEndy
  57.                              then dy1 = abs(netBeginy-viay)
  58.                                   dy2 = abs(netEndy-viay)
  59.                                   if(dy2>dy1
  60.                                      then netBeginxbk = netBeginx
  61.                                      netBeginybk = netBeginy
  62.                                      netBeginx = netEndx
  63.                                      netBeginy = netEndy
  64.                                      netEndx = netBeginxbk
  65.                                      netEndy = netBeginybk
  66.                                     );if
  67.                                   netAbBox = list((netEndx-netwidth/2):netEndy (netEndx+netwidth/2):viay)
  68.                                   via2List = remove(via leSearchHierarchy(cvID netAbBox 0 "via" nil))
  69.                                   path2List = leSearchHierarchy(cvID netAbBox 0 "path" nil)
  70.                                   pathSeg2List = leSearchHierarchy(cvID netAbBox 0 "pathSeg" nil)
  71.                                   Rect2List = leSearchHierarchy(cvID netAbBox 0 "rectangle" nil)
  72.                                   net2List = append(append(path2List pathSeg2List) Rect2List)
  73.                                   net2List = remove(net net2List);pathSeg2List)
  74.                                   foreach(net2 net2List
  75.                                          if(net2~>layerName==netmetal
  76.                                              then notcutnet = notcutnet+1
  77.                                             );if
  78.                                         );foreach
  79.                                   foreach(via2 via2List
  80.                                                layer21 = dbGetViaLayer(via2 "layer1")
  81.                                                layer22 = dbGetViaLayer(via2 "layer2")
  82.                                                if(layer21==netmetal || layer22==netmetal
  83.                                                   then notcutnet = notcutnet+1
  84.                                                  );if
  85.                                               );foreach
  86.                                   if(notcutnet==0
  87.                                      then if(dy2>dy1
  88.                                           then net~>beginPt = (netBeginx:viay)
  89.                                           else net~>endPt = (netEndx:viay)
  90.                                             );if
  91.                                           notcutnet = 0
  92.                                      else notcutnet = 0
  93.                                     );if
  94.                              else dx1 = abs(netBeginx-viax)
  95.                                   dx2 = abs(netEndx-viax)
  96.                                   if(dx2>dx1
  97.                                      then netBeginxbk = netBeginx     
  98.                                      netBeginybk = netBeginy
  99.                                      netBeginx = netEndx   
  100.                                      netBeginy = netEndy
  101.                                      netEndx = netBeginxbk
  102.                                      netEndy = netBeginybk
  103.                                     );if
  104.                                   netAbBox = list(netEndx:(netEndy-width/2) viax:(netEndy+width/2))
  105.                                   via2List = remove(via leSearchHierarchy(cvID netAbBox 0 "via" nil))
  106.                                   path2List = leSearchHierarchy(cvID netAbBox 0 "path" nil)
  107.                                   pathSeg2List = leSearchHierarchy(cvID netAbBox 0 "pathSeg" nil)
  108.                                   Rect2List = leSearchHierarchy(cvID netAbBox 0 "rectangle" nil)
  109.                                   net2List = append(append(path2List pathSeg2List) Rect2List)
  110.                                   net2List = remove(net net2List)
  111.                                   foreach(net2 net2List
  112.                                           if(net2~>layerName==netmetal
  113.                                              then notcutnet = notcutnet+1
  114.                                             );if
  115.                                         );foreach
  116.                                   foreach(via2 via2List
  117.                                                layer21 = dbGetViaLayer(via2 "layer1")
  118.                                                layer22 = dbGetViaLayer(via2 "layer2")
  119.                                                if(layer21==netmetal || layer22==netmetal
  120.                                                   then notcutnet = notcutnet+1
  121.                                                  );if
  122.                                               );foreach
  123.                                   if(notcutnet==0
  124.                                      then if(dx2>dx1
  125.                                           then net~>beginPt = (viax:netEndy)
  126.                                           else net~>endPt = (viax:netEndy)
  127.                                             );if
  128.                                           notcutnet = 0
  129.                                      else notcutnet = 0
  130.                                     );if
  131.                               );if
  132.                          );foreach
  133.                  );if
  134.                  );foreach
  135.          );let
  136.          );procedure



复制代码
发表于 2020-9-21 11:08:43 | 显示全部楼层


你好 请问这个是功能是那个相同层去线头的嘛?
 楼主| 发表于 2020-9-21 12:53:00 | 显示全部楼层


wx148520 发表于 2020-9-21 11:08
你好 请问这个是功能是那个相同层去线头的嘛?


这个是按鼠标滚轮,然后点击孔,就会自动cut掉和孔同层且较短的一边,如果较短的一边有其他孔或者同层的net,则不会cut掉
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-21 23:01 , Processed in 0.021818 second(s), 6 queries , Gzip On, Redis On.

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