artken 发表于 2008-8-26 14:50:00

能否帮忙改下eachy的这段VLISP程序的代码?

本帖最后由 作者 于 2008-8-26 14:52:20 编辑

一、实现功能:将所有实体改到0层,但不改变实体原本的颜色(也就是原来颜色随层的实体不随层,而是用原来所在层的颜色)。
二、已找到的资料:
1、eachy的“修改所有实体至 0 图层”程序如下,存在两个问题:
    a、不能保持实体原来的颜色。
    b、只能处理模型空间的。
;;修改所有实体至 0 图层,
(defun ea:chglay (/ for-item docment modelspace)
(setq docment    (vla-get-activedocument (vlax-get-acad-object))
modelspace (vla-get-modelspace docment)
)
    (vlax-for for-item modelspace
    (vla-put-layer for-item "0")
)
)
;;如果有块处理不了用下面的再处理
;;处理图块定义
(defun ea:chgblklay (/ docment for-item blocks)
(setq docment (vla-get-activedocument (vlax-get-acad-object))
blocks (vla-get-blocks docment)
)
(vlax-for for-item blocks
    (vlax-for obj for-item
      (vla-put-layer obj "0")
    )
)
)
;;修理完成后在 purge all
哪位大侠可以帮忙改一下,增加颜色的处理

感谢eachy!


龙龙仔 发表于 2008-8-26 16:23:00

<p>改顏色不是你說那麼簡單的,而且會有矛盾產生,想想看當遇到多層圖塊中的不同BYBLOCK &amp; BYLAYER</p><p>一些當時討論<br/><a href="http://www.xdcad.net/forum/showthread.php?s=&amp;threadid=250253&amp;perpage=15&amp;display=&amp;pagenumber=1">http://www.xdcad.net/forum/showthread.php?s=&amp;threadid=250253&amp;perpage=15&amp;display=&amp;pagenumber=1</a><br/></p>

artken 发表于 2008-8-26 17:55:00

<p>还以为是个小CASE呢</p><p>如果只是处理BYLAYER呢:</p><p>1、先将当前图形里的每个图层内的实体:如果原来是随层的,改为不随层,直接改成颜色号。比如原来图层颜色是5,实体是随层。就直接将实体的颜色改为5。</p><p>2、每个层里的实体改好后,再转到0层。</p><p>处理不了图块就只能手工处理了。或者没处理到的就人工再用QSELECT搞搞</p><p></p><p></p>

artken 发表于 2008-8-26 19:31:00

补充参考资料:

highflybir的把CAD中所有实体(包括块和嵌套块中所有单独实体)颜色都改颜色的程序
如何将其中的256颜色换成是我在3楼说的实体原来所在图层的颜色?
(defun c:CCC ()
   (vl-load-com)
   (vlax-for Blk (vla-get-Blocks
   (vla-get-ActiveDocument
       (vlax-get-Acad-Object)
   )
   )
   (vlax-for Obj Blk
       (vla-put-Color Obj 256)    ;256随层
       (if (= (vla-get-ObjectName Obj) "AcDbBlockReference")
(foreach Att (vlax-invoke Obj 'GetAttributes)
    (vla-put-Color Att 256);256随层
)
       )
   )
   )
)

龙龙仔 发表于 2008-8-27 08:00:00

<p>直接用eachy 的lyrtv23程序就可以了吧!</p>
页: [1]
查看完整版本: 能否帮忙改下eachy的这段VLISP程序的代码?