乐筑天下

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

[编程交流] 为所有la添加前缀或后缀

[复制链接]

1

主题

1

帖子

0

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 08:49:14 | 显示全部楼层 |阅读模式
我想看看我可以使用什么命令将“Exist”添加到图形中的所有图层。
 
我理解基本的lisp命令,
 
谢谢
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-6 08:53:43 | 显示全部楼层
您可能可以使用“rename”命令来完成。在“重命名”对话框中,输入“*”作为旧层名称以应用于所有层,然后输入“前缀*”或“*后缀”作为新名称。
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
0
发表于 2022-7-6 08:57:53 | 显示全部楼层
我已经做了一个小VBA函数来做到这一点,但不知道如何上传到这里。它有一个表单和编码。
窗口如下所示

                               
登录/注册后可看大图
回复

使用道具 举报

10

主题

253

帖子

75

银币

后起之秀

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

铜币
223
发表于 2022-7-6 09:01:37 | 显示全部楼层
您也可以尝试以下方法:
  1. (defun c:layrename (/ adoc str)
  2. (vl-load-com)
  3. (initget "Prefix Suffix _ P S")
  4. (setq    adoc   (vla-get-activedocument (vlax-get-acad-object))
  5.    answer (getkword "\nUse string like [Prefix/Suffix] <Prefix> : ")
  6.    str    (getstring "\nString to add <Exit> : ")
  7.    ) ;_ end of setq
  8. (vla-startundomark adoc)
  9. (if (not answer)
  10.    (setq answer "P")
  11.    ) ;_ end of if
  12. (vlax-for item (vla-get-layers adoc)
  13.    (vl-catch-all-apply
  14.      'vla-put-name
  15.      (list
  16.    item
  17.    (cond
  18.      ((= answer "P")
  19.       (strcat str (vla-get-name item))
  20.       )
  21.      (t
  22.       (strcat (vla-get-name item) str)
  23.       )
  24.      ) ;_ end of cond
  25.    ) ;_ end of list
  26.      ) ;_ end of VL-CATCH-ALL-APPLY
  27.    ) ;_ end of vlax-for
  28. (vla-endundomark adoc)
  29. (princ)
  30. ) ;_ end of defun
回复

使用道具 举报

0

主题

12

帖子

5

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-6 09:04:12 | 显示全部楼层
这是一个很好的惯例。你能做到你可以选择一个层或触摸和对象,只需将sufix默认为-extg或任何你想作为sufix的东西吗。我们正在使用aia标准,因此我们只需要添加一个-extg或-demo等的sufix。。
回复

使用道具 举报

63

主题

242

帖子

181

银币

后起之秀

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

铜币
319
发表于 2022-7-6 09:07:28 | 显示全部楼层
它是非常有用的lisp
但我认为,如果它能这样工作,它将更加有用和实用:
命令:选择图层(通过单击图形中的对象)
命令行中a层ppear的名称
然后单击另一个对象选择另一个图层
然后单击enter结束选择
命令:输入要添加到选定图层名称的后缀或前缀
然后所有选定层的名称都更改了
谢谢
回复

使用道具 举报

0

主题

12

帖子

5

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-6 09:09:21 | 显示全部楼层
这是我现在使用的,但它需要所有4个lisp例程。我有一种方法可以用宏或较短的lisp做同样的事情。我现在就是这样扣的。
^C^C(加载“NMELIST”);(加载“NCLTLIST”);(加载“ustr”);(加载“layerextg”)^C^Clayrn;
 
例行程序1
 
;此例程将重命名图形中的所有图层
;前缀为用户选择的后缀默认值“_BAK”。
;帮助插入接地
;
;使用它的一种方法是从
;建筑师。复制所有实体
 
(defun c:layrn()
(setq LsuffIX(ustr 1“Enter layer suffix”“-extg“nil))
(如果(非ncltlist)(加载“ncltlist”))
(setq文件(ncltlist)
外卖清单(汽车用品)
ENTS(cadr材料)
CNTR 0
)
(foreach LAYDAT LAYLIST(程序
(setq LAYNME2(strcat(car LAYDAT)LsufFIX))
(命令“layer”“m”LAYNME2“C”(cadr LAYDAT)“lt”(caddr LAYDAT)”“”)
(提示“-”)
)
)
(SETQ ALIS(SSGET))
(命令“CHANGE”ALIS““P”LT“hidden2”C“13”)
(重复(sslength ENTS)
(setq ENTDAT)
(subst
(缺点8
(strcat)
(cdr
(setq旧
(协会8)
(setq ENTDAT)
(entget)
(setq ENTNME)
(ssname ENTS CNTR)
)
)
)
)
)
)LsufFIX
)
)旧ENTDAT
)
)
(entmod ENTDAT)
(entupd ENTNME)
(setq CNTR(1+CNTR))
(提示“.”)
);重复
(普林斯)
)
 
