明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: 筱筝

如何在块参照 提取图层 块名 批量赋实物扩展属性

  [复制链接]
发表于 2012-5-24 16:14:09 | 显示全部楼层
筱筝 发表于 2012-5-22 14:57
你好,不知道能不能在赋扩展属性的同时改变图层的颜色呢,比如把图层 “JMD”的颜色改为品红。因为现在的 ...

当然可以,只要把颜色62群码值替换相应的值就行了!
 楼主| 发表于 2012-5-26 11:15:40 | 显示全部楼层
zyhandw 发表于 2012-5-24 16:14
当然可以,只要把颜色62群码值替换相应的值就行了!

嗯,这个我知道,关键是根据 “颜色62群码值替换相应的值”的时候,这个“相应的 值”好像只能是个定值,而我希望的是程序能在赋扩展属性的同时,颜色能够同时的改变成相应的图层的颜色。我的疑问在于 我能不能根据对象的实体编码找到 图层相应的颜色信息,这个颜色作为变量 来进行程序的编写。不好意思,我说得很凌乱
发表于 2012-5-26 15:15:05 | 显示全部楼层
筱筝 发表于 2012-5-26 11:15
嗯,这个我知道,关键是根据 “颜色62群码值替换相应的值”的时候,这个“相应的 值”好像只能是个定值, ...

“根据对象的实体编码找到 图层相应的颜色信息”需要将编码和相应的图层做一个对照表;然后可以不用62群码,改用vl函数,用形如:(vla-put-color ename acbylayer)语句改颜色为随层即可!
 楼主| 发表于 2012-5-27 09:39:39 | 显示全部楼层
zyhandw 发表于 2012-5-26 15:15
“根据对象的实体编码找到 图层相应的颜色信息”需要将编码和相应的图层做一个对照表;然后可以不用62群码 ...

谢谢你,我 在你原来写的程序上做了些修改,但是还是有点问题
(defun c:test()
(regapp "south")
(setq sscnt 0)
(vl-load-com)
  (prompt "\n请选择要赋属性的块:")
  (if (setq ins_all (ssget (list '(0 . "insert"))))
   (repeat (sslength ins_all)
    (setq ss_ins_name (ssname ins_all sscnt))
    (setq ss_ins_att (entget ss_ins_name (list "*")))
    (setq ins_name (cdr (assoc '2 ss_ins_att)))
    (setq ins_code (substr ins_name 1 (vl-string-position (ascii "_") ins_name)))
    (setq ins_code_lst (list '-3 (list "south" (cons 1000 ins_code))))
    (setq ss_ins_att (reverse (append (list ins_code_lst) (reverse ss_ins_att))))
     (setq layers (vla-get-layers
        (vla-get-ActiveDocument (vlax-get-acad-object))
      )
     )
     (vlax-for layer layers
    (vla-put-color layer acBlayer) ;如果这里是acBlayer,程序有错误,但是如果该成定值,如1 ,就能成功修改颜色,但是不是根据图层修改成不同的颜色,而是整幅图都是同一颜色。能不能有什么方法,让它根据不同的图层,赋上不同的颜色呢。
  )
  (princ)
    (entmod ss_ins_att)
    (setq sscnt (1+ sscnt))
   )
  )
)

点评

当然出错了!你仔细看看,是acbylayer,不是acblayer!  发表于 2012-5-27 14:37
发表于 2012-5-27 10:13:12 | 显示全部楼层
冒昧地加工了一下:
  1. (defun c:tt ()
  2.   (regapp "south")
  3.   (setq i 0)
  4.   (princ "\n请选择要赋属性的块: ")
  5.   (if (setq ss (ssget '((0 . "insert"))))
  6.     (progn
  7.       (repeat (sslength ss)
  8.         (setq att   (entget (ssname ss i) (list "*"))
  9.               bname (cdr (assoc 2 att))
  10.               code  (substr bname 1 (vl-string-position (ascii "_") bname))
  11.               lst   (list -3 (list "south" (cons 1000 code)))
  12.               att   (reverse (append (list lst) (reverse att)))
  13.               i            (1+ i)
  14.         )
  15.         (entmod att)
  16.       )
  17.       (setq i 1)
  18.       (vlax-for        la (vla-get-layers
  19.                      (vla-get-ActiveDocument (vlax-get-acad-object))
  20.                    )
  21.         (vla-put-color la i)
  22.         (setq i (1+ i))
  23.       )
  24.     )
  25.   )
  26. )
 楼主| 发表于 2012-5-27 10:29:40 | 显示全部楼层
xyp1964 发表于 2012-5-27 10:13
冒昧地加工了一下:

谢谢你,不过我想修改的颜色不是随机的,是根据图层改的,就像我们直接用CASS画图的时候,它本身的颜色,如J居民地 MD是 品红   道路BLSS 是青色 等。
 楼主| 发表于 2012-5-27 22:57:10 | 显示全部楼层
筱筝 发表于 2012-5-27 09:39
谢谢你,我 在你原来写的程序上做了些修改,但是还是有点问题
(defun c:test()
(regapp "south")

嗯,是写错了。不过改了之后出现了“选择对象:
; 错误: AutoCAD.Application: 参数 Color (位于 IAcadLayer::put_Color 中) 无效”这个错误。我查了一下函数说明,里面是这样说的[img=45,45][/img]
 楼主| 发表于 2012-5-27 23:02:56 | 显示全部楼层
筱筝 发表于 2012-5-27 22:57
嗯,是写错了。不过改了之后出现了“选择对象:
; 错误: AutoCAD.Application: 参数 Color (位于 IAcadLa ...

函数说明是这样的

本帖子中包含更多资源

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

x
发表于 2015-11-21 14:46:56 | 显示全部楼层
zyhandw 发表于 2012-5-8 14:06
看来又是一测绘同行,建议还是直接把你的dwg附件上来,大家再帮你!

http://bbs.mjtd.com/thread-170232-1-1.html大神帮我看看这个问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-21 01:07 , Processed in 0.189457 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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