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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 961|回复: 9

[原创] createPathShield.il

[复制链接]
发表于 2024-6-18 19:20:30 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 YuSHL 于 2024-6-19 13:47 编辑

;;Function            :         createPathShield()
;;center Path lpp   :         leGetEntryLayer()        ;; Palette Layers seleted



                               
登录/注册后可看大图


createPathShield.rar

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

1

发表于 2024-6-18 21:13:26 | 显示全部楼层
谢谢
发表于 2024-8-15 15:42:26 | 显示全部楼层
亲测好用。
发表于 2024-8-17 22:31:06 | 显示全部楼层
谢谢分享
发表于 2024-10-14 17:40:29 | 显示全部楼层
thanks
 楼主| 发表于 2024-11-5 13:59:23 | 显示全部楼层
本帖最后由 YuSHL 于 2024-11-5 14:00 编辑


已修改,添加points转换到当前层的功能
;;|###########################################################################|
;;|                                                                                                        |
;;|Function                        :        createPathShield()                                        |
;;|center Path lpp        :        leGetEntryLayer()        ;alette Layers seleted        |
;;|                                                                                                        |
;;|###########################################################################|
hiSetBindKey("Layout" "Ctrl<Key>Z" "createPathShield()")
procedure(createPathShield()
       
        unless(boundp('createPathShieldForm)
                createPathShieldFormDone()
        )
        enterPath(
                ?form eval(createPathShieldForm)
                ?doneProc "createPathShieldDone"
                ?pathWidth 1.0
        )
)

procedure(createPathShieldDone(win done pts)
        when(done
                createPathShield_MainDone(
                        geGetEditCellView()
                        createPathShieldForm
                        pts
                        )
        );endwhen
)

procedure(createPathShieldFormDone()
        prog((cv width mode leftW leftSep leftLpp rightW rightSep
                rightLpp frame1 frame2)
                unless(cv = geGetEditCellView()
                        return(warn("Cannot get current cellView - %A\n" cv))
                );unless
                width = hiCreateFloatField(
                        ?name 'width
                        ?prompt "center Path W"
                        ?value 0.38
                )
                mode = hiCreateRadioField(
                        ?name 'mode
                        ?prompt "Lpp select"
                        ?choices list("SameASCenter" "DiffFromCenter")
                        ?value "SameASCenter"
                        ?callback list("createPathShield_BtnCB(createPathShieldForm)")
                )
                leftW = hiCreateFloatField(
                        ?name 'leftW
                        ?prompt "left W"
                        ?value 0.38
                )
                leftSep = hiCreateFloatField(
                        ?name 'leftSep
                        ?prompt "left Space"
                        ?value 0.30
                )
                leftLpp = leCreateLayerField(
                        'leftLpp
                        ?callback                                ""
                        ?techFile                                techGetTechFile(cv)
                        ?syncedPaletteWindow hiGetCurrentWindow()
                        ?enabled nil
                )
                rightW = hiCreateFloatField(
                        ?name 'rightW
                        ?prompt "right W"
                        ?value 0.38
                )
                rightSep = hiCreateFloatField(
                        ?name 'rightSep
                        ?prompt "right Space"
                        ?value 0.30
                )
                rightLpp = leCreateLayerField(
                        'rightLpp
                        ?callback                                ""
                        ?techFile                                techGetTechFile(cv)
                        ?syncedPaletteWindow hiGetCurrentWindow()
                        ?enabled nil
                )
                frame1 = hiCreateFrameField(?name 'frame1 ?labelText "left Path")
                frame2 = hiCreateFrameField(?name 'frame2 ?labelText "right Path")
               
                createPathShieldForm = hiCreateAppForm(
                        ?name 'createPathShieldForm
                        ?formTitle "createPathShieldForm"
                        ?formType 'options
                        ?buttonLayout 'HideCancel        ;OKCancelApply
                        ?minSize 320:300
                        ?callback ""
                        ?fields list(
                                list(width 10:10 300:30 100)
                                list(mode 10:50 300:30 100)
                                list(frame1 5:80 310:125 100)
                                list(leftW 10:90 300:30 100)
                                list(leftSep 10:130 300:30 100)
                                list(leftLpp 10:170 300:30 100)
                                list(frame2 5:210 310:125 100)
                                list(rightW 10:220 300:30 100)
                                list(rightSep 10:260 300:30 100)
                                list(rightLpp 10:300 300:30 100)
                        )
                )
                ;hiDisplayForm('createPathShieldForm)
                return(t)
        )
)

procedure(createPathShield_MainDone(cv form pts)
        prog((lpp )
                unless(cv
                        return(warn("lease open Layout cellView"))
                );unless
                when(cv->mode == "r"
                        return(warn("Current cellView is %A mode\n" cv->mode))
                );when
               
                lpp = leGetEntryLayer()
                width = form->width->value
               
                if(form->mode->value ==  "SameASCenter" then
                        leftLpp = lpp
                        rightLpp = lpp
                        else
                        leftLpp = parseString(form->leftLpp->value)
                        rightLpp = parseString(form->rightLpp->value)
                );end if
                leftW = form->leftW->value
                leftSep = form->leftSep->value
                rightW = form->rightW->value
                rightSep = form->rightSep->value
               
                createPathShield_Main(
                        cv
                        lpp
                        width
                        createPathShield_TransformBox(pts)
                        leftLpp
                        leftW
                        leftSep
                        rightLpp
                        rightW
                        rightSep)
        return(t)
        )
)

procedure(createPathShield_BtnCB(form "r")
        let((mode)
                when(form
                mode = form->mode->value
                case(mode
                        ("SameASCenter"
                                form->leftLpp->enabled = nil
                                form->rightLpp->enabled = nil
                        )
                        ("DiffFromCenter"
                                form->leftLpp->enabled = t
                                form->rightLpp->enabled = t
                        )
                )
                );end when
                t
        )
)

;;
procedure(createPathShield_Main(cv lpp width pts leftLpp leftW leftSep rightLpp rightW rightSep)
        let((Path)
                Path = rodCreatePath(
                        ?layer lpp
                        ?cvId cv
                        ?pts pts
                        ?width width
                        ?justification "center"
                        ?offsetSubPath list(
                                list(
                                        ?layer leftLpp
                                        ?width leftW
                                        ?sep leftSep
                                        ?justification "left"
                                        ?beginOffset 0.0
                                        ?endOffset 0.0
                                )
                                list(
                                        ?layer rightLpp
                                        ?width rightW
                                        ?sep rightSep
                                        ?justification "right"
                                        ?beginOffset 0.0
                                        ?endOffset 0.0
                                )
                        );end offset sub path
                );end rodCreatePath
                rodUnNameShape(Path)
        );end let
);end proc

;;
procedure(createPathShield_TransformBox(@optional pts(enterBox()) "l")
        when(pts
        foreach(mapcar x pts
            geWindowToEditPoint(hiGetCurrentWindow() x)
        );end foreach
    );end when
);end proc

发表于 2024-11-12 14:39:51 | 显示全部楼层
感觉可以调整下加DMY exclude层
 楼主| 发表于 2024-11-15 16:56:22 | 显示全部楼层


misloading 发表于 2024-11-12 14:39
感觉可以调整下加DMY exclude层


可以的,在rodCreatePath ?subPath里添加
发表于 3 天前 | 显示全部楼层


YuSHL 发表于 2024-11-15 16:56
可以的,在rodCreatePath ?subPath里添加


请教下这部分参数是怎么传递过来的,只要执行完enterPath就会有吗

企业微信截图_17320710762455.png
 楼主| 发表于 3 天前 | 显示全部楼层


这样的人 发表于 2024-11-20 10:56
请教下这部分参数是怎么传递过来的,只要执行完enterPath就会有吗


这个函数写在了enterPath ?funcdone,会在enterPath结束后自动传入这个函数
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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


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

GMT+8, 2024-11-23 18:32 , Processed in 0.029872 second(s), 8 queries , Gzip On, Redis On.

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