sadhu 发表于 2022-7-6 11:08:12

lisp用于顺序编号

我经常需要按顺序对行进行编号和重新编号。从上到下-逐列。
 
见附件。
 
数字为文字或多行文字。有人能提出一种写lisp的方法吗?这样我只需要选择我想重新编号的文本(数字),它就会逐渐编号1-2-3。。。。
 
我被卡住了,因为这些数字在列中,我想在单个选择中完成。
测验图纸

asos2000 发表于 2022-7-6 11:14:58

萨胡
 
-以较低版本保存附着的dwg
-给它一个快速菜单>文本>自动文本编号
-在这里

alanjt 发表于 2022-7-6 11:16:05

李的NumInc可能是你最好的选择。我再次链接到它,麻生太郎在他的http上加倍了。
 
这是我几个月前做的一个(只是玩排序)。
 
就像我说的,李的可能会完全满足你的需要。我知道我在用它眨眼:
 

asos2000 发表于 2022-7-6 11:21:00

alanjt公司
你的对群众工作很有用
我喜欢这个

alanjt 发表于 2022-7-6 11:25:59

它很笨重,所以要小心。那只是一场深夜的比赛。

sadhu 发表于 2022-7-6 11:26:03

alanjt:我试过你的Lisp程序。我需要做的比你的代码要简单得多。所以我正在研究它以适应我的需要。
 
我需要重新编号的文本不是一条完美的直线(列),它们都有前缀(')。
 
像这样:
 
'12      '12
“sa”13
“1”gh
'23      '12
'45       '23

alanjt 发表于 2022-7-6 11:31:15

这条线索可能会引起一些兴趣。

sadhu 发表于 2022-7-6 11:33:54

我被困住了
 
-如何对文本选择集排序(单列上下顺序)
 
需要一些帮助:哎呀:

alanjt 发表于 2022-7-6 11:38:43

在我发布的链接中有一些例子。
 
下面是一个示例,使用文本选择集并按Y值从上到下排序。。。
 
(if (setq ss (ssget '((0 . "TEXT"))))
(vl-sort
   ((lambda (i / lst)
      (while (setq e (ssname ss (setq i (1+ i))))
      (setq lst (cons e lst))
      )
    )
   -1
   )
   (function (lambda (a b) (> (caddr (assoc 10 (entget a))) (caddr (assoc 10 (entget b))))))
)
)

sadhu 发表于 2022-7-6 11:40:37

Alanjt:
我使用了你上次发布的代码。列表按照插入顺序排序,而不是按照从上到下的y轴排序。
 
是因为“caddr”返回第三个元素吗?我做错了什么?
 
我需要做的是对图纸上的一列文本重新编号。
 
 
 
 

(defun C:sorty()
(if (setq ss (ssget '((0 . "TEXT"))))
(vl-sort
   ((lambda (i / lst)
      (while (setq e (ssname ss (setq i (1+ i))))
      (setq lst (cons e lst))
      )
    )
   -1
   )
   (function (lambda (a b) (> (caddr (assoc 10 (entget a))) (caddr (assoc 10 (entget b))))))
)
)

;************
(and
   
   ((lambda (i)
      (while (setq e (ssname ss (setq i (1+ i))))
      (setq ent (entget e))
      (entmod (subst (cons 1 (strcat "'" (rtos (+ i 1) 2 0))) ;new item
                     (assoc 1 ent) ; old item
                     ent ;list
                )
      )
      )
    )
   -1
   )
)
(princ)
); DEFUN
页: [1] 2
查看完整版本: lisp用于顺序编号