tm20038175 发表于 2011-3-12 20:30:24

【一个想法】修改图形里Bylayer的图元为指定颜色,线型

例如 "Line_11" 图层,颜色:绿;线型:虚线,
能不能通过程序把里面的所有Bylayer的图元颜色改为绿色,线型改为虚线,包括块里面的,
这样就可以很方便的合并和删除多余图层了,谢谢~~~

tm20038175 发表于 2011-3-12 20:41:01

很好的一个想法啊,这样把一个杂乱的图形修改为标准图层就方便多了。
希望大家能给点意见,谢谢了~~~

tm20038175 发表于 2011-3-12 20:42:56

不然的话,合并修改图层的话bylayer的图层会跟新的图层一个颜色和线型,这样图形就变了,所以有了这个想法,希望大虾们给点建议谢谢~~~

ZZXXQQ 发表于 2011-3-12 20:46:47

颜色和线型都可以bylayer要怎么改呢?

Gu_xl 发表于 2011-3-12 21:08:57

回复 tm20038175 的帖子


(defun c:tt(/ laydata doc ms blocks)
(setq layers (vla-get-Layers (setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))))
(setq blocks (vla-get-blocks doc))

(vlax-for lay layers
    (setq laydata (cons (list (vla-get-name lay) (vla-get-color lay) (vla-get-linetype lay)) laydata))
    )
(vlax-for block blocks
    (vlax-for obj block
    (if (and (= 256 (vla-get-color obj)) (/= "0" (vla-get-layer obj)))
        (vla-put-color obj (cadr (assoc (vla-get-layer obj) laydata)))
      )
    (if (and(= "ByLayer" (vla-get-linetype obj))(/= "0" (vla-get-layer obj)))
        (vla-put-linetype obj (caddr (assoc (vla-get-layer obj) laydata)))
      )
      
      )
    )
(setq ms (vla-get-ModelSpace doc))
(vlax-for obj ms
    (if (= 256 (vla-get-color obj))
        (vla-put-color obj (cadr (assoc (vla-get-layer obj) laydata)))
      )
    (if (= "ByLayer" (vla-get-linetype obj))
        (vla-put-linetype obj (caddr (assoc (vla-get-layer obj) laydata)))
      )
    )
(princ)

)

tm20038175 发表于 2011-3-12 21:13:34

回复 ZZXXQQ 的帖子

就是不要bylayer,每条线最好指定颜色,线型,不然合并的时候变成其他图层的颜色和线型了

tm20038175 发表于 2011-3-12 21:22:42

回复 Gu_xl 的帖子

就是这个,十分感谢啦,可惜只有修改颜色的,线型也能修改吗?

Gu_xl 发表于 2011-3-12 21:25:36

回复 tm20038175 的帖子

程序已经包括线型和颜色了

tm20038175 发表于 2011-3-12 21:34:56

回复 Gu_xl 的帖子

十分感谢您的回复,我拷贝了您的tt程序,执行后,发现颜色改为指定颜色了,线型全部是Bylayer,不是指定的线型(如实线,虚线,点化线……),奇怪了,难道是我的电脑出问题了吗?

Gu_xl 发表于 2011-3-12 21:55:53

回复 tm20038175 的帖子

我测试没问题!你把下面的代码修改一下试试:
(= "ByLayer" (vla-get-linetype obj))
===>
(= "BYLAYER" (strcase (vla-get-linetype obj)))

页: [1] 2
查看完整版本: 【一个想法】修改图形里Bylayer的图元为指定颜色,线型