sydney2000 发表于 2008-4-21 12:13:00

请教LISP高手(关于高程点的自动检查)

<p>前几天在网上找的这样一段关于高程点注记的检查程序,好像不能用,请高手指教,现急用,不甚感激!</p><p>(defun c:gcdjc ()<br/>&nbsp; (setvar "cmdecho" 0)<br/>&nbsp; (write-line "欢迎使用高程点自动检查与修改程序!")<br/>&nbsp; (setq ent (ssget "x" ((8, "gcd") (0, "text"))))<br/>&nbsp; (if ent<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "zoom" "e")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "layer" "m" "gcd" "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ent_length (sslength ent))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq ent_number 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (repeat ent_length<br/>&nbsp;(setq ent_name (ssname ent ent_number))<br/>&nbsp;(clgcd)<br/>&nbsp;(setq ent_number (1+ent_number))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "layer" "In" "0" "")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (command "zoom" "e")<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (write-line "高程点检查修改完毕!")<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>)<br/>(defun clgcd ()<br/>&nbsp; (setq data (entget ent_name))<br/>&nbsp; (setq rex (cdr (assoc 1 data)))<br/>&nbsp; (setq P (cdr (assoc 10 data)))<br/>&nbsp; (setq pl (polar P (* 1.25 pi) 7,0)<br/>&nbsp;pr (polar P (* 0.25 pi) 10,0)<br/>&nbsp; )<br/>&nbsp; (setq ent-P (ssget "w" pl pr ((0, "point") (8, "gcd"))))<br/>&nbsp; (if ent-P<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq p_length (sslength ent-P))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq p_number 0)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq p_data (entget (ssname ent-P p_number)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq gcdz (rtos (cadddr (assoc 10 p_data)) 2 2))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq wc (- (atof gcdz) (atof tex)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (while (and<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&gt;= (abs wc) 0.01)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (&lt;p_number (1-P_length))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;(setq p_number (1+p_number))<br/>&nbsp;(setq p_data (entget (ssname ent-P p_number)))<br/>&nbsp;(setq gcdz (rtos (cadddr (assoc 10 p_data)) 2 2))<br/>&nbsp;(setq wc (- (atof gcdz) (atof rex)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (if (&gt;= (abs wc) 0.O1)<br/>&nbsp;(progn<br/>&nbsp;&nbsp; (command "zoom" pl pr)<br/>&nbsp;&nbsp; (write-line "无匹配高程点,请选择需要修改的高程点,不选择则自动加点.")<br/>&nbsp;&nbsp; (redraw ent_name 3)<br/>&nbsp;&nbsp; (setq p_sel (ssget))<br/>&nbsp;&nbsp; (redraw ent_name 4)<br/>&nbsp;&nbsp; (if p_sel<br/>&nbsp;&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq sel (entget (ssname P_sel 0)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq X (cadr (assoc 10 sel))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Y (caddr (assoc 10 sel))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq zb_new (1ist 10 X Y (atof tex)))<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq sel (subst<br/>&nbsp;&nbsp;&nbsp;&nbsp; zb_new<br/>&nbsp;&nbsp;&nbsp;&nbsp; (assoc 10 sel)<br/>&nbsp;&nbsp;&nbsp;&nbsp; sel<br/>&nbsp;&nbsp;&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (entmod sel)<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp; (jiagcd)<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp; (command "zoom" "e")<br/>&nbsp;)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (jiagcd)<br/>)<br/>(defun jiagcd ()<br/>&nbsp; (setq P-xy (polar (polar P (*0.5 pi) 0.5) pi 0.8))<br/>&nbsp; (command "point" P-xy)<br/>&nbsp; (command "change" "l" "" "P" "e" (atof tex) "")<br/>)</p>

danxingpen 发表于 2008-4-22 09:55:00

不知道什么叫高程点,,,就程序本身的格式改下:<br/> (setq ent (ssget "x" ((8, "gcd") (0, "text"))))<br/><font color="#009900">(setq ent (ssget "x" '((8, "gcd") (0, "text"))))</font>;加一个'号<br/> (setq ent_number (1+ent_number))<br/><font color="#009900"> (setq ent_number (1+ ent_number))</font>;空格<br/>(setq ent-P (ssget "w" pl pr ((0, "point") (8, "gcd"))))<br/><font color="#009900">(setq ent-P (ssget "w" pl pr '((0, "point") (8, "gcd"))))</font>;加一个'号<br/>(&lt;p_number (1-P_length))<br/><font color="#009900">(&lt; p_number (1- P_length))</font>;空格<br/>(setq p_number (1+p_number))<br/><font color="#009900">(setq p_number (1+ p_number))</font>;空格<br/>(setq P-xy (polar (polar P (*0.5 pi) 0.5) pi 0.8))<br/><font color="#009900">(setq P-xy (polar (polar P (* 0.5 pi) 0.5) pi 0.8))</font>;空格<br/><br/><br/>

jdhszh 发表于 2008-4-22 20:45:00

这个不错式试http://bbs.mjtd.com/forum.php?mod=viewthread&tid=66699

sydney2000 发表于 2008-4-26 18:09:00

<p>问题已解决,非常感谢楼上两位。</p>

晴天蓝海蓝羽 发表于 2016-5-8 10:19:35

sydney2000 发表于 2008-4-26 18:09 static/image/common/back.gif
问题已解决,非常感谢楼上两位。

请问楼主怎么解决的?能否发一下程序?
页: [1]
查看完整版本: 请教LISP高手(关于高程点的自动检查)