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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 2000|回复: 51

[原创] 分享一个自动打孔和连线的脚本

[复制链接]
发表于 2024-8-26 13:28:38 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 唐亮 于 2024-8-26 13:28 编辑

脚本作用:
  • 把选中的两组线自动连接---每组线可以是单根,或者多根;先选横线或者竖线都可以;
  • 打孔(最少两个);
  • 收多余线头,避免DRC问题。



脚本局限:只能横向打孔,不能竖向打孔
脚本用法:
  • 按快捷键5,出现线选,需要选两次,每次选择的线数量必须一致;
  • 你选择的线的顺序就是连接顺序,比如(A B C)和(a b c)两组线会按照(A a)(B b) (C c)连接。





LineAndVia.txt

4.85 KB, 下载次数: 55 , 下载积分: 资产 -2 信元, 下载支出 2 信元

售价: 1 信元资产  [记录]

发表于 2024-8-26 18:02:24 | 显示全部楼层

                               
登录/注册后可看大图


请问楼主这是咋回事呢
发表于 2024-8-26 18:39:14 | 显示全部楼层
学习
发表于 2024-8-26 18:51:57 | 显示全部楼层
学习了
 楼主| 发表于 2024-8-26 21:01:37 来自手机 | 显示全部楼层


dddogda 发表于 2024-8-26 18:02
请问楼主这是咋回事呢


        s1~>beginPt = list(car(s1~>beginPt) cadr(~>beginPt) - w2)
第88行少了一个变量

改成
        s1~>beginPt = list(car(s1~>beginPt) cadr(s1~>beginPt) - w2)
 楼主| 发表于 2024-8-27 09:29:02 | 显示全部楼层
抱歉,原版是在服务器里写的,我不会导出到windows系统里,所以这版是手打的,可能会有错误,请大家指正,这个是修改88行之后的



hiSetBindKey("Layout" "<Key>5" "LineAndVia()")
procedure(findx()
prog((obj obj1)
obj = geGetSortedSelectByLine()
obj1 = geGetSortedSelectByLine()
return(lisy(obj obj1))
)
)
procedure(conline(list1 list2 dir)
let((s1 s2 w1 w2 a b c d s1b s1e s2b s2e dir tt tt2 area)
        x = length(list1)
        while(x>0
                s1 = car(nth(x-1 list1))
                s2 = car(nth(x-1 list2))
                w1 = s1~>width/2
                w2 = s1~>width/2
                a = caar(nth(0 list1)~>beginPt)
                b = caar(nth(x-1 list1)~>beginPt)
                c = cadar(nth(0 list2)~>beginPt)
                d = cadar(nth(x-1 list2)~>beginPt)
        cond(
                ((b-a)*(d-c)>0 tt = 1)
                ((b-a)*(d-c)<0 tt = 0)
        )
        s1b = s1~>beginPt s1e = s1~>endPt
        s2b = s1~>beginPt s2e = s1~>endPt
        cond(
                (dir == "7"
                        when(cadr(s1b) - cadr(s1e) < 0
                                dbSetPathSegPoints(s1 s1e s1b)
                        )
                        when(car(s2b) - car(s2e) < 0
                                dbSetPathSegPoints(s2 s2e s2b)
                        )
                        s1~>beginPt = list(car(s1~>beginPt) cadr(s2~>beginPt) + w2)
                        s2~>beginPt = list(car(s1~>beginPt) + w1 cadr(s2~>beginPt))
                        area = list(
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) - w2)
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) - w2)
                        )
                        tt = abs(tt-1)
                        CreatVia(area tt2)
                )
                (dir == "F"
                        when(cadr(s1b) - cadr(s1e) < 0
                                dbSetPathSegPoints(s1 s1e s1b)
                        )
                        when(car(s2b) - car(s2e) > 0
                                dbSetPathSegPoints(s2 s2e s2b)
                        )
                        s1~>beginPt = list(car(s1~>beginPt) cadr(s2~>beginPt) + w2)
                        s2~>beginPt = list(car(s1~>beginPt) - w1 cadr(s2~>beginPt))
                        area = list(
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) - w2)
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) - w2)
                        )
                        tt2 = abs(tt-1)
                        CreatVia(area tt2)
                )
                (dir == "J"
                        when(cadr(s1b) - cadr(s1e) > 0
                                dbSetPathSegPoints(s1 s1e s1b)
                        )
                        when(car(s2b) - car(s2e) < 0
                                dbSetPathSegPoints(s2 s2e s2b)
                        )
                        s1~>beginPt = list(car(s1~>beginPt) cadr(s2~>beginPt) - w2)
                        s2~>beginPt = list(car(s1~>beginPt) + w1 cadr(s2~>beginPt))
                        area = list(
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) - w2)
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) - w2)
                        )
                        CreatVia(area tt)
                )
                (dir == "L"
                        when(cadr(s1b) - cadr(s1e) > 0
                                dbSetPathSegPoints(s1 s1e s1b)
                                )
                        when(car(s2b) - car(s2e)
                                dbSetPathSegPoints(s2 s2e s2b)
                                )
                        s1~>beginPt = list(car(s1~>beginPt) cadr(s2~>beginPt) - w2)   ;已修改
                        s2~>beginPt = list(car(s1~>beginPt) - w1 cadr(s2~>beginPt))
                        area = list(
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) - w2)
                                                list(car(s1~>beginPt) - w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) + w2)
                                                list(car(s1~>beginPt) + w1 cadr(s2~>beginPt) - w2)
                        )
                        CreatVia(area tt)
                        )
        )
        x = x - 1
)
)
procedure(CreatVia(listin t1)
        let((t1 techFile constraintGroupId myViaOptions)
                cond(
                        (t1 == 0 t2 = "centerRight")
                        (t1 == 1 t2 = "centerLeft")
                        )
                techFile = techGetTechFile(geGetEditRep())
                constraintGroupId = cstFindCondtraintGroupIn(techFile "virtuosoDefaultSetup")
                myViaOptions = viaGetViaOptions(constraintGroupId)
                myViaOptions~>automatic~>viaAlignment = t2
                myViaOptions~>automatic~>minNumCuts = 2
                myViaOptions~>createInRoute = nil
                myViaOptions~>automatic~>preventDRCWithNeighbors = nil
                myViaOptions~>automatic~>cutBBoxOrientation = "horizontal"
                viaGenerateViasInArea(deGetCellView() listin myViaOptions)
                )
        )
