明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1281|回复: 9

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

[复制链接]
发表于 2023-4-15 18:05:04 | 显示全部楼层 |阅读模式
lsp如何实现过滤选择大于某个值的数,请高手指点
发表于 2023-4-15 18:35:46 | 显示全部楼层
用  vl-remove-if  函数
发表于 2023-4-15 18:50:06 | 显示全部楼层
百度ssget用法
发表于 2023-4-15 18:58:43 | 显示全部楼层
像这样?
  1. (setq Lst '(1 2 3 4 5 6 7 8 9 10 11))
  2. (vl-remove-if-not
  3.     '(lambda (XX)
  4.        (>= XX 5.0)
  5.      )
  6.     Lst
  7. );从Lst中过滤出大于等于5.0的实数

 楼主| 发表于 2023-4-16 09:39:22 | 显示全部楼层
工作中经常用到,比如用鼠标框选一堆数字,然后从中选出大于15的数,然后对这些数进行处理
 楼主| 发表于 2023-4-16 18:04:07 | 显示全部楼层
感谢kucha007侠 ,模仿你改编 了一个程序,还是实现不了(第一个是可执行的原程序,第二个是改编的程序),麻烦帮修改一下

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 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)
)


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 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)))
                      )
           )

发表于 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"))))
 楼主| 发表于 2023-4-17 21:39:21 | 显示全部楼层
@yshf侠,好像还是全部选中了,能帮改一下完整的程序吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-16 15:46 , Processed in 0.177809 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表