明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4616|回复: 14

[已解答] 求助!RENAME加強、改块基点

[复制链接]
发表于 2013-12-26 23:38:26 | 显示全部楼层 |阅读模式
我在平时工作中,经常用到RENAME这个命令更改图块名字,但常常需要先记下要更改的图块名字,然后用RENAME命令,找到相应的块,然后赋予新的块名称,操作起来效率较低。

希望高手帮忙写个2个LISP,实现以下功能:
LISP1
1.当前有选择块对象时,可以直接输入新的名字更改;
2.当前无选择块对象时,提示选择,然后输入名字。

LISP2
1.当前有选择块对象时,可以直接输入或指定新的基点;
2.当前无选择块对象时,提示选择,输入或指定新的基点。

谢谢大家!





发表于 2013-12-27 00:05:30 | 显示全部楼层
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=87852
除了无预选择功能外
基本满足你的需要
 楼主| 发表于 2013-12-27 02:27:02 | 显示全部楼层
masterlong 发表于 2013-12-27 00:05
http://bbs.mjtd.com/forum.php?mod=viewthread&tid=87852
除了无预选择功能外
基本满足你的需要

上面那个贴子的附件我下载了,但是不知道怎么用。。。
发表于 2013-12-27 21:10:52 | 显示全部楼层
改块名字的,不记得是哪个大师写的了,自己一直在用
  1. (vl-load-com)
  2. (defun c:RN (/ ent name name1 dclname tempname filen stream dcl_re dlg new obj blocks BlkNam block DOC )
  3.   (if (and (setq ent (car (entsel "\n选择需要改名的块: ")))
  4.            (or (eq "INSERT" (cdr (assoc 0 (entget ent)))) (alert "没有选择块!"))
  5.       )
  6.     (progn
  7.       (setq name (cdr (assoc 2 (entget ent))))
  8.       (setq dclname
  9.         (cond  
  10.           (
  11.             (setq tempname (vl-filename-mktemp "re-dcl-tmp.dcl") filen (open tempname "w"))
  12.             (foreach stream '(  
  13. "\n"
  14. "RENAME:dialog {\n"
  15. "    label = \"修改块名\" ;\n"
  16. "    :row {\n"
  17. "        :edit_box {\n"
  18. "            key = \"dcl_edit_name\" ;\n"
  19. "            width = 30 ;\n"
  20. "        }\n"
  21. "    }\n"
  22. "    :row {\n"
  23. "        :button {\n"
  24. "            key = \"btn_ok\" ;\n"
  25. "            label = \"确认\" ;\n"
  26. "        }\n"
  27. "        :button {\n"
  28. "            is_cancel = true ;\n"
  29. "            key = \"btn_cancle\" ;\n"
  30. "            label = \"取消\" ;\n"
  31. "        }\n"
  32. "    }\n"
  33. "}\n"
  34.               )
  35.               (princ stream filen)
  36.             )
  37.             (close filen)
  38.             tempname
  39.           )
  40.         )
  41.       )
  42.       (setq DOC (vla-get-ActiveDocument (vlax-get-acad-object)))
  43.       (setq obj (vlax-ename->vla-object ent))
  44.       (setq blocks (vla-get-blocks DOC))
  45.       (setq dcl_re (load_dialog dclname))
  46.       (if (not (new_dialog "RENAME" dcl_re)) (exit))
  47.       (set_tile "dcl_edit_name" name)
  48.       (mode_tile "dcl_edit_name" 2)
  49.       (action_tile "dcl_edit_name" "(setq name1 $value)")
  50.       (action_tile "btn_ok" "(if (=(vla-get-objectname obj) \"AcDbBlockReference\")
  51.                                (if (tblsearch \"block\" name1)
  52.                                  (alert (strcat \"块名: \" name1 \" 已经存在.\"))
  53.                                  (if (not (snvalid name1))
  54.                                    (alert (strcat \"错误的块名: \" name1))
  55.                                    (done_dialog 1)
  56.                                  )
  57.                                )
  58.                              )"
  59.       )
  60.       (setq dlg (start_dialog))
  61.       (if (= dlg 1)
  62.         (progn
  63.           (setq BlkNam (vla-get-name obj))
  64.           (setq block  (vla-item blocks BlkNam))
  65.           (vla-put-name block name1)
  66.           (if (= (substr BlkNam 1 2) "*U")
  67.             (progn
  68.               (princ "\n这是一个匿名块.")
  69.               (vla-auditinfo DOC :vlax-true)
  70.               (vla-put-name block name1)
  71.             )
  72.           )
  73.           (princ (strcat "\n图块 \"" name "\" 重命名为 \"" name1 "\""))
  74.         )
  75.       )
  76.       (unload_dialog dcl_re)
  77.       (vl-file-delete dclname)
  78.     )
  79.   )
  80.   (princ)
  81. )
 楼主| 发表于 2013-12-27 22:35:03 | 显示全部楼层
菜卷鱼 发表于 2013-12-27 21:10
改块名字的,不记得是哪个大师写的了,自己一直在用

感谢分享,程序非常好用,美中不足是不能预先选择,但这点无关紧要。
发表于 2013-12-27 23:08:29 | 显示全部楼层
sinommw 发表于 2013-12-27 22:35
感谢分享,程序非常好用,美中不足是不能预先选择,但这点无关紧要。

entsel函数本身就不能先选择后操作
 楼主| 发表于 2013-12-28 00:13:28 | 显示全部楼层
已在论坛找到改基点程序。
传送门: ChangeBlockInsertionV1-3.lsp

感谢大家的帮助!
发表于 2013-12-28 08:14:31 | 显示全部楼层
本帖最后由 菜卷鱼 于 2013-12-28 08:16 编辑

  1. (if (and (setq ent (car (entsel "\n选择需要改名的块: ")))


改成

  1. (princ "\n选择需要改名的块: ")
  2. (if (and (setq ent (ssname (ssget ":s" '((0 . "INSERT")) ) 0))


就可以先选择后操作了
发表于 2013-12-28 09:18:57 | 显示全部楼层
能否批改及适应属性块?
 楼主| 发表于 2013-12-28 15:42:11 | 显示全部楼层
非常感谢,增加预选之后更加方便了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-24 02:11 , Processed in 0.190385 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表