ZZXXQQ帮忙修正ARC部分中的错误, 输出文件改为自动读取路径和可选择输出
本帖最后由 作者 于 2009-5-17 11:34:27 编辑 <br /><br /> <p> </p><p>(DEFUN C:DAT()<br/> (setq out(open (strcat (getvar "dwgname") ".dat" ) "w" ))<br/> (setq e (entnext))<br/> (while e<br/> (setq ed (entget e))<br/> (setq name (cdr (assoc 0 ed) ) )<br/> (if (= name "CIRCLE")<br/> (progn<br/> (setq cxy (assoc 10 ed))<br/> (setq cx (nth 1 cxy))<br/> (setq cy (nth 2 cxy))<br/> (setq r (assoc 40 ed))<br/> (setq rr (cdr r))<br/> (setq s (strcat "C " " = " (rtos cx 2 6) " , " (rtos cy 2 6) " , " (rtos rr 2 6) ))<br/> (write-line s out) <br/> ) <br/> )<br/> (if (= name "LINE")<br/> (progn<br/> (setq xy1 (assoc 10 ed))<br/> (setq x1 (nth 1 xy1))<br/> (setq y1 (nth 2 xy1))<br/> (setq xy2 (assoc 11 ed))<br/> (setq x2 (nth 1 xy2))<br/> (setq y2 (nth 2 xy2))<br/> (setq s (strcat "L " " = " (rtos x1 2 6) " , " (rtos y1 2 6) " , " (rtos x2 2 6)" , " (rtos y2 2 6) ))<br/> (write-line s out) <br/> ) <br/> )<br/> (if (= name "ARC")<br/> (progn<br/> (setq cxy (assoc 10 ed))<br/> (setq cx (nth 1 cxy))<br/> (setq cy (nth 2 cxy))<br/> (setq r (assoc 40 ed))<br/> (setq rr (cdr r))<br/> (setq sa1 (assoc 50 ed))<br/> (setq sa (cdr sa1))<br/> (setq ea1 (assoc 51 ed))<br/> (setq ea (cdr ea1))<br/> (setq sxy (polar (list cx cy) sa rr))<br/> (setq sx (nth 0 sxy))<br/> (setq sy (nth 1 sxy))<br/><br/> (setq exy (polar (list cx cy) ea rr))<br/> (setq ex (nth 0 exy))<br/> (setq ey (nth 1 exy))<br/> <br/> (setq s (strcat "A " " = " (rtos cx 2 6) " , " (rtos cy 2 6) " , " (rtos sx 2 6)" , " (rtos sy 2 6)" , " (rtos ex 2 6)" , " (rtos ey 2 6) ", N"))<br/> (write-line s out) <br/> ) <br/> )<br/><br/> (setq e (entnext e))<br/> ) ;END OF WHILE<br/> (close out)<br/> (print)<br/> ) <br/><br/>帮忙修正ARC部分中的错误, 输出文件改为自动读取路径和可选择输出,<br/>(现在的是,全部层的东西都会输出,请帮忙改正,非常感谢!</p> <p>输出的正确格式如下,谢谢</p><p></p><p>L 1= 143.87473, 141.20577, 143.87473, 131.87078<br/>L 2= 91.12475, 141.20577, 91.12475, 131.87078<br/>L 3= 34.37476, 141.20577, 34.37476, 131.87078<br/>L 4= 143.87473, 150.54076, 143.87473, 141.20577<br/>L 5= 91.12475, 150.54076, 91.12475, 141.20577<br/>L 6= 34.37476, 150.54076, 34.37476, 141.20577<br/>L 7= 29.87482, 48.76000, 31.12482, 48.76000<br/>L 8= 29.87482, 25.16000, 31.12482, 25.16000<br/>L 9= 110.18481, 48.18160, 111.43481, 48.18160<br/>L 10= 148.37473, 25.16000, 149.62473, 25.16000<br/>L 11= 148.37473, 48.76000, 149.62473, 48.76000<br/>L 12= 12.00000, 15.00000, 20.50000, 15.00000<br/>L 13= 12.00000, 65.00000, 20.50000, 65.00000<br/>L 14= 168.00000, 65.00000, 176.50000, 65.00000<br/>L 15= 168.00000, 22.00000, 176.50000, 22.00000<br/>L 16= 168.00000, 123.18077, 174.00000, 123.18077<br/>L 17= 168.00000, 166.18077, 174.00000, 166.18077<br/>L 18= 12.00000, 166.18077, 18.00000, 166.18077<br/>L 19= 12.00000, 116.18077, 18.00000, 116.18077<br/>L 20= 148.37473, 149.94077, 149.62473, 149.94077<br/>L 21= 148.37473, 126.34077, 149.62473, 126.34077<br/>L 22= 110.18481, 149.36237, 111.43481, 149.36237<br/>L 23= 29.87482, 126.34077, 31.12482, 126.34077<br/>L 24= 29.87482, 149.94077, 31.12482, 149.94077<br/>L 25= 0.00000, 181.18077, 180.00000, 181.18077<br/>L 26= 180.00000, 181.18077, 180.00000, 101.18077<br/>L 27= 180.00000, 101.18077, 0.00000, 101.18077<br/>L 28= 0.00000, 101.18077, 0.00000, 181.18077<br/>L 29= 27.87527, 133.37075, 30.27311, 133.37075<br/>L 30= 30.27311, 133.37075, 30.27311, 131.87078<br/>L 31= 30.27311, 131.87078, 66.07390, 131.87078<br/>L 32= 66.07390, 131.87078, 66.07390, 133.37080<br/>L 33= 66.07390, 133.37080, 68.22469, 133.37080<br/>L 34= 68.42469, 133.17080, 68.42469, 130.07118<br/>L 35= 68.22469, 129.87118, 27.87527, 129.87118<br/>L 36= 27.87527, 129.87118, 27.87527, 133.37075<br/>L 37= 32.37476, 150.54076, 32.37476, 152.49076<br/>L 38= 32.37476, 152.49076, 62.37476, 152.49076<br/>L 39= 62.37476, 152.49076, 62.37476, 150.54076<br/>L 40= 62.37476, 150.54076, 32.37476, 150.54076<br/>L 41= 69.82469, 130.07118, 69.82469, 133.17092<br/>L 42= 70.02471, 133.37092, 72.02310, 133.37075<br/>L 43= 72.02310, 133.37075, 72.02310, 131.87078<br/>L 44= 72.02310, 131.87078, 107.82388, 131.87078<br/>L 45= 107.82388, 131.87078, 107.82388, 133.37080<br/>L 46= 107.82388, 133.37080, 109.97467, 133.37080<br/>L 47= 110.17467, 133.17080, 110.17467, 130.07118<br/>L 48= 109.97467, 129.87118, 70.02469, 129.87118<br/>L 49= 74.12475, 150.54076, 74.12475, 152.49076<br/>L 50= 74.12475, 152.49076, 104.12475, 152.49076<br/>L 51= 104.12475, 152.49076, 104.12475, 150.54076<br/>L 52= 104.12475, 150.54076, 74.12475, 150.54076<br/>L 53= 111.57467, 130.07078, 111.57467, 133.17092<br/>L 54= 111.77469, 133.37092, 113.77308, 133.37075<br/>L 55= 113.77308, 133.37075, 113.77308, 131.87078<br/>L 56= 113.77308, 131.87078, 149.57386, 131.87078<br/>L 57= 149.57386, 131.87078, 149.57386, 133.37080<br/>L 58= 149.57386, 133.37080, 152.12473, 133.37080<br/>L 59= 152.12473, 133.37080, 152.12473, 129.87118<br/>L 60= 152.12473, 129.87118, 152.12473, 129.87078<br/>L 61= 152.12473, 129.87078, 111.77467, 129.87078<br/>L 62= 115.87473, 150.54076, 115.87473, 152.49076<br/>L 63= 115.87473, 152.49076, 145.87473, 152.49076<br/>L 64= 145.87473, 152.49076, 145.87473, 150.54076<br/>L 65= 145.87473, 150.54076, 115.87473, 150.54076<br/>L 66= 130.87473, 29.69021, 130.87473, 30.69001<br/>L 67= 89.12475, 29.69021, 89.12475, 30.69001<br/>L 68= 130.87473, 50.33499, 130.87473, 49.35999<br/>L 69= 89.12475, 50.33499, 89.12475, 49.35999<br/>L 70= 47.37476, 29.69021, 47.37476, 30.69001<br/>L 71= 47.37476, 50.33499, 47.37476, 49.35999<br/>L 72= 115.87473, 49.35999, 115.87473, 51.30999<br/>L 73= 115.87473, 51.30999, 145.87473, 51.30999<br/>L 74= 145.87473, 51.30999, 145.87473, 49.35999<br/>L 75= 145.87473, 49.35999, 115.87473, 49.35999<br/>L 76= 111.57467, 28.89001, 111.57467, 31.99015<br/>L 77= 111.77469, 32.19015, 113.77308, 32.18998<br/>L 78= 113.77308, 32.18998, 113.77308, 30.69001<br/>L 79= 113.77308, 30.69001, 149.57386, 30.69001<br/>L 80= 149.57386, 30.69001, 149.57386, 32.19003<br/>L 81= 149.57386, 32.19003, 152.12473, 32.19003<br/>L 82= 152.12473, 32.19003, 152.12473, 28.69041<br/>L 83= 152.12473, 28.69041, 152.12473, 28.69001<br/>L 84= 152.12473, 28.69001, 111.77467, 28.69001<br/>L 85= 74.12475, 49.35999, 74.12475, 51.30999<br/>L 86= 74.12475, 51.30999, 104.12475, 51.30999<br/>L 87= 104.12475, 51.30999, 104.12475, 49.35999<br/>L 88= 104.12475, 49.35999, 74.12475, 49.35999<br/>L 89= 69.82469, 28.89041, 69.82469, 31.99015<br/>L 90= 70.02471, 32.19015, 72.02310, 32.18998<br/>L 91= 72.02310, 32.18998, 72.02310, 30.69001<br/>L 92= 72.02310, 30.69001, 107.82388, 30.69001<br/>L 93= 107.82388, 30.69001, 107.82388, 32.19003<br/>L 94= 107.82388, 32.19003, 109.97467, 32.19003<br/>L 95= 110.17467, 31.99003, 110.17467, 28.89041<br/>L 96= 109.97467, 28.69041, 70.02469, 28.69041<br/>L 97= 32.37476, 49.35999, 32.37476, 51.30999<br/>L 98= 32.37476, 51.30999, 62.37476, 51.30999<br/>L 99= 62.37476, 51.30999, 62.37476, 49.35999<br/>L100= 62.37476, 49.35999, 32.37476, 49.35999<br/>L101= 27.87527, 32.18998, 30.27311, 32.18998<br/>L102= 30.27311, 32.18998, 30.27311, 30.69001<br/>L103= 30.27311, 30.69001, 66.07390, 30.69001<br/>L104= 66.07390, 30.69001, 66.07390, 32.19003<br/>L105= 66.07390, 32.19003, 68.22469, 32.19003<br/>L106= 68.42469, 31.99003, 68.42469, 28.89041<br/>L107= 68.22469, 28.69041, 27.87527, 28.69041<br/>L108= 27.87527, 28.69041, 27.87527, 32.18998<br/>L109= 0.00000, 80.00000, 180.00000, 80.00000<br/>L110= 180.00000, 80.00000, 180.00000, 0.00000<br/>L111= 180.00000, 0.00000, 0.00000, 0.00000<br/>L112= 0.00000, 0.00000, 0.00000, 80.00000<br/>C 1= 29.87482, 149.94077, 1.25000<br/>C 2= 29.87482, 126.34077, 1.25000<br/>C 3= 110.18481, 149.36237, 1.25000<br/>C 4= 148.37473, 126.34077, 1.25000<br/>C 5= 148.37473, 149.94077, 1.25000<br/>C 6= 12.00000, 116.18077, 6.00000<br/>C 7= 12.00000, 166.18077, 6.00000<br/>C 8= 168.00000, 166.18077, 6.00000<br/>C 9= 168.00000, 123.18077, 6.00000<br/>C 10= 168.00000, 22.00000, 8.50000<br/>C 11= 168.00000, 65.00000, 8.50000<br/>C 12= 12.00000, 65.00000, 8.50000<br/>C 13= 12.00000, 15.00000, 8.50000<br/>C 14= 148.37473, 48.76000, 1.25000<br/>C 15= 148.37473, 25.16000, 1.25000<br/>C 16= 110.18481, 48.18160, 1.25000<br/>C 17= 29.87482, 25.16000, 1.25000<br/>C 18= 29.87482, 48.76000, 1.25000<br/>A 1= 68.22469, 133.17080, 68.22469, 133.37080, 68.42469, 133.17080,S<br/>A 2= 68.22469, 130.07118, 68.42469, 130.07118, 68.22469, 129.87118,S<br/>A 3= 70.02469, 133.17092, 69.82469, 133.17092, 70.02471, 133.37092,S<br/>A 4= 109.97467, 133.17080, 109.97467, 133.37080, 110.17467, 133.17080,S<br/>A 5= 109.97467, 130.07118, 110.17467, 130.07118, 109.97467, 129.87118,S<br/>A 6= 70.02469, 130.07118, 70.02469, 129.87118, 69.82469, 130.07118,S<br/>A 7= 111.77467, 133.17092, 111.57467, 133.17092, 111.77469, 133.37092,S<br/>A 8= 111.77467, 130.07078, 111.77467, 129.87078, 111.57467, 130.07078,S<br/>A 9= 111.77467, 31.99015, 111.57467, 31.99015, 111.77469, 32.19015,S<br/>A 10= 111.77467, 28.89001, 111.77467, 28.69001, 111.57467, 28.89001,S<br/>A 11= 70.02469, 31.99015, 69.82469, 31.99015, 70.02471, 32.19015,S<br/>A 12= 109.97467, 31.99003, 109.97467, 32.19003, 110.17467, 31.99003,S<br/>A 13= 109.97467, 28.89041, 110.17467, 28.89041, 109.97467, 28.69041,S<br/>A 14= 70.02469, 28.89041, 70.02469, 28.69041, 69.82469, 28.89041,S<br/>A 15= 68.22469, 31.99003, 68.22469, 32.19003, 68.42469, 31.99003,S<br/>A 16= 68.22469, 28.89041, 68.42469, 28.89041, 68.22469, 28.69041,S<br/></p> 本帖最后由 作者 于 2009-5-18 12:18:49 编辑不知道对不对。
(defun c:dat ()
(setq nm (if nm nm ""))
(if (setq nm (getfiled "选择输出文件名" nm "dat" 9)) (progn
(setq fp (open nm "w"))
(initget 0 "ARC CIRCLE LINE ")
(setq tp (getstring "\n输入实体类型 (Arc,Circle,<Line>) :")
tp (if tp tp "LINE"))
(setq lnm (getstring (strcat "\n输入图层名 <" (getvar "CLAYER") "> :"))
lnm (if lnm lnm (getvar "CLAYER")))
(if (setq ss (ssget "X" (list (cons 0 tp) (cons 8 lnm)))) (progn
(setq i 0)
(repeat (sslength ss)
(setq ent (entget(ssname ss i)))
(setq i (1+ i))
(setq ia (strcat (if (< i 10) "" (if (< i 100) " " "")) (itoa i)))
(cond
((= tp "ARC")
(setq pc (cdr(assoc 10 ent)))
(setq cx (rtos(car pc) 2 6) cy (rtos(cadr pc) 2 6))
(setq r(cdr(assoc 40 ent)))
(setq sa (cdr(assoc 50 ent)))
(setq ea (cdr(assoc 51 ent)))
(setq ps (polar pc sa r))
(setq sx (rtos(car ps) 2 6) sy (rtos(cadr ps) 2 6))
(setq pe (polar pc ea r))
(setq ex (rtos(car pe) 2 6) ey (rtos(cadr pe) 2 6))
(setq s (strcat "A " ia "=" cx " , " cy " , " sx " , " sy " , " ex " , " ey ",S"))
)
((= tp "CIRCLE")
(setq pc (cdr(assoc 10 ent)))
(setq cx (rtos (car pc) 2 6) cy (rtos (cadr pc) 2 6))
(setq r(cdr(assoc 40 ent)))
(setq s (strcat "C" ia "=" cx " , " cy " , " r))
)
((= tp "LINE")
(setq p1 (cdr(assoc 10 ent)))
(setq x1 (rtos (car p1) 2 6) y1 (rtos (cadr p1) 2 6))
(setq p2 (cdr(assoc 11 ent)))
(setq x2 (rtos (car p2) 2 6) y2 (rtos (cadr p2) 2 6))
(setq s (strcat "L " ia "=" x1 " , " y1 " , " x2 " , " y2))
)
)
(write-line s fp)
)
))
))
(close fp)
(print)
)
<p><strong><font face="Verdana" color="#da2549">ZZXXQQ 你好,</font></strong></p><p><strong><font face="Verdana" color="#da2549">程序我运行了下,不行,出现不能搜索**.dat和出现错误</font></strong></p><p><strong><font face="Verdana" color="#da2549">程序要的是把框选到的圆和圆弧和直线都输出,不是要选择输入输出</font></strong></p><p><strong><font face="Verdana" color="#da2549">请帮忙改正.谢谢!!!!</font></strong></p> 请查看附件中的文件 3楼改了,再试试。 ZZXXQQ和各位大虾们好
请帮忙修改以下这三个地方就可以了,谢谢
问题0:给输出的坐标编号分类
;lisp程序
(DEFUN C:DAT()
(setvar "DIMZIN" 0);设置小数精度(省零,重要)
(setvar "qaflags" 1)
(command "explode" "all" "")
(setq out(open (strcat (getvar "DWGPREFIX") (getvar "dwgname")".dat") "w" ))
[问题一:输出的文件名总有dwg(例:123.dwg.dat 能不能改成输出后是 123.dat) 谢谢]
(setq e (entnext))
(while e
(setq ed (entget e))
(setq name (cdr (assoc 0 ed) ))
(if (= name "CIRCLE")
(progn
(setq cxy (assoc 10 ed))
(setq cx(nth 1 cxy))
(setq cy(nth 2 cxy))
(setq r (assoc 40 ed))
(setq rr(cdr r))
(setq s (strcat "C" "=" (rtoscx 2 5) " , " (rtos cy 2 5) " , " (rtos rr 2 5) ))
(write-line s out)
)
)
(if (= name "LINE")
(progn
(setq xy1 (assoc 10 ed))
(setq x1(nth 1 xy1))
(setq y1(nth 2 xy1))
(setq xy2 (assoc 11 ed))
(setq x2(nth 1 xy2))
(setq y2(nth 2 xy2))
(setq s (strcat "L" "=" (rtosx1 2 5) " , " (rtos y1 2 5) " , " (rtos x2 2 5)" , " (rtos y2 2 5) ))
(write-line s out)
)
)
(if (= name "ARC")
[问题二:圆弧输出反是反方向的,请帮忙改正,谢谢,,,(本是倒的圆角是r0.2 但输出后就变成了 r0.2大半圆,相反方向)]
[请查看我上边发的DWG文件内有标示,谢谢!!!!!!]
(progn
(setq cxy (assoc 10 ed))
(setq cx(nth 1 cxy))
(setq cy(nth 2 cxy))
(setq r (assoc 40 ed))
(setq rr(cdr r))
(setq sa1(assoc 50 ed))
(setq sa(cdr sa1))
(setq ea1(assoc 51 ed))
(setq ea(cdr ea1))
(setq sxy (polar (list cx cy) sa rr))
(setq sx (nth 0 sxy))
(setq sy (nth 1 sxy))
(setq exy (polar (list cx cy) ea rr))
(setq ex (nth 0 exy))
(setq ey (nth 1 exy))
(setq s (strcat "A" "=" (rtoscx 2 5) " , " (rtos cy 2 5) " , " (rtos sx 2 5)" , " (rtos sy 2 5)" , " (rtos ex 2 5)" , " (rtos ey 2 5)", S"))
(write-line s out)
)
)
(setq e (entnext e))
) ;ENDOF WHILE
(close out)
(print)
) ;END OF FUNCTION
现在就差圆弧部分了,请ZZXXQQ和各位帮忙看下
圆弧本来是内圆的,输出后变了外圆
圆弧本来是外圆的,输出后变了内圆
两者刚好相反,请帮忙解决,谢谢...
;lisp程序
(DEFUN C:DAT()
(setvar "osmode" 0)
(setvar "DIMZIN" 0);设置小数精度(省零,重要)
(setvar "qaflags" 1)
(command "explode" "all" "") ;炸开输出
(setq aa (getvar "dwgname") n (strlen aa) aa (substr aa 1 (- n 4)) out (open (strcat "D:\\个人重要资料(勿删)\\Administrator\\桌面\\编程文件\\" aa".dat" )"w" ));输出到文件夹
(setq e (entnext))
(while e
(setq ed (entget e))
(setq name (cdr (assoc 0 ed) ))
(if (= name "LINE") ;读线条
(progn
(setq xy1 (assoc 10 ed))
(setq x1(nth 1 xy1))
(setq y1(nth 2 xy1))
(setq xy2 (assoc 11 ed))
(setq x2(nth 1 xy2))
(setq y2(nth 2 xy2))
(setq s (strcat "L" "=" (rtosx1 2 5) " , " (rtos y1 2 5) " , " (rtos x2 2 5)" , " (rtos y2 2 5) ))
(write-line s out)
)
)
(if (= name "CIRCLE");读圆形
(progn
(setq cxy (assoc 10 ed))
(setq cx(nth 1 cxy))
(setq cy(nth 2 cxy))
(setq r (assoc 40 ed))
(setq rr(cdr r))
(setq s (strcat "C" "=" (rtoscx 2 5) " , " (rtos cy 2 5) " , " (rtos rr 2 5) ))
(write-line s out)
)
)
;(Set Arc( "Directionf" 1))
(if (= name "ARC")
(progn
(setq cxy (assoc 10 ed))
(setq cx(nth 1 cxy))
(setq cy(nth 2 cxy))
(setq r (assoc 40 ed))
(setq rr(cdr r))
(setq sa1(assoc 50 ed))
(setq sa(cdr sa1))
(setq ea1(assoc 51 ed))
(setq ea(cdr ea1))
(setq sxy (polar (list cx cy) sa rr))
(setq sx (nth 0 sxy))
(setq sy (nth 1 sxy))
(setq exy (polar (list cx cy) ea rr))
(setq ex (nth 0 exy))
(setq ey (nth 1 exy))
(setq s (strcat "A" "=" (rtoscx 2 5) " , " (rtos cy 2 5) " , " (rtos sx 2 5)" , " (rtos sy 2 5)" , " (rtos ex 2 5)" , " (rtos ey 2 5)", S"))
(write-line s out)
)
)
(setq e (entnext e))
) ;ENDOF WHILE
(setvar "osmode" 703)
(close out)
(print)
) ;END OF FUNCTION
将圆弧的首未点颠倒一下试试。 <p>谢谢ZZXXQQ帮忙,问题我已经解决了</p><p>请教如何编序号?</p><p>比如 <font color="#ff00ff">"A "</font>
<font color="#ff00ff">" = "</font>
</p><p><font color="#ff0000">在 A 和 = 号之间写入序号 1</font></p><p><font color="#ff0000">以此类推往下排列?</font></p><p><font color="#ff0000">谢谢</font></p>
页:
[1]
2