kgd4510 发表于 2005-4-14 09:02:00

请教高手?能否用lisp程序自动连线?

已知n个点(假定N=5),点位有点号、坐标及标高,其展点的格式为:                                                                                                                                                               “1,,100.12,200.12,10.30”;“2,,300.12,400.12,20.30”等等,后面还有n个点,姑且不论它多少吧。上述格式解释:1——点位点号;两‘,,’--两逗之间还有一项内容,由于缺省故用两逗号分隔;100.12,200.12是点位坐标;10.30是点位标高。现在本人的想法是:能否在标高后面加多一项标识,即格式如下:                                    “1,,100.12,200.12,10.30,X1”;“2,,300.12,400.12,20.30,X1”,其中X1的作用就是能让lisp程序知道这两个点要连成一条直线,当然连第二条直线就得用               X2等等依些类,第N条直线就用XN。

ljpnb 发表于 2005-4-14 11:09:00

试试:


(defun c:test ()<BR>       (SETQ F_ID (OPEN "C:data.dat" "r"))<BR>       (setq xx nil)<BR>       (while (SETQ text0 (READ-LINE F_ID))<BR>                       (setq len (strlen text0))<BR>                       (setq XX0 (substr text0 (- len 1) 2))<BR>                       (setq n (vl-string-position (ascii ",") text0))<BR>                       (setq n1 (vl-string-position (ascii ",") text0 (+ n 2)))<BR>                       (setq n2 (vl-string-position (ascii ",") text0 (1+ n1)))<BR>                       (setq n3 (vl-string-position (ascii ",") text0 (1+ n2)))<BR>                       (setq xh (substr text0 1 n)<BR>               x       (atof (substr text0 (+ n 3) (- n1 (+ n 2))))<BR>               y       (atof (substr text0 (+ n1 2) (- n2 (1+ n1))))<BR>               p0 (list x y)<BR>               p1 (list (- (car p0) 0.38) (- (cadr p0) 0.13))<BR>               p2 (list (+ (car p0) 0.26) (- (cadr p0) 0.24))<BR>               bg (substr text0 (+ n2 2) (- n3 (1+ n2)))<BR>                       )<BR>                       (setq text1        (list '(0 . "TEXT")<BR>                                                       '(100 . "AcDbEntity")<BR>                                                       '(67 . 0)<BR>                                                       '(8 . "0")<BR>                                                       (cons 10 p1)<BR>                                                       '(40 . 0.2)<BR>                                                       (cons 1 xh)<BR>                )<BR>                       )<BR>                       (setq text2        (list '(0 . "TEXT")<BR>                                                       '(100 . "AcDbEntity")<BR>                                                       '(67 . 0)<BR>                                                       '(8 . "0")<BR>                                                       (cons 10 p2)<BR>                                                       '(40 . 0.4)<BR>                                                       (cons 1 bg)<BR>                )<BR>                       )<BR>                       (entmake text1)<BR>                       (entmake text2)<BR>                       (if        (/= xx0 xx)<BR>                                       (progn<BR>        (command "")<BR>        (command "line" p0)<BR>                                       )<BR>                                       (command p0)<BR>                       )<BR>                       (setq xx xx0)


       )<BR>       (command "")<BR>       (CLOSE F_ID)<BR>)<BR>


data.dat数据文件,放在C:\根目录下


1,,100.12,200.12,10.30,X1<BR>2,,300.12,400.12,20.30,X1<BR>3,,200.12,350.12,40.30,X1<BR>4,,400.12,150.12,20.30,X2<BR>5,,500.12,650.12,50.30,X2<BR>6,,200.12,850.12,70.30,X2<BR>

kgd4510 发表于 2005-4-14 11:41:00

太厉害啦,谢谢,我试试看。

kgd4510 发表于 2005-4-14 12:35:00

谢谢,问题解决啦。

ljpnb 发表于 2005-4-14 12:53:00

如果做得完美一点,需要在程序加再加几句,如


(setq os (getvar "OSMODE"))<BR>(setvar "CMDECHO" 0)<BR>(setvar "OSMODE" 0)<BR>.<BR>.<BR>.<BR>(setvar "OSMODE" os)<BR>(setvar "CMDECHO" 1)

kgd4510 发表于 2005-4-14 13:48:00

谢谢,祝您一生平安。您热诚的帮助我很感动。你为我的工作减轻了很多负担,我在外面还发了另外一个求助,跟这个差不多,不过多了几个要求。你有空的时候再帮我看看OK?在此先谢过啦。

cuyongping 发表于 2013-4-30 16:58:11

test ; 错误: 参数类型错误: FILE nil
使用程序出现上面的错误,为什么,新手求助

cuyongping 发表于 2013-4-30 17:27:02

怎么没有人帮忙了?

tongtong3489 发表于 2016-7-31 12:01:29

出错,是不是我的cad的问题
页: [1]
查看完整版本: 请教高手?能否用lisp程序自动连线?