乐筑天下

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

[编程交流] 重命名块

[复制链接]

96

主题

322

帖子

234

银币

后起之秀

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

铜币
474
发表于 2022-7-6 06:33:55 | 显示全部楼层 |阅读模式
如何用lisp重命名图形中的块。
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

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

铜币
438
发表于 2022-7-6 06:37:50 | 显示全部楼层
第一:重命名功能不够好吗?
回复

使用道具 举报

96

主题

322

帖子

234

银币

后起之秀

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

铜币
474
发表于 2022-7-6 06:43:15 | 显示全部楼层
如果我们想选择block,请查看名称并用lisp8修改)
回复

使用道具 举报

17

主题

193

帖子

179

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
84
发表于 2022-7-6 06:44:50 | 显示全部楼层
 
我用这个老套路,但仍然做的工作。。。
 
  1. ;; RBLOCK.lsp  v1.0
  2. ;;
  3. ;; Copyright (c) 1998 by Innovative Programming
  4. ;; All Rights Reserved
  5. ;;
  6. ;; TERMS & AGREEMENT
  7. ;;   Permission to use, copy, modify, and distribute this software
  8. ;;   for any purpose and without fee is hereby granted, provided
  9. ;;   that the above copyright notice appears in all copies and that
  10. ;;   both copyright notice and this permission notice appears in
  11. ;;   all supporting documentation.
  12. ;;
  13. ;;   ANY USE OF THIS SOFTWARE IS AT YOUR OWN RISK AND IT IS PROVIDED
  14. ;;   "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.  ALL IMPLIED WARRANTIES
  15. ;;   OF FITNESS FOR ANY PARTICULAR PURPOSE AND OF MERCHANTABILITY ARE
  16. ;;   HEREBY DISCLAIMED.  NO LIABILITY FOR CONSEQUENTIAL DAMAGES.  IN NO
  17. ;;   EVENT SHALL INNOVATIVE PROGRAMMING BE LIABLE FOR INCIDENTAL,
  18. ;;   INDIRECT, OR CONSEQUENTIAL DAMAGES (INCLUDING, WITHOUT LIMITATION,
  19. ;;   DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS
  20. ;;   OF BUSINESS INFORMATION, OR ANY OTHER PECUNIARY LOSS) AS A RESULT
  21. ;;   OF THE USE OF OR INABILITY TO USE THIS SOFTWARE.
  22. ;;
  23. ;; PURPOSE:
  24. ;;   Rename user selected block.
  25. ;;
  26. ;; OTHER NOTES:
  27. ;;   None
  28. ;;
  29. ;; FUTURE REVISIONS:
  30. ;;   None
  31. ;;
  32. ;; REVISIONS:
  33. ;;   1.0  9/14/98  Released
  34. ;;
  35. (defun C:RBLOCK (/ SB SBD OLD_NAME NEW_NAME)
  36. (setq SB NIL)
  37. (while (null SB)
  38.    (setq SB (entsel "\nSelect block to RENAME: "))
  39.    (if SB
  40.      (progn (setq SB  (car SB)
  41.                   SBD (entget SB)
  42.             )
  43.             (if (= (cdr (assoc 0 SBD)) "INSERT")
  44.               (redraw SB)
  45.               (progn (redraw SB)
  46.                      (setq SB NIL)
  47.                      (princ "\nItem selected is not a block.")
  48.               )
  49.             )
  50.      )
  51.      (princ "\nNothing selected.  Try again.")
  52.    )
  53. )
  54. (setq OLD_NAME (cdr (assoc 2 SBD)))
  55. (princ (strcat "\n OLD Block Name: " OLD_NAME))
  56. (setq NEW_NAME (getstring "\n NEW Block Name: "))
  57. (command "rename" "b" OLD_NAME NEW_NAME)
  58. (princ (strcat "\n BLOCK RENAMED TO: " NEW_NAME))
  59. (princ)
  60. )
  61. (princ "\nRBLOCK Loaded.  Type RBLOCK to Start.")
  62. (princ)
回复

使用道具 举报

GP_

8

主题

248

帖子

245

银币

初来乍到

Rank: 1

