[求助]一个很好的生成图层的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 (listname / file line lyrproperties)<br/> (cxy:StartSet)<br/> (cxy:Set_Var "CLAYER" (getvar "CLAYER"))<br/> (setq file<br/> (open (cxy:path (strcat "layers/" listname ".lsp")) "r")<br/> )<br/> (read-line file)<br/> (while (setq line (read-line file))<br/> (setq lyrproperties (read line))<br/> (if (/= lyrproperties nil)<br/> (cxy:layer-new lyrproperties)<br/> )<br/> )<br/> (close file)</p><p> (cxy:ExitSet)</p><p> (princ)<br/>)<br/>(defun cxy:StartSet ()</p><p> (if (= *cxy-RESET* nil)<br/> (progn<br/> (setq<br/> *cxy-RESET* T<br/> *cxy-OLDERR* *ERROR*<br/> *ERROR* cxy:SetErrorHandler<br/> *cxy-UNDO* (getvar "UNDOCTL")<br/> )<br/> (cxy:Set_Var "CMDECHO" 0)<br/> (cond<br/> ((= *cxy-UNDO* 0)<br/> (command "_.UNDO" "ALL")<br/> )<br/> ((= *cxy-UNDO* 3)<br/> (command "_.UNDO" "C" "ALL")<br/> )<br/> )<br/> (command "_.UNDO" "G")<br/> )<br/> )<br/>)<br/>(defun cxy:path (subdir / sub ddc)<br/> (setq sub (vl-string-left-trim "<a>\\/</a>" subdir))<br/> (setq ddc (vl-string-right-trim "<a>\\/</a>" (getenv "DDCPATH")))<br/> (setq str (strcat ddc "/" sub))<br/> str<br/>)<br/>(defun cxy:layer-new (lyrprops / name color lineT lineW plot pstyl)<br/> (setq name (nth 0 lyrprops))<br/> (setq color (nth 1 lyrprops))<br/> (setq lineT (nth 2 lyrprops))<br/> (setq lineW (nth 3 lyrprops))<br/> (setq plot (nth 4 lyrprops))<br/> (setq pstyl (nth 5 lyrprops))<br/> (defun tmp ()<br/> (command "_-LAYER" "M" name "C" color "" "L"<br/> lineT "" "LW" lineW "" "P" plot ""<br/> ""<br/> )<br/> )<br/> (if (= (tblsearch "layer" name) nil)<br/> (tmp)</p><p> (progn<br/> (cxy:layerstate-tempsave name)<br/> (tmp)<br/> (cxy:layerstate-temprestore name)<br/> )<br/> )<br/> (princ)<br/>)<br/>(defun cxy:ExitSet ()<br/> (command "_.UNDO" "E")<br/> (repeat<br/> (length *cxy-VARLIST*)<br/> (setvar (caar *cxy-VARLIST*) (cadar *cxy-VARLIST*))<br/> (setq *cxy-VARLIST* (cdr *cxy-VARLIST*))<br/> )<br/> (setq<br/> *ERROR* *cxy-OLDERR*</p><p> *cxy-RESET* nil<br/> )<br/> (command nil nil)<br/> (princ)<br/>)<br/>(defun cxy:SetErrorHandler (msg)<br/> (if (/= msg "Function cancelled")<br/> (princ msg)<br/> )<br/> (command nil nil)<br/> (command "_.UNDO" "e")<br/> (if *cxy-RESET*<br/> (command "_.UNDO" 1)<br/> )<br/> (cxy:ExitSet)<br/>)<br/>(defun cxy:Set_Var (var val)</p><p> (if (not (assoc var *cxy-VARLIST*))<br/> (setq *cxy-VARLIST* (cons (list var (getvar var)) *cxy-VARLIST*))<br/> )</p><p> (setvar var val)<br/>)<br/>(defun cxy:layerstate-tempsave (lname / e1)</p><p> (setq e1 (entget (tblobjname "layer" lname)))</p><p> (setq USER1 (cdr (assoc 70 e1)))</p><p> (setq USER2 (cdr (assoc 62 e1)))<br/> (setq e1<br/> (subst (cons 70 0)<br/> (assoc 70 e1)<br/> e1<br/> )<br/> )<br/> (entmod e1)<br/>)</p><p>(defun cxy:layerstate-temprestore (lname / e1)</p><p> (setq e1 (entget (tblobjname "layer" lname)))<br/> (setq e1<br/> (subst (cons 70 USER1)<br/> (assoc 70 e1)<br/> e1<br/> )<br/> )<br/> (if (/= (minusp USER2) nil)<br/> (progn<br/> (setq USER2 (* -1 LYRCOLOR))<br/> (setq e1<br/> (subst (cons 62 USER2)<br/> (assoc 62 e1)<br/> e1<br/> )<br/> )<br/> )<br/> )<br/> (entmod e1)<br/>)<br/>(defun cxy:path-slashes (str / new)<br/> (setq new str)<br/> (while (/= (vl-string-search "\\" new) nil)<br/> (setq new (vl-string-subst "/" "\\" new))<br/> )<br/>)</p> <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/> [门窗表]^c^c^p(cxy:layerset-add "menchuangbiao")^p;<br/> [详图]^c^c^p(cxy:layerset-add "xiangtu")^p;<br/> [说明目录]^c^c^p(cxy:layerset-add "shuomingmulu")^p;<br/> [总图]^c^c^p(cxy:layerset-add "zongtu")^p;</p><p>;_________________总图________________________<br/>;("name" color lineT lineW plot "pstyl")<br/>()<br/>("Y_用地红线" 1 "dash" 0.25 "p" "Normal");用地红线<br/>("Z_周边建筑" 4 "continuous" 0 "p" "Normal");周边建筑<br/>("W_文字" 30 "continuous" 0 "p" "Normal");文字说明<br/>("W_围墙" 9 "continuous" 0 "p" "Normal");围墙<br/>("D_地下建筑" 11 "continuous" 0 "p" "Normal");地下建筑<br/>("F_分期建筑线" 60 "continuous" 0 "p" "Normal");分期线<br/>("Z_坐标点" 11 "continuous" 0 "p" "Normal");坐标标注<br/>("T_退红线" 30 "dash" 0 "p" "Normal");建筑退红线<br/>("F_附注说明" 7 "continuous" 0.15 "p" "Normal");平立面图中的附注说明<br/>("C_参考网格" 253 "continuous" 0.15 "p" "Normal");参考网格<br/>("C_城市道路" 5 "continuous" 0.15 "p" "Normal");城市道路<br/>("Q_区内道路" 7 "continuous" 0.15 "p" "Normal");区内道路<br/>("Y_院内道路" 115 "continuous" 0.15 "p" "Normal")<br/>("R_人行道" 2 "continuous" 0.15 "p" "Normal")<br/>("D_道路红线" 1 "continuous" 0.15 "p" "Normal")<br/>("D_道路中心线" 40 "center2" 0.15 "p" "Normal")<br/>("T_停车位(场)" 93 "continuous" 0.15 "p" "Normal")<br/>("X_现状住宅" 253 "continuous" 0.25 "p" "Normal")<br/>("G_规划住宅" 2 "continuous" 0.5 "p" "Normal")<br/>("G_规划公建" 30 "continuous" 0.5 "p" "Normal")<br/>("G_规划商业" 210 "continuous" 0.5 "p" "Normal")<br/>("S_水系" 4 "continuous" 0.15 "p" "Normal")<br/>("C_城市行道树" 82 "continuous" 0.15 "p" "Normal")<br/>("Q_区内行道树" 3 "continuous" 0.15 "p" "Normal")<br/>("Q_区内景观树" 213 "continuous" 0.15 "p" "Normal")<br/>("T_填充层" 8 "continuous" 0.15 "p" "Normal")</p><p></p></div> <div class="postcontent" id="show883">不过有时会有问题,会出现大概意思,file错误的提示,有时没有问题,只能说不太完美。请懂lisp的高手看看吧,能不能完善的更好一些</div> http:// <p>是加载线型有问题,有没有愿意写一下这个问题</p> 很好很强大! 可否在cad啟動時,不用輸命令,而自動加入圖層. 看看哪位高手,能出手一下 hjiea发表于2007-11-10 9:39:00static/image/common/back.gif可否在cad啟動時,不用輸命令,而自動加入圖層.<p></p>还要编程序吗?可以直接用模版文件。 这样编程序时,可以把别人画的图改成我所习惯的图层,用程序可以随时生成我的图层,用模板就不太方便了。