ZZXXQQ发表于2010-5-11 20:18:00 因(setvar \"osmode\" 128)捕捉的是垂直点,所以直线(pt,ptf)与直线(pt10,pt11)平行。因为不明白楼主到底原来的目的是什么,所以没法改程序。最好给个示意图。
刚才,抽了点时间修改,现在对水平和垂直线可行,对任意平行线,还没做到。 (defun c:zxx (/ os oldlayer ss en pt endata pt10 pt11 ang dist k y_endata pt_y pt_yy p10 p11 ptx ) (setq os (getvar "osmode")) (setq oldlayer (getvar "CLAYER")) (command "_.undo" "be") (setvar "clayer" "中心线") (prompt "\选取投影圆:") (setq ss (ssget '((0 . "CIRCLE")))) (prompt "选取投影中心线第一条边线:") (setq en (nentsel)) (setq pt (osnap (cadr en) "nea") endata (entget (car en)) ) (setq pt10 (cdr (assoc 10 endata)) pt11 (cdr (assoc 11 endata)) ) (cond ((or (= pi (abs (angle pt10 pt11))) (= 0.0 (abs (angle pt10 pt11))) ) (setq ang (* 0.5 pi)) ) ((or (= (* 0.5 pi) (abs (angle pt10 pt11))) (= (* 1.5 pi) (abs (angle pt10 pt11))) ) (setq ang 0.0) ) ) (setvar "osmode" 128) (setq dist (getdist pt "\n投影中心线第二条边线:")) (setvar "osmode" 0) (setq k 0) (repeat (sslength ss) (setq y_endata (entget (ssname ss k))) (setq pt_y (cdr (assoc 10 y_endata)) pt_yy (polar pt_y ang 5.0) ) (setq ptx (inters pt_y pt_yy pt10 pt11 nil) ) (setq p10 ptx) (setq p11 (polar ptx ang dist)) (setq p10 (polar p10 (angle p11 p10) 3) p11 (polar p11 (angle p10 p11) 3) ) (setvar "osmode" 0) (command "line" p10 p11 "") (setq k (1+ k)) ) (command "_.undo" "e") (setvar "osmode" os) (setvar "clayer" oldlayer) (princ) ) (princ "**zxx**")
已知,圆、一组平行线,画出圆之圆心,在平行线上的对应的线,线两端超出平行线距离3。 见图,如能改成不限水平和垂直线,就完善了。
|