乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 75|回复: 19

[编程交流] 层太多!!!需要mer

[复制链接]

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 10:17:30 | 显示全部楼层 |阅读模式
这就是交易,
我有一个虚假图层的列表,存在于一堆需要合并到正确图层的图形中。我试着为此编写一个脚本,但并不是所有的图形都有虚假的层,所以每次脚本到达不在图形中的层时都会被卡住。每次暂停后都必须恢复脚本并不节省时间。有谁知道lisp或其他类型的程序可以做到这一点?我已经附上了我写的脚本,如果可能的话,我可以做一些修改,让它工作。
PurgeAll。可控硅
回复

使用道具 举报

36

主题

183

帖子

151

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
185
发表于 2022-7-6 10:23:06 | 显示全部楼层
我编写的脚本调用了内置的层合并命令。我的问题是,有太多的绘图需要此修复,因此我想将其作为一个批处理文件,但是我编写的脚本经常会被卡住,并且不能节省时间。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 10:25:54 | 显示全部楼层
你可以试试这样:
 
  1. (defun MergeLayers (#OldLayers #NewLayers / #Layers)
  2. (setq #Layers (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
  3. (mapcar
  4.    '(lambda (o n)
  5.       (and (tblsearch "layer" o)
  6.            (or (tblsearch "layer" n) (vla-add #Layers n))
  7.            (vl-cmdf "_.-laymrg" "_n" o "" "_n" n "_y")
  8.       ) ;_ and
  9.     ) ;_ lambda
  10.    #OldLayers
  11.    #NewLayers
  12. ) ;_ mapcar
  13. ) ;_ defun

 
 
例子:
  1. (MergeLayers '("A" "B" "C" "D") '("1" "2" "3" "4"))
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:28:51 | 显示全部楼层
触摸更快:
 
  1. (defun MergeLayers (#OldLayers #NewLayers)
  2. (setq #Layers (cond (#Layers) ((vla-get-layers
  3.                                   (vla-get-activedocument (vlax-get-acad-object))))))
  4. (mapcar
  5.    (function
  6.      (lambda (o n)
  7.         (and (tblsearch "layer" o)
  8.              (or (tblsearch "layer" n) (vla-add #Layers n))
  9.              (vl-cmdf "_.-laymrg" "_n" o "" "_n" n "_y")))) #OldLayers #NewLayers))

 
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 10:31:31 | 显示全部楼层
(函数优于')有什么好处吗?
 
我曾想过让vla获得全局层,但它似乎没有意义,因为它将只运行一次,每个绘图。
 
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 10:34:45 | 显示全部楼层
只是因为我好奇:
 
  1. Command: (benchmark '( (tl) (ta) ))
  2. Elapsed milliseconds / relative speed for 32768 iteration(s):
  3.    (TL).....1578 / 1.01 <fastest>
  4.    (TA).....1593 / 1 <slowest>
  5. Command: (benchmark '( (tl) (ta) ))
  6. Elapsed milliseconds / relative speed for 32768 iteration(s):
  7.    (TL).....1594 / 1 <fastest>
  8.    (TA).....1594 / 1 <slowest>
  9. Command: (benchmark '( (tl) (ta) ))
  10. Elapsed milliseconds / relative speed for 32768 iteration(s):
  11.    (TL).....1593 / 1 <fastest>
  12.    (TA).....1594 / 1 <slowest>

 
 
  1. (defun tl ()
  2. (setq #Layers (cond (#Layers) ((vla-get-layers
  3.                                   (vla-get-activedocument (vlax-get-acad-object)))))))
  4. (defun ta ()
  5. (or #Layers (setq #Layers (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))))
回复

使用道具 举报

1

主题

316

帖子

311

银币

初来乍到

Rank: 1

铜币
29
发表于 2022-7-6 10:38:23 | 显示全部楼层
尝试对其进行基准测试,alan。我认为是vovka在theswamp上指出的
它使它更快。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 10:41:10 | 显示全部楼层
 
 
  1. Command: (benchmark '( (test1) (test2) ))
  2. Elapsed milliseconds / relative speed for 4096 iteration(s):
  3.    (TEST1).....1625 / 1 <fastest>
  4.    (TEST2).....1625 / 1 <slowest>
  5. Command: (benchmark '( (test1) (test2) ))
  6. Elapsed milliseconds / relative speed for 4096 iteration(s):
  7.    (TEST1).....1625 / 1 <fastest>
  8.    (TEST2).....1625 / 1 <slowest>
  9. Command: (benchmark '( (test1) (test2) ))
  10. Elapsed milliseconds / relative speed for 4096 iteration(s):
  11.    (TEST1).....1609 / 1.02 <fastest>
  12.    (TEST2).....1640 / 1 <slowest>
  13. Command: (benchmark '( (test1) (test2) ))
  14. Elapsed milliseconds / relative speed for 4096 iteration(s):
  15.    (TEST1).....1609 / 1.01 <fastest>
  16.    (TEST2).....1625 / 1 <slowest>
  1. (defun test1 (/)
  2. (repeat 10 (mapcar '(lambda (a b) (strcat a " " b))
  3.          '("A" "B" "C")
  4.          '("1" "2" "3"))))
  5. (defun test2 (/)
  6. (repeat 10 (mapcar (function (lambda (a b) (strcat a " " b)))
  7.          '("A" "B" "C")
  8.          '("1" "2" "3"))))

 
 
我需要在更复杂的东西上运行它。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:45:34 | 显示全部楼层
艾伦,
 
通过mapcar语句运行函数时,全局#层将更快
 
你的
 
  1. (defun tl ()
  2. (setq #Layers (cond (#Layers) ((vla-get-layers
  3.                                   (vla-get-activedocument (vlax-get-acad-object)))))))
  4. (defun ta ()
  5. (or #Layers (setq #Layers (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))))

 
不是有效的比较,因为两者都有#层全局。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 10:47:06 | 显示全部楼层
  1. Elapsed milliseconds / relative speed for 65536 iteration(s):
  2.    (TL).....1872 / 3.23 <fastest>
  3.    (TA).....6053 / 1.00 <slowest>

 
  1. (defun ta (/ #Layers)
  2. (setq #Layers (vla-get-Layers
  3.                  (vla-get-ActiveDocument
  4.                    (vlax-get-acad-object)))))
  5. (defun tl ( )
  6. (setq #Layers (cond (#Layers) ((vla-get-Layers
  7.                                   (vla-get-ActiveDocument
  8.                                     (vlax-get-acad-object)))))))
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 20:46 , Processed in 0.761592 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表