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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 1895|回复: 7

[原创] 分享一个用鼠标滚轮换过孔的skill脚本

[复制链接]
发表于 2022-12-16 18:38:53 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 着着着火了 于 2022-12-16 18:40 编辑

这个脚本是最近在画图过程中经常从附近复制了一个via,但层不对,还得q一下点点点才能换,因为经常用到,搜了一下都是用鼠标滚轮控制过孔增减的,所以就参考这个脚本自己写了一个类似的。
================================================
upVia="upVia"
downVia="downVia"

procedure(ChangeVia(dir)
    let((cv instList viaList viaValue)
        cv=geGetEditCellView()
        instList=geGetSelSet()
        viaList=setof(obj instList obj~>objType=="stdVia")
        foreach(via viaList
            viaValue=via~>viaHeader~>viaDefName
            when(dir=="upVia"
                case(viaValue
                    ("via1" leReplace(cv list(via) list(list("via definition" nil "via2"))))
                    (t nil)
                )
            );end when
            when(dir=="downVia"
                case(viaValue
                    ("via2" leReplace(cv list(via) list(list("via definition" nil "via1"))))
                    (t nil)
                )
             );end when
        );end foreach
    );end let
);end procedure

hiSetBindKeys("Layout" list(
    list("Alt<Btn4Down>" "ChangeVia(upVia)")
    list("Alt<Btn5Down>" "ChangeVia(downVia)")
    )
)
======================================================

viaValue中的via1、via2可以根据自己用的工艺替换,也可以照着格式继续增加via3、via4等等。

目前这个脚本有个小问题就是换完一次via后会自动把选取的目标取消掉,如果要继续换还得重新选中,一直没想明白是哪一步出了问题,但是因为我要换的层很少,就没深究这个了,如果有懂的大神可以告诉一下








发表于 2023-1-11 21:39:13 | 显示全部楼层
leReplace那一步,孔的dbId变了,就不是选中状态了
 楼主| 发表于 2023-1-12 15:25:09 | 显示全部楼层


飞鸟入山林 发表于 2023-1-11 21:39
leReplace那一步,孔的dbId变了,就不是选中状态了


秒懂,感谢
发表于 2023-3-17 16:05:46 | 显示全部楼层


修改孔后 ,不选中的问题解决了吗??
 楼主| 发表于 2023-3-17 17:24:17 | 显示全部楼层


灌篮高手 发表于 2023-3-17 16:05
修改孔后 ,不选中的问题解决了吗??


我并没有去解决这个问题,因为我要换的层不多,所以就没改代码了。

要解决也挺简单的,把leReplace(cv list(via) list(list("via definition" nil "via1")))出来的值赋予一个新的变量,然后把这些变量合成一个newList,换完孔后用geSelectFigs(newList)再选一次,从视觉效果来看所选的via还是编辑的那几个,这就达到了修改后还是保持选中的问题。
上面的是思路,实际可能会有bug,debug一下就好了。
发表于 2023-3-22 15:33:33 | 显示全部楼层


着着着火了 发表于 2023-3-17 17:24
我并没有去解决这个问题,因为我要换的层不多,所以就没改代码了。

要解决也挺简单的,把leReplace(cv l ...


感谢你的回复,但是leReplace 的返回值是t,并不能把新孔的db提取出来。。,你的思路和我想的是一样的,但是就是没法在修改后获得新孔的db
 楼主| 发表于 2023-3-30 14:10:45 | 显示全部楼层


灌篮高手 发表于 2023-3-22 15:33
感谢你的回复,但是leReplace 的返回值是t,并不能把新孔的db提取出来。。,你的思路和我想的是一样的 ...


我一开始是想通过修改目标孔的via difinition来实现的,但没有成功,找不到门路,所以才用了leReplace()来替代,因为没有处理那个问题所以没注意到返回值的问题。

按照现有的代码来改的话,可以在case判断后的执行语句里利用leSearchHierarchy()、dbShapeQuery()、dbGetOverlaps()这类函数来搜索出修改后的孔,然后用geSelectObject()来选应该可行吧
发表于 2024-8-18 13:48:36 | 显示全部楼层
谢谢分享
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-30 18:53 , Processed in 0.025988 second(s), 6 queries , Gzip On, Redis On.

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