wanhongron 发表于 2023-4-15 18:05:04

lsp如何实现过滤选择大于某个值的数

lsp如何实现过滤选择大于某个值的数,请高手指点

guosheyang 发表于 2023-4-15 18:35:46

用vl-remove-if函数

飞雪神光 发表于 2023-4-15 18:50:06

百度ssget用法

kucha007 发表于 2023-4-15 18:58:43

像这样?(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的实数

wanhongron 发表于 2023-4-16 09:39:22

工作中经常用到,比如用鼠标框选一堆数字,然后从中选出大于15的数,然后对这些数进行处理

wanhongron 发表于 2023-4-16 18:04:07

感谢kucha007侠 ,模仿你改编 了一个程序,还是实现不了(第一个是可执行的原程序,第二个是改编的程序),麻烦帮修改一下

liuhe 发表于 2023-4-16 19:24:11

本帖最后由 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:38:59

本帖最后由 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)))
                      )
           )

liuhe 发表于 2023-4-16 21:52:34

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"))))

wanhongron 发表于 2023-4-17 21:39:21

@yshf侠,好像还是全部选中了,能帮改一下完整的程序吗?
页: [1]
查看完整版本: lsp如何实现过滤选择大于某个值的数