找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 570|回复: 4

[求助] [求助]:想编一个选一个参照物来删除其它。。。

[复制链接]
发表于 2005-4-8 13:21:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
我想写一个这样的程序,先点选一个参照物,分析出它的颜色然后再框选到的物体如果是这个颜色的话将删除

但开始写时,发现一个小问题,如果该物体颜色是随层,将无法分辨出来它的颜色,请帮忙分析一下,谢谢

((-1 . <Entity name: 7ef61f90>) (0 . "LINE") (330 . <Entity
name: 7ef61cf8>) (5 . "EA") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 .
"0") (100 . "AcDbLine") (10 872.954 447.364 0.0) (11 892.939 443.499 0.0) (210
0.0 0.0 1.0))

没有(62  . ?)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2005-4-8 13:35:07 | 显示全部楼层
其实你可以用VLISP来取得物体的颜色会比较方便一些
(VLA-GET-COLOR (SETQ EN (VLAX-ENAME->VLA-OBJECT (CAR(ENTSEL)))))
如果取得的颜色是256代表随层,你可以用(SSGET '((62 . 256)))来过滤
总之如果对象省略了62码就代表随层,其实就是(62 . 256)
DO YOU UNDERSTAND?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-4-8 17:51:48 | 显示全部楼层
但是如此一来,只能知道他在(62 . 256)里面,我怎么去删除它呢?

回到主题,我是先用entsel选择一个物体得到它的当前颜色为2# yellow色,然后再框选所有物体如果是2#颜色就删除,也包括其它随层的物体也是2#颜色的物体一并删除。。。

而(SSGET '((62 . 256)))只能知道它是随层,但不知道它是不是2#颜色

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

使用道具 举报

发表于 2005-4-8 17:56:49 | 显示全部楼层
可以通过图层的颜色解决啊!
如果是随层,就查询相应层的信息,不就可以得到颜色了吗?!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-4-8 21:59:09 | 显示全部楼层
[php]
(defun hy_leachcolorlist(en / eno color layer ccolor cord_laye layerlist
                         layerlist1 layername layercolor needlis);;;;參照物體顏色過濾表
  (if (= (type en) 'ENAME)
  (progn
  (setq eno (vlax-ename->vla-object en))
  (setq color (vla-get-color eno))
  (setq layer (vla-get-layer eno))
  (setq ccolor (cdr(assoc 62 (entget(tblobjname "layer" layer)))))
  (setq cord_layer (tblnext "layer" t))
  (setq layerlist nil layerlist1 nil)
  (while cord_layer
    (setq layername (cdr(assoc 2 cord_layer)))
    (setq layercolor (cdr(assoc 62 cord_layer)))
    (if (= layercolor color)(setq layerlist (cons (cons 8 layername) layerlist)))
    (if (= layercolor ccolor)(setq layerlist1 (cons (cons 8 layername) layerlist1)))
    (setq cord_layer (tblnext "layer"))
    )
  (if (/= color 256)
      (setq needlis (append '((-4 . "<or"))
                        (list(cons 62 color))
                        '((-4 . "<and")(62 . 256)(-4 . "<or"))
                        layerlist
                        '((-4 . "or>")(-4 . "and>")(-4 . "or>"))))
      (setq needlis (append '((-4 . "<or"))
                            (list '(-4 . "<and")(cons 8 layer)'(62 . 256)'(-4 . "and>"))
                             (list(cons 62 ccolor))
                            '((-4 . "<and")(62 . 256)(-4 . "<or"))
                            layerlist1
                            '((-4 . "or>")(-4 . "and>")(-4 . "or>"))
                            ))
            )
  ))
  (if (= (type en) 'INT) (progn
  (setq color EN)
  (setq cord_layer (tblnext "layer" t))
  (setq layerlist nil)
  (while cord_layer
    (setq layername (cdr(assoc 2 cord_layer)))
    (setq layercolor (cdr(assoc 62 cord_layer)))
    (if (= layercolor color)(setq layerlist (cons (cons 8 layername) layerlist)))
    (setq cord_layer (tblnext "layer"))
    )
  (if (/= color 256)
      (setq needlis (append '((-4 . "<or"))
                        (list(cons 62 color))
                        '((-4 . "<and")(62 . 256)(-4 . "<or"))
                        layerlist
                        '((-4 . "or>")(-4 . "and>")(-4 . "or>"))))
            )
  ))
  needlis
  )
就知道你会提这个问题...试一下这个吧....
她会产生你所选图元颜色的过滤列表
(SSGET (hy_leachcolorlist EN))就会根据选择你所选图元颜色
过滤列表EN为你选择的参照物...选择集都建立了.要想删除他们还不简单吗?
其余的不用我帮你写了吧??相信你自己能写出来..
EN 可以是实体也可以是颜色代码....
如建立2#色选择集(SSGET (hy_leachcolorlist 2))
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-28 02:33 , Processed in 0.170772 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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