找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2429|回复: 14

[转贴]:Change Block Color---改变块的颜色

[复制链接]
发表于 2004-2-23 04:13:37 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
  1. (defun C:TEST ()
  2.     (setvar "cmdecho" 0)
  3.     (prompt "\nSelect blocks that needs color changed: ")
  4.     (setq en (ssget '((0 . "INSERT"))))
  5.     (setq count (sslength en))
  6.     (setq index 0)
  7.     (setq clr (acad_colordlg 7))
  8.     (repeat count
  9.       (setq eg1 (entget (ssname en index)))
  10.       (setq en1 (ssname en index))
  11.       (redraw en1 3)
  12.       (setq en1 nil)
  13.       (setq nam (cdr (assoc 2 eg1)))
  14.       (setq en2 (cdr (assoc -2 (tblsearch "block" nam))))
  15.       (prblk en2 nam)
  16.     )
  17.     (setq index (+ index 1))
  18.   )
  19.   (defun prblk (en2 nam)
  20.     (setq cnt 0)
  21.     (while en2
  22.       (setq cnt        (1+ cnt)
  23.             eg2        (entget en2)
  24.             en2        (entnext (cdr (assoc -1 eg2)))
  25.       )
  26.       (grtext -2 (strcat nam " block entity # " (itoa cnt)))
  27.       (if (= (cdr (assoc 0 eg2)) "insert")
  28.         (progn
  29.           (setq        nm2 (cdr (assoc 2 eg2))
  30.                 en3 (cdr (assoc -2 (tblsearch "block" nm2)))
  31.           )
  32.           (prblk en3 nm2)
  33.         )
  34.         (progn
  35.           (if (assoc 62 eg2)
  36.             (setq eg2 (subst (cons 62 clr) (assoc 62 eg2) eg2))
  37.             (setq eg2 (append eg2 (list (cons 62 clr))))
  38.           )
  39.           (entmod eg2)
  40.         )
  41.       )
  42.     )
  43.     (setq ss1 (ssget "x" (list (cons 2 nam)))
  44.           cnt 0
  45.     )
  46.     (while (setq en1 (ssname ss1 cnt))
  47.       (setq cnt (1+ cnt))
  48.       (entupd en1)
  49.     )
  50.     (setvar "cmdecho" 1)
  51.     (princ)
  52.   )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-2-25 00:21:00 | 显示全部楼层
我把我的"改随层"改了几个字

  1. ;;;====================
  2. ;;;图块改颜色
  3. ;;;By Aeo
  4. ;;;---------------------
  5. (defun c:tk( / blk blkref blocks doc ent name clo)
  6. (vl-load-com)
  7.   (if(and (setq BLK     (car (entsel "\n选要改色的块: ")))
  8.           (setq BLKREF  (vlax-ename->vla-object BLK))
  9.           (not(and(/= (vla-get-objectname BLKREF) "AcDbBlockReference")
  10.               (princ"\n不是块:"))
  11.            )
  12.           (setq clo (acad_colordlg 7))
  13.           (setq name(vla-get-name BLKREF))
  14.       )
  15.     (progn
  16.           (command"undo""group")
  17.           (setq DOC     (vla-get-activedocument (vlax-get-acad-object))
  18.                 BLOCKS  (vla-get-blocks doc)
  19.                 blk     (vla-item BLOCKS name)
  20.           )
  21.            (vlax-for ENT blk
  22.              (vla-put-color ent clo)
  23.            )
  24.         (vla-regen doc acActiveViewport)
  25.         (vlax-release-object blk)
  26.         (vlax-release-object BLOCKS)
  27.         (vlax-release-object DOC)
  28.         (command"undo""end")
  29.         (princ"\nUndo后请regen.")
  30.      )
  31.   )
  32. (princ))
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-2-25 02:23:06 | 显示全部楼层
要是改块中部分实体的颜色呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-2-25 04:25:45 | 显示全部楼层
aeo斑竹: 这正是我要写的,  不过只是基本功能:

(defun c:test ()
  (vl-load-com)
  (setq ent (car (entsel)))
  (setq obj (vlax-ename->vla-object ent))
  (setq col (acad_colordlg 7))
  (vlax-for
    item
    (vla-item
      (vla-get-blocks
        (vla-get-activedocument
          (vlax-get-acad-object)))
      (vla-get-name obj)
    )
    (vla-put-color item col)
  )
)


最初由 陌生人 发布
[B]要是改块中部分实体的颜色呢? [/B]


那就用nentsel 函数:

(defun c:test ()
  (vl-load-com)
  (setq ent (car (nentsel)))
  (setq obj (vlax-ename->vla-object ent))
  (setq col (getstring "\nNew Color Number: "))
  (vla-put-color obj col)
  (vl-cmdf "regen" "")
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-5 08:08:40 | 显示全部楼层
看不明白
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-5 12:39:58 | 显示全部楼层
最初由 lsjjm 发布
[B]那就用nentsel 函数:
(defun c:test ()
(vl-load-com)
(setq ent (car (nentsel)))
(setq obj (vlax-ename->vla-object ent))
(setq col (getstring "\nNew Color Number: "))
(vla-put-color obj col)
(vl-cmdf "regen" "")
) ... [/B]



寫個一次點選圖塊多個物件的好嗎?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-6 23:04:55 | 显示全部楼层
好像已经有人写了一个该层的程序,可惜没有源代码。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-7 06:31:40 | 显示全部楼层
最初由 LUCAS 发布
寫個一次點選圖塊多個物件的好嗎? [/B]


"点选"只能一次点一个呀。  这样行不行? :
(defun c:test ( / ss)
  (vl-load-com)
  (setq col (getstring "\nNew Color Number: "))
  (while (setq ent (car (nentsel)))
    (setq obj (vlax-ename->vla-object ent))
    (vla-put-color obj col)
    (vl-cmdf "regen" "")
  )
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-3-7 18:15:44 | 显示全部楼层

  1. ;;By LUCAS(龙龙仔)
  2. ;;测试版,未完成
  3. ;;对"DIM"无效
  4. (defun NENTSGET        (/ HOLDPICKADD LIS SS N NAM)
  5.   (setq HOLDPICKADD (getvar "PICKADD"))
  6.   (setvar "pickadd" 1)
  7.   (prompt "\n点选要改颜色对象...(可多次点选图块内对象)")
  8.   (setq LIS (ssnamex (ssget ":N")))
  9.   (setq N 0)
  10.   (repeat (length LIS)
  11.     (if        (= (type (setq NAM (cadr (nth N LIS)))) 'ENAME)
  12.       (setq SS (append SS (list NAM)))
  13.     )
  14.     (setq N (1+ N))
  15.   )
  16.   (setvar "pickadd" HOLDPICKADD)
  17.   SS
  18. )

  19. (defun tt (col / ss n)
  20.   (setq ss (NENTSGET))
  21.   (setq n 0)
  22.   (repeat (length ss)
  23.     (vla-put-color (vlax-ename->vla-object (nth n ss)) col)
  24.     (setq n (1+ n))
  25.   )
  26.   (vl-cmdf "regen")
  27.   (princ)
  28. )

  29. ;;usage:(tt 1)
  30. ;;Sorry!现在没有autocad可供测试(人在香港)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-3-8 05:07:00 | 显示全部楼层
不错, 增加了"框选". 可你问的是点选呀!------"寫個一次點選圖塊多個物件的好嗎?"
其实, 去除repeat还会更简单:
(defun c:test ( / ss n)
  (setq HOLDPICKADD (getvar "PICKADD"))
  (setvar "pickadd" 1)
  (prompt "\n点选要改颜色对象...(可多次点选图块内对象)")
  (setq LIS (ssnamex (ssget ":N")))
  (setq col (getstring "\nNew Color Number: "))
  (setvar "pickadd" HOLDPICKADD)
  (foreach i lis
    (if (= (type (cadr i)) 'ENAME)
      (vla-put-color (vlax-ename->vla-object (cadr i)) col)
    )
  )
  (vl-cmdf "regen")
  (princ)
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-31 06:23:53 | 显示全部楼层
能提供文件吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-1 06:44:41 | 显示全部楼层
看不懂,能提供文件吗?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-28 19:57:16 | 显示全部楼层
高手。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-30 15:48:17 | 显示全部楼层
应该是好东西(版主奖励了好多爱心币!),厉害,高手!可这些代码要放在哪里呢?又怎么用呢?望指点。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-17 15:16:13 | 显示全部楼层
lsjjm,你好,工作中用到了你的不少好东东,
编程偶看不懂,但里面的两个中文字偶还好认识,看了一下好像没有我想要的情况,偶想选中块中的一种颜色如兰色,窗选我想改变颜色的块,将其中的全部兰色变成我想要的颜色。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-22 04:30 , Processed in 0.225704 second(s), 66 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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