userzhl 发表于 2006-3-13 21:00:00
高手都跑哪里去了,问题还没解决呢。别晨 发表于 2006-3-13 22:12:00
;_________________________________________________________________________<br>;<br>; Program ls_selectobjbycolor<br>;<br>; Author : 别晨 11:47 AM 2006-3-13<br>;________________________________________________________________________<br>;<br>;根据颜色选定物体,可逐个选取多种颜色,右键结束选择<br>;**********************************************************************<br>(defun c:ls_selectobjectbycolor ( / oce osm olderr errn sbase enam crBase ss ssmid i name_i crThis )<br> (graphscr) ;切换到图形窗口<br> (setq oce (getvar "cmdecho")) ;储存旧的指令响应值<br> (setq osm (getvar "osmode")) ;保存当前osnap设置<br> (setvar "osmode" 0) ;不捕捉<br> (setvar "cmdecho" 0) ;关闭指令响应<br> (setvar "errno" 0) ;系统变量errno归零<br> (setq olderr *error*) ;保存原有*erroer*函数内容<br> (defun *error* (msg) ;自定义出错处理<br> (setvar "cmdecho" oce)<br> (setq errn (getvar "errno"))<br> (princ errn)<br> )<br> <br> (setq ss (ssadd))<br> (setq ssmid (ssget "x"))<br> <br> ;选择一个物体以确定颜色<br> (while (setq sbase (entsel "选择任意物体确定颜色:"))<br> (princ)<br> (setq enam (car sbase) <br> crBase (myGetObjectColor enam)<br> )<br> (princ crBase)<br> (setq i -1)<br> (repeat (sslength ssmid)<br> (setq crThis (myGetObjectColor (setq name_i (ssname ssmid (setq i (1+ i))))))<br> (if (= crBase crThis )<br> (progn<br> (setq ss (ssadd name_i ss))<br> )<br> )<br> )<br> )<br> (command ".select" ss "")<br> ;此句仅仅为验证结果,使用时可去掉<br> (command ".select" "p")<br><br> <br> (setq *error* olderr) ;恢复原有*error*函数内容<br> (setvar "osmode" osm) ;恢复osnap设置<br> (setvar "cmdecho" oce) ;恢复旧的指令响应值<br><br>)<br>;**********************************************************************<br><br>(defun myGetObjectColor( ename / nam col lay la a1 ) <br> (setq nam (cdr (assoc 0 (entget ename)))) ;取得对象类型<br> (setq col (cdr (assoc 62 (entget ename)))) ;取得对象颜色<br> (if (= col nil) ;如果颜色随层<br> (progn <br> (setq lay (cdr (assoc 8 (entget ename)))) ;取得对象所在层的图层名<br> (setq la (entget (tblobjname "layer" lay))) ;取得该图层的数据序列<br> (setq a1 (cdr (car la))) ;取得图层数据序列的名称(-1项)<br> (setq col (cdr (assoc 62 (entget a1)))) ;取得图层的颜色,赋予变量col<br> )<br> )<br> col<br>)别晨 发表于 2006-3-13 22:25:00
对块,组,以及标注等会出现混乱userzhl 发表于 2006-3-13 22:51:00
<P>是呀,哪们高手做出20楼附件那样的?</P><P>命令SLC和SLC1</P>
别晨 发表于 2006-3-13 23:48:00
那个附件和我的程式一样,对组、块的无能为力!~userzhl 发表于 2006-3-14 00:16:00
楼上,你的能不能增加个可以框选的?就是局部选取,就像SLC1别晨 发表于 2006-3-14 09:01:00
(setq ssmid (ssget "x"))<br>一句改成<br>(setq ssmid (ssget))<br>and2008 发表于 2006-3-14 23:40:00
<P>看来这个问题比较复杂噢,俺想缩小以下范围,按照颜色选中字体如何解决呀?</P>iamhuyuzhu 发表于 2009-6-8 21:43:00
22楼的程序很好啊,就是能不能直接激活选择的对象啊,而不是添加到上一个选择集samshs 发表于 2009-7-9 15:02:00
如果再加图层区分就好啦!