[LISP]求助:帮我改一个展点程序
<P></P><P>各位大侠,帮我改下这个展点程序,本来是用来将注记展成点的,可是这个程序里面是注记左下角对齐,我想要中心对齐的。不知道我说的名不明白,我的MSN:<A href="mailto:ivyej11@hotmail" target="_blank" >ivyej11@hotmail</A>,联系我吧。。。谢谢啦。</P> 请各位帮忙~~ <p><font face="Verdana"> ;LISP展点程序 <br/> ;展1000点:在HP(AMD Athlon64 3000+ 256MB)电胶上仅耗时0.142秒; <br/> ;在金利(Geleron(R) CPU 2.40GHz 256MB)电脑上耗时0.882秒 <br/> ;数据文件格式为:每一点的数据(点号、X、Y、H)为一行,用逗号或空格作为分隔符,即 <br/> ;点号1 X1 Y1 H1 或者 点号1, X1, Y1, H1 <br/> ;点号2 X2 Y2 H2 或者 点号2, X2, Y2, H2 <br/> ;点号3 X3 Y3 H3 或者 点号3, X3, Y3, H3 <br/> ;...... <br/> ;点号n Xn Yn Hn 或者 点号n, Xn, Yn, Hn1 <br/>(defun c:kszd ()<br/> (setq ff (open (getfiled "请选择要展点的数据文件" "" "txt" 2) "r")<br/> fhb nil<br/> t0 (getvar "cdate")<br/> cm (getvar "cmdecho")<br/> os (getvar "osmode")<br/> tcm1 "高程注记"<br/> tcm2 "点记"<br/> )<br/> (setvar "cmdecho" 0)<br/> (setvar "osmode" 0)<br/> (if (= (tblsearch "layer" tcm1) nil)<br/> (command "layer" "n" tcm1 "")<br/> )<br/> (if (= (tblsearch "layer" tcm2) nil)<br/> (command "layer" "n" tcm2 "")<br/> )<br/> (setq tap 1)<br/> (while (= tap 1)<br/> (Progn<br/> (setq n 1<br/> fhb nil</font></p>
<p><font face="Verdana"> )</font></p>
<p><font face="Verdana"> (while (< n 2001)<br/> (if (setq zb (read-line ff))<br/> (Progn<br/> (while (vl-string-search "," zb)<br/> (setq zb (vl-string-subst " " "," zb))<br/> )<br/> (setq zb (read (strcat "(" zb ")"))<br/> ;zb (list (list (nth 2 zb) (nth 1 zb)) (vl-princ-to-string (last zb)));注记高程 <br/> zb (list (list (nth 2 zb) (nth 1 zb))<br/> (vl-princ-to-string (car zb))<br/> ) ;提示:注记点号请用该行 <br/> fhb (append fhb (list zb))<br/> )<br/> (setq n (+ 1 n))<br/> )<br/> (setq n 2001<br/> tap 0<br/> )<br/> )<br/> )<br/> (setq t1 (getvar "cdate"))</font></p>
<p><font face="Verdana"> (setq zb (vl-sort fhb<br/> '(lambda (e1 e2) (< (car (car e1)) (car (car e2))))<br/> )<br/> x0 (car (car (car zb)))<br/> x1 (car (car (last zb)))<br/> zb (vl-sort<br/> fhb<br/> '(lambda (e1 e2) (< (cadr (car e1)) (cadr (car e2))))<br/> )<br/> y0 (cadr (car (car zb)))<br/> y1 (cadr (car (last zb)))<br/> )<br/> (command "zoom" "w" (list x0 y0) (list x1 y1))<br/> (setq t2 (getvar "cdate"))<br/> (foreach zb fhb<br/> (setq zfc (last zb)<br/> ;pt (mapcar '+ (car zb) '(1.5 -1.25));这行改为如下 <br/> pt (car zb)<br/> )<br/> (entmake (list '(0 . "TEXT")<br/> '(100 . "AcDbEntity")<br/> '(100 . "AcDbText")<br/> '(62 . 1)<br/> '(40 . 2.5)<br/> '(50 . 0.0)<br/> ;(cons 8 tcm1) (cons 1 zfc) (cons 10 pt);这行改为如下 <br/> (cons 8 tcm1)<br/> (cons 1 zfc)<br/> (cons 10 (mapcar '+ pt '(1.5 -1.25)))<br/> )<br/> )<br/> (entmake (list '(0 . "POINT")<br/> '(100 . "AcDbEntity")<br/> '(100 . "AcDbPoint")<br/> '(62 . 2)<br/> (cons 8 tcm2)<br/> (cons 10 pt)<br/> )<br/> )<br/> )<br/> (setq t3 (getvar "cdate")<br/> dt1 (* 1000000 (- t1 t0))<br/> dt2 (* 1000000 (- t3 t2))</font></p>
<p><font face="Verdana"> )<br/> (princ (strcat "读入数据共耗时:"<br/> (rtos dt1 2 3)<br/> "秒 展点共耗时"<br/> (rtos dt2 2 3)<br/> "秒"<br/> "展点数:"<br/> (itoa (length fhb))<br/> "个 每展一点耗:"<br/> (rtos (/ dt2 (length fhb)) 2 10)<br/> "秒\n"<br/> )<br/> )</font></p>
<p><font face="Verdana"> (setq dt3 (* 1000000 (- t3 t0))</font></p>
<p><font face="Verdana"> )<br/> (princ (strcat "共耗时:"<br/> (rtos dt3 2 3)<br/> "秒\n"</font></p>
<p><font face="Verdana"> )<br/> )<br/> )<br/> )<br/> (setvar "cmdecho" cm)<br/> (setvar "osmode" os)<br/> (close ff)<br/> (princ)<br/>)</font></p> <p>这是改进的展点程序,要不展点过20000时太慢</p>
<p>SXYCZPYLHP山西榆次物测院人用半月试验成!!</p> 改进的原理是:分而治之,各个击破,分块解决!!!有同仁欢迎商讨!! 本人邮箱<a href="mailto:sxyczpylhp@126.com">sxyczpylhp@126.com</a> <p>20101016编成</p>
<p> </p> sxyczpylhp 发表于 2010-10-21 22:06 static/image/common/back.gif
;LISP展点程序 ;展1000点:在HP(AMD Athlon ...
标注的是点号,不是高程 sxyczpylhp 发表于 2010-10-21 22:09 static/image/common/back.gif
这是改进的展点程序,要不展点过20000时太慢
SXYCZPYLHP山西榆次物测院人用半月试验成!!
山西省煤炭地质物探测绘院?
页:
[1]