alanjt 发表于 2022-7-6 11:46:34

您没有应用排序列表(我提供的代码)。对选择集排序后,您将再次单步执行它(您的代码)。
 
(defun c:SortY (/ ss lst ent)
((lambda (n)
    (if (setq ss (ssget "_:L" '((0 . "TEXT"))))
      (foreach x
               (vl-sort
               ((lambda (i)
                  (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)))))
               )
               )
      (setq ent (entget x))
      (entmod (subst (cons 1 (strcat "'" (itoa (setq n (1+ n))))) (assoc 1 ent) ent))
      )
    )
)
   0
)
(princ)
)

sadhu 发表于 2022-7-6 11:49:16

非常感谢你。太棒了。

alanjt 发表于 2022-7-6 11:52:21

 
不客气,但你懂代码吗?

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

这就是我现在使用它的方式。仅更改了选择标准。
 
再次感谢。
 
(defun c:SortY (/ ss lst ent)
((lambda (n)
    (if (setq ss (ssget (list (cons 0 "TEXT,MTEXT")
                  (cons 1 "'*"))))

      (foreach x
               (vl-sort
               ((lambda (i)
                  (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)))))
               )
               )
      (setq ent (entget x))
      (entmod (subst (cons 1 (strcat "'" (itoa (setq n (1+ n))))) (assoc 1 ent) ent))
      )
    )
)
   0
)
(princ)
)

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

但是你知道它是怎么工作的吗?
 
此外,您不应该从ssget中删除“_:L”(过滤器锁定层),因为如果单步执行锁定层上的文本对象,例程将失败。
 
使用:
(setq ss (ssget "_:L" (list (cons 0 "TEXT,MTEXT") (cons 1 "'*"))))

sadhu 发表于 2022-7-6 12:01:50

我很害怕说我明白,但现在你已经写好了,嗯,让我们说,我正在经历它。
 
我是这样开始的:
-选择
-订单
-更换(entmod)
 
所以我把代码分成了几个部分。显然你的代码做得很好。
 
我已经按照您的建议更正了代码,也感谢您的解释。我以为我是
我试图掌握lamda(n)和lamda(I)的工作原理
. 我在调试模式下使用了动画功能。
谢谢

alanjt 发表于 2022-7-6 12:07:03

SSGet信息:
6

alanjt 发表于 2022-7-6 12:08:44

lambda i和n部分只是将数字应用于匿名函数。在这种情况下,它阻止我将i定义为-1,将n定义为0。
页: 1 [2]
查看完整版本: lisp用于顺序编号