EDA365电子论坛网

标题: 通用对齐工具skill(任选对齐基准,移动元件使其被选中要素与基准对齐) [打印本页]

作者: fxz    时间: 2024-10-11 22:42
标题: 通用对齐工具skill(任选对齐基准,移动元件使其被选中要素与基准对齐)
本帖最后由 fxz 于 2024-10-12 16:31 编辑

个人写的通用对齐工具skill(任选对齐基准,移动元件使其被选中要素与基准对齐)

密码:fzhbjwd、命令ATO
操作:运行skill后
1、选择对齐基准(可以是pin、via、clinesegs)
2、选择模式(各symbol中被选中的元素,与基准对齐,确保它们具备相同横坐标/纵坐标)
3、选择第一个symbol
4、单击第一个symbol里需要与基准对齐的要素
则第一个symbol会移动,其被选中的基准与对齐基准,按照选择的模式对齐
5、选择第二个symbol
6、单击第二个symbol里需要与基准对齐的要素
则第二个symbol会移动,其被选中的基准与对齐基准,按照选择的模式对齐
。。。
完成后,右键->Done

1-选择对齐基准.PNG (432.64 KB, 下载次数: 11)

1-选择对齐基准.PNG

2-选择第一个symbol.PNG (414.25 KB, 下载次数: 9)

2-选择第一个symbol.PNG

3-选择第一个symbol的pin.PNG (415.35 KB, 下载次数: 11)

3-选择第一个symbol的pin.PNG

4-选择第二个symbol.PNG (411.83 KB, 下载次数: 10)

4-选择第二个symbol.PNG

5-选择第二个symbol的pin.PNG (415 KB, 下载次数: 10)

5-选择第二个symbol的pin.PNG

6-最终效果.PNG (404.14 KB, 下载次数: 9)

6-最终效果.PNG

20241011-Align.rar

2.7 KB, 下载次数: 22, 下载积分: 贡献 -30 , 威望 -10

Align skill操作视频.rar

9.52 MB, 下载次数: 8, 下载积分: 贡献 -30 , 威望 -10


作者: fymbl    时间: 2024-10-12 07:45
多谢分享。。。。。。。。。。
作者: fang123    时间: 2024-10-12 09:17
没有图片吗
作者: fxz    时间: 2024-10-12 12:23
fang123 发表于 2024-10-12 09:17
没有图片吗

已经更新了。新手发帖,不太熟。。。


作者: Vegeta    时间: 2024-10-12 13:38
mark一下看看
作者: db-_-    时间: 2024-10-12 15:38
5个金币?第一次见着还有要花金币的
作者: fxz    时间: 2024-10-12 16:35
db-_- 发表于 2024-10-12 15:38
5个金币?第一次见着还有要花金币的

发帖新手,没经验。。。
重新捣鼓了一下已经取消了

作者: 特洛伊    时间: 2024-10-12 22:41
谢谢分钟
作者: deam    时间: 2024-10-27 23:59
用不了,不要下载了
作者: ee_windy    时间: 2024-12-3 03:02
感谢分享
作者: janey0615    时间: 2024-12-3 10:46
本帖最后由 janey0615 于 2024-12-3 10:54 编辑

在command里输入ATO,有error。 我把.il放到PCBENV文件夹了。看起来是.il文件里面把路径设置成D盘根目录了。怎么修改这个目录呢?

谢谢

作者: PANSHER    时间: 2024-12-3 11:24
janey0615 发表于 2024-12-3 10:46
在command里输入ATO,有error。 我把.il放到PCBENV文件夹了。看起来是.il文件里面把路径设置成D盘根目录了 ...

贡献不够   可以分享到我邮箱吗   我给你看看

作者: janey0615    时间: 2024-12-3 13:59
PANSHER 发表于 2024-12-3 11:24
贡献不够   可以分享到我邮箱吗   我给你看看

站内发不了呢

作者: ywb_008    时间: 2024-12-16 15:24
实验了,确实有error,用不了。

微信图片_20241216152139.png (51.23 KB, 下载次数: 9)

微信图片_20241216152139.png

微信图片_20241216152150.png (43.33 KB, 下载次数: 11)

微信图片_20241216152150.png

作者: 08181001    时间: 2025-1-19 09:05
与楼上的情况一下,不同用
作者: fxz    时间: 2025-1-19 21:39
08181001 发表于 2025-1-19 09:05
与楼上的情况一下,不同用

我平时用的是EDA365skill里的user plugins加载自己写的skill,刚才也试了skill加载命令(命令栏输入skill load("D:/AlignToObject_ps.il" "fzhbjwd"),再输入命令ATO ),也没有问题

作者: fxz    时间: 2025-1-19 21:44
08181001 发表于 2025-1-19 09:05
与楼上的情况一下,不同用

如果您试了试还有问题的话,我私聊帮您看看?

作者: zhualuo2    时间: 2025-1-20 16:36
本帖最后由 zhualuo2 于 2025-1-20 16:37 编辑

出错,不能用,应该是skill文件里面有调用D:/AlignToObject.il的命令。估计skill文件只能放到D盘进行调用,且名字不能修改。
作者: fxz    时间: 2025-1-20 20:19
zhualuo2 发表于 2025-1-20 16:36
出错,不能用,应该是skill文件里面有调用D:/AlignToObject.il的命令。估计skill文件只能放到D盘进行调用, ...

刚才把skill放到E盘重新测试了一下,确实会报错,.应该就是您说的这个问题,因为我源码里有个加密语句encrypt("D:/AlignToObject.il" "D:/AlignToObject_ps.il" "fzhbjwd"),调用了D盘目录下的源码il文件生成加密版il文件
暂时没找到更好的解决方法,先分享源码吧

AlignToObject源码.rar

