359321852 发表于 2024-4-12 19:35:47

lisp CAD 选中指定范围数值的所有文字

请高手帮忙改一下两个都报错“参数太少”,下面的代码,想实lisp CAD 选中指定范围数值的所有文字
都是ai自动生成的。


(defun c:SelectTextInRange (/ ss value-min value-max ent text-value)
(setq value-min (getreal "\nEnter the minimum value: "))
(setq value-max (getreal "\nEnter the maximum value: "))
(setq ss (ssget '((0 . "TEXT")))) ; 获取所有 TEXT 对象
(if ss
    (progn
      (setq ss (ssdel ss)) ; 创建一个新的选择集,因为 ssdel 会修改原始选择集
      (repeat (sslength ss)
      (setq ent (ssname ss (setq i 0))) ; 从选择集中获取第一个实体
      (setq text-value (cdr (assoc 1 (entget ent)))) ; 获取文本实体的值
      (setq text-value (atof text-value)) ; 将文本值转换为浮点数
      ; 如果文本值在指定范围内,则将实体添加到新的选择集中
      (if (and (<= value-min text-value) (<= text-value value-max))
          (ssadd ss (entget ent))
      )
      )
      (if (not (ssnull ss)) ; 如果选择集中有实体
      (progn
          (princ "\nSelected texts within range: ")
          (princ value-min)
          (princ " to ")
          (princ value-max)
          (princ "\n")
          (command "_.select" ss "") ; 选择这些实体
      )
      (princ "\nNo texts found within the specified range.")
      )
    )
    (princ "\nNo texts found.")
)
(princ)
)
这个lisp CAD 选中指定数值的所有文字
(defun c:Se(/ ss value ent text-value)
(setq value (getreal "\n输入值以选择文本: "))
(setq ss (ssget '((0 . "TEXT")))) ; 获取所有 TEXT 对象

(if ss
    (progn
      (setq ss (ssdel ss)) ; 创建一个新的选择集,因为 ssdel 会修改原始选择集
      (repeat (sslength ss)
      (setq ent (ssname ss (setq i 1))) ; 从选择集中获取第一个实体
      (setq text-value (cdr (assoc 1 (entget ent)))) ; 获取文本实体的值
      (if (= (atof text-value) value) ; 如果文本值等于指定数值
          (ssadd ss (entget ent)) ; 将实体添加到新的选择集中
      )
      )
      (if (not (ssnull ss)) ; 如果选择集中有实体
      (progn
          (princ "\nSelected texts with value: ")
          (princ value)
          (princ "\n")
          (command "_.select" ss "") ; 选择这些实体
      )
      )
    )
)
(princ)
)



飞雪神光 发表于 2024-4-12 20:54:35

(defun c:SelectTextInRange (/ ss value-min value-max ent text-value)
(setq value-min (getreal "\nEnter the minimum value: "))
(setq value-max (getreal "\nEnter the maximum value: "))
(setq ss (ssget '((0 . "TEXT")))) ; 获取所有 TEXT 对象
        (setq i 0)
(if ss
    (progn
                        (setq ss0 (ssadd))
      (repeat (sslength ss)
      (setq ent (ssname ss i)) ; 从选择集中获取第一个实体
      (setq text-value (cdr (assoc 1 (entget ent)))) ; 获取文本实体的值
      (setq text-value (atof text-value)) ; 将文本值转换为浮点数
      ; 如果文本值在指定范围内,则将实体添加到新的选择集中
      (if (<= value-min text-value value-max)
          (ssadd ent ss0)
      )
                                (setq i (1+ i))
      )
      (if ss0 ; 如果选择集中有实体
      (progn
          (princ "\nSelected texts within range: ")
          (princ value-min)
          (princ " to ")
          (princ value-max)
          (princ "\n")
          (sssetfirst nil ss0) ; 选择这些实体
      )
      (princ "\nNo texts found within the specified range.")
      )
    )
    (princ "\nNo texts found.")
)
(princ)
)

飞雪神光 发表于 2024-4-12 20:57:44

(defun c:Se(/ ss value ent text-value)
(setq value (getreal "\n输入值以选择文本: "))
(setq ss (ssget '((0 . "TEXT")))) ; 获取所有 TEXT 对象
        (setq i 0)
(if ss
    (progn
      (setq ss0 (ssadd)) ; 创建一个新的选择集,因为 ssdel 会修改原始选择集
      (repeat (sslength ss)
      (setq ent (ssname ss i)) ; 从选择集中获取第一个实体
      (setq text-value (cdr (assoc 1 (entget ent)))) ; 获取文本实体的值
      (if (equal (atof text-value) value 1e-5) ; 如果文本值等于指定数值
          (ssadd ent ss0) ; 将实体添加到新的选择集中
      )
                                (setq i (1+ i))
      )
      (if ss0 ; 如果选择集中有实体
      (progn
          (princ "\nSelected texts with value: ")
          (princ value)
          (princ "\n")
          (sssetfirst nil ss0) ; 选择这些实体
      )
      )
    )
)
(princ)
)

love1030312 发表于 2024-4-12 21:55:14

请教下你们用AI写代码用什么软件写的呀 很是好奇

359321852 发表于 2024-4-13 13:06:42

飞雪神光 发表于 2024-4-12 20:57


太棒了,谢谢你!

359321852 发表于 2024-4-13 13:08:51

本帖最后由 359321852 于 2024-4-13 13:15 编辑

love1030312 发表于 2024-4-12 21:55
请教下你们用AI写代码用什么软件写的呀   很是好奇
https://chat18.aichatos.xyz/#/chat/1712984900585






页: [1]
查看完整版本: lisp CAD 选中指定范围数值的所有文字