明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3969|回复: 15

[源码] 重置选定块内对象的图层、颜色、线宽属性(更新)

[复制链接]
发表于 2015-5-12 10:38 | 显示全部楼层 |阅读模式
本帖最后由 vectra 于 2015-5-12 14:22 编辑

  1. (vl-load-com)
  2. (defun c:db (/ obj blk)
  3.   (defun confirm (msg default / rt)
  4.     (initget "Y N ")
  5.     (if        (null (setq rt (getkword (strcat msg " <" default ">:"))))
  6.       (setq rt default)
  7.     )
  8.     (if        (= "Y" rt)
  9.       t
  10.       nil
  11.     )
  12.   )

  13.   (defun walk (blk setlayer setcolor setlw /)
  14.     (vlax-for x        blk
  15.       (if (= "AcDbBlockReference" (vla-get-objectname x))
  16.         (walk (vla-item        (vla-get-blocks
  17.                           (vla-get-activedocument (vlax-get-acad-object))
  18.                         )
  19.                         (vla-get-name x)
  20.               )
  21.               setlayer
  22.               setcolor
  23.               setlw
  24.         )
  25.       )

  26.       (if setlayer
  27.         (vla-put-layer x "0")
  28.       )

  29.       (if setcolor
  30.         (vla-put-color x acbylayer)
  31.       )

  32.       (if setlw
  33.         (progn
  34.           (vla-put-lineweight x -1)
  35.           (if (= "AcDbPolyline" (vla-get-objectname x))
  36.             (vla-put-constantwidth x 0.0)
  37.           )
  38.         )
  39.       )
  40.     )
  41.   )

  42.   (setq        obj (ace-entsel "\n选择块:" nil "INSERT")
  43.         blk (vla-item (vla-get-blocks
  44.                         (vla-get-activedocument (vlax-get-acad-object))
  45.                       )
  46.                       (vla-get-name (vlax-ename->vla-object (car obj)))
  47.             )
  48.   )
  49.   (walk        blk
  50.         (confirm "重置图元图层为\"0\" [是(Y)/否(N)]" "Y")
  51.         (confirm "重置图元颜色为随层 [是(Y)/否(N)]" "Y")
  52.         (confirm "重置图元线宽默认或零 [是(Y)/否(N)]" "Y")
  53.   )
  54.   (command ".regen")
  55.   (princ)
  56. )

  57. (defun ace-entsel (msg kword filter / ent)
  58.   (while (null ent)
  59.     (if        kword
  60.       ;; 处理自定义INITGET参数
  61.       (initget kword)

  62.       ;; return empty string ("") if enter key or right button down
  63.       (initget " ")
  64.     )

  65.     (setq ent (entsel msg))

  66.     (cond
  67.       ((null ent)
  68.        (princ "未选择对象。")
  69.       )

  70.       ((= (type ent) 'list)
  71.        (if (and        filter
  72.                 (not (wcmatch (ace-getval 0 (car ent)) filter))
  73.            )
  74.          (progn
  75.            (princ "选择对象已被过滤。")
  76.            (setq ent nil)
  77.          )
  78.        )
  79.       )
  80.     )
  81.   )
  82.   ent
  83. )

  84. (defun ace-getval (key ename)
  85.   (cdr (assoc key (entget ename)))
  86. )

评分

参与人数 2明经币 +2 收起 理由
USER2128 + 1 很给力!
lucas_3333 + 1 神马都是浮云

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2023-8-4 11:28 | 显示全部楼层
测试可用,主要是回车三次比较繁琐,收藏!
发表于 2022-4-28 10:50 | 显示全部楼层
命令: ; 错误: 输入中含有多余的闭括号
发表于 2018-9-3 14:14 | 显示全部楼层
正在找这LSP,回车三次好象是有点麻烦
发表于 2015-5-12 10:50 | 显示全部楼层
不断输送Y or N是 不是很累
 楼主| 发表于 2015-5-12 10:55 | 显示全部楼层
自贡黄明儒 发表于 2015-5-12 10:50
不断输送Y or N是 不是很累

我原来一个版本就是一键重置的,但是后来发现有些块还是需要有个选项控制一下。

反正我是一直空格、空格、空格就好了
发表于 2015-5-12 11:11 | 显示全部楼层
vectra 发表于 2015-5-12 10:55
我原来一个版本就是一键重置的,但是后来发现有些块还是需要有个选项控制一下。

反正我是一直空格、空 ...

我觉得有2个以上的选项,还是对话框比较好些。
发表于 2015-5-12 13:26 | 显示全部楼层
本帖最后由 kwok 于 2015-5-12 13:27 编辑

提示缺少ace-getval
把ace-entsel去掉换成entsel冒似也能用,没了过滤.
发表于 2015-5-12 14:21 | 显示全部楼层


本帖子中包含更多资源

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

x
发表于 2015-5-14 18:25 | 显示全部楼层
如何加载xcad.vlx??加载后显示一个对话框,不知道怎么使用,请指教,我是新手
发表于 2015-5-15 19:45 | 显示全部楼层
我测试了一下楼主和6楼的程序:
对于楼主的程序:执行完后就能得到效果,而6楼的需要重生成(re)才能得到效果
既然楼主已经考虑了其他情况,就应该在选择 N 的情况下,进一步对属性进行修改(比如颜色改为什么,线型改为什么等等)就更完美了。

我是初学者,正在琢磨学习点东西。指手画脚之处还请高手多多包涵。
发表于 2016-1-9 20:10 | 显示全部楼层
本帖最后由 shasow 于 2016-1-9 20:21 编辑

程序已用ap加载,为什么输入db命令提示:
Command:  APPLOAD db重置块内对象属性.lsp successfully loaded.
Command:
"bad character read (octal): 0"

烦请提点下,还有就是这个程序支不支持嵌套块??能支持嵌套块才能完美解决我的问题啊!!!
发表于 2016-1-9 21:42 | 显示全部楼层
我知道什么问题了,原来保存后的lsp文件名中不能有中文!
奇怪的是其他一些lsp文件,文件名可以随便命令的,为什么这个不行??
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-19 22:35 , Processed in 0.358750 second(s), 35 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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