edata 发表于 2011-6-15 13:20:36

修改块名lisp

刚弄完的修改块名lisp

;1、对选择的块逐一更名。
;2、修改块时可以放大图块。
;3、出错函数处理,不影响其他lisp的出错函数。
;4、修改时间 2011-6-15
;5、命令 rb
(defun c:rb (/ en n i een na naa ens1 )
   (setq *error*_sk0 *error*)    ;保存出错处理函数
(setq *error* *error*_sk1)
(if (= (getvar "cmdecho") 1) (setvar "cmdecho" 0))
(setq sk_flagrb1 "e")
(setq en (ssget '((0 . "INSERT")))
   i 0)
(if (and en (= (type en) 'PICKSET))
    (progn
    (setq n (sslength en))
    (princ (strcat "\n已选择了"(rtos n)"个块!"))
(repeat n
    (setq een (entget (setq ens1 (ssname en i))) na (cdr (assoc 2 een)) i (+ i 1))
    (command "zoom" "o" ens1 "")
    (setq sk_flagrb1 "be")
    (prompt (strcat "\n原块名为:" na))(terpri)
    (setq naa (getstring "\n请输入新块名[回车就不修改]:"))
    (if (= naa "")()
      (progn
(command "rename" "b" na naa)
      )
    )
    (command "zoom" "p")
)
    (setq sk_flagrb1 "e")
    (setvar "cmdecho" 1)
    ))
(princ)
)
;出错函数
;来自明经通道
(defun *error*_sk1 (msg)
(if (= (getvar "cmdecho") 1) (setvar "cmdecho" 0))
(if (wcmatch (strcase msg t) "*break,*cancel*,*exit*,*取消*")
    (if(= (getvar "LOCALE") "CHS")
      (princ "\n用户按了<Esc>强制退出")
      (princ "\nYou cancelled The operation!")
    )
   
    (princ (strcat "\n" msg))
)
(terpri)
(vla-EndUndoMark      ;回退
    (vla-get-ActiveDocument (vlax-get-acad-object))
)

(if (= sk_flagrb1 "be") (command "zoom" "p"))
(setvar "cmdecho" 1)
(setq *error* *error*_sk0)
(princ)
)

daidong013 发表于 2011-6-15 14:38:44

坐沙发!~~支持楼主!~~

LLXXZZ 发表于 2011-6-16 12:37:38

!~~支持楼主!~~

caoteddy 发表于 2011-6-16 16:37:00

支持,学习。

啵浪鼓 发表于 2011-6-16 18:51:55

难得一见的楼猪,支持楼猪,顶楼猪!

啵浪鼓 发表于 2011-6-16 19:24:24

建议如下:
1, 竟然是多选,那么同一图块就一次性处理,而不是选择几个"X1"块就重复几次的"X1"块的改名或是无谓的回车
2, 或者: 竟然是多选,同一块名将所选到的"X1"块改成新名,未选到的"X1"块仍然保留?
3, "zoom"后再缩小"0.7x"便于观看,另"zoom" "o"的命令对cad2005之前的版本是无效的
4, 选择的块如果都在一起时,不能很直观的看到当前修改的块是哪个图元, "zoom" "o"后增加个效果线来美化下: grvecs在图形屏幕上绘制多个矢量
5, 未选择时,程序最后加一句("command" "REDRAW")可抑制命令条上多一个空的命令的显示
命令:RB
选择对象:
命令:

chengx2000 发表于 2011-6-16 21:25:43

变量“sk_flagrb1”看不出有多大的作用。。。。

edata 发表于 2011-6-16 23:34:38

回复 啵浪鼓 的帖子

1、对于选择对象的重复处理是我没考虑到。呵呵。
主要我是图库归总重命名,一个块只有一个。
2、如果要实现你说的第二功能,程序完全不一样了,可以考虑。
3、zoom用是是06的自动。不然就只能自己写zoom了。
4、绘制屏幕矢量线,我考虑了,还没完成。

edata 发表于 2011-6-16 23:36:48

回复 chengx2000 的帖子

这个是我想用来改变出错处理函数部分的命令是否执行。如果zoom没有执行放大处理,在出错还原的时候就不必返回上一个视口了。基本是实现了这个功能。。

preone 发表于 2012-8-16 18:15:55

请问, 用组码 2 为啥 改不了块名?~~
页: [1] 2
查看完整版本: 修改块名lisp