start4444 发表于 2018-9-7 16:42:23

依然小小鸟 发表于 2018-9-27 18:11:27

好帖子 学习起来

luhy2008 发表于 2019-7-5 15:57:24

感谢楼主分享!

zhenz02 发表于 2019-7-28 22:38:03

感谢楼主分享

Sonnenblumen 发表于 2021-3-30 13:34:02

感谢分享,学习了

guankuiwu 发表于 2021-5-31 17:44:34

学习一下

sfzyr 发表于 2021-9-10 02:11:19

本帖最后由 sfzyr 于 2021-9-10 23:45 编辑

caoyin 发表于 2011-6-18 00:23
;选择0层以外的线
(defun c:test16()
(setq ss (ssget '((0 . "line")(8 . "~0"))))

如何结合W 和 :L框选,过滤掉框选时锁定图层。以下来自晓东论坛,作者eachy,一定要这样吗,有无简单的结合:L 和W就可以的办法:
;;;=================http://bbs.xdcad.net/thread-201245-1-1.html=========
(ssget ] )

在使用 SSGET 的过程中发现在含有 Lock 的图层时,只有 CAD 命令可以过滤掉 Lock 图层实体,
Seclect 命令和 SSGET 是不能过滤 Lock 图层的,这样在程序中循环将浪费掉大量的时间,因此
写了这个函数简单情况下替代标准的 Ssget。

参数: Msg----提示字串
       mode ----同 ssget 的 method, 没有提供 pt 选项,够用就行
       filter --- 过滤表


|;
(defun ea:ssget      (Msg mode filter / ea:getlocklyr locklyr)
(defun ea:getlocklyr (/ d r);检索锁定图层
    (setq r "")
    (while (setq d (tblnext "layer" (null d)))
      (if (= (cdr (assoc 70 d)) 4)
      (setq r (strcat (cdr (assoc 2 d)) "," r))
      )
    )
    (if      (/= r "")
      (vl-string-trim "," r);还是 2000+ 以上版本方便
      nil
    )
)
(setq locklyr (ea:getlocklyr));锁定图层字串
(if locklyr
    (if      filter
      (setq
      filter (append
               filter
               (list '(-4 . "<not") (cons 8 locklyr) '(-4 . "not>"))
               )
      )
      (setq
      filter (list '(-4 . "<not") (cons 8 locklyr) '(-4 . "not>"))
      )
    )
);构造图层过滤表,ssget 中即使前面有锁定的图层 not 仍旧会起作用
(if msg
    (princ msg)
);提示串
(cond
    ((and mode filter)
   (ssget mode filter);有 mode
    )
    (filter
   (ssget filter);含有过滤表
    )
    (t (ssget));其它情况用标准 ssget
)
)
;;;;=============================================
(setq ss (ai_ssget (ssget)))
;;;=============================================
以上两个函数,那个运行速度会更快了??

672505821 发表于 2022-3-1 12:52:42

学习学习,感谢分享

LIULISHENG 发表于 2022-5-26 08:06:22

学习了学习了

magicheno 发表于 2022-7-23 13:30:29

感谢大佬分享
页: 14 15 16 17 18 19 20 21 22 23 [24] 25
查看完整版本: ssget 后跟mode 的部分理解(不断更新)