Lisp编辑多行文字
大家好,有人能帮我吗。。我在指定层中有许多多行文字,如以下示例所示:
2 B32-149
6 B32-154
2 B32-145
40B12@200-150[铃声]
44B12@200-151[铃声]
因此,每个多行文字都由以下部分组成:
1.数字(2,6,2,40,44)
2.a空间
3.(B32、B32、B32、B12、B12)
4. "-"
5、数字(149154145150151)
6、、、、、
我需要的是编辑整个图形中指定图层的所有多行文字,并
编辑它们以更改“-”后的数字,使其从特定数字开始,增量为1,直到最后一个多行文字。我需要他们像:
2 B32-100
6 B32-101
2 B32-102
40B12@200-103[铃声]
44B12@200-104[铃声]
这可能吗?
我不知道任何关于lisp编程的事情,所以如果有任何帮助,我们将不胜感激 如果有人想办法做到这一点,有没有可能让相同的多行文字具有相同的编号?例如:
如果有两个这样的多行文字:
2 B32-100
2 B32-100
我们编辑了第一个,重新编号后,它变成了这样的2 B32-140。。。。我需要第二个是相同的,有相同的数字(140) 为什么期望结果中的数字是按顺序排列的?什么决定了这一点? 因为我的数字没有顺序和随机性,所以我需要对它们进行排序,以避免任何缺失的数字。
有时数字是这样的:
101-102-103-104-124-125-...
您可以看到104-124之间存在差距,需要对其进行编辑以避免出现这种差距 我的意思是:
为什么第一行的数字最小?实体是否排列在一列中,是否应该从上到下重新编号? 因为它是图纸中的第一个,是的,如果从上到下重新编号就太好了 实体是否在列中? 不,他们不是。。。它们散落在图画周围。。。因此,如果有可能使重新编号从左向右开始,然后向下移动
你要求的任务让我想起了这一点。 我怀疑排序是否有意义,但无论如何尝试一下:
(defun KGA_Conv_Pickset_To_ObjectList (ss / i ret)
(if ss
(repeat (setq i (sslength ss))
(setq ret (cons (vlax-ename->vla-object (ssname ss (setq i (1- i)))) ret))
)
)
)
(defun KGA_Geom_ObjectMiddle (obj / ptBL ptTR)
(vla-getboundingbox obj 'ptBL 'ptTR)
(mapcar
'/
(mapcar '+ (vlax-safearray->list ptBL) (vlax-safearray->list ptTR))
'(2.0 2.0 2.0)
)
)
(defun ConvSort (objLst)
(mapcar
'(lambda (i) (nth i objLst))
(vl-sort-i
(mapcar '(lambda (obj) (KGA_Geom_ObjectMiddle obj)) objLst)
'(lambda (a b)
(if (equal (cadr a) (cadr b) 1e- ; Equal Y.
(< (car a) (car b))
(> (cadr a) (cadr b))
)
)
)
)
)
; (ConvStr "40 B12@200-150 " 123) => "40 B12@200-123 "
(defun ConvStr (str n / i)
(strcat
(substr str 1 (setq i (1+ (vl-string-position 45 str))))
(itoa n)
(progn
(setq str (substr str (1+ i)))
(while (wcmatch (substr str 1 1) "#") (setq str (substr str 2)))
str
)
)
)
(defun c:Conv ( / doc enm lst lyr num ss)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-endundomark doc)
(vla-startundomark doc)
(if
(and
(setq enm (car (entsel "\nEntity for layer: ")))
(setq lyr (vla-get-layer (vlax-ename->vla-object enm)))
(setq num (getint "\nStart nr.: "))
(setq num (1- num))
(setq ss (ssget "_X" (list '(0 . "MTEXT") (cons 8 lyr) '(1 . "*-#*"))))
(setq ss (ConvSort (KGA_Conv_Pickset_To_ObjectList ss)))
)
(mapcar
'(lambda (obj / str)
(vla-put-textstring
obj
(cond
((cdr (assoc (setq str (vla-get-textstring obj)) lst)))
((cdar (setq lst (cons (cons str (ConvStr str (setq num (1+ num)))) lst))))
)
)
)
ss
)
)
(vla-endundomark doc)
(princ)
)
页:
[1]
2