本帖最后由 作者 于 2008-9-3 17:41:10 编辑
1,首先用lsp写了一个“按位置替换文字”的代码,快捷键为“THT” 代码如下: (defun c:THT( / str old lay nsty new nam hig sss sn en ang ang1 ent1 msg sca num hig1 sca1 ) (setq aa (tht)) ;--------------------------------------- ; Select text ;--------------------------------------- ;;(princ "\nInput L,S,O,A to select text.") ;;(setq str(strcase (getstring "\nby Layer/by Style/select Object/All text:"))) ;;(if (= str "L") ;; (progn ;; (setq lay(getstring "\nInput layer name:")) ;; (if (tblsearch "layer" lay) ;; (setq ss1(ssget "X" (list (cons 0 "TEXT") (cons 8 lay)))) ;; (setq msg(strcat "\nThe " lay " layer dose not exist.")) ;; ) ;; ) ;;) ;;(if (= str "S") ;; (progn ;; (setq old(getstring "\nInput style name:")) ;; (if (tblsearch "style" old) ;; (setq ss1(ssget "X" (list (cons 0 "TEXT") (cons 7 old)))) ;; (setq msg(strcat "\nThe " old " style dose not exist.")) ;; ) ;; ) ;;) ;;(if (= str "O") ;; (progn (setq ss1(ssget)) (if ss1 (progn (setq num(sslength ss1)) (while (/= num 0) (setq ent1(ssname ss1 (- num 1))) (if (/= (cdr (assoc 0 (entget ent1))) "TEXT") (ssdel ent1 ss1)) (setq num(- num 1)) ) ) ) (if (= (sslength ss1) 0) (setq ss1 nil)) ;; ) ;;) ;;(if (= str "A") (setq ss1(ssget "X" (list (cons 0 "TEXT"))))) (setq sn(getint"Start No.:")) (setq en(getint"End No.:<=Start No.>")) (if (= en nil) (setq en sn)) (setq sss(getstring"New word:")) (if (= sss nil) (seq sss "")) ;---------------------------------------------- ; CHANGE TEXT ;---------------------------------------------- (if ss1 (progn (setq num(sslength ss1)) (setq num1 num) (while (/= num 0) (setq ent1 (entget (ssname ss1 (- num 1)))) (setq nr(assoc 1 ent1)) (setq elen(strlen (cdr nr))) (setq nr11(substr (cdr nr) 1 (- sn 1) )) (setq nr12(substr (cdr nr) (+ en 1) elen)) (setq nr1(cons 1 (strcase (strcat nr11 sss nr12)))) (setq ent1(subst nr1 nr ent1)) (entmod ent1) (setq num(- num 1)) ) (princ (strcat "\n" (itoa num1) " text(s) have been changed.")) ) (progn (if msg (princ msg)) (princ "\nNo text(s) selected.") ) ) (princ) ) 2,再编写第二段代码如下:(插入一个块后全部分解,然后想用上述“THT”命令来执行) (defun c:2 () (command "-insert" "1" pause "" "" "" "explode" "L") (command "tht" (ssget) "" “16” “18”)) ;其中16和18为开始位置和结束未知 执行后,提示|tht|为未知命令,请问,该如何修改第二段代码,让他能实现啊! |