linx1314 发表于 2010-9-14 22:36:00

图层与劳动成果保护

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

ZZXXQQ 发表于 2010-9-15 21:28:00

本帖最后由 作者 于 2010-9-18 20:48:55 编辑

;简短程序。保留颜色和线型。


(defun c:tt ()
(setvar "CMDECHO" 0)
(setq lent nil)
(while (setq lent (tblnext "LAYER" (not lent)))
(if (/= (setq ln (cdr(assoc 2 lent))) "0") (progn
   (if (setq ss1 (ssget "X" (list (cons 8 ln) (cons 62 256))))
    (command ".CHPROP" ss1 "" "C" (cdr(assoc 62 lent)) "LA" "0" "")
   )
   (if (setq ss1 (ssget "X" (list (cons 8 ln) (cons 6 "BYLAYER"))))
    (command ".CHPROP" ss1 "" "LT" (cdr(assoc 6 lent)) "LA" "0" "")
   )
   (if (setq ss1 (ssget "X" (list (cons 8 ln))))
    (command ".CHPROP" ss1 "" "LA" "0" "")
   )
))
)
(command ".PURGE" "ALL" "*" "N" ".PURGE" "ALL" "*" "N")
(setvar "CMDECHO" 1)
(princ)
)

Gu_xl 发表于 2010-9-15 12:23:00