1.63 KB, 下载次数: 7, 下载积分: 贡献 -30 , 威望 -10


作者: fxz    时间: 2025-1-20 20:27
fxz 发表于 2025-1-20 20:19
刚才把skill放到E盘重新测试了一下,确实会报错,.应该就是您说的这个问题,因为我源码里有个加密语句enc ...

怎么压缩包还是30威望没法改,记得之前写skill放压缩包里回别人的贴,才5威望。。。那直接看吧
; --------------------------------------------------
; Allegro version: 16.6
; Written by: fxz
; date: 2024.02.23
; --------------------------------------------------
; 操作:1、首先选择一个pin/via/clineseg作为基准,2、弹窗内选择模式:把各元件选定要素与基准将x/y坐标对齐。3、选择元件后,点击元件上与基准对齐的部位,元件会被移动。4、完成操作后右键->Done
;               可以更改基准的可选种类,以及需要对齐的元素种类,实现任意元素向任意类型的基准对齐
; --------------------------------------------------

axlCmdRegister(
        "ATO"
        'Place_AlignToObject
        ?cmdType "interactive"
        ?doneCmd 'lnDone
        ?cancelCmd 'lnCancel
)

; --------------------------------------------------
; 主程序入口函数
; --------------------------------------------------
procedure(Place_AlignToObject()
        let(()
        ; 设置 find 栏参数,勾选 "pins" "vias""clinesegs"
                axlSetFindFilter(
                        ?enabled list("noall" "pins" "vias" "clinesegs")
                        ?onButtons list("noall" "pins" "vias" "clinesegs")
                )
        ; 设置右键弹出功能项
                ln_popup = axlUIPopupDefine(nil (list
                                                (list "Done" 'lnDone)
                                                (list "Oops" 'lnOops)
                                                (list "Cancel" 'lnCancel))
                                        )
                axlUIPopupSet(ln_popup)
               
                                       
        ; 定义一个循环标记
                notdone = t
                                ln_mark = axlDBTransactionStart()
                l_object1 = nil
        ; 等待获取第一个元素        并获取坐标
                        printf("Please select the 1st object as reference...\n")
                        l_object1 = axlGetSelSet(axlSingleSelectPoint())
                                                l_object11=car(l_object1)
                                                                pin_loc1=l_object11->xy
                                                                x1=nth(0 pin_loc1)
                                                y1=nth(1 pin_loc1)
                                Align_mode=axlUIMultipleChoice("Please Select Mode" '("The x of all ref point is same" "The y of all ref point is same"))
                                while(notdone                                               
        ; 如果获取了第一个元素,则准备点击元件       
                                             if(l_object1 then

                                                                axlSetFindFilter(
                                                                   ?enabled list("noall" "symbols")
                                                                   ?onButtons list("noall" "symbols")
                                                                         )
                                                                l_symbol1 = axlGetSelSet(axlSingleSelectPoint())  
                                                                l_symbol11 = car(l_symbol1 )  

                        )   
                 ; 如果获取了元件则准备点击与基准对齐的部位                           
                                             if(l_symbol1 then
                                                   axlSetFindFilter(
                                                        ?enabled list("noall" "pins" "vias" "clinesegs")
                                                        ?onButtons list("noall" "pins" "vias" "clinesegs")
                                                           )
                                                   printf("Please select the 2nd object of symbol...\n")
                           l_object2 = axlGetSelSet(axlSingleSelectPoint())                                                                           
                        )
                                                l_object22=car(l_object2)
                                                                pin_loc2=l_object22->xy
                                                                x2=nth(0 pin_loc2)
                                                y2=nth(1 pin_loc2)       
                                                                dx=x2-x1
                                                                dy=y2-y1
                                                                d1=list(-dx 0)
                                                                d2=list(0 -dy)
                        case(Align_mode
                                                                            (1  axlTransformObject(l_symbol11, ?move d2))
                                                                            (0  axlTransformObject(l_symbol11, ?move d1))                                                         
                                                                            (t printf("Error!!!\n"))
                                                                        );case
                                                 axlClearSelSet()
                                                      
                )
        )
)


; --------------------------------------------------
; 结束命令回调函数
; --------------------------------------------------
procedure(lnDone()
        let(()
                axlDBTransactionCommit(ln_mark)
                notdone = nil
                axlCancelEnterFun()
        )
)

; --------------------------------------------------
; 回撤命令回调函数
; --------------------------------------------------
procedure(lnOops()
        let(()
                axlDBTransactionOops(ln_mark)
                axlCancelEnterFun()
        )
)

; --------------------------------------------------
; 取消命令回调函数
; --------------------------------------------------
procedure(lnCancel()
        let(()
                axlDBTransactionCommit(ln_mark)
                notdone = nil
                axlCancelEnterFun()
        )
)



作者: zhualuo2    时间: 2025-1-21 10:57
本帖最后由 zhualuo2 于 2025-1-21 11:03 编辑
fxz 发表于 2025-1-20 20:27
怎么压缩包还是30威望没法改,记得之前写skill放压缩包里回别人的贴,才5威望。。。那直接看吧
; ------ ...

源码试过了,好用!感谢楼主分享!
另外,加密文件不需要把加密命令写进.il文件里吧。
这里分享一个自己写的加密解密工具(只能解密无密码的文件),可以方便加密操作。

Decrypt.rar

2.25 KB, 下载次数: 14, 下载积分: 贡献 -30 , 威望 -10


作者: fxz    时间: 2025-1-21 21:04
zhualuo2 发表于 2025-1-21 10:57
源码试过了,好用!感谢楼主分享!
另外,加密文件不需要把加密命令写进.il文件里吧。
这里分享一个自 ...

非常感谢,刚才试过了,直接在源码skill目录下生成加密版ile,很好用~






欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2