lsp如何实现过滤选择大于某个值的数
lsp如何实现过滤选择大于某个值的数,请高手指点用vl-remove-if函数 百度ssget用法 像这样?(setq Lst '(1 2 3 4 5 6 7 8 9 10 11))
(vl-remove-if-not
'(lambda (XX)
(>= XX 5.0)
)
Lst
);从Lst中过滤出大于等于5.0的实数
工作中经常用到,比如用鼠标框选一堆数字,然后从中选出大于15的数,然后对这些数进行处理 感谢kucha007侠 ,模仿你改编 了一个程序,还是实现不了(第一个是可执行的原程序,第二个是改编的程序),麻烦帮修改一下 本帖最后由 liuhe 于 2023-4-16 22:12 编辑
;将所有半径大于等于2的圆选中
(ssget "X" '((0 . "CIRCLE") (-4 . ">=") (40 . 2.0)))
(setq ss (ssget '((0 . "TEXT")(1 . "16,2#,3#,4#,50"))));选取16—50的数字文本
;;;;(setq ss (ssgetnum 16 50))选取【16 50】内数值的text
(defun ssgetnum (i j / lst)
(SETQ LST "")
(while (<= i j)
(setq lst (strcat lst (rtos i 2 0) ",")
I (1+ i)
)
)
(setq lst (cons '(0 . "TEXT") (list (cons 1 lst))))
(ssget lst)
)
本帖最后由 yshf 于 2023-4-16 19:43 编辑
(setq ss (ssget '((0 . "TEXT")(1 . "16,2#,3#,4#,50"))))
是不可能选取17~19的
先选取再排除,如下:
(setq ss (ssget '((0 . "*TEXT,tch_elevation") )))
(setq ssa (vl-remove-if-not '(lambda(ent)
(setq zfc (cdr (assoc 1 (entget ent))))
(and (equal (read zfc) (atof zfc) 1e-3)
(>= (read zfc) 15.0)
)
)
(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
)
)
yshf 发表于 2023-4-16 19:38
(setq ss (ssget '((0 . "TEXT")(1 . "16,2#,3#,4#,50"))))
是不可能选取17~19的
先选取再排除,如下:
...
(setq ss (ssget '((0 . "TEXT")(1 . "16,17,18,19,2#,3#,4#,50")))) @yshf侠,好像还是全部选中了,能帮改一下完整的程序吗?
页:
[1]