增量刷
本帖最后由 刘炎华 于 2023-3-9 22:08 编辑求助高手,想求一个增量刷,感谢!!!
(defun c:zmdz()
(defun Nume->To->Alph(Xnum / zfc M K )
(setq zfc "")
(while (> Xnum 0)
(setq M (fix (/ Xnum 26)))
(setq K (- Xnum (* M 26)))
(if (= K 0)
(setq K 26
M (1- M)
)
)
(setq zfc (strcat (chr (+ 64 K)) zfc))
(setq Xnum M)
)
(setq zfc zfc)
)
(setvar "cmdecho" 0)
(command "_undo" "Be")
(if (and
(princ "\n选取第1个单行文字:")
(setq ssa (ssget ":S" '((0 . "TEXT") (1 . "???*"))))
(princ "\n选取其它单行文字:")
(setq ssb (ssget'((0 . "TEXT"))))
)
(progn
(setq ent1 (ssname ssa 0))
(setq zfc (cdr (assoc 1 (entget ent1))))
(setq zfc1 (substr zfc 1 3)) ;取前3个字符
(setq zfc2 (substr zfc 4 1)) ;取第4个字符
(setq zfc3 (substr zfc 5)) ;取从第5个起剩余的字符
(setq qsz (- (ascii zfc2) 64)) ;第4个字符的ASCII码值-1
;取选集内所有对象
(setq tymbb (vl-remove-if 'listp (mapcar 'cadr (ssnamex ssb))))
;按X坐标值由小到大排序
(setq tymbb (vl-sort tymbb '(lambda(a b)
(setq pta (assoc 10 (entget a)))
(setq ptb (assoc 10 (entget b)))
(< (cadr pta) (cadr ptb))
)
)
)
(setq i 1)
(foreach enti tymbb
(setq dxfi (entget enti))
(setq dxfi (subst (cons 1 (strcat zfc1(Nume->To->Alph(+ qsz i)) zfc3))
(assoc 1 dxfi)
dxfi
)
)
(entmod dxfi)
(setq i (1+ i))
)
)
)
(command "_undo" "e")
(setvar "cmdecho" 1)
(princ)
) 天正建筑有个文字递增的功能可以实现 (defun c:ttt (/ is_gr4 n1 n2 n3 obj1 obj2 pause pt1 pt111 pt2 ss1 str1 str2 str3 str5)
;;;选择文字
(setq ss1 (ssget ":E:S" '((0 . "text"))))
(if ss1
(progn (setq obj1 (vlax-ename->vla-object (ssname ss1 0))
;;;获取文字内容
str1 (vla-get-textstring obj1)
;;;获取文字坐标
pt1(vlax-safearray->list (vlax-variant-value (vla-get-insertionpoint obj1)))
)
;;;;获取文字长度
(setq n1 (strlen str1)
;;;获取asc码
n2 (ascii (substr str1 (- n1 2) 1))
)
;;;--------------------------------------------------------------
;;; 判断文字结尾是否为数字或字母
;;;--------------------------------------------------------------
(cond
;;;-----------------------------------大写字母----------------------------
;;;判断最后一个字符是否为大写字母A~Z
((and (> n2 64) (< n2 90))
(setq n3 (ascii (substr str1 (- n1 2) 1))) ;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;开始递增复制
;-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;获取字符中的前半部分
(setq str2 (substr str1 1 (- (strlen str1) 3)))
;;;获取字符中的后半部分
(setq str5 (substr str1 5 2))
;;;计算加1,重置参考点,重新创建文字内容
(setq n3 (+ n3 1))
(setq str3 (strcat str2 (chr n3) str5))
(setq obj2 (vlax-vla-object->ename obj1)
is_gr4 1
)
(while (and is_gr4 (> n3 64) (< n3 91))
(setq pt111 (getvar "LastPoint"))
(command "_copy" obj2 "" pt1 pause)
(setq pt2 (getvar "LastPoint"))
;;判断最后一点与前一点是否一样
(if (< (distance pt111 pt2) 0.1)
(progn
;;;设置退出循环
(setq is_gr4 nil)
;;;删除最后生成的文字
(entdel (entlast))
)
(progn
;;;提取复制创建的文字
(setq obj2 (entlast))
;;;修改文字内容
(vla-put-textstring (vlax-ename->vla-object obj2) str3)
;;;计算加1,重置参考点,重新创建文字内容
(setq n3 (+ n3 1)
pt1 pt2
str3 (strcat str2 (chr n3) str5)
)
)
)
)
)
;;;-----------------------------------大写字母----------------------------
)
;;;----------cond
)
)
) 看看效果如何。。。。:D
学习了。。 任意字符,包括汉字,从第四个开始递增attach://116327.gif
大神刷~ 高手怎么这么多啊?
页:
[1]