zhongzilei 发表于 2007-11-5 20:36:00

[求助]一个很好的生成图层的lisp,有问题,如何修改

本帖最后由 作者 于 2007-11-20 1:25:14 编辑 <br /><br /> <p>,能一次生成 "图名" 颜色 线型 线宽 是否 打印 打印样式等图层特性,以前一个同事给的</p><p>下面是主程序layers.lsp</p><p>;;(cxy:layerset-add "zongtu")<br/>(defun cxy:layerset-add&nbsp;(listname / file line lyrproperties)<br/>&nbsp; (cxy:StartSet)<br/>&nbsp; (cxy:Set_Var "CLAYER" (getvar "CLAYER"))<br/>&nbsp; (setq&nbsp;file<br/>&nbsp; (open (cxy:path (strcat "layers/" listname ".lsp")) "r")<br/>&nbsp; )<br/>&nbsp; (read-line file)<br/>&nbsp; (while (setq line (read-line file))<br/>&nbsp;&nbsp;&nbsp; (setq lyrproperties (read line))<br/>&nbsp;&nbsp;&nbsp; (if&nbsp;(/= lyrproperties nil)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cxy:layer-new lyrproperties)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (close file)</p><p>&nbsp; (cxy:ExitSet)</p><p>&nbsp; (princ)<br/>)<br/>(defun cxy:StartSet ()</p><p>&nbsp; (if (= *cxy-RESET* nil)<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq<br/>&nbsp;*cxy-RESET*&nbsp; T<br/>&nbsp;*cxy-OLDERR* *ERROR*<br/>&nbsp;*ERROR*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cxy:SetErrorHandler<br/>&nbsp;*cxy-UNDO*&nbsp;&nbsp; (getvar "UNDOCTL")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cxy:Set_Var "CMDECHO" 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cond<br/>&nbsp;((= *cxy-UNDO* 0)<br/>&nbsp; (command "_.UNDO" "ALL")<br/>&nbsp;)<br/>&nbsp;((= *cxy-UNDO* 3)<br/>&nbsp; (command "_.UNDO" "C" "ALL")<br/>&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "_.UNDO" "G")<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>)<br/>(defun cxy:path&nbsp;(subdir / sub ddc)<br/>&nbsp; (setq sub (vl-string-left-trim "<a>\\/</a>" subdir))<br/>&nbsp; (setq ddc (vl-string-right-trim "<a>\\/</a>" (getenv "DDCPATH")))<br/>&nbsp; (setq str (strcat ddc "/" sub))<br/>&nbsp; str<br/>)<br/>(defun cxy:layer-new (lyrprops / name color lineT lineW plot pstyl)<br/>&nbsp; (setq name (nth 0 lyrprops))<br/>&nbsp; (setq color (nth 1 lyrprops))<br/>&nbsp; (setq lineT (nth 2 lyrprops))<br/>&nbsp; (setq lineW (nth 3 lyrprops))<br/>&nbsp; (setq plot (nth 4 lyrprops))<br/>&nbsp; (setq pstyl (nth 5 lyrprops))<br/>&nbsp; (defun tmp ()<br/>&nbsp;&nbsp;&nbsp; (command "_-LAYER"&nbsp;&nbsp;&nbsp; "M"&nbsp;&nbsp; name&nbsp; "C"&nbsp;color&nbsp; ""&nbsp;&nbsp;&nbsp;&nbsp; "L"<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lineT&nbsp; ""&nbsp;&nbsp;&nbsp; "LW"&nbsp;&nbsp; lineW&nbsp; ""&nbsp;"P"&nbsp;&nbsp;&nbsp; plot&nbsp;&nbsp; ""<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ""<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (if (= (tblsearch "layer" name) nil)<br/>&nbsp;&nbsp;&nbsp; (tmp)</p><p>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cxy:layerstate-tempsave name)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (tmp)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (cxy:layerstate-temprestore name)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (princ)<br/>)<br/>(defun cxy:ExitSet ()<br/>&nbsp; (command "_.UNDO" "E")<br/>&nbsp; (repeat<br/>&nbsp;&nbsp;&nbsp; (length *cxy-VARLIST*)<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setvar (caar *cxy-VARLIST*) (cadar *cxy-VARLIST*))<br/>&nbsp;&nbsp;&nbsp;&nbsp; (setq *cxy-VARLIST* (cdr *cxy-VARLIST*))<br/>&nbsp; )<br/>&nbsp; (setq<br/>&nbsp;&nbsp;&nbsp; *ERROR*&nbsp;*cxy-OLDERR*</p><p>&nbsp;&nbsp;&nbsp; *cxy-RESET*&nbsp;nil<br/>&nbsp; )<br/>&nbsp; (command nil nil)<br/>&nbsp; (princ)<br/>)<br/>(defun cxy:SetErrorHandler (msg)<br/>&nbsp; (if (/= msg "Function cancelled")<br/>&nbsp;&nbsp;&nbsp; (princ msg)<br/>&nbsp; )<br/>&nbsp; (command nil nil)<br/>&nbsp; (command "_.UNDO" "e")<br/>&nbsp; (if *cxy-RESET*<br/>&nbsp;&nbsp;&nbsp; (command "_.UNDO" 1)<br/>&nbsp; )<br/>&nbsp; (cxy:ExitSet)<br/>)<br/>(defun cxy:Set_Var (var val)</p><p>&nbsp; (if (not (assoc var *cxy-VARLIST*))<br/>&nbsp;&nbsp;&nbsp; (setq *cxy-VARLIST* (cons (list var (getvar var)) *cxy-VARLIST*))<br/>&nbsp; )</p><p>&nbsp; (setvar var val)<br/>)<br/>(defun cxy:layerstate-tempsave (lname / e1)</p><p>&nbsp; (setq e1 (entget (tblobjname "layer" lname)))</p><p>&nbsp; (setq USER1 (cdr (assoc 70 e1)))</p><p>&nbsp; (setq USER2 (cdr (assoc 62 e1)))<br/>&nbsp; (setq&nbsp;e1<br/>&nbsp; (subst&nbsp;(cons 70 0)<br/>&nbsp;&nbsp;(assoc 70 e1)<br/>&nbsp;&nbsp;e1<br/>&nbsp; )<br/>&nbsp; )<br/>&nbsp; (entmod e1)<br/>)</p><p>(defun cxy:layerstate-temprestore (lname / e1)</p><p>&nbsp; (setq e1 (entget (tblobjname "layer" lname)))<br/>&nbsp; (setq&nbsp;e1<br/>&nbsp; (subst&nbsp;(cons 70 USER1)<br/>&nbsp;&nbsp;(assoc 70 e1)<br/>&nbsp;&nbsp;e1<br/>&nbsp; )<br/>&nbsp; )<br/>&nbsp; (if (/= (minusp USER2) nil)<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq USER2 (* -1 LYRCOLOR))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq e1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (subst (cons 62 USER2)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (assoc 62 e1)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; e1<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (entmod e1)<br/>)<br/>(defun cxy:path-slashes&nbsp;(str / new)<br/>&nbsp; (setq new str)<br/>&nbsp; (while (/= (vl-string-search "\\" new) nil)<br/>&nbsp;&nbsp;&nbsp; (setq new (vl-string-subst "/" "\\" new))<br/>&nbsp; )<br/>)</p>

zhongzilei 发表于 2007-11-5 20:38:00

<div class="postcontent" id="show882"><p>这是我的总图图层设置,zongtu.lsp,使用时建立一个layers的文件夹,然后zongtu.lsp放入其中,</p><p>依次是"图名" 颜色 线型 线宽 是否 打印 打印样式,同时加载zongtu.lsp和layers.lsp</p><p>在命令行输入(cxy:layerset-add "zongtu")就会生成下面设置的图层,当然你可以做成下拉菜单,就方便多了,例如:</p><p>[平立剖面]^c^c^p(cxy:layerset-add "pinglipou")^p;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [门窗表]^c^c^p(cxy:layerset-add "menchuangbiao")^p;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [详图]^c^c^p(cxy:layerset-add "xiangtu")^p;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [说明目录]^c^c^p(cxy:layerset-add "shuomingmulu")^p;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [总图]^c^c^p(cxy:layerset-add "zongtu")^p;</p><p>;_________________总图________________________<br/>;("name" color lineT lineW plot "pstyl")<br/>()<br/>("Y_用地红线" 1&nbsp;&nbsp; "dash" 0.25 "p" "Normal");用地红线<br/>("Z_周边建筑" 4&nbsp;&nbsp; "continuous" 0 "p" "Normal");周边建筑<br/>("W_文字" 30&nbsp;&nbsp; "continuous" 0 "p" "Normal");文字说明<br/>("W_围墙" 9&nbsp;&nbsp; "continuous" 0 "p" "Normal");围墙<br/>("D_地下建筑" 11&nbsp;&nbsp; "continuous" 0 "p" "Normal");地下建筑<br/>("F_分期建筑线" 60&nbsp;&nbsp; "continuous" 0 "p" "Normal");分期线<br/>("Z_坐标点" 11&nbsp;&nbsp; "continuous" 0 "p" "Normal");坐标标注<br/>("T_退红线" 30&nbsp;&nbsp; "dash" 0 "p" "Normal");建筑退红线<br/>("F_附注说明" 7&nbsp;&nbsp; "continuous" 0.15 "p" "Normal");平立面图中的附注说明<br/>("C_参考网格" 253&nbsp;&nbsp; "continuous" 0.15 "p" "Normal");参考网格<br/>("C_城市道路" 5&nbsp;&nbsp; "continuous" 0.15 "p" "Normal");城市道路<br/>("Q_区内道路" 7&nbsp;&nbsp; "continuous" 0.15 "p" "Normal");区内道路<br/>("Y_院内道路" 115&nbsp;&nbsp; "continuous" 0.15 "p" "Normal")<br/>("R_人行道"&nbsp;&nbsp; 2&nbsp;&nbsp; "continuous" 0.15 "p" "Normal")<br/>("D_道路红线" 1&nbsp;&nbsp; "continuous" 0.15 "p" "Normal")<br/>("D_道路中心线" 40&nbsp;&nbsp; "center2" 0.15 "p" "Normal")<br/>("T_停车位(场)"&nbsp;&nbsp; 93&nbsp;&nbsp; "continuous" 0.15 "p" "Normal")<br/>("X_现状住宅" 253&nbsp;&nbsp; "continuous" 0.25 "p" "Normal")<br/>("G_规划住宅" 2&nbsp;&nbsp; "continuous" 0.5 "p" "Normal")<br/>("G_规划公建" 30&nbsp;&nbsp; "continuous" 0.5 "p" "Normal")<br/>("G_规划商业" 210&nbsp;&nbsp; "continuous" 0.5 "p" "Normal")<br/>("S_水系" 4&nbsp;&nbsp; "continuous" 0.15 "p" "Normal")<br/>("C_城市行道树" 82&nbsp;&nbsp; "continuous" 0.15 "p" "Normal")<br/>("Q_区内行道树" 3&nbsp;&nbsp; "continuous" 0.15 "p" "Normal")<br/>("Q_区内景观树" 213&nbsp;&nbsp; "continuous" 0.15 "p" "Normal")<br/>("T_填充层" 8&nbsp;&nbsp; "continuous" 0.15 "p" "Normal")</p><p></p></div>

zhongzilei 发表于 2007-11-5 20:39:00

<div class="postcontent" id="show883">不过有时会有问题,会出现大概意思,file错误的提示,有时没有问题,只能说不太完美。请懂lisp的高手看看吧,能不能完善的更好一些</div>

pepsi04 发表于 2007-11-6 19:19:00

http://

zhongzilei 发表于 2007-11-8 07:00:00

<p>是加载线型有问题,有没有愿意写一下这个问题</p>

bamboo79 发表于 2007-11-9 16:33:00

很好很强大!

hjiea 发表于 2007-11-10 09:39:00

可否在cad啟動時,不用輸命令,而自動加入圖層.

zhongzilei 发表于 2007-11-20 01:26:00

看看哪位高手,能出手一下

ZZXXQQ 发表于 2007-11-20 08:43:00

hjiea发表于2007-11-10 9:39:00static/image/common/back.gif可否在cad啟動時,不用輸命令,而自動加入圖層.

<p></p>还要编程序吗?可以直接用模版文件。

zhongzilei 发表于 2007-11-20 12:56:00

这样编程序时,可以把别人画的图改成我所习惯的图层,用程序可以随时生成我的图层,用模板就不太方便了。
页: [1] 2 3 4
查看完整版本: [求助]一个很好的生成图层的lisp,有问题,如何修改