(defun c:tt(/ *Acad* *AcDocument* en ss n obj objlayer layername color )
(setq *Acad*    (vlax-get-acad-object)
      *AcDocument* (vla-get-activedocument *Acad*)
)
(setq ss (ssget "x" '((-4 . "<not") (8 . "0")(-4 . "not>"))))
(setq n 0)
(if ss
(repeat (sslength ss)
    (setq en (ssname ss n))
    (setq obj (vlax-ename->vla-object en))
    (setq color (vla-get-color obj))
    (if (= color 256)
      (progn
(setq layername (vla-get-layer obj))
(setq objlayer (vla-item (vla-get-layers *AcDocument*) layername))
(setq color (vla-get-color objlayer))
(vla-put-color obj color)
(vla-put-layer obj "0")
)
      (vla-put-layer obj "0")
      )
    (setq n (1+ n))
    )
    )
)

Gu_xl 发表于 2010-9-15 21:53:00

本帖最后由 作者 于 2010-9-16 14:11:00 编辑 <br /><br /> ZZXXQQ发表于2010-9-15 21:28:00static/image/common/back.gif;简短程序。保留颜色和线型。


以下内容需要帖子数达到5才可以浏览





以下内容为程序代码:




(defun c:tt ()
&nbsp;(setvar \"CMDECHO\" 0)


<p>。。。</p>
<p>&nbsp;</p></font></td></tr>
<tr style="DISPLAY: none">
<td id="copycode47428"></td></tr></tbody></table></p>
<p>
<hr/>

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

caiqs 发表于 2010-9-18 15:00:00

本帖最后由 作者 于 2010-9-18 15:44:46 编辑 <br /><br /> <p><font face="Verdana"></font>&nbsp;</p>
<p><font face="Verdana"><strong>;;;师兄 QQ 361865648&nbsp;&nbsp; 版本20100918</strong></font></p>
<p>&nbsp;</p>
<p><font face="Verdana"></font><font face="Verdana">&nbsp;</p>
<p><font face="Verdana"></font>&nbsp;</p>
<p><font face="Verdana">;;;师兄 QQ 361865648&nbsp;&nbsp; 版本20100918</font></p>
<p><font face="Verdana">(defun c:TEST()<br/>;;;用新的组码值替换原值<br/>(defun dxfupd (ent dxfcode newval / elst newlst)<br/>&nbsp; (setq elst (entget ent))<br/>&nbsp; (setq newlst (append elst (list (cons dxfcode newval))))<br/>&nbsp; (entmod newlst)<br/>&nbsp; (entupd ent)<br/>)</font></p>
<p><font face="Verdana">;;;将实体移动到0层,并保持实体的线型和颜色不变<br/>(defun updcolandlt (ent / entlst layername laylst laycol ltype)<br/>&nbsp; (setq entlst (entget ent))<br/>&nbsp; (setq layername (cdr (assoc 8 entlst)))<br/>&nbsp; (setq laylst (tblsearch "layer" layername))<br/>&nbsp; (setq laycol (cdr (assoc 62 laylst)))<br/>&nbsp; (setq ltype (cdr (assoc 6 laylst)))<br/>&nbsp; (if (not (assoc 6 entlst))<br/>&nbsp;&nbsp;&nbsp; (dxfupd ent 6 ltype)<br/>&nbsp; )</font></p>
<p><font face="Verdana">&nbsp; (if (assoc 62 entlst)<br/>&nbsp;&nbsp;&nbsp; (dxfupd ent 8 "0")<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (dxfupd ent 62 laycol)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>)</font></p><font face="Verdana">
<p><br/>(setq entss (ssget "x" '((0 . "~insert")))) ;_非块<br/>&nbsp;&nbsp;&nbsp; (if (not entss) (vl-exit-with-value 0))</p>
<p>(setq i 0)<br/>(repeat&nbsp;(sslength entss)<br/>&nbsp; (setq curent (ssname entss i))<br/>&nbsp; (setq i (1+ i))<br/>&nbsp; (updcolandlt curent)<br/>&nbsp; (dxfupd curent 8 "0")<br/>)</p>
<p><br/>(setq blkss (ssget "x" '((0 . "insert"))))<br/>&nbsp; (if (not blkss) (vl-exit-with-value 1))<br/>(setq i 0)<br/>(repeat&nbsp;(sslength blkss)<br/>&nbsp; (setq curblk (ssname blkss i))<br/>&nbsp; (setq i (1+ i))<br/>&nbsp; (setq blklst (entget curblk))<br/>&nbsp; (setq blkname (cdr (assoc 2 blklst))) ;_块名<br/>&nbsp; (setq blkdef (tblsearch "block" blkname)) ;_块定义<br/>&nbsp; (setq einblk (cdr (assoc -2 blkdef))) ;_块中第一个图元<br/>&nbsp; (updcolandlt einblk)<br/>&nbsp; (dxfupd einblk 8 "0")<br/>&nbsp; (while (and<br/>&nbsp;&nbsp;&nbsp; (setq einblk (entnext einblk))<br/>&nbsp;&nbsp;&nbsp; (setq elst (entget einblk))</p>
<p>&nbsp;&nbsp;&nbsp; (/= (cdr (assoc 0 elst)) "SEQEND")<br/>&nbsp; )</p>
<p>&nbsp;&nbsp;&nbsp; (updcolandlt einblk)<br/>&nbsp;&nbsp;&nbsp; (dxfupd einblk 8 "0")<br/>&nbsp; )<br/>&nbsp; (dxfupd curblk 8 "0")<br/>)</p>
<p>;;;删除其余的层<br/>&nbsp; (setq layer(tblnext "layer" t))<br/>&nbsp; (setq layname(cdr(assoc 2 layer)));_层名<br/>;;;&nbsp; (setq layent(tblobjname "layer" layername));_第一个层<br/>&nbsp; (setq laylst(list layname))<br/>&nbsp; (while (setq layer(tblnext "layer"))<br/>&nbsp;&nbsp;&nbsp; (setq layname(cdr(assoc 2 layer)))<br/>&nbsp;&nbsp;&nbsp; (setq laylst(cons layname laylst))<br/>&nbsp;&nbsp;&nbsp; )</p>
<p>&nbsp; (mapcar '(lambda (x)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (/= "0" x)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq err(vl-catch-all-apply 'vla-delete (list (vlax-ename-&gt;vla-object (tblobjname "layer" x)))))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (VL-CATCH-ALL-ERROR-P err)(princ (strcat "\n不能删除 " x " 层"))<br/>&nbsp;&nbsp; (princ (strcat "\n " x " 层已成功删除!")))</p>
<p><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ))<br/>(princ)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )</p>
<p><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; laylst)</p>
<p><br/>(princ)<br/>&nbsp; )<br/></font></p>
<p>&nbsp;</p>
<p><strong>命令名: test</strong></p>
<p><strong>花了二十分钟简单的写了一下,程序没有防错功能,自已完善一下,支持单层图块</strong></p></font>

iwx007 发表于 2010-10-5 23:03:00

有没有 lisp教程呢,AUTOCAD help全英文,看着头疼呢

578749467 发表于 2010-11-29 12:37:29

很实用,谢谢

白皮猪 发表于 2012-11-28 23:44:52

程序太好了..学习学习学习

aaxxgg 发表于 2012-12-14 14:20:57

很是适用,非常不错的

野狼谷/〈M〉 发表于 2013-6-7 22:40:33

非常不错的工具,如果再能把里面进行锁定加密就更好了
页: [1]
查看完整版本: 图层与劳动成果保护