userzhl 发表于 2006-3-13 00:12:00

<P>那多少才是正确的呢?</P>
<P>没有的话该怎么弄呢?</P>

xyp1964 发表于 2006-3-13 07:44:00

;;;按颜色选择物体
(defun c:test ()
   (while (not (setq s1 (entsel "\n选择任意目标实体: "))))
   (setq int (xyp-get-Color (car s1))
ss(ssget)
ss1 (ssadd)
i   -1
   )
   (while (setq s1 (ssname ss (setq i (1+ i))))
   (if (= (xyp-get-Color s1) int)
       (setq ss1 (ssadd s1 ss1))
   )
   (princ ".")
   )
   (princ "\n物体集名称: !ss1")
   ss1
)
;;;取得物体的颜色(含随层)
(defun XYP-GET-COLOR (ename / col)
(if (or (= (vla-get-color (vlax-ename->vla-object ename)) 256)
   (= (vla-get-color (vlax-ename->vla-object ename)) 0)
      )
    (progn
      (setq laname (dxf 8 (entget ename))
   la1    (tblnext "layer" t)
   la    (dxf 2 la1)
      )
      (while (/= la laname)
(setq la1 (tblnext "layer" nil)
       la(dxf 2 la1)
)
      )
      (setq col (dxf 62 la1))
    )
    (setq col (dxf 62 (entget ename)))
)
col
)
(defun dxf (code elist) (cdr (assoc code elist)))

userzhl 发表于 2006-3-13 08:23:00

楼上,经测式它出错了,它会把所有的图元都选中的。

ZZXXQQ 发表于 2006-3-13 08:35:00

再试一下:<BR>(defun c:ssc (/ al)<BR>&nbsp;&nbsp; (if (setq al (entsel "\n请选择:")) (progn<BR>&nbsp;&nbsp;&nbsp; (if (assoc 62 (entget (car al)))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ss (ssget (list (assoc<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (assoc 62 (entget (car al))) 62 8)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (entget (car al)))))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>......<BR>&nbsp;&nbsp; ))<BR>)

userzhl 发表于 2006-3-13 09:53:00

有些行,有些不行。对随层颜色的不行。

别晨 发表于 2006-3-13 12:29:00

(setq col (cdr (assoc 62 (entget l1))))&nbsp; ;取得对象颜色<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (= col nil)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;如果颜色随层<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lay (cdr (assoc 8 (entget l1))))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;取得对象所在层的图层名<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq la (entget (tblobjname "layer" lay)))&nbsp;&nbsp;&nbsp; ;取得该图层的数据序列<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq a1 (cdr (car la)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;取得图层数据序列的名称(-1项)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq col (cdr (assoc 62 (entget a1))))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;取得图层的颜色,赋予变量col<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )&nbsp;&nbsp; <br>

xyp1964 发表于 2006-3-13 12:38:00

userzhl发表于2006-3-13 8:23:00static/image/common/back.gif楼上,经测式它出错了,它会把所有的图元都选中的。

<BR>

ljpnb 发表于 2006-3-13 12:48:00

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

ZZXXQQ 发表于 2006-3-13 13:40:00

这样应该行了:<BR>(defun c:ssc (/ al)<BR>&nbsp;&nbsp; (if (setq al (entsel "\n请选择:")) (progn<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ss (ssget (list (assoc<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (assoc 62 (entget (car al))) 62 8)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (entget (car al)))))<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<BR>......<BR>&nbsp;&nbsp; ))<BR>)<BR>

userzhl 发表于 2006-3-13 14:49:00

本帖最后由 作者 于 2006-3-13 16:38:13 编辑 <br /><br /> <P>上面几个试了都没有达到目的,我在网上发现有人编出过这个功能的,我现在把它发上来。</P>
<P>文件见附件,命令:slc1</P>
页: 1 [2] 3 4
查看完整版本: [求助]提出个想法,可以编出个按颜色选择物体的程序吗?