编号批量复制递增 问题 (附图), 请高手来帮忙解决...........谢谢喽
如题 upload=jpg]UploadFile/2008-1/20081110101948753.jpg,viewFile.asp?ID=39366 本帖最后由 作者 于 2008-1-11 13:07:58 编辑 <br /><br /> <p>有规律就好写,只是楼主一楼的图片跟二楼的一样吗?</p> 能帮忙编个选择以数字结尾的文本,可以统一加减某一数字,如AW1/W1,AW1-1,加减完AW1/W3,AW1-3 回4楼给我一年前写的。。。当思路比较乱,现在重新可能会好些,但是功能是一样的。。。呵呵
(princ "\n>>>请输入dnd,选择多个数字文本!<<<")
(defun c:dnd (/ txt_add ss slen i na data
txt txt_len nub k txt_each num
num_len n temp txt0 n0 expt_num
faq1 faq2 int
)
(setq int (getint "\n不考虑后缀字符的位数<0>:"))
(if (= nil int)
(setq int 0)
) ;_ end if
(setq txt_add (getint "\n请输入增值(默认为1):"))
(if (= nil txt_add)
(setq txt_add 1)
) ;_ end if
(while (setq ss (ssget '((0 . "*text"))))
(setq slen (- (sslength ss) 1))
(setq i 0)
(while (<= i slen)
(setq na (ssname ss i))
(setq data (entget na))
(setq txt (cdr (assoc '1 data)))
(setq txt_len (strlen txt)) ;9
(setq txt_cut (substr txt 1 (- txt_len int))) ;abc02
(setq txt_len_cut (strlen txt_cut)) ;5
(setq txt_43 (substr txt (- txt_len (1- int)) int)) ;(03)
(setq nub "")
(setq k txt_len_cut)
(while (>= k 1)
(setq txt_each (substr txt_cut k 1))
(if (and (>= (ascii txt_each) 48) (<= (ascii txt_each) 57))
;取字串中"0~9"中的ascii字符txt_each.
(progn
(setq nub (strcat txt_each nub))
(setq k (1- k))
) ;end progn
(setq k 0)
) ;end if
) ;end while
(if (= nub "")
(progn
(princ "\n末尾不是数字")
(exit)
) ;_ end progn
) ;_ end if
(setq num (atoi nub));nub="02" num=2
(setq num_len (strlen nub)) ;2
;;;以下是考虑数字串中的零的问题
(setq n 1)
(setq temp 0)
(while (and (<= n num_len) (= temp 0))
(setq txt0 (atof (substr nub n 1)))
(if (/= txt0 0)
(progn
(setq n0 (1- n))
(setq temp 1)
) ;_ end progn
) ;_ end if
(setq n (1+ n))
) ;end while
(setq expt_num (substr txt_cut 1 (+ n0 (- txt_len num_len int))))
(setq faq1 (itoa (+ num txt_add)))
(setq faq2 (strcat expt_num faq1 txt_43))
(setq data (subst (cons 1 faq2) (assoc '1 data) data))
(entmod data)
(setq i (+ i 1))
) ;end while
) ;end while
(prin1)
) ;_ end defun
<p> 一楼跟二楼 是一样的照片, 只是第一次上载照片, 出了差错.</p><p>很高兴你回复我的问题 ,只是楼主 对我的要求 会错意了.</p><p>我希望程序的目的没有 楼主给的那样复杂, 只是很简单 的 数字 批量复制递增(如图),</p><p>麻烦 CARROT1983 楼主 再次帮看一下 , 先谢谢喽 !!</p><p></p> <p>续 6 楼</p><p>还有 要加 前缀 跟 后缀.</p> <p>我有一个,但是只能是单个的文字,不能复制很多个</p><p>因为只是自己用,没有整理过,很乱</p><p>(defun c:gf()<br/>(setq bc (getint "\n 请输入步长:"))<br/>)</p><p><br/>(defun c:saa()<br/>(prompt "\n 设置步长命令为:gf,初始步长为1")<br/>(prompt "\n 请选择不需要更改的实体:")<br/>(if (= bc nil)<br/>(setq bc 1)<br/>)<br/>(setq ddjjqq (ssget))<br/>(setq entt (entsel "\n 请选择一个文字:"))<br/>(setq ent (car entt))<br/>;(setq pt1 (cadr entt))<br/>(redraw ent 3)<br/>(setq dxf (entget ent)) ;联合列表<br/>(setq wenzizu (assoc 1 dxf)) ;点对列表<br/>(setq wenzi (cdr wenzizu)) ;文字</p><p>(setq wenzilen (strlen wenzi))<br/>(setq fanyihou (vl-string-translate "1234567890" "##########" wenzi)) ;翻译字符</p><p>(setq weizhi (vl-string-search "#" fanyihou)) ;找出#的位置</p><p>(setq qianzhui (substr wenzi 1 weizhi)) ;取出前缀<br/>(setq shuzi (substr wenzi (+ weizhi 1))) ;取出字符串形式的数字<br/>(setq shishu (atoi shuzi)) ;把数字改为实数 </p><p><br/>(setq pt1 (getpoint "\n 请选择一个点:"))<br/>(setq pt2 (getpoint pt1 "\n 请选择第二点:"))<br/>(setq n 0)</p><p>(while pt2</p><p>(setq lll (substr wenzi 1 1)) ;判断第一个字符是什么<br/>;(setq llll (substr wenzi 4 1)) ;判断第四个字符是什么</p><p>(cond </p><p></p><p>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>( (= lll "<") ;<br/>(progn ;<br/>(setq b (+ shishu bc n)) ;<br/>(setq c (itoa b)) ;<br/> ;<br/>(setq d (strcat qianzhui c ">")) ;<br/> ;<br/>(setq e (cons 1 d)) ;<br/>(command "copy" ddjjqq "" pt1 pt2) <br/>(command "copy" ent "" pt1 pt2) <br/>(setq ent1 (entget (entlast))) ; ;此处为一个判断<br/>(setq txtzh1 (assoc 1 ent1)) ;<br/>(setq ent1 (subst e txtzh1 ent1)) ;<br/>(entmod ent1) ;<br/>(princ) ;<br/>) ;end progn ;<br/>) ;end first ;<br/> ;<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p><br/> ;如果要加判断的话,请选择这里</p><p></p><p>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>(t ;<br/>(progn ;<br/>(setq b (+ shishu bc n)) ;<br/>(setq c (itoa b)) ;<br/>(setq d (strcat qianzhui c)) ;<br/>(setq e (cons 1 d)) ;<br/>(command "copy" ddjjqq "" pt1 pt2) <br/>(command "copy" ent "" pt1 pt2) ; ;此处为第二个判断<br/>(setq ent1 (entget (entlast))) ;<br/>(setq txtzh1 (assoc 1 ent1)) ;<br/>(setq ent1 (subst e txtzh1 ent1)) ;<br/>(entmod ent1) ;<br/>(princ) ;<br/>) ;<br/>) ;<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p></p><p><br/>) ;end cond</p><p></p><p><br/>(setq n (+ bc n))<br/>(setq pt2 (getpoint pt1 "\n 请选择第二点:")) ;pt1决定有没有显示线</p><p>) ;end while<br/>) ;end defun</p><p>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>;;;;;;;;;; 以下为输入单个字的命令 ;;;;;;;;;;;;;;;;</p><p><br/>(defun c:sa()</p><p>(prompt "\n 设置步长命令为:gf,初始步长为1")<br/>(if (= bc nil)<br/>(setq bc 1)<br/>)</p><p>(setq enty (entsel "\n 请选择一个文字:"))<br/>(setq ent (car enty))<br/>;(setq pt1 (cadr enty))</p><p>(redraw ent 3)<br/>(setq dxf (entget ent)) ;联合列表<br/>(setq wenzizu (assoc 1 dxf)) ;点对列表<br/>(setq wenzi (cdr wenzizu)) ;文字</p><p>(setq wenzilen (strlen wenzi))<br/>(setq fanyihou (vl-string-translate "1234567890" "##########" wenzi)) ;翻译字符</p><p>(setq weizhi (vl-string-search "#" fanyihou)) ;找出#的位置</p><p>(setq qianzhui (substr wenzi 1 weizhi)) ;取出前缀<br/>(setq shuzi (substr wenzi (+ weizhi 1))) ;取出字符串形式的数字<br/>(setq shishu (atoi shuzi)) ;把数字改为实数 </p><p><br/>(setq pt1 (getpoint "\n 请选择一个点:"))<br/>(setq pt2 (getpoint pt1 "\n 请选择第二点:"))<br/>(setq n 0)</p><p>(while pt2</p><p>(setq lll (substr wenzi 1 1)) ;判断第一个字符是什么</p><p>;(setq llll (substr wenzi 4 1)) ;判断第四个字符是什么<br/>(cond </p><p></p><p>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>( (= lll "<") ;<br/>(progn ;<br/>(setq b (+ shishu bc n)) ;<br/>(setq c (itoa b)) ;<br/> ;<br/>(setq d (strcat qianzhui c ">")) ;<br/> ;<br/>(setq e (cons 1 d)) ;<br/>(command "copy" ent "" pt1 pt2) ;<br/>(setq ent1 (entget (entlast))) ; ;此处为一个判断<br/>(setq txtzh1 (assoc 1 ent1)) ;<br/>(setq ent1 (subst e txtzh1 ent1)) ;<br/>(entmod ent1) ;<br/>(princ) ;<br/>) ;end progn ;<br/>) ;end first ;<br/> ;<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p><br/> ;如果要加判断的话,请选择这里</p><p></p><p>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br/>(t ;<br/>(progn ;<br/>(setq b (+ shishu bc n)) ;<br/>(setq c (itoa b)) ;<br/>(setq d (strcat qianzhui c)) ;<br/>(setq e (cons 1 d)) ;<br/>(command "copy" ent "" pt1 pt2) ; ;此处为第二个判断<br/>(setq ent1 (entget (entlast))) ;<br/>(setq txtzh1 (assoc 1 ent1)) ;<br/>(setq ent1 (subst e txtzh1 ent1)) ;<br/>(entmod ent1) ;<br/>(princ) ;<br/>) ;<br/>) ;<br/>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</p><p></p><p><br/>) ;end cond</p><p></p><p><br/>(setq n (+ bc n))<br/>(setq pt2 (getpoint pt1 "\n 请选择第二点:")) ;pt1决定有没有显示线</p><p>) ;end while<br/>(princ)<br/>) ;end defun</p> <p>我不是楼主,哈哈。。。一楼才是楼主。。。</p> 本帖最后由 作者 于 2008-1-13 14:02:49 编辑
把5楼的代码稍加修改,没有用到vl的函数,所以可以在任意一个CAD版本上使用。。呵呵
但是我还是觉得写的不好,有时间再重写...
(princ "\n>>>请输入dnd,选择多个数字文本! carrot1983 2008-1-13<<<")
(defun c:dnd (/ txt_add ss slen i na data
txt txt_len nub k txt_each num
num_len n temp txt0 n0 expt_num
faq1 faq2 int
)
(setq int (getint "\n不考虑后缀字符的位数<0>:"))
(if (= nil int)
(setq int 0)
) ;_ end if
(setq txt_add (getint "\n请输入增值(默认为1):"))
(if (= nil txt_add)
(setq txt_add 1)
) ;_ end if
(if (setq ss (ssget '((0 . "*text"))))
(progn
(command "._copy" ss "" '(0 0 0) '(0 0 0))
(setq ss (ssget "p"))
(princ "指定基点")
(command "._move" ss"" pause)
(setq slen (- (sslength ss) 1))
(setq i 0)
(while (<= i slen)
(setq na (ssname ss i))
(setq data (entget na))
(setq txt (cdr (assoc '1 data)))
(setq v10 (cdr (assoc '10 data)))
(setq txt_len (strlen txt)) ;9
(setq txt_cut (substr txt 1 (- txt_len int))) ;abc02
(setq txt_len_cut (strlen txt_cut)) ;5
(setq txt_43 (substr txt (- txt_len (1- int)) int)) ;(03)
(setq nub "")
(setq k txt_len_cut)
(while (>= k 1)
(setq txt_each (substr txt_cut k 1))
(if (and (>= (ascii txt_each) 48) (<= (ascii txt_each) 57))
;取字串中"0~9"中的ascii字符txt_each.
(progn
(setq nub (strcat txt_each nub))
(setq k (1- k))
) ;end progn
(setq k 0)
) ;end if
) ;end while
(if (= nub "")
(progn
(princ "\n末尾不是数字")
(exit)
) ;_ end progn
) ;_ end if
(setq num (atoi nub));nub="02" num=2
(setq num_len (strlen nub)) ;2
;;;以下是考虑数字串中的零的问题
(setq n 1)
(setq temp 0)
(while (and (<= n num_len) (= temp 0))
(setq txt0 (atof (substr nub n 1)))
(if (/= txt0 0)
(progn
(setq n0 (1- n))
(setq temp 1)
) ;_ end progn
) ;_ end if
(setq n (1+ n))
) ;end while
(setq
expt_num (substr txt_cut 1 (+ n0 (- txt_len num_len int)))
)
(setq faq1 (itoa (+ num txt_add)))
(setq faq2 (strcat expt_num faq1 txt_43))
(setq data (subst (cons 1 faq2) (assoc '1 data) data))
(entmod data)
(setq i (+ i 1))
) ;end while
)
)
(prin1)
) ;_ end defun
页:
[1]
2