明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: userzhl

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

  [复制链接]
 楼主| 发表于 2006-3-13 21:00:00 | 显示全部楼层
高手都跑哪里去了,问题还没解决呢。
发表于 2006-3-13 22:12:00 | 显示全部楼层
;_________________________________________________________________________
;
;                     Program  ls_selectobjbycolor
;
;              Author : 别晨    11:47 AM 2006-3-13
;________________________________________________________________________
;
;根据颜色选定物体,可逐个选取多种颜色,右键结束选择
;**********************************************************************
(defun c:ls_selectobjectbycolor ( / oce osm olderr errn sbase enam crBase ss ssmid i name_i crThis )
   (graphscr)                       ;切换到图形窗口
   (setq oce (getvar "cmdecho"))    ;储存旧的指令响应值
   (setq osm (getvar "osmode"))          ;保存当前osnap设置
   (setvar "osmode" 0)                   ;不捕捉
   (setvar "cmdecho" 0)             ;关闭指令响应
   (setvar "errno" 0)               ;系统变量errno归零
   (setq olderr *error*)            ;保存原有*erroer*函数内容
   (defun *error* (msg)             ;自定义出错处理
    (setvar "cmdecho" oce)
         (setq errn (getvar "errno"))
        (princ errn)
   )
 
  (setq ss (ssadd))
  (setq ssmid (ssget "x"))
 
 ;选择一个物体以确定颜色
  (while (setq sbase (entsel "选择任意物体确定颜色:"))
    (princ)
      (setq    enam (car sbase)                 
          crBase (myGetObjectColor enam)
      )
      (princ crBase)
      (setq i -1)
      (repeat (sslength ssmid)
        (setq crThis (myGetObjectColor (setq name_i (ssname ssmid (setq i (1+ i))))))
        (if (= crBase crThis )
          (progn
        (setq ss (ssadd name_i ss))
          )
        )
      )
  )
  (command ".select" ss "")
  ;此句仅仅为验证结果,使用时可去掉
  (command ".select" "p")

 
  (setq *error* olderr)        ;恢复原有*error*函数内容
  (setvar "osmode" osm)             ;恢复osnap设置
  (setvar "cmdecho" oce)             ;恢复旧的指令响应值

)
;**********************************************************************

(defun myGetObjectColor( ename / nam col lay la a1 )    
     (setq nam (cdr (assoc 0 (entget ename))))   ;取得对象类型
     (setq col (cdr (assoc 62 (entget ename))))  ;取得对象颜色
     (if (= col nil)                                       ;如果颜色随层
         (progn
                 (setq lay (cdr (assoc 8 (entget ename))))         ;取得对象所在层的图层名
                 (setq la (entget (tblobjname "layer" lay)))    ;取得该图层的数据序列
                 (setq a1 (cdr (car la)))                       ;取得图层数据序列的名称(-1项)
                 (setq col (cdr (assoc 62 (entget a1))))        ;取得图层的颜色,赋予变量col
         )
     )
  col
)
发表于 2006-3-13 22:25:00 | 显示全部楼层
对块,组,以及标注等会出现混乱
 楼主| 发表于 2006-3-13 22:51:00 | 显示全部楼层

是呀,哪们高手做出20楼附件那样的?

命令SLC和SLC1

发表于 2006-3-13 23:48:00 | 显示全部楼层
那个附件和我的程式一样,对组、块的无能为力!~
 楼主| 发表于 2006-3-14 00:16:00 | 显示全部楼层
楼上,你的能不能增加个可以框选的?就是局部选取,就像SLC1
发表于 2006-3-14 09:01:00 | 显示全部楼层
(setq ssmid (ssget "x"))
一句改成
(setq ssmid (ssget))
发表于 2006-3-14 23:40:00 | 显示全部楼层

看来这个问题比较复杂噢,俺想缩小以下范围,按照颜色选中字体如何解决呀?

发表于 2009-6-8 21:43:00 | 显示全部楼层
22楼的程序很好啊,就是能不能直接激活选择的对象啊,而不是添加到上一个选择集
发表于 2009-7-9 15:02:00 | 显示全部楼层
如果再加图层区分就好啦!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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