请教一个图层编写LISP,谢谢!
<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">例如:我有图层<font face="Calibri">0</font>、<font face="Calibri">DB</font>、<font face="Calibri">DBHID</font>、<font face="Calibri">DBTH</font>、<font face="Calibri">DBDIM</font>、<font face="Calibri">SP</font>、<font face="Calibri">SPHID</font>、<font face="Calibri">SPTH</font>、<font face="Calibri">SPDIM(PP</font>、<font face="Calibri">BP......</font>每个都有相应的<font face="Calibri">HID</font>、<font face="Calibri">TH</font>、<font face="Calibri">DIM)</font>等等<font face="Calibri">.</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">就拿<font face="Calibri">HID</font>层来说我现在想编一个<font face="Calibri">LISP:</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">假如当前层为<font face="Calibri">0</font>层,输入命令后选取像素<font face="Calibri">(</font>不管像素本身是什么层<font face="Calibri">)</font>就变到<font face="Calibri">HID</font>层<font face="Calibri">;</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">假如当前层是<font face="Calibri">DB</font>、<font face="Calibri">DBTH</font>、<font face="Calibri">DBDIM</font>输入命令后选取像素就变到<font face="Calibri">DBHID</font>层<font face="Calibri">;</font></p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">假如当前层是<font face="Calibri">PP</font>、<font face="Calibri">PPTH</font>、<font face="Calibri">PPDIM</font>输入命令后选取像素就变到<font face="Calibri">PPHID</font>层,</p><p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt;">提示除了<font face="Calibri">0</font>层外其它图层前两个字符相同,请各位帮帮忙,谢谢!</p> <p>(DEFUN c:CY() (setq a (ssget))(command "chprop" a "" "la" 0 "")<br/> (princ))</p><p>这里面你自已改: CY 是命令 0 是图层,你可以改这两个参数为你自已常用的</p> <p>楼主可能没有完全理解我的意思,如果要达到楼主效果我用这句也可以(defun c:q1() (ssget) (command "chprop" "p" "" "L" "1" ""))</p><p>我的意思假如当前图层是DB或是DBDIM我输入命令后选取图元它就变到DBHID层,假如当前图层是PP或是PPDIM我输入命令后选取图元它就变到PPHID层,请楼主再帮我想想,谢谢!</p> 这就要花点时间研究了,等搞好再传上来 楼主的意思是改变当前层还是改变图形所在层?? <p>在网吧 只能告诉你方法了:</p><p>1 获取所选对象图层名 如:<font face="Calibri">DBDIM</font></p><p>2 得到对象图层名前两个字符 DB</p><p>就你一楼提供的信息来看 好象主板实名都是两个字符的DB、SP、PP...</p><p>3 将这两个字符和HID 组合起来——得到 DBHID</p><p>4 将所选对象图层设定为 DBHID</p> 可惜就是不支持中文图层 function XML() {} <p>同意6楼的,这个其实还是比较好实现的,</p>
-
<p>给段代码,用这个可以做一个图层穿梭器</p><p></p><p>(defun c:mtr ( / path s e lay cmd W)<br/> (princ "\nBuild a \"Layer Transformer\"")<br/> (setq path (strcat (getvar "dwgprefix") "Layer_Transformer.lsp"))<br/> (if (setq W (open path "r"))<br/> (progn<br/> (close W)<br/> (setq W (open path "a"))<br/> )<br/> (progn<br/> (setq W (open path "w"))<br/> (write-line "(defun Change-Layer (layername / ss n i ed)" W)<br/> (write-line "(if (setq ss (ssget \"I\"))" W)<br/> (write-line "(progn (setq n (sslength ss) i 0)" W)<br/> (write-line "(while (< i n)" W)<br/> (write-line "(setq ed (entget (ssname ss i)))(setq ed (subst (cons 8 layername)(assoc 8 ed) ed))(entmod ed)" W)<br/> (write-line "(setq i (1+ i))))))" W)<br/> )<br/> )<br/> (setq s (ssget "I"))<br/> (if (= s nil)(setq s (ssget)))<br/> (setq cmd (getstring "\nTransfer Command for the Layer:"))<br/> (setq e (entget (ssname s 0)))<br/> (setq lay (cdr (assoc 8 e)))<br/> (write-line (strcat "(defun c:" cmd "()(change-layer \"" lay "\")(setvar \"clayer\" \"" lay "\"))") W)<br/> (close W)<br/> )</p><p>(defun *error* (msg)<br/> (princ (strcat "\nERROR: " msg))<br/> (close W)<br/> )</p>
页:
[1]