铜币
42
发表于 2022-7-6 06:49:01 | 显示全部楼层
我的版本,也适用于动态和匿名块。
 
  1. ;;; file: RB_en.lsp                                                 ;;;
  2. ;;; data: 22/10/2008                                                ;;;
  3. ;;; note: Rename the selected block.                                ;;;
  4. ;;;                                                                 ;;;
  5. ;;; aggiornamento: (Versione 2) - 01/04/2009                        ;;;
  6. ;;;              - default sulla casella OK                         ;;;
  7. ;;;              - controllo esistenza nome blocco                  ;;;
  8. ;;;                                                                 ;;;
  9. ;;; aggiornamento: (Versione 3) - 02/04/2009                        ;;;
  10. ;;;              - allargata casella editazione nome blocco         ;;;
  11. ;;;                                                                 ;;;
  12. ;;; aggiornamento: (Versione 4) - 28/10/2012                        ;;;
  13. ;;;              - rinomina blocchi dinamici e blocchi anonimi      ;;;
  14. ;;;              - creazione di blocchi anonimi                     ;;;
  15. ;;;              - inglobamento DCL nel lisp                        ;;;
  16. ;;;                                                                 ;;;
  17. ;;; aggiornamento: (V. 4_en) - 20/05/2013                           ;;;
  18. ;;;              - English Version (for CADTutor)                   ;;;
  19. ;;;                                                                 ;;;
  20. ;;; autore: Gian Paolo Cattaneo                                     ;;;
  21. (defun c:RB (/ :bb old new dcl_id)
  22.    (prompt "\n ") (prompt "\n ") (prompt "\n ")
  23.    (if
  24.        (while (not :bb)
  25.            (setvar 'errno 0)
  26.            (setq :bb (car (entsel "\nSelect block to RENAME:")))
  27.            (if (= 7 (getvar 'errno))
  28.                (alert "Nothing selected.  Try again.")
  29.            )
  30.            (if (= 'ename (type :bb))
  31.                (if (null (wcmatch (cdr (assoc 0 (entget :bb))) "INSERT"))
  32.                    (progn
  33.                        (alert "Item selected is not a block.")
  34.                        (setq :bb nil)
  35.                    )
  36.                    (progn
  37.                        (setq old (vla-get-effectivename (vlax-ename->vla-object :bb)))
  38.                    )
  39.                )
  40.            )
  41.        )
  42.        (progn
  43.            (RB_dcl)
  44.            (while
  45.                (and
  46.                    (/= (strcase old) (strcase new))
  47.                    (tblsearch "BLOCK" new)
  48.                )
  49.                (alert "A block with this name already exists")
  50.                (RB_dcl)
  51.            )
  52.            (vla-put-Name
  53.                (vla-item
  54.                    (vla-get-blocks
  55.                        (vla-get-activedocument
  56.                            (vlax-get-acad-object)
  57.                        )
  58.                    )
  59.                    old
  60.                )
  61.                new
  62.            )
  63.        )
  64.    )
  65.    (prompt "\n ") (prompt "\n ") (prompt "\n ")
  66.    (princ)
  67. )
  68. (defun RB_dcl ( / DCLname)
  69.    (setq DCLname (strcat (getvar 'localrootprefix) "RB_V4_en.dcl"))
  70.    (if (not (findfile DCLname)) (crea_dcl_RB))   
  71.    (if (= POSIZ_DCL_RB nil) (setq POSIZ_DCL_RB (list -1 -1)))   
  72.    (setq dcl_id (load_dialog DCLname))      
  73.    (if (not (new_dialog "RB4" dcl_id "" POSIZ_DCL_RB)) (exit))   
  74.    (setq new old)
  75.    (set_tile "new" new)
  76.    (action_tile "new" "(setq new $value)")
  77.    (start_dialog)
  78.    (unload_dialog dcl_id)
  79. )
  80. (defun crea_dcl_RB (/ fn f)
  81.    (setq fn  DCLname)
  82.    (setq f (open fn "w"))
  83.    (write-line "RB4:dialog {" f)
  84.    (write-line "label = "RB - Rename Block (Vers. 4_en)";" f)
  85.    (write-line "" f)
  86.    (write-line "    initial_focus="new";" f)
  87.    (write-line "" f)
  88.    (write-line "    : spacer {}" f)
  89.    (write-line "    : spacer {}" f)
  90.    (write-line "    : spacer {}" f)
  91.    (write-line "" f)
  92.    (write-line "    : text {" f)
  93.    (write-line "    label = "New Block Name:";" f)
  94.    (write-line "    alignment = centered;" f)
  95.    (write-line "    } " f)
  96.    (write-line "" f)
  97.    (write-line "    : text {" f)
  98.    (write-line "    label = "(type:  *U  to create an Anonymous Block)";" f)
  99.    (write-line "    alignment = centered;" f)
  100.    (write-line "    } " f)
  101.    (write-line "" f)
  102.    (write-line "    : spacer {}" f)
  103.    (write-line "" f)   
  104.    (write-line "    : edit_box {" f)
  105.    (write-line "    key="new";" f)
  106.    (write-line "    allow_accept=true;" f)
  107.    (write-line "    }" f)
  108.    (write-line "" f)
  109.    (write-line "    : spacer {}" f)
  110.    (write-line "    : spacer {}" f)
  111.    (write-line "    : spacer {}" f)
  112.    (write-line "" f)
  113.    (write-line "    ok_only;" f)
  114.    (write-line "" f)
  115.    (write-line "    : spacer {}" f)
  116.    (write-line "    : spacer {}" f)
  117.    (write-line "    : spacer {}" f)
  118.    (write-line "" f)
  119.    (write-line "    : text { " f)
  120.    (write-line "    label = "Copyright  ©  2012  -  Gian Paolo Cattaneo";" f)
  121.    (write-line "    alignment = centered;" f)
  122.    (write-line "    }" f)
  123.    (write-line "" f)
  124.    (write-line "}" f)
  125.    (close f)
  126.    (load_dialog fn)
  127. )
  128. ;******************************************************************************
  129. (vl-load-com)
  130. (prompt "\n ") (prompt "\n ") (prompt "\n ")
  131. (princ "\nRename Block (V.4_en) - by Gian Paolo Cattaneo")
  132. (princ "\nType  RB  to Start")
  133. (princ)
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 06:49:58 | 显示全部楼层
基于Alan的问题,右键单击重命名有用吗?
回复

使用道具 举报

2

主题

389

帖子

387

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 06:54:18 | 显示全部楼层
:啊:你为什么问这个?我简要地看了一下你在其他地方的一些相关帖子。我认为这是一个有趣的问题,尤其是考虑到您在使人们更容易更改块名方面已经遇到的所有麻烦。 
我对你的问题的回答是否定的,在很多情况下这还不够好。我被我在飞行中遇到的大量匿名街区逼疯了。这里我不是指动态块。也许其中一些匿名块可能是合理的,但许多块非常重要,足以在图形中正确命名。选择一个块来找到它的匿名名称,然后转到“重命名”对话框,在列表中搜索它(我通常需要做两次才能确保),然后将其重命名为更合适的名称,这是一件很麻烦的事情。所以,谢谢你,艾伦,让这类事情变得更容易处理,更自动。也许你应该在这里引用或重复你的解决方案,也许是最新版本?
回复

使用道具 举报

48

主题

1073

帖子

1043

银币

后起之秀

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

铜币
238
发表于 2022-7-6 06:58:07 | 显示全部楼层
我不能代表艾伦,但我认为这是一个公平的开始。我们经常被要求使用“LISP”来完成一些可以使用标准AutoCAD命令轻松完成的事情。你已经给了Vven一个很好的例子来说明重命名命令以外的东西,但是如果OP想要一些简单的东西,他会立即得到回复。这里的很多人不想学习AutoCAD,但很乐意请别人为他们编写一个例程。
回复

使用道具 举报

44

主题

3166

帖子

2803

银币

中流砥柱

Rank: 25

铜币
557
发表于 2022-7-6 06:59:48 | 显示全部楼层
 
这在一定程度上是我右键单击重命名插件背后的动机(上面的链接)。。。它允许用户选择单个块(对于此特定示例),右键单击、重命名、块,然后输入新的块名称(显示/提供给-Rename命令的现有块名称)。就是这样。
 
只有应用于选定实体类型的项目可以通过关联菜单使用,并且只有可以重命名的项目可以在关联菜单项中启用。
 

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

使用道具 举报

2

主题

389

帖子

387

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 07:03:42 | 显示全部楼层
是的,我非常同意。在我理解被问的问题之前,我通常不愿意走得太远。对我来说,第一篇帖子清晰易懂似乎很少见。我很清楚,我不是想批评艾伦。远非如此。在这个特殊的例子中,通过LISP做一件非常有用的事情,即使OP真的不需要它。既然这个问题已经解决了,我认为如果Alan愿意的话,在这里发布或链接这个解决方案是一件好事。顺便说一句,我在另一个论坛上注意到了Alan的解决方案,但我在CADTutor上没有看到。也许我只是错过了?我将试着看一下BlackBox的解,看看我是否能理解它。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-10 18:29 , Processed in 0.534569 second(s), 75 queries .

© 2020-2025 乐筑天下

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