明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: userzhl

[求助]提出个想法,可以编出个按颜色选择物体的程序吗?

  [复制链接]
 楼主| 发表于 2006-3-13 00:12:00 | 显示全部楼层

那多少才是正确的呢?

没有的话该怎么弄呢?

发表于 2006-3-13 07:44:00 | 显示全部楼层
  1. ;;;按颜色选择物体
  2. (defun c:test ()
  3.    (while (not (setq s1 (entsel "\n选择任意目标实体: "))))
  4.    (setq int (xyp-get-Color (car s1))
  5.   ss  (ssget)
  6.   ss1 (ssadd)
  7.   i   -1
  8.    )
  9.    (while (setq s1 (ssname ss (setq i (1+ i))))
  10.      (if (= (xyp-get-Color s1) int)
  11.        (setq ss1 (ssadd s1 ss1))
  12.      )
  13.      (princ ".")
  14.    )
  15.    (princ "\n物体集名称: !ss1")
  16.    ss1
  17. )
  18. ;;;取得物体的颜色(含随层)
  19. (defun XYP-GET-COLOR (ename / col)
  20.   (if (or (= (vla-get-color (vlax-ename->vla-object ename)) 256)
  21.    (= (vla-get-color (vlax-ename->vla-object ename)) 0)
  22.       )
  23.     (progn
  24.       (setq laname (dxf 8 (entget ename))
  25.      la1    (tblnext "layer" t)
  26.      la    (dxf 2 la1)
  27.       )
  28.       (while (/= la laname)
  29. (setq la1 (tblnext "layer" nil)
  30.        la  (dxf 2 la1)
  31. )
  32.       )
  33.       (setq col (dxf 62 la1))
  34.     )
  35.     (setq col (dxf 62 (entget ename)))
  36.   )
  37.   col
  38. )
  39. (defun dxf (code elist) (cdr (assoc code elist)))
 楼主| 发表于 2006-3-13 08:23:00 | 显示全部楼层
楼上,经测式它出错了,它会把所有的图元都选中的。
发表于 2006-3-13 08:35:00 | 显示全部楼层
再试一下:
(defun c:ssc (/ al)
   (if (setq al (entsel "\n请选择:")) (progn
    (if (assoc 62 (entget (car al)))
      (setq ss (ssget (list (assoc
        (if (assoc 62 (entget (car al))) 62 8)
       (entget (car al)))))
      )
......
   ))
)
 楼主| 发表于 2006-3-13 09:53:00 | 显示全部楼层
有些行,有些不行。对随层颜色的不行。
发表于 2006-3-13 12:29:00 | 显示全部楼层
(setq col (cdr (assoc 62 (entget l1))))  ;取得对象颜色
      (if (= col nil)                                       ;如果颜色随层
         (progn
             (setq lay (cdr (assoc 8 (entget l1))))         ;取得对象所在层的图层名
             (setq la (entget (tblobjname "layer" lay)))    ;取得该图层的数据序列
             (setq a1 (cdr (car la)))                       ;取得图层数据序列的名称(-1项)
             (setq col (cdr (assoc 62 (entget a1))))        ;取得图层的颜色,赋予变量col
         )
      )  
发表于 2006-3-13 12:38:00 | 显示全部楼层
userzhl发表于2006-3-13 8:23:00楼上,经测式它出错了,它会把所有的图元都选中的。

本帖子中包含更多资源

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

x
发表于 2006-3-13 12:48:00 | 显示全部楼层

17楼程序测试没问题,应该完全符合主题

发表于 2006-3-13 13:40:00 | 显示全部楼层
这样应该行了:
(defun c:ssc (/ al)
   (if (setq al (entsel "\n请选择:")) (progn
      (setq ss (ssget (list (assoc
        (if (assoc 62 (entget (car al))) 62 8)
       (entget (car al)))))
      )
......
   ))
)
 楼主| 发表于 2006-3-13 14:49:00 | 显示全部楼层
本帖最后由 作者 于 2006-3-13 16:38:13 编辑

上面几个试了都没有达到目的,我在网上发现有人编出过这个功能的,我现在把它发上来。

文件见附件,命令:slc1

本帖子中包含更多资源

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

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

本版积分规则

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

GMT+8, 2024-10-2 15:23 , Processed in 0.185725 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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