例行程序2
 
;此例程列出所有(图层名称、颜色和线型)
;在选择中,PLUS返回表单中的选择集
;((N C LT)(N C LT)…)(选择集)
;
;要检索选择集,请使用(cadr(ncltlist))
;
;
(defun ncltlist()
(如果(非nmelist)(加载“nmelist”))
(setq STUFF(nmelist)
NCLT无
NLIST(汽车用品)
ss1(cdr材料)
)
(foreach LNAME NLIST(程序
(setq LDAT(tblsearch“layer”LNAME)
LCOLOR(cdr(ASSOC 62 LDAT))
LLTYPE(cdr(ASSOC 6 LDAT))
NCLT(CONS(list LNAME LCOLOR LLTYPE)NCLT)
)
)
)
(setq输出(cons NCLT ss1))
);德芬
 
例行程序3
 
;该例程列出了所有图层名称
;在选择中
(defun nmelist()
(setq cntr 0
NLIST'()
ss1(ssget)
)
(重复(sslength ss1)
(setq LYRNME(cdr(assoc 8(entget(ssname ss1 cntr 1070;))))
(如果(不是(成员LYRNME NLIST))
(setq NLIST(cons LYRNME NLIST))
)
(setq CNTR(1+CNTR))
);重复
(setq输出(list nlist ss1))
);德芬
 
 
例行程序4
 
;* USTR用户界面字符串
;* 如果位=1,则不允许输入null,0表示注释,如果存在DEF,则忽略位。
;* MSG是提示字符串,其中添加了一个默认字符串(nil)
;* 或“”表示无),并添加:号。如果SPFLAG T,则允许在
;* 一串
;*
(defun ustr(位msg def spflag/inp nval)
(如果(和def(/=def“”))
(setq msg(strcat“\n”msg”:)
inp(getstring msg spflag)
inp(if(=inp“”)def inp)
);setq公司
(程序
(setq msg(strcat“\n”msg”:)
(如果(=位1)
(while(=“”(setq inp(getstring msg spflag)))
(setq inp(getstring msg spflag))
) );编程和if
);如果
inp公司
);德芬
;*
回复

使用道具 举报

CAB

29

主题

781

帖子

430

银币

中流砥柱

Rank: 25

铜币
526
发表于 2022-7-6 09:13:59 | 显示全部楼层
这里有一个游戏:
  1. ;;  CAB 03.09.07
  2. ;;  LayerRename.lsp
  3. ;;  Rename selected layers with prefix or suffix
  4. (defun c:Lprefix()
  5. (LayerRename t)
  6. )
  7. (defun c:Lsuffix()
  8.   (LayerRename nil)
  9. )
  10. ;;  Use these to change the string
  11. (defun c:ChgPrefix ()
  12. (while
  13.    (progn
  14.      (initget 1)
  15.      (setq *prefix (getstring t "\nEnter the prefix: "))
  16.      (= "" *prefix)
  17.    )
  18.    (princ)
  19. )
  20. )(defun c:ChgSuffix ()
  21. (while
  22.    (progn
  23.      (initget 1)
  24.      (setq *suffix (getstring t "\nEnter the suffix: "))
  25.      (= "" *suffix)
  26.    )
  27. )
  28.   (princ)
  29. )
  30. (defun LayerRename (pre / obj lyr newlyr str getlyr)
  31. (defun GetLayer (Obj)
  32.    (vla-get-name (vla-item (vla-get-layers *doc*) (vla-get-layer Obj)))
  33. )
  34. (vl-load-com)
  35. (or *acad* (setq *acad* (vlax-get-acad-object)))
  36. (or *doc* (setq *doc* (vla-get-activedocument *acad*)))
  37. (if Pre
  38.    (if (or (null *prefix) (= *prefix "")) (c:ChgPrefix))
  39.    (if (or (null *suffix) (= *suffix "")) (c:ChgSuffix))
  40. )
  41. (if Pre
  42.    (setq str *prefix)
  43.    (setq str *suffix)
  44. )
  45. (while (setq ent (entsel "\nSelect an object to rename the layer."))
  46.    (setq obj (vlax-ename->vla-object (car ent)))
  47.    (cond
  48.      ((wcmatch (setq lyr (getlayer obj)) "*|*")
  49.       (prompt "\n**  Can not rename a xref layer.")
  50.      )
  51.      ((wcmatch lyr (strcat "*" str "*")) ; potential problems here
  52.       ;;  if the layer name inadvertenlt has the matching string
  53.       (prompt "\n**  This layer is already renamed.")
  54.      )
  55.      (t
  56.       (if Pre (setq newlyr (strcat str lyr)) (setq newlyr (strcat lyr str)))
  57.       (if (vl-catch-all-error-p
  58.             (vl-catch-all-apply
  59.               'vla-put-name
  60.               (list (vla-item (vla-get-layers *doc*) (vla-get-layer Obj))
  61.                     newlyr)))
  62.         (prompt (strcat "\n**  Layer " lyr " could not be renamed."))
  63.         (prompt (strcat "\nLayer " lyr " has been renamed."))
  64.       )
  65.      )
  66.    )
  67. )
  68. (princ)
  69. )
  70. (prompt (strcat "\nLayer Rename loaded, Enter LaRn to run."
  71.                "\nEnter ChgSuffix to change the siffix."))
  72. (princ)
回复

使用道具 举报

63

主题

242

帖子

181

银币

后起之秀

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

铜币
319
发表于 2022-7-6 09:14:53 | 显示全部楼层
你很棒,卡布先生
我尝试将2个路由组合在一起,以选择重命名所有层,或通过在一个命令中选择对象来逐个重命名,但我失败了,我这样做了
密码
(定义c:chlrnm(/*前缀)
(setq txtstle(getvar“textstyle”))
(initget 1“多单”)
(setq ser1(getkword“多层或单层(Single)”)
(如果(非ser1)
(程序
(setq ser1“单”)
)
)
(如果(=ser1“多”)
(程序
(vl load com)
(initget“前缀后缀_PS”)
(setq adoc(vla get activedocument(vlax get acad object))
答案(getkword)“\n使用类似字符串[前缀/后缀]
  1. : ")</prefix></p>
  2. <p>        str    (getstring "\nString to add <exit> : ")</exit></p>
  3. <p>        ) ;_ end of setq</p>
  4. <p>  (vla-startundomark adoc)</p>
  5. <p>  (if (not answer)</p>
  6. <p>    (setq answer "P")</p>
  7. <p>    ) ;_ end of if</p>
  8. <p>  (vlax-for item (vla-get-layers adoc)</p>
  9. <p>    (vl-catch-all-apply</p>
  10. <p>      'vla-put-name</p>
  11. <p>      (list</p>
  12. <p>        item</p>
  13. <p>        (cond</p>
  14. <p>          ((= answer "P")</p>
  15. <p>           (strcat str (vla-get-name item))</p>
  16. <p>           )</p>
  17. <p>          (t</p>
  18. <p>           (strcat (vla-get-name item) str)</p>
  19. <p>           )</p>
  20. <p>          ) ;_ end of cond</p>
  21. <p>        ) ;_ end of list</p>
  22. <p>      ) ;_ end of VL-CATCH-ALL-APPLY</p>
  23. <p>    ) ;_ end of vlax-for</p>
  24. <p>  (vla-endundomark adoc)</p>
  25. <p>      )</p>
  26. <p>      )</p>
  27. <p>  (if(= ser1 "Single")</p>
  28. <p>     (progn</p>
  29. <p> </p>
  30. <p>;;  Use these to change the string</p>
  31. <p>(defun c:ChgPrefix ()</p>
  32. <p>  (while</p>
  33. <p>    (progn</p>
  34. <p>      (initget 1)</p>
  35. <p>      (setq *prefix (getstring t "\nEnter the prefix: "))</p>
  36. <p>      (= "" *prefix)</p>
  37. <p>    )</p>
  38. <p>    (princ)</p>
  39. <p>  )</p>
  40. <p>)(defun c:ChgSuffix ()</p>
  41. <p>  (while</p>
  42. <p>    (progn</p>
  43. <p>      (initget 1)</p>
  44. <p>      (setq *suffix (getstring t "\nEnter the suffix: "))</p>
  45. <p>      (= "" *suffix)</p>
  46. <p>    )</p>
  47. <p>  )</p>
  48. <p>   (princ)</p>
  49. <p>)</p>
  50. <p> </p>
  51. <p> </p>
  52. <p>(defun LayerRename (pre / obj lyr newlyr str getlyr)</p>
  53. <p>  (defun GetLayer (Obj)</p>
  54. <p>    (vla-get-name (vla-item (vla-get-layers *doc*) (vla-get-layer Obj)))</p>
  55. <p>  )</p>
  56. <p>  (vl-load-com)</p>
  57. <p>  (or *acad* (setq *acad* (vlax-get-acad-object)))</p>
  58. <p>  (or *doc* (setq *doc* (vla-get-activedocument *acad*)))</p>
  59. <p>  (if Pre</p>
  60. <p>    (if (or (null *prefix) (= *prefix "")) (c:ChgPrefix))</p>
  61. <p>    (if (or (null *suffix) (= *suffix "")) (c:ChgSuffix))</p>
  62. <p>  )</p>
  63. <p>  (if Pre</p>
  64. <p>    (setq str *prefix)</p>
  65. <p>    (setq str *suffix)</p>
  66. <p>  )</p>
  67. <p>  (while</p>
  68. <p>    (setq ent (entsel "\nSelect an object to rename the layer."))</p>
  69. <p>    (setq obj (vlax-ename->vla-object (car ent)))</p>
  70. <p>    (cond</p>
  71. <p>      ((wcmatch (setq lyr (getlayer obj)) "*|*")</p>
  72. <p>       (prompt "\n**  Can not rename a xref layer.")</p>
  73. <p>      )</p>
  74. <p>      ((wcmatch lyr (strcat "*" str "*")) ; potential problems here</p>
  75. <p>       ;;  if the layer name inadvertenlt has the matching string</p>
  76. <p>       (prompt "\n**  This layer is already renamed.")</p>
  77. <p>      )</p>
  78. <p>      (t</p>
  79. <p>       (if Pre (setq newlyr (strcat str lyr)) (setq newlyr (strcat lyr str)))</p>
  80. <p>       (if (vl-catch-all-error-p</p>
  81. <p>             (vl-catch-all-apply</p>
  82. <p>               'vla-put-name</p>
  83. <p>               (list (vla-item (vla-get-layers *doc*) (vla-get-layer Obj))</p>
  84. <p>                     newlyr)))</p>
  85. <p>         (prompt (strcat "\n**  Layer " lyr " could not be renamed."))</p>
  86. <p>         (prompt (strcat "\nLayer " lyr " has been renamed."))</p>
  87. <p>       )</p>
  88. <p>      )</p>
  89. <p>    )</p>
  90. <p> </p>
  91. <p>    )</p>
  92. <p>  (princ)</p>
  93. <p>)</p>
  94. <p>       )</p>
  95. <p>)</p>
  96. <p>)</p>
  97. <p>;;;;;;;;;;;;</p>
  98. <p>any help will be a ppreciated</p>
  99.                        
  100.                  <p> </p>
  101. <p>Hi gman,</p>
  102. <p>test this code</p>
  103. <p></p>
  104. [code]
  105. (defun table (s / d r)                     ; Michael Puckett
  106. (while
  107.    (setq d (tblnext s (null d)))
  108.    (setq r (cons (cdr (assoc 2 d)) r))
  109.    )
  110. )
  111. (defun c:test (/ add lst xlay)
  112. (setq lst (cdr (reverse (table "layer"))))
  113. (setq add "Exist")
  114. (foreach x lst
  115.    (setq xlay (strcat x " - " add))
  116.    (command "_rename" "layer" x xlay)
  117.    )    ; foreach
  118. (princ)
  119. )      ; defun
回复

使用道具 举报

4

主题

24

帖子

16

银币

初来乍到

Rank: 1

铜币
27
发表于 2022-7-6 09:19:12 | 显示全部楼层
这很好,但我的目标是选择层,然后添加后缀。这个例程使所有后缀都存在。谢谢您的关注。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-7 08:11 , Processed in 0.497338 second(s), 75 queries .

© 2020-2025 乐筑天下

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