找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: hardthinking

[求助] 求 框选并自动过滤掉已被锁定对象 lsp

[复制链接]
发表于 2013-8-18 18:40:20 | 显示全部楼层
牢固 发表于 2013-8-18 18:32
滤掉锁定图层:
(ssget "")
这是基础的知识!

这个是可以过滤的,只是 Ssget 这几个 : 选项和其它的怎么配合一直没有搞明白

命令: (ssget ":L" "F" (list (getpoint) (getpoint)))
; 错误: 错误的点参数
命令: (ssget ":L" "F" (getpoint) (getpoint))
; 错误: 错误的点参数

点评

可与:n :S之类组合。 其他X CP WP 都不能组合使用。 这是比较郁闷的地方。 :l虽然可过滤锁定。但是当有其他C CP之类选项时候,就无法使用:l了。 这时候就需要ai_ssget对选择集处理。 不过我更倾向于 构建非  详情 回复 发表于 2013-8-18 18:54
请问您是怎么阻止不变成表情的?:L  详情 回复 发表于 2013-8-18 18:48
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1077个

财富等级: 财源广进

 楼主| 发表于 2013-8-18 18:42:26 | 显示全部楼层
[ 本帖最后由 hardthinking 于 2013-8-18 19:16 编辑 ]\n\n以下两个都能实现我想要的功能。第二个性能更高~~认为有用的朋友可以直接拿走。
优点:我终于可以不用先“层显“再选对象编辑,再取消“层显”了,,有时候取消“层显”需要点时间。-------------------------(D)框选非锁定对象-----------------------------------------------
(defun c:D () (sssetfirst nil (ai_ssget (ssget))) (princ))
;;; -------------------------(DD)框选非锁定对象-----------------------------------------------
(defun c:DD () (sssetfirst nil (ssget ":L")) (princ))

点评

第一个程序实质是在 SSget 中遍历移出锁定层实体后返回选择集, 应该是在 SSGET 内部直接过滤了(ARX) ,当然后者的效率自然高  详情 回复 发表于 2013-8-18 18:50
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1077个

财富等级: 财源广进

 楼主| 发表于 2013-8-18 18:48:40 | 显示全部楼层
Free-Lancer 发表于 2013-8-18 18:40
这个是可以过滤的,只是 Ssget 这几个 : 选项和其它的怎么配合一直没有搞明白

