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

高手都跑哪里去了,问题还没解决呢。

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

;_________________________________________________________________________<br>;<br>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Program&nbsp; ls_selectobjbycolor<br>;<br>;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Author : 别晨&nbsp;&nbsp;&nbsp; 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>&nbsp;&nbsp; (graphscr)&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; (setq oce (getvar "cmdecho"))&nbsp;&nbsp;&nbsp; ;储存旧的指令响应值<br>&nbsp;&nbsp; (setq osm (getvar "osmode"))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;保存当前osnap设置<br>&nbsp;&nbsp; (setvar "osmode" 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;不捕捉<br>&nbsp;&nbsp; (setvar "cmdecho" 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;关闭指令响应<br>&nbsp;&nbsp; (setvar "errno" 0)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;系统变量errno归零<br>&nbsp;&nbsp; (setq olderr *error*)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;保存原有*erroer*函数内容<br>&nbsp;&nbsp; (defun *error* (msg)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;自定义出错处理<br>&nbsp;&nbsp; &nbsp;(setvar "cmdecho" oce)<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;(setq errn (getvar "errno"))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (princ errn)<br>&nbsp;&nbsp; )<br>&nbsp; <br>&nbsp; (setq ss (ssadd))<br>&nbsp; (setq ssmid (ssget "x"))<br>&nbsp; <br>&nbsp;;选择一个物体以确定颜色<br>&nbsp; (while (setq sbase (entsel "选择任意物体确定颜色:"))<br>&nbsp;&nbsp;&nbsp; (princ)<br>&nbsp;&nbsp; &nbsp;&nbsp; (setq&nbsp;&nbsp; &nbsp;enam (car sbase)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; &nbsp;&nbsp;&nbsp; &nbsp;crBase (myGetObjectColor enam)<br>&nbsp;&nbsp; &nbsp;&nbsp; )<br>&nbsp;&nbsp; &nbsp;&nbsp; (princ crBase)<br>&nbsp;&nbsp; &nbsp;&nbsp; (setq i -1)<br>&nbsp;&nbsp; &nbsp;&nbsp; (repeat (sslength ssmid)<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; (setq crThis (myGetObjectColor (setq name_i (ssname ssmid (setq i (1+ i))))))<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; (if (= crBase crThis )<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;(setq ss (ssadd name_i ss))<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; )<br>&nbsp;&nbsp; &nbsp;&nbsp; )<br>&nbsp; )<br>&nbsp; (command ".select" ss "")<br>&nbsp; ;此句仅仅为验证结果,使用时可去掉<br>&nbsp; (command ".select" "p")<br><br>&nbsp; <br>&nbsp; (setq *error* olderr)        ;恢复原有*error*函数内容<br>&nbsp; (setvar "osmode" osm)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;恢复osnap设置<br>&nbsp; (setvar "cmdecho" oce)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;恢复旧的指令响应值<br><br>)<br>;**********************************************************************<br><br>(defun myGetObjectColor( ename / nam col lay la a1 )&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; (setq nam (cdr (assoc 0 (entget ename))))&nbsp;&nbsp; ;取得对象类型<br>&nbsp;&nbsp; &nbsp; (setq col (cdr (assoc 62 (entget ename))))&nbsp; ;取得对象颜色<br>&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; (progn <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lay (cdr (assoc 8 (entget ename))))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ;取得对象所在层的图层名<br>&nbsp;&nbsp; &nbsp;&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;&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;&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; )<br>&nbsp;&nbsp; &nbsp; )<br>&nbsp; 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

如果再加图层区分就好啦!
页: 1 2 [3] 4
查看完整版本: [求助]提出个想法,可以编出个按颜色选择物体的程序吗?