明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2495|回复: 9

图层与劳动成果保护

[复制链接]
发表于 2010-9-14 22:36 | 显示全部楼层 |阅读模式

请高手帮我编下,谢谢!原来的图层上的颜色保持不变,但是所有层删除掉,全部归到0层!这样可以按颜色打图,但是编辑起来就不容易了!这样也助于保护自己的劳动成果!!!急用!!谢谢!!!

评分

参与人数 1明经币 +1 收起 理由
flytoday + 1 很给力!

查看全部评分

发表于 2010-9-15 21:28 | 显示全部楼层
本帖最后由 作者 于 2010-9-18 20:48:55 编辑

;简短程序。保留颜色和线型。
游客,本帖隐藏的内容需要发帖数高于 5 才可浏览,你当前发帖数只有 0

回复 支持 1 反对 0

使用道具 举报

发表于 2010-9-15 12:23 | 显示全部楼层
  1. (defun c:tt(/ *Acad* *AcDocument* en ss n obj objlayer layername color )
  2.   (setq *Acad*    (vlax-get-acad-object)
  3.       *AcDocument* (vla-get-activedocument *Acad*)
  4. )
  5.   (setq ss (ssget "x" '((-4 . "<not") (8 . "0")(-4 . "not>"))))
  6.   (setq n 0)
  7.   (if ss
  8.   (repeat (sslength ss)
  9.     (setq en (ssname ss n))
  10.     (setq obj (vlax-ename->vla-object en))
  11.     (setq color (vla-get-color obj))
  12.     (if (= color 256)
  13.       (progn
  14. (setq layername (vla-get-layer obj))
  15. (setq objlayer (vla-item (vla-get-layers *AcDocument*) layername))
  16. (setq color (vla-get-color objlayer))
  17. (vla-put-color obj color)
  18. (vla-put-layer obj "0")
  19. )
  20.       (vla-put-layer obj "0")
  21.       )
  22.     (setq n (1+ n))
  23.     )
  24.     )
  25.   )
发表于 2010-9-15 21:53 | 显示全部楼层
本帖最后由 作者 于 2010-9-16 14:11:00 编辑

ZZXXQQ发表于2010-9-15 21:28:00;简短程序。保留颜色和线型。 以下内容需要帖子数达到5才可以浏览 以下内容为程序代码: (defun c:tt ()  (setvar \"CMDECHO\" 0)

。。。

 


只能对实体线型、颜色是随层才起作用哦!对非随层就无效喽!达不到楼主的要求啦!

发表于 2010-9-18 15:00 | 显示全部楼层
本帖最后由 作者 于 2010-9-18 15:44:46 编辑

 

;;;师兄 QQ 361865648   版本20100918

 

 

 

;;;师兄 QQ 361865648   版本20100918

(defun c:TEST()
;;;用新的组码值替换原值
(defun dxfupd (ent dxfcode newval / elst newlst)
  (setq elst (entget ent))
  (setq newlst (append elst (list (cons dxfcode newval))))
  (entmod newlst)
  (entupd ent)
)

;;;将实体移动到0层,并保持实体的线型和颜色不变
(defun updcolandlt (ent / entlst layername laylst laycol ltype)
  (setq entlst (entget ent))
  (setq layername (cdr (assoc 8 entlst)))
  (setq laylst (tblsearch "layer" layername))
  (setq laycol (cdr (assoc 62 laylst)))
  (setq ltype (cdr (assoc 6 laylst)))
  (if (not (assoc 6 entlst))
    (dxfupd ent 6 ltype)
  )

  (if (assoc 62 entlst)
    (dxfupd ent 8 "0")
    (progn
      (dxfupd ent 62 laycol)
    )
  )
)


(setq entss (ssget "x" '((0 . "~insert")))) ;_非块
    (if (not entss) (vl-exit-with-value 0))

(setq i 0)
(repeat (sslength entss)
  (setq curent (ssname entss i))
  (setq i (1+ i))
  (updcolandlt curent)
  (dxfupd curent 8 "0")
)


(setq blkss (ssget "x" '((0 . "insert"))))
  (if (not blkss) (vl-exit-with-value 1))
(setq i 0)
(repeat (sslength blkss)
  (setq curblk (ssname blkss i))
  (setq i (1+ i))
  (setq blklst (entget curblk))
  (setq blkname (cdr (assoc 2 blklst))) ;_块名
  (setq blkdef (tblsearch "block" blkname)) ;_块定义
  (setq einblk (cdr (assoc -2 blkdef))) ;_块中第一个图元
  (updcolandlt einblk)
  (dxfupd einblk 8 "0")
  (while (and
    (setq einblk (entnext einblk))
    (setq elst (entget einblk))

    (/= (cdr (assoc 0 elst)) "SEQEND")
  )

    (updcolandlt einblk)
    (dxfupd einblk 8 "0")
  )
  (dxfupd curblk 8 "0")
)

;;;删除其余的层
  (setq layer(tblnext "layer" t))
  (setq layname(cdr(assoc 2 layer)));_层名
;;;  (setq layent(tblobjname "layer" layername));_第一个层
  (setq laylst(list layname))
  (while (setq layer(tblnext "layer"))
    (setq layname(cdr(assoc 2 layer)))
    (setq laylst(cons layname laylst))
    )

  (mapcar '(lambda (x)
      (if (/= "0" x)
        (progn
       
        (setq err(vl-catch-all-apply 'vla-delete (list (vlax-ename->vla-object (tblobjname "layer" x)))))
        (if (VL-CATCH-ALL-ERROR-P err)(princ (strcat "\n不能删除 " x " 层"))
   (princ (strcat "\n " x " 层已成功删除!")))


        ))
(princ)
      )


        laylst)


(princ)
  )

 

命令名: test

花了二十分钟简单的写了一下,程序没有防错功能,自已完善一下,支持单层图块

发表于 2010-10-5 23:03 | 显示全部楼层
有没有 lisp教程呢,AUTOCAD help全英文,看着头疼呢
发表于 2010-11-29 12:37 | 显示全部楼层
很实用,谢谢
发表于 2012-11-28 23:44 | 显示全部楼层
程序太好了..学习学习学习
发表于 2012-12-14 14:20 | 显示全部楼层
很是适用,非常不错的
发表于 2013-6-7 22:40 | 显示全部楼层
非常不错的工具,如果再能把里面进行锁定加密就更好了
返回列表 发新帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-5 11:16 , Processed in 0.192646 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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