命令: (ssget "" "F" ...

请问您是怎么阻止:L不变成表情的?:L

点评

发帖下面附加选项-〉禁用表情  发表于 2013-8-18 20:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-18 18:50:17 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-8-18 18:51 编辑
hardthinking 发表于 2013-8-18 18:42
;;; -------------------------(D)框选非锁定对象-----------------------------------------------
(defu ...

ai_ssget 实质是在 SSget 中遍历移出锁定层实体后返回选择集,:L 应该是在 SSGET 内部直接过滤了(ARX) ,当然后者的效率自然高
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-18 18:54:03 | 显示全部楼层
Free-Lancer 发表于 2013-8-18 18:40
这个是可以过滤的,只是 Ssget 这几个 : 选项和其它的怎么配合一直没有搞明白

命令: (ssget "" "F" ...

:L可与:n :S之类组合。 其他X CP WP 都不能组合使用。 这是比较郁闷的地方。

:l虽然可过滤锁定。但是当有其他C CP之类选项时候,就无法使用:l了。

这时候就需要ai_ssget对选择集处理。 不过我更倾向于 构建非锁定图层过滤表来实现。

点评

怎么构建非锁定图层过滤表呢? 给大家贴个代码吧。  详情 回复 发表于 2013-8-18 18:55
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-18 18:55:54 | 显示全部楼层
wowan1314 发表于 2013-8-18 18:54
可与:n :S之类组合。 其他X CP WP 都不能组合使用。 这是比较郁闷的地方。

:l虽然可过滤锁定。但是 ...

怎么构建非锁定图层过滤表呢? 给大家贴个代码吧。

点评

这个我还真没写过。 是直接拿别人的程序使用的。作者都忘记了。你让我怎么好意思贴出来!  详情 回复 发表于 2013-8-18 19:10
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-18 19:10:25 | 显示全部楼层
newer 发表于 2013-8-18 18:55
怎么构建非锁定图层过滤表呢? 给大家贴个代码吧。

这个我还真没写过。
是直接拿别人的程序使用的。作者都忘记了。你让我怎么好意思贴出来!
我看待会我试着写写吧




点评

直接在一个ssget里面过滤掉,我看还是比较难,看葛老的了。  详情 回复 发表于 2013-8-18 19:19
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-18 19:19:10 | 显示全部楼层
wowan1314 发表于 2013-8-18 19:10
这个我还真没写过。
是直接拿别人的程序使用的。作者都忘记了。你让我怎么好意思贴出来!
我看待会我 ...

直接在一个ssget里面过滤掉,我看还是比较难,看葛老的了。

点评

(ssget "C" (GETPOINT)(GETPOINT) (t12))好像可以哦  发表于 2013-8-18 19:37
看来是我想错了。。 用一个ssget确实难得实现。  详情 回复 发表于 2013-8-18 19:28
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-18 19:28:45 | 显示全部楼层
本帖最后由 wowan1314 于 2013-8-18 19:36 编辑
newer 发表于 2013-8-18 19:19
直接在一个ssget里面过滤掉,我看还是比较难,看葛老的了。
大家测试下。看看用图层过滤表来实现与其他选项一起用。可否
  1. ;;构建锁定图层过滤表
  2. ;;用法 (ssget (t12))
  3. (defun t12 ( / lay lst)
  4.     (setq lay (tblnext "LAYER" t))
  5.     (if (= (cdr (assoc 70 lay)) 0)
  6.         (setq lst (list (cons 8 (cdr(assoc 2 lay))) (cons -4 "OR>")))
  7.         (setq lst (list (cons -4 "OR>")))
  8.     )
  9.     (while (setq lay (tblnext "LAYER"))
  10.         (if (= (cdr (assoc 70 lay)) 0)
  11.             (setq lst (cons (cons 8 (cdr(assoc 2 lay))) lst))
  12.         )
  13.     )
  14.     (cons (cons -4 "<OR") lst)
  15. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-18 19:57:55 | 显示全部楼层
用VL函数再做个
  1. ;;构建锁定图层过滤表
  2. (defun t11 ( / lays lst)
  3.     (setq lst (list (cons -4 "OR>"))
  4.         lays (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
  5.     )
  6.     (vlax-map-collection
  7.         lays
  8.         '(lambda (x)
  9.             (if (= (vla-get-lock x) :vlax-true)
  10.                 nil
  11.                 (setq lst (cons (cons 8 (vla-get-name x) ) lst))
  12.             )
  13.         )
  14.     )
  15.     (cons (cons -4 "<OR") lst)
  16. )

点评

假如,图层8,非锁定, 如果我还要求只选则图层8上面的实体呢? 加你这个会不会有冲突?  详情 回复 发表于 2013-8-18 20:20
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-18 20:07:37 | 显示全部楼层
hardthinking 发表于 2013-8-18 18:32
newer大侠,我看出来了,70是对应图层状态的,我试了下,(ssget '((8 . "0")))这个没问题,可以返 ...

ssget 是对实体操作的,它过滤的是实体的组码,它选的是实体内部有的数据。 而保存在实体内部有关层的信息只有 组吗 8, 图层名。

点评

明白了,,,多谢newer版主...  详情 回复 发表于 2013-8-18 20:13
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1077个

财富等级: 财源广进

 楼主| 发表于 2013-8-18 20:13:08 | 显示全部楼层
newer 发表于 2013-8-18 20:07
ssget 是对实体操作的,它过滤的是实体的组码,它选的是实体内部有的数据。 而保存在实体内部有关层的信 ...

明白了,,,多谢newer版主{:soso_e100:}...
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-18 20:13:35 | 显示全部楼层
本帖最后由 Free-Lancer 于 2013-8-18 20:17 编辑

  1. (defun lockedlyr (/ r d)
  2.   (while (setq d (tblnext "layer" (null d)))
  3.     (if        (= (logand (cdr (assoc 70 d)) 4) 4)
  4.       (setq r (cons (cdr (assoc 2 d)) r))
  5.     )
  6.   )
  7.   (reverse r)
  8. )

以前这样用,现在用 :L 了
_$ (vl-string-translate " " "," (vl-string-trim "()" (vl-princ-to-string (lockedlyr))))
"2,4"
_$

评分

参与人数 1D豆 +5 收起 理由
wowan1314 + 5 高!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2013-8-18 20:20:23 | 显示全部楼层

假如,图层8,非锁定, 如果我还要求只选则图层8上面的实体呢? 加你这个会不会有冲突?

点评

图层8非锁定。只选图层8 就不需要这个函数了。 不过如果只选图层8,图层8又是锁定的呢。晕了  详情 回复 发表于 2013-8-18 20:36
你只选8 就不要用这个函数了!  发表于 2013-8-18 20:35
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2013-8-18 20:36:47 | 显示全部楼层
newer 发表于 2013-8-18 20:20
假如,图层8,非锁定, 如果我还要求只选则图层8上面的实体呢? 加你这个会不会有冲突?

图层8非锁定。只选图层8 就不需要这个函数了。

不过如果只选图层8,图层8又是锁定的呢。晕了

点评

我说的图层8只是个特例啊,实际程序中用图层过滤是很多的,不只是图层8,是几个图层呢?  详情 回复 发表于 2013-8-18 20:56
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-9-25 08:32 , Processed in 0.327375 second(s), 54 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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