andyzhanglidan 发表于 2023-4-7 11:20:25

重金求助///iy 跟随格点大小变化

alias up iy 5/中的5这个数据,可以跟随格点的变化而变化,比如现在我的格点是5,当我执行一次up快捷键时,就往上走5个格点,当我格点设置成10的时候,我执行一次up命令,就可以往上走10个格点

andyzhanglidan 发表于 2023-4-10 08:53:41

有没有人会呀 重金求助
使用skill语言实现

hyper 发表于 2023-4-10 11:24:56

andyzhanglidan 发表于 2023-4-10 08:53
有没有人会呀 重金求助
使用skill语言实现

哈哈,什么情况,没人回啊

skny2011 发表于 2023-4-23 14:23:57

本帖最后由 skny2011 于 2023-4-23 14:25 编辑

第一步:获取当前格点,分ETCH和Non-ETCH
第二步:选择对象
第三步:判定对象是根据哪 种格点移动
第四步:移动即可

上下左右需要各定义一个函数

skny2011 发表于 2023-4-23 14:26:27

skny2011 发表于 2023-4-23 14:23
第一步:获取当前格点,分ETCH和Non-ETCH
第二步:选择对象
第三步:判定对象是根据哪 种格点移动


代码看是否能满足你所需求


axlCmdRegister("moveUpByGrid"                 'moveUpByGrid)
axlCmdRegister("moveDownByGrid"         'moveDownByGrid)
axlCmdRegister("moveLeftByGrid"         'moveLeftByGrid)      
axlCmdRegister("moveRightByGrid"         'moveRightByGrid)   
procedure(moveByGridStart(mode)
        prog(( grid etchDx etchDy nEtchDx nEtchDy)
                grid = axlDBGridGet("TOP")
                etchDx=car(grid->xGrids)
                etchDy=car(grid->yGrids)
                grid = axlDBGridGet("non-etch")
                nEtchDx=car(grid->xGrids)
                nEtchDy=car(grid->yGrids)
                done=nil
                dx = 0 dy = 0
                filterList=list("noall" "Symbols" "Vias" "Clines" "Lines" "Shapes" "Text")
          axlSetFindFilter( ?enabled filterList ?onButtons filterList)
                mark = axlDBTransactionStart()
          while( !done
                  axlClearSelSet()
                  axlSelect()
                  dbSelList = axlGetSelSet()
                        when(dbSelList
                                axlDBTransactionMark(mark)
                                foreach(dbSel dbSelList
                                        if( axlDBIsFixed(dbSel) then
                                                printf("FIXED, Ignore...\n")
                                        else
                                                dbType=dbSel->objType
                                                when(dbType=="path" && !dbSel->isEtch dbType="line")
                                                case(dbType
                                                        (("line" "text")
                                                                case(mode
                                                                        ("UP"                 dx=0 dy=nEtchDy)
                                                                        ("DOWN"         dx=0 dy=-nEtchDy)
                                                                        ("LEFT"         dx=-nEtchDx dy=0)
                                                                        ("RIGHT"         dx=nEtchDx dy=0)
                                                                )
                                                        )
                                                        (t
                                                                case(mode
                                                                        ("UP"                 dx=0 dy=etchDy)
                                                                        ("DOWN"         dx=0 dy=-etchDy)
                                                                        ("LEFT"         dx=-etchDx dy=0)
                                                                        ("RIGHT"         dx=etchDx dy=0)
                                                                )
                                                        )
                                                )
                                                axlTransformObject( dbSel ?move dx:dy )
                                        )
                                )
                        )
                        case( axlUIGetUserData()->doneState
                                (done done=t funUserDone(mark) axlUIWPrint(nil "Done!"))
                                (cancel done=t funUserCancel(mark) axlUIWPrint(nil "Cancel!"))
                        )
                )
        )
)

procedure(moveUpByGrid() moveByGridStart("UP"))
procedure(moveDownByGrid() moveByGridStart("DOWN"))
procedure(moveLeftByGrid() moveByGridStart("LEFT"))
procedure(moveRightByGrid() moveByGridStart("RIGHT"))

zwzlove 发表于 2024-1-11 18:29:08

本帖最后由 zwzlove 于 2024-1-11 18:38 编辑

以前在网上下载的大佬的skill,自己修改了一下。
;原程序每步移动值默认为1,修改需要额外运行程序。
;更改后每步移动值跟随当前Top的Grid设置。


文件名:z_move_screen.il加载方式:load("z_move_screen.il")调用命令:无,启动自动加载。功能介绍:按栅格移动屏幕。按键盘上的方向键进行上下左右移动,每一次移动距离为当前Grid中TOP所设置的值。在Move命令下,按键盘上的方向键可以实现按照格点连续移动器件等。例如: 格点设置为5,在Move命令下,选中器件后,按键盘的向下键,器件向下移动,每一步移动距离为5,移动到目的位置后按鼠标左键放下器件。更改格点设置,每一步移动的距离也跟着格点更改。移动时Point需选择User Pick。

skill20240614 发表于 2024-8-15 14:01:37

66666666666666
页: [1]
查看完整版本: 重金求助///iy 跟随格点大小变化