找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 517|回复: 2

[LISP程序]:处理BLOCK内实体的图层和颜色

[复制链接]
发表于 2003-8-15 14:13:13 | 显示全部楼层 |阅读模式

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

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

×
v1.0 2003-08-15

目的:
修改块内实体的图层和颜色到指定的值。

适用版本:
AutoCAD2002、AutoCAD2004,其他尚未尝试。

操作:
1。选择一个INSERT
2。接受缺省选项或指定目标图层、目标颜色
3。完成一次修改,屏幕暂时无变化
4。继续选择其他INSERT……
5。REGEN,完成

说明:
1。图层选项目前有点问题,不能运行。我脑筋短路,一时看不出问题的根源 :(
已经改好。原因是我原来使用了系统保留关键字L或LA来代表layer。[/COLOR]
2。颜色选项支持代称,比如你可以输入2,或者Y,或者Yellow来选择黄色。但蓝色BLue是个例外,必须输入BL而不是B,因为B分配给了byBlock。

以下为v1.0源代码。请勿修改作者信息。

  1.   [FONT=courier new]
  2. ;;; FISHLISP
  3. ;;; Little Fish Studio [url]http://ivox.bjht.com[/url]
  4. ;;; C:BKC
  5. ;;; Change layer(s), color(s) of entities within a block.
  6. ;;; History:
  7. ;;; 03-08-15 v1.0 original version.

  8. (defun c:bkc (/ olderr bkc_alias bk en ent cnt )
  9.   (setq olderr *error*)
  10.   (defun *error* (s)
  11.     (command "regen")
  12.     (princ)
  13.   )
  14.   (setq bkc_layer (if bkc_layer bkc_layer "0"))
  15.   (setq bkc_color (if bkc_color bkc_color 0))
  16.   (setq bkc_alias
  17.     (cond
  18.       ( (= bkc_color 0) "ByBlock")
  19.       ( (= bkc_color 1) "Red")
  20.       ( (= bkc_color 2) "Yellow")
  21.       ( (= bkc_color 3) "Green")
  22.       ( (= bkc_color 4) "Cyan")
  23.       ( (= bkc_color 5) "Blue")
  24.       ( (= bkc_color 6) "Magenta")
  25.       ( (= bkc_color 7) "White")
  26.       ( (= bkc_color 256) "ByLayer")
  27.       ( t (rtos bkc_color 2 0))
  28.     );cond
  29.   );setq bkc_alias
  30.   (princ "\nFISHLISP: BKC v1.0. Little Fish Studio. 2003-08-15")
  31.   (princ (strcat "\nTarget Layer: " bkc_layer ", target Color: " bkc_alias))
  32.   (while (setq bk (getbk))
  33.     (setq en (cdr (assoc -2 (tblsearch "block" bk))))
  34.     (setq cnt 0)
  35.     (while en
  36.       (setq ent (entget en))
  37.       (setq ent (subst (cons 8 bkc_layer) (assoc 8 ent) ent))
  38.       (if (assoc 62 ent)
  39.         (setq ent (subst (cons 62 bkc_color) (assoc 62 ent) ent))
  40.         (if (= bkc_color 256) nil
  41.           (setq ent (append ent (list (cons 62 bkc_color))))
  42.         )
  43.       );
  44.       (entmod ent)
  45.       (setq cnt (1+ cnt))
  46.       (setq en (entnext en))
  47.     );while
  48.     (princ (strcat "\n" (rtos cnt 2 0) " entitie(s) in Block " bk " changed. Regen required. "))
  49.   );while bk
  50.   (princ "\n")
  51.   (command "regen")
  52.   (setq *error* olderr)
  53.   (princ)
  54. )

  55. (defun getbk (/ bk_en bl bc bk_name)
  56.   (initget "laYer Color")
  57.   (setq bk_en (entsel "\n[laYer/Color] Select INSERT to edit: "))
  58.   (cond
  59.     ( (= bk_en "laYer")
  60.       (princ (strcat "\nTarget Layer: <" bkc_layer "> "))
  61.       (setq bl (getstring t))
  62.       (setq bl
  63.         (cond
  64.           ( (= bl "") bkc_layer)
  65.           ( (not (tblsearch "layer" bl))
  66.             (princ "\nLayer not found. ")
  67.             bkc_layer
  68.           )
  69.           ( t bl)
  70.         );cond
  71.       ); setq bl
  72.       (setq bkc_layer bl)
  73.       (getbk)
  74.     ); layer
  75.     ( (= bk_en "Color")
  76.       (princ (strcat "\nTarget Color: <" bkc_alias "> "))
  77.       (initget "byBlock byLayer Red Yellow Green Cyan BLue Magenta White")
  78.       (setq bc (getint))
  79.       (setq bc
  80.         (cond
  81.           ( (not bc) bkc_color)
  82.           ( (= bc "byBlock") 0)
  83.           ( (= bc "Red") 1)
  84.           ( (= bc "Yellow") 2)
  85.           ( (= bc "Green") 3)
  86.           ( (= bc "Cyan") 4)
  87.           ( (= bc "BLue") 5)
  88.           ( (= bc "Magenta") 6)
  89.           ( (= bc "White") 7)
  90.           ( (= bc "byLayer") 256)
  91.           ( t
  92.             (if (>= 256 bc 0)
  93.               bc
  94.               (progn
  95.                 (princ "\nInvalid color index ignored! ")
  96.                 bkc_color
  97.               )
  98.             );if
  99.           );else
  100.         );cond
  101.       );setq
  102.       (setq bkc_color bc)
  103.       (getbk)
  104.     ); color
  105.     ( (listp bk_en)
  106.       (setq bk_ent (entget (car bk_en)))
  107.       (setq bk_name (if (= "INSERT" (cdr (assoc 0 bk_ent))) (cdr (assoc 2 bk_ent))))
  108.       bk_name
  109.     )
  110.     ( t nil)
  111.   );cond
  112. ); getbk

  113. (princ "loaded. Start as C:BKC ")
  114. (princ)
  115.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-8-15 21:26:04 | 显示全部楼层
能否直接编辑块内文字
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2003-8-15 23:24:25 | 显示全部楼层
块中块没改过来.

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-26 05:10 , Processed in 0.358739 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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