[求助]很长时间没碰程序,帮忙看下。
<p>(defun c:zxx<br/> (/ ss en os oldlayer endata y_endata pt10 pt11 p10 p11 ptx<br/> pt k pt_y)<br/> (setq os (getvar "osmode"))<br/> (setq oldlayer (getvar "CLAYER"))<br/> (command "_.undo" "be")<br/> (setvar "clayer" "中心线")<br/> (prompt "选取投影圆和投影中心线位置")<br/> (prompt "选取投影圆:")<br/> (setq ss (ssget '((0 . "CIRCLE"))))<br/> (prompt "选取投影中心线第一条边线:")<br/> (setq en (nentsel))<br/> (setq pt (osnap (cadr en) "nea")<br/> endata<br/> (entget (car en))<br/> )<br/> (setq pt10<br/> (cdr (assoc 10 endata))<br/> pt11<br/> (cdr (assoc 11 endata))<br/> )<br/> (setvar "osmode" 128)<br/> (setq ptf (getpoint pt "\n投影中心线第二条边线:"))<br/> (setq ang1 (angle ptf pt))<br/> (setq ang2 (angle pt ptf))<br/> (setq dis (distance pt ptf))<br/> (setq k 0)<br/> (repeat (sslength ss)<br/> (setq y_endata (entget (ssname ss k)))<br/> (setq pt_y<br/> (cdr (assoc 10 y_endata))<br/> )<br/> (setq ptx (inters pt_y<br/> (polar pt_y ang2 5.0)<br/> pt10<br/> pt11<br/> t<br/> )<br/> )<br/> (setq p10 (polar ptx ang1 3.0))<br/> (setq p11 (polar ptx ang2 (+ 3.0 dis)))<br/> (setvar "osmode" 0)<br/> (command "line" p10 p11 "")<br/> (setq k (1+ k))<br/> )<br/> (command "_.undo" "e")<br/> (setvar "osmode" os)<br/> (setvar "clayer" oldlayer)<br/> (princ)<br/>)</p><p><br/>(princ "**zxx**")<br/>在p10 处出错了,!endata时,返回nil</p> 两平行线无交点(inters pt_y (polar pt_y ang2 5.0) pt10 pt11 T) <p>二楼版主,是正交线,如何变成平行了?</p><p>ptx是有值的,我再查查,最早是可以画线的。</p> 昏,没找出错处。 再来提提这个问题 因(setvar "osmode" 128)捕捉的是垂直点,所以直线(pt,ptf)与直线(pt10,pt11)平行。<br/>因为不明白楼主到底原来的目的是什么,所以没法改程序。最好给个示意图。 ZZXXQQ发表于2010-5-11 20:18:00static/image/common/back.gif因(setvar \"osmode\" 128)捕捉的是垂直点,所以直线(pt,ptf)与直线(pt10,pt11)平行。因为不明白楼主到底原来的目的是什么,所以没法改程序。最好给个示意图。<p>刚才,抽了点时间修改,现在对水平和垂直线可行,对任意平行线,还没做到。 </p><p>(defun c:zxx (/ os oldlayer ss en pt endata<br/> pt10 pt11 ang dist k y_endata pt_y<br/> pt_yy p10 p11 ptx<br/> )<br/> (setq os (getvar "osmode"))<br/> (setq oldlayer (getvar "CLAYER"))<br/> (command "_.undo" "be")<br/> (setvar "clayer" "中心线")<br/> (prompt "\选取投影圆:")<br/> (setq ss (ssget '((0 . "CIRCLE"))))<br/> (prompt "选取投影中心线第一条边线:")<br/> (setq en (nentsel))<br/> (setq pt (osnap (cadr en) "nea")<br/> endata<br/> (entget (car en))<br/> )<br/> (setq pt10<br/> (cdr (assoc 10 endata))<br/> pt11<br/> (cdr (assoc 11 endata))<br/> )<br/> (cond<br/> ((or (= pi (abs (angle pt10 pt11)))<br/> (= 0.0 (abs (angle pt10 pt11)))<br/> )<br/> (setq ang (* 0.5 pi))<br/> )<br/> ((or (= (* 0.5 pi) (abs (angle pt10 pt11)))<br/> (= (* 1.5 pi) (abs (angle pt10 pt11)))<br/> )<br/> (setq ang 0.0)<br/> )<br/> )<br/> (setvar "osmode" 128)<br/> (setq dist (getdist pt "\n投影中心线第二条边线:"))<br/> (setvar "osmode" 0)<br/> (setq k 0)<br/> (repeat (sslength ss)<br/> (setq y_endata (entget (ssname ss k)))<br/> (setq pt_y<br/> (cdr (assoc 10 y_endata))<br/> pt_yy (polar pt_y ang 5.0)<br/> )<br/> (setq ptx (inters pt_y pt_yy pt10 pt11 nil)<br/> )<br/> (setq p10 ptx)<br/> (setq p11 (polar ptx ang dist))<br/> (setq p10 (polar p10 (angle p11 p10) 3)<br/> p11 (polar p11 (angle p10 p11) 3)<br/> )<br/> (setvar "osmode" 0)<br/> (command "line" p10 p11 "")<br/> (setq k (1+ k))<br/> )<br/> (command "_.undo" "e")<br/> (setvar "osmode" os)<br/> (setvar "clayer" oldlayer)<br/> (princ)<br/>) </p><p><br/>(princ "**zxx**") </p><p>已知,圆、一组平行线,画出圆之圆心,在平行线上的对应的线,线两端超出平行线距离3。 </p><p>见图,如能改成不限水平和垂直线,就完善了。 </p><p>
</p><p></p> <p>从PROE转DWG图,用来补中心线,这个程序还是很好用的。</p><p>当选直线时,再加入出错处理,防止没选到线,就更好。</p> 选直线时,现在只能先选近圆端线,否则中心线不在平行线之间。 本帖最后由 作者 于 2010-5-12 19:13:04 编辑 <br /><br /> <p></p>