乐筑天下

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

[编程交流] 移动层内的所有对象

[复制链接]

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 18:46:35 | 显示全部楼层 |阅读模式
我Lisp程序(我记不起编码员!)这是通过在图形上选择将层内的所有对象移动到目标层,然后更改属性并合并空层。它工作正常,但根据我的需要,我不希望命令行提示层命名,我想进入预定义的“门”层。
 
 
也可能是多选而不是一选吗?
 
非常感谢。
MOVOBJS。lsp
回复

使用道具 举报

12

主题

152

帖子

140

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
60
发表于 2022-7-5 19:00:38 | 显示全部楼层
为什么不在宏中使用laymrg命令?
回复

使用道具 举报

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 19:11:43 | 显示全部楼层
它将成为DCL表单的一部分,还有其他带有laymrg的命令行提示符。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:17:14 | 显示全部楼层
这是一个多选择版本,在警报后检查额外的时间
 
  1. (defun c:MOVOBJS ( / a b s )
  2. (defun *error* (msg) (setvar "cmdecho" 1)
  3.                       (setq a nil b nil s nil)(princ) );end**
  4. (graphscr)
  5. (if (not usermel) (setq usermel "DOORS") );if
  6. (setq a (strcase (getstring (strcat
  7.   "Move Entire Layer \nEnter destination layer <" usermel ">: "))))
  8. (if (= (strlen a) 0) (setq a usermel) );if
  9. (if (> (strlen a) 0)
  10.      (progn
  11.       (while (not (tblsearch "layer" a))
  12.        (if (and (> (strlen a) 0) (/= a "Entry") );and
  13.         (progn
  14.          (initget "Yes No")
  15.          (setq b (getkword (strcat "\n" a " not in drawing base, "
  16.                             "create this layer? [Yes/No] <No>: "))) );progn
  17.         (setq a "Entry") );if
  18.        (if (= b "Yes")
  19.            (progn
  20.             (setvar "cmdecho" 0)
  21.             (command ".layer" "n" a "")
  22.             (if (/= (substr (getvar "clayer") 1 2) (substr a 1 2))
  23.                 (command ".layer" a "") );if
  24.             (princ (strcat "\nLayer " a " created and frozen. "))
  25.             (setvar "cmdecho" 1) );progn
  26.            (setq a (strcase (getstring (strcat
  27.                      "\n" a " invalid. Enter destination layer: ")))) );if
  28.        (setq b nil) );while
  29.       (setq usermel a) );progn
  30. );if
  31. (if (tblsearch "layer" usermel)
  32.   (progn
  33.    (Alert "Pick a object or pick nothing to exit)
  34.    (while (setq a (entget (car (entsel "\nSelect an object: "))))
  35.    (setq s (ssget "x" (list (cons 8 (cdr (assoc 8 a))))))
  36.    (setvar "cmdecho" 0)
  37.    (command ".chprop" s "" "la" usermel "")
  38.    (setvar "cmdecho" 1)
  39.    (princ (strcat "\n" (itoa (sslength s)) " object(s) on layer "
  40.                   (cdr (assoc 8 a)) " moved to layer " usermel "."))
  41. ) ; while
  42. );progn
  43.                   
  44. );if
  45. (setq a nil s nil)(princ)
  46. (COMMAND "-LAYER" "C" "122" "DOORS" "")
  47.    (vlax-for layout (vla-get-layouts
  48.        (vla-get-ActiveDocument (vlax-get-acad-object))
  49.     )
  50.      (if        (/= (vla-get-name layout) "Model")
  51.        (vla-delete layout)
  52.      )
  53.    )
  54.    (command "-purge" "all" "*" "N")
  55. )
回复

使用道具 举报

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 19:29:21 | 显示全部楼层
谢谢比格尔的修改。多选现在工作(我调试它有点错误),但我仍然得到用户提示,以确认层命名和。。。如下所示:
 
命令:MOVOBJS
移动整个层
输入目标图层:-门不在图形库中,是否创建此图层?[是/否]:是无效选项关键字>
输入选项?>
[?/Make/Set/New/Rename/ON/OFF/Color/Ltype/LWeight/MATerial/Plot/Freeze/Thaw/LOck
/解锁/状态/描述/协调]:*取消*-命令:MOVOBJS移动整个层
输入目标层:
选择对象:
层3上的1个对象移动到层门。
选择对象:
层1上的1个对象移动到层门。
 
 
令人惊讶的是,清除不起作用。
 
附件是新版本。
非常感谢
MOVOBJS。lsp
回复

使用道具 举报

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 19:30:10 | 显示全部楼层
我有一个lisp,它可以很好地处理单选。如何通过选择一个项目将其移动到目标层来修改此选项以移动整个层?
 
非常感谢
MOVOBJS2.lsp
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 19:42:40 | 显示全部楼层
加载后的一个建议是,不要键入您键入的movobjs(movobjs“Doors”),然后代码可以删除层“Doors”的硬编码,相反,例程会变得更通用,任何层名称都是目标名称。
 
建议2最好编写一个小defun来检查是否缺少层。好的是,您可以将其放入LISP库中,并根据需要从任何程序中调用。(chklay“doors”3“continuous”)
 
  1. ; NOT TESTED
  2. (defun c:MOVOBJS (usermel / a b s )
  3. (defun *error* (msg) (setvar "cmdecho" 1)
  4.                       (setq a nil b nil s nil)(princ) );end**
  5. (graphscr)
  6. (if (= usermel nil) (setq usermel "DOORS") );if
  7. (setq usermel (strcase usermel))
  8.       (setq laysrch (tblsearch "layer" usermel))
  9.        (if (= laysrch nil)
  10.          (command ".layer" "n" usermel "C" "122" usermel "")
  11.          (princ "layer exists")
  12.         )
  13.         
  14.    (Alert "Pick a object or pick nothing to exit")
  15.    (while (setq a (entget (car (entsel "\nSelect an object: "))))
  16.    (setq s (ssget "x" (list (cons 8 (cdr (assoc 8 a))))))
  17.    (setvar "cmdecho" 0)
  18.    (command ".chprop" s "" "la" usermel "")
  19.    (setvar "cmdecho" 1)
  20.    (princ (strcat "\n" (itoa (sslength s)) " object(s) on layer "
  21.             (cdr (assoc 8 a)) " moved to layer " usermel "."))
  22. ) ; while
  23.   
  24.    (vlax-for layout (vla-get-layouts
  25.        (vla-get-ActiveDocument (vlax-get-acad-object))
  26.    )
  27.    (if        (/= (vla-get-name layout) "Model")
  28.        (vla-delete layout)
  29.    )
  30.    
  31.    (command "-purge" "all" "*" "N")
  32.    (command "-purge" "all" "*" "N") ; sometimes need 2
  33. ) ;defun
回复

使用道具 举报

4

主题

11

帖子

7

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 19:47:51 | 显示全部楼层
抱歉,伙计,出现了“错误:参数太少”并试图解决它。谢谢
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 13:34 , Processed in 0.556410 second(s), 79 queries .

© 2020-2025 乐筑天下

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