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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
楼主: 唐亮

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

[复制链接]
发表于 2024-8-27 15:53:01 | 显示全部楼层
本帖最后由 yucer 于 2024-8-27 15:56 编辑


唐亮 发表于 2024-8-27 15:29
这个线是要求panthSeg,你是用path画的线吗?


不太对啊,佬我wire线和path线都没有反应啊,是需要xl关系么

报Debug 51>

哦,可以了wire线可以,但是不会打孔
 楼主| 发表于 2024-8-27 15:59:23 | 显示全部楼层
本帖最后由 唐亮 于 2024-8-27 16:09 编辑


yucer 发表于 2024-8-27 15:53
不太对啊,佬我wire线和path线都没有反应啊,是需要xl关系么

报Debug 51>


不需要XL关系,线正常可以动,不能打孔,这个我再看一下

  你可以在116行后面加上
print(t2)
print(myViaOptions~>automatic~>??)
把这两句加上,运行一下,我看看CIW结果
发表于 2024-8-27 16:43:16 | 显示全部楼层


线可以正常收缩了 不打孔i
2.png
发表于 2024-8-27 16:48:37 | 显示全部楼层


yeshaoxiangshen 发表于 2024-8-27 16:43
线可以正常收缩了 不打孔i


找到原因了 617 没有viaGetViaoptions这个函数
发表于 2024-8-27 16:55:27 | 显示全部楼层


唐亮 发表于 2024-8-27 15:59
不需要XL关系,线正常可以动,不能打孔,这个我再看一下

  你可以在116行后面加上


这样滴
cb5a75276385e773872545a933f8972.png
 楼主| 发表于 2024-8-27 17:09:56 | 显示全部楼层



第110行写错了,已修改

hiSetBindKey("Layout" "<Key>5" "LineAndVia()")
procedure(findx()
prog((obj obj1)
obj = geGetSortedSelectByLine()
obj1 = geGetSortedSelectByLine()
return(list(obj obj1))   ;已修改
)
)
procedure(conline(list1 list2 dir)
let((s1 s2 w1 w2 a b c d s1b s1e s2b s2e tt tt2 area)   ;已修改,删掉了dir
        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((techFile constraintGroupId myViaOptions)  ;已修改,删掉了t1
                cond(
                        (t1 == 0 t2 = "centerRight")
                        (t1 == 1 t2 = "centerLeft")
                        )
                techFile = techGetTechFile(geGetEditRep())
               constraintGroupId = cstFindConstraintGroupIn(techFile "virtuosoDefaultSetup")  ;已修改,函数名为cstFindConstraintGroupIn
                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 17:16:03 | 显示全部楼层


唐亮 发表于 2024-8-27 17:09
第110行写错了,已修改

hiSetBindKey("Layout" "5" "LineAndVia()")


又出现新的问题了,而且也没有打出孔
11823f66b0e577d144cd71e918f8e65.png
 楼主| 发表于 2024-8-27 17:24:24 | 显示全部楼层


yucer 发表于 2024-8-27 17:16
又出现新的问题了,而且也没有打出孔


你在110行后面加上

print(techFile)
print(constraintGroupId)
我看一下CIW结果
 楼主| 发表于 2024-8-27 17:45:49 | 显示全部楼层


yeshaoxiangshen 发表于 2024-8-27 16:48
找到原因了 617 没有viaGetViaoptions这个函数


我用的就是617,有这个函数,你看一下大小写是不是写错了
 楼主| 发表于 2024-8-27 17:47:38 | 显示全部楼层


yeshaoxiangshen 发表于 2024-8-27 16:43
线可以正常收缩了 不打孔i


这个错误已经修改了,函数名写错了
第110行


constraintGroupId = cstFindConstraintGroupIn(techFile "virtuosoDefaultSetup")

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

×

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

GMT+8, 2024-11-18 04:47 , Processed in 0.032177 second(s), 6 queries , Gzip On, Redis On.

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