hdlyt11 发表于 2010-8-23 22:16:00

[求助]怎样将块中特定图元改为另一图层

<p>也就是希望能自动将图块中图名含有hatch的,例如:wall-hatch,全部改为hatch层。</p>

hdlyt11 发表于 2010-8-24 09:03:00

或者选择图块,可以将不同图层的文本改为TEXT图层

Gu_xl 发表于 2010-8-24 14:50:00

下面的是一个简单示例,选择你要改动的图块中的文字或hatch,即可自动转换到需要的图层

(defun c:tt()
(princ "\n选择图块中的子图元:")
(setq ent (car (nentsel)))
(if ent
    (progn
(setq ent (vlax-ename->vla-object ent))
(cond ((= "AcDbText" (vla-get-ObjectName ent))
(command "layer" "m" "Text" "")
(vla-put-layer ent "Text")
)
((= "AcDbHatch" (vla-get-ObjectName ent))
(command "layer" "m" "hatch" "")
(vla-put-layer ent "hatch")
)
)
)
    )
(command "regen")
(princ)
)

Gu_xl 发表于 2010-8-24 15:12:00


;;;选中图块,自动将土块中全部文字和填充该层
(defun c:ttt()
(setq ent (car (entsel)))
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object))
ent (vlax-ename->vla-object ent)
)
(if (or
(= "AcDbBlockReference" (vla-get-ObjectName ent))
(= "AcDbMInsertBlock" (vla-get-ObjectName ent))
)
    (progn
(setq blkname (vla-get-name ent))
(setq blkobj (vla-item (vla-get-Blocks doc) blkname))
(vlax-for obj blkobj
    (cond ((= "AcDbText" (vla-get-ObjectName obj))
    (command "layer" "m" "Text" "")
    (vla-put-layer obj "Text")
   )
   ((= "AcDbHatch" (vla-get-ObjectName obj))
    (command "layer" "m" "hatch" "")
    (vla-put-layer obj "hatch")
   )
    ) ;_ cond
) ;_ foreach
)
    )
(command "regen")
(princ)
)

hdlyt11 发表于 2010-8-24 17:02:00

超级爽,非常好,太精彩了,非常好用,哈哈哈

jialiang168 发表于 2011-2-14 11:15:25

( setq ent ( vlax-ename- > vla-object ent ) )

vlax-ename- > vla-object ent

这个是什么函数,不能使用耶

yshf 发表于 2011-2-27 21:22:36

在函中增加 “(vl-load-com)“,即
(defun c:tt()
   (vl-load-com)
   ......
)
      
页: [1]
查看完整版本: [求助]怎样将块中特定图元改为另一图层