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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2793|回复: 15

[求助] 求一个选中一条金属线上所有via孔的脚本

[复制链接]
发表于 2022-12-8 15:30:47 | 显示全部楼层 |阅读模式

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

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

x
求一个选中一条金属线上所有via孔的脚本,谢谢。
发表于 2022-12-19 17:14:42 | 显示全部楼层
同问,有这样的脚本吗?
发表于 2022-12-20 17:58:23 | 显示全部楼层
本帖最后由 着着着火了 于 2023-2-14 11:27 编辑

procedure(SelViaFromNet()
    let((cv netList netMetal viaList layer1 layer2 newViaList)
        cv=geGetEditCellView()
        netList=geGetSelSet()

        foreach(net netList
            netMetal=net~>layerName
            viaList=leSearchHierarchy(cv net~>bBox 0 "via" nil)
            foreach(via viaList
                layer1=dbGetViaLayer(via "layer1")
                layer2=dbGetViaLayer(via "layer2")
                if(netMetal==layer1 || netMetal==layer2 then
                    newViaList=append1(newViaList via)
                );end if
            );end foreach
        );end foreach

        geDeselectAll()
        foreach(newVia newViaList
            geSelectObject(newVia)
        );end foreach
    );end let
);end procedure

可以一次选定好几根线运行,想要绑定快捷键就自己加一下,目前只能提取到stdVia,手动拉伸的那种就没考虑了,也够用了吧
 楼主| 发表于 2022-12-22 09:19:56 | 显示全部楼层
感谢大神
发表于 2023-1-10 15:02:03 | 显示全部楼层
学习了
发表于 2023-2-9 16:31:42 | 显示全部楼层


着着着火了 发表于 2022-12-20 17:58
procedure(SelViaFromNet()
    let((cv netList netMetal viaList layer1 layer2 newViaList)
        cv= ...


前几天忽然想起这个脚本写得有BUG,当PATH线不是纯直线的时候bBox就会是一个超出path线范围的Rectangle,改了一下:


在第一个foreach处改
------------------------------
foreach(net netList
    netMetal=net~>layerName
    if(net~>objType=="path" then
        for(i 0 net~>nPoints-2
            netBBox=list(nth(i net~>points) nth(i+1 net~>points))
            viaListTemp=leSearchHierarchy(cv netBBox 0 "via" nil)
            viaList=append(viaList viaListTemp)
            i++
        );end for
    else viaList=leSearchHierarchy(cv net~>bBox 0 "via" nil)
    );end if

foreach(via viaList
...
---------------------------------
发表于 2023-2-10 11:00:25 | 显示全部楼层
实验好久没成功,你试验过吗?改了几处写错的。
procedure(SelViaFromNet()
     let((cv netList netMetal viaList layer1 layer2 via)
         cv=geGetEditCellView()
         netList=geGetSelSet()
  
foreach(net netList
     netMetal=net~>layerName
     if(net~>objType=="path" then
         for(i 0 net~>nPoints-2
             netBBox=list(nth(i net~>points) nth(i+1 net~>points))
             viaListTemp=leSearchHierarchy(cv netBBox 0 "via" nil)
             viaList=append(viaList viaListTemp)
             i++
         );end for
     else viaList=leSearchHierarchy(cv net~>bBox 0 "via" nil)
     );end if
             );end foreach
         geDeselectAll()
         foreach(newVia via
             geSelectObject(newVia)
         );end foreach
     );end let
);end procedure
发表于 2023-2-10 15:11:17 | 显示全部楼层


wangzhongyan 发表于 2023-2-10 11:00
实验好久没成功,你试验过吗?改了几处写错的。
procedure(SelViaFromNet()
     let((cv netList netMetal ...


你咋把后面的那个foreach对via提取的代码给漏了呢
发表于 2023-2-13 11:20:25 | 显示全部楼层
实验了,搞不定,没有有dbGetViaLayer,给下过的脚本呗
layer1=dbGetViaLayer(via "layer1")
layer2=dbGetViaLayer(via "layer2")
发表于 2023-2-13 23:22:29 | 显示全部楼层


wangzhongyan 发表于 2023-2-13 11:20
实验了,搞不定,没有有dbGetViaLayer,给下过的脚本呗
layer1=dbGetViaLayer(via "layer1")
layer2=dbGetV ...


把我写的那两段代码整合一下就是可以用的代码了,我测试过没有问题。

我用的是IC61版本,不知道你说的问题是不是IC51不支持这个函数(我没在51测试过)
如果你想问我,点“回复”功能吧,不然我还真不知道你还有问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-8 02:40 , Processed in 0.021620 second(s), 6 queries , Gzip On, Redis On.

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