chg 发表于 2003-3-25 14:55:00

[讨论]关于直接更改块名的问题。

我有两个内容是一样的块,我需要不同的块名。但我又不想定义两次,有没有好的方法直接更改我选择的块的名称?
在使用entmod这个函数的时候,要求块名事先定义,该如何事先定义呢?
能否用entmakex函数先定义一个块名,再将块名附给选择的块,不过好象行不通。

chg 发表于 2003-3-31 10:48:00

多谢hzzhao指点!我将程序加上了一点错误预防。

本帖最后由 作者 于 2003-3-31 10:48:02 编辑

(defun c:nb (/ old-cmdecho ents new_name insert_point)
(setq old-cmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
(ai_undo_push)
(setq ents (entsel "\nSelect block to change name :"))
(while (or (not ents) (/= (cdr (assoc 0 (entget (car ents)))) "INSERT"))
    (princ "Nothing selected or object selected is not block.")
    (setq ents (entsel "\nSelect block to change name :"))
    )
(setq insert_point (cdr (assoc 10 (entget (car ents))))
      new_name (getstring "\nInput new block name :")
      )
(if (and (not (tblsearch "block" new_name)) new_name)
    (progn
      (command "_.explode" ents)
      (command "_.block" new_name insert_point "p" "")
      (command "_.insert" new_name insert_point "" "" "")
      )
    (princ "\nInvalid block name or block name exist.")
    )
(ai_undo_pop)
(setvar "cmdecho" old-cmdecho)
(princ)
)

陈伯雄 发表于 2003-3-27 08:38:00

不能

chg 发表于 2003-3-27 11:47:00

原来不可以这样,那看来不能省力了。

hzzhao 发表于 2003-3-30 16:43:00

用这个简单的重新定义方法

本帖最后由 作者 于 2003-3-30 16:43:26 编辑

(defun c:nb ()
(setq block_name (entsel "\nselect change block:"))
(setq new_bl_name (getstring "\nEnter new block name:"))
(setq insert_point (cdr (assoc 10 (entget (car block_name)))))
(command "explode" block_name)
(command "-block" new_bl_name insert_point "p" "")
(command "-insert" new_bl_name insert_point "" "" "")
(princ)
)

15264769719 发表于 2023-3-15 14:32:34

能不能块名加前缀?
页: [1]
查看完整版本: [讨论]关于直接更改块名的问题。