abtjy 发表于 2008-11-2 18:56:00

请教一个图层编写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>

AMTONNY 发表于 2008-11-2 20:04:00

<p>(DEFUN c:CY() (setq a (ssget))(command "chprop" a "" "la" 0 "")<br/>&nbsp;&nbsp; (princ))</p><p>这里面你自已改:&nbsp; CY 是命令 0 是图层,你可以改这两个参数为你自已常用的</p>

abtjy 发表于 2008-11-2 20:47:00

<p>楼主可能没有完全理解我的意思,如果要达到楼主效果我用这句也可以(defun c:q1() (ssget) (command "chprop" "p" "" "L" "1" ""))</p><p>我的意思假如当前图层是DB或是DBDIM我输入命令后选取图元它就变到DBHID层,假如当前图层是PP或是PPDIM我输入命令后选取图元它就变到PPHID层,请楼主再帮我想想,谢谢!</p>

AMTONNY 发表于 2008-11-2 21:30:00

这就要花点时间研究了,等搞好再传上来

jeafly 发表于 2008-11-2 21:33:00

楼主的意思是改变当前层还是改变图形所在层??

huanghao35 发表于 2008-11-3 09:10:00

<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>

zag0666 发表于 2010-4-2 00:41:00

可惜就是不支持中文图层

lenlenq 发表于 2010-5-2 21:54:00

function XML() {
   
}

ccid_x 发表于 2010-5-15 11:06:00

<p>同意6楼的,这个其实还是比较好实现的,</p>

himmel 发表于 2010-5-20 15:48:00

-

<p>给段代码,用这个可以做一个图层穿梭器</p><p></p><p>(defun c:mtr ( / path s e lay cmd W)<br/>&nbsp; (princ "\nBuild a \"Layer Transformer\"")<br/>&nbsp; (setq path (strcat (getvar "dwgprefix") "Layer_Transformer.lsp"))<br/>&nbsp; (if (setq W (open path "r"))<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (close W)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq W (open path "a"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq W (open path "w"))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (write-line "(defun Change-Layer (layername / ss n i ed)" W)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (write-line "(if (setq ss (ssget \"I\"))" W)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (write-line "(progn (setq n (sslength ss) i 0)" W)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (write-line "(while (&lt; i n)" W)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (write-line "(setq ed (entget (ssname ss i)))(setq ed (subst (cons 8 layername)(assoc 8 ed) ed))(entmod ed)" W)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (write-line "(setq i (1+ i))))))" W)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; (setq s (ssget "I"))<br/>&nbsp; (if (= s nil)(setq s (ssget)))<br/>&nbsp; (setq cmd (getstring "\nTransfer Command for the Layer:"))<br/>&nbsp; (setq e (entget (ssname s 0)))<br/>&nbsp; (setq lay (cdr (assoc 8 e)))<br/>&nbsp; (write-line (strcat "(defun c:" cmd "()(change-layer \"" lay "\")(setvar \"clayer\" \"" lay "\"))") W)<br/>&nbsp; (close W)<br/>&nbsp; )</p><p>(defun *error* (msg)<br/>&nbsp; (princ (strcat "\nERROR: " msg))<br/>&nbsp; (close W)<br/>&nbsp; )</p>
页: [1]
查看完整版本: 请教一个图层编写LISP,谢谢!