procedure(LineAndVia()
        let((selid sel1 sel2 sel1lx sel1ly sel1rx sel1ry sel2lx sel2ly sel2rx sel2ry dir)
                selid = findx()
                sel1 = car(selid)
                sel2 = cadr(selid)
                if(length(sel1) != length(sel2)
                        then
                                printf("chong xin xuan ze !")
                        else
                                when(caar(car(sel1)~>beginPt) != caar(car(sel1)~>endPt)
                                        sel1 = cadr(selid)
                                        sel2 = car(selid)
                                        )
                                sel1lx = caar(car(car(sel1)~>bBox)) sel1ly = cadar(car(car(sel1)~>bBox))
                                sel1rx = caadr(car(car(sel1)~>bBox)) sel1ry = cadadr(car(car(sel1)~>bBox))
                                sel2lx = caar(car(car(sel2)~>bBox)) sel2ly = cadar(car(car(sel2)~>bBox))
                                sel2rx = caadr(car(car(sel2)~>bBox)) sel2ry = cadadr(car(car(sel2)~>bBox))
                                cond(
                                        ((sel2rx + sel2lx)/2 < sel1lx && sel2ly > (sel1ry + sel1ly)/2
                                                dir = "7"
                                                conline(sel1 sel2 dir)
                                                )
                                        ((sel2rx + sel2lx)/2 > sel1rx && sel2ly > (sel1ry + sel1ly)/2
                                                dir = "F"
                                                conline(sel1 sel2 dir)
                                                )
                                        ((sel2rx + sel2lx)/2 < sel1lx && sel2ry < (sel1ry + sel1ly)/2
                                                dir = "J"
                                                conline(sel1 sel2 dir)
                                                )
                                        ((sel2rx + sel2lx)/2 > sel1rx && sel2ry < (sel1ry + sel1ly)/2
                                                dir = "L"
                                                conline(sel1 sel2 dir)

                                                )
                                        )
                        )
                )
        )













发表于 2024-8-27 10:03:33 | 显示全部楼层
学习
发表于 2024-8-27 10:08:00 | 显示全部楼层
佬改完之后的少个括号
发表于 2024-8-27 10:28:09 | 显示全部楼层


yucer 发表于 2024-8-27 10:08
佬改完之后的少个括号


哪里少了
发表于 2024-8-27 10:31:05 | 显示全部楼层
本帖最后由 yeshaoxiangshen 于 2024-8-27 10:32 编辑

为啥会显示这个

括号问题解决了 为啥显示undefined

括号问题解决了 为啥显示undefined
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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

GMT+8, 2024-11-18 02:22 , Processed in 0.027821 second(s), 7 queries , Gzip On, Redis On.

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