zyhandw 发表于 2012-5-24 16:14:09

筱筝 发表于 2012-5-22 14:57 static/image/common/back.gif
你好,不知道能不能在赋扩展属性的同时改变图层的颜色呢,比如把图层 “JMD”的颜色改为品红。因为现在的 ...

当然可以,只要把颜色62群码值替换相应的值就行了!

筱筝 发表于 2012-5-26 11:15:40

zyhandw 发表于 2012-5-24 16:14 static/image/common/back.gif
当然可以,只要把颜色62群码值替换相应的值就行了!

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

zyhandw 发表于 2012-5-26 15:15:05

筱筝 发表于 2012-5-26 11:15 static/image/common/back.gif
嗯,这个我知道,关键是根据 “颜色62群码值替换相应的值”的时候,这个“相应的 值”好像只能是个定值, ...

“根据对象的实体编码找到 图层相应的颜色信息”需要将编码和相应的图层做一个对照表;然后可以不用62群码,改用vl函数,用形如:(vla-put-color ename acbylayer)语句改颜色为随层即可!

筱筝 发表于 2012-5-27 09:39:39

zyhandw 发表于 2012-5-26 15:15 static/image/common/back.gif
“根据对象的实体编码找到 图层相应的颜色信息”需要将编码和相应的图层做一个对照表;然后可以不用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))
   )
)
)

xyp1964 发表于 2012-5-27 10:13:12

冒昧地加工了一下:(defun c:tt ()
(regapp "south")
(setq i 0)
(princ "\n请选择要赋属性的块: ")
(if (setq ss (ssget '((0 . "insert"))))
    (progn
      (repeat (sslength ss)
        (setq att   (entget (ssname ss i) (list "*"))
              bname (cdr (assoc 2 att))
              code(substr bname 1 (vl-string-position (ascii "_") bname))
              lst   (list -3 (list "south" (cons 1000 code)))
              att   (reverse (append (list lst) (reverse att)))
              i          (1+ i)
        )
        (entmod att)
      )
      (setq i 1)
      (vlax-for        la (vla-get-layers
                     (vla-get-ActiveDocument (vlax-get-acad-object))
                   )
        (vla-put-color la i)
        (setq i (1+ i))
      )
    )
)
)

筱筝 发表于 2012-5-27 10:29:40

xyp1964 发表于 2012-5-27 10:13 static/image/common/back.gif
冒昧地加工了一下:

谢谢你,不过我想修改的颜色不是随机的,是根据图层改的,就像我们直接用CASS画图的时候,它本身的颜色,如J居民地 MD是 品红   道路BLSS 是青色 等。

筱筝 发表于 2012-5-27 22:57:10

筱筝 发表于 2012-5-27 09:39 static/image/common/back.gif
谢谢你,我 在你原来写的程序上做了些修改,但是还是有点问题
(defun c:test()
(regapp "south")


嗯,是写错了。不过改了之后出现了“选择对象:
; 错误: AutoCAD.Application: 参数 Color (位于 IAcadLayer::put_Color 中) 无效”这个错误。我查了一下函数说明,里面是这样说的

筱筝 发表于 2012-5-27 23:02:56

筱筝 发表于 2012-5-27 22:57 static/image/common/back.gif
嗯,是写错了。不过改了之后出现了“选择对象:
; 错误: AutoCAD.Application: 参数 Color (位于 IAcadLa ...

函数说明是这样的

铁血秦狼 发表于 2015-11-21 14:46:56

zyhandw 发表于 2012-5-8 14:06 static/image/common/back.gif
看来又是一测绘同行,建议还是直接把你的dwg附件上来,大家再帮你!

http://bbs.mjtd.com/thread-170232-1-1.html大神帮我看看这个问题
页: 1 [2]
查看完整版本: 如何在块参照 提取图层 块名 批量赋实物扩展属性