本帖最后由 fl202 于 2013-9-16 15:37 编辑
写的长了点,思路:根据是否相交分成两个选择集ss2、ss3(根据角度也行,同一个选择集如ss2内稍微不平行的线判断角度就比较麻烦,还是判断交点好些),然后排序,然后倒角。 - (defun midpt (ptx pty / pt)
- (setq pt (list (/ (+ (nth 0 ptx) (nth 0 pty)) 2)
- (/ (+ (nth 1 ptx) (nth 1 pty)) 2) ) )
- pt
- )
- (princ "\n 请选择2组平行直线")
- ;(if
- (setq ss1 nil ss1 (ssget (list (cons 0 "LINE"))))
- ;(progn
- (setq data1 (entget (ssname ss1 0)))
- (setq px1 (cdr (assoc 10 data1)) py1 (cdr (assoc 11 data1)) )
- (setq ang1 (angle px1 py1) ang2 (+ ang1 pi) ang3 (+ ang1 (/ pi 2)) )
- (setq pt1 (midpt px1 py1))
- (setq pt2 (polar pt1 ang3 (* 100 (distance px1 py1)) ) pt5 (polar pt1 (+ ang3 pi) (* 100 (distance px1 py1)) ) )
- (setq b2 '() b3 '() i 0 ss2 nil ss3 nil ss2 (ssadd) ss3 (ssadd) )
- (repeat (sslength ss1)
- (setq en1 (ssname ss1 i))
- (setq data1 (entget en1) px1 (cdr (assoc 10 data1)) py1 (cdr (assoc 11 data1)) ang4 (angle px1 py1) )
- (setq pt3 (polar pt2 (+ ang4 (/ pi 2)) 100) )
- (setq pt4 (inters px1 py1 pt2 pt3 nil) d1 (distance pt2 pt4)) ;;;(print (list px1 py1 pt2 pt5 (inters px1 py1 pt2 pt5)))
- (if (inters px1 py1 pt2 pt5)
- (setq b2 (cons (list d1 en1) b2))
- (setq b3 (cons (list d1 en1) b3)) )
- (setq i (1+ i))
- )
- (print (list (length b2) (length b3) ))
- (setq b2 (vl-sort b2 (function (lambda (e1 e2) (< (car e1) (car e2)) ) ) ) )
- (setq b3 (vl-sort b3 (function (lambda (e1 e2) (< (car e1) (car e2)) ) ) ) )
-
- (setq en1 (nth 1 (nth 0 b3)))
- (setq px1 (cdr (assoc 10 (entget en1))) py1 (cdr (assoc 11 (entget en1))) )
- (setq pt1 (midpt px1 py1))
- (setq en2 (nth 1 (nth 0 b2)) en3 (nth 1 (nth 1 b2)) )
- (setq ptx2 (cdr (assoc 10 (entget en2))) ptx3 (cdr (assoc 10 (entget en3)))
- pty2 (cdr (assoc 11 (entget en2))) pty3 (cdr (assoc 11 (entget en3)))
- d1 (distance pt1 (inters px1 px2 ptx2 pty2 nil )) d2 (distance pt1 (inters px1 px2 ptx3 pty3 nil )) )
- (if (> d1 d2)
- (setq b2 (vl-sort b2 (function (lambda (e1 e2) (> (car e1) (car e2)) ) ) ) )
- (princ)
- )
-
- (setq n 0)
- (repeat (length b2)
- (setq en1 (nth 1 (nth n b2)))
- (setq ss2 (ssadd en1 ss2))
- (setq n (1+ n))
- )
- (setq n 0)
- (repeat (length b3)
- (setq en1 (nth 1 (nth n b3)))
- (setq ss3 (ssadd en1 ss3))
- (setq n (1+ n))
- )
- (command "chprop" ss2 "" "c" 6 "")
- (setq i 0 r1 50)
- (setq os1 (getvar "osmode"))
- (setvar "osmode" 0)
- (command "fillet" "r" r1)
- (repeat (min (sslength ss2) (sslength ss3))
- (setq en1 (ssname ss2 i) en2 (ssname ss3 i) data1 (entget en1) data2 (entget en2) )
- (setq px1 (cdr (assoc 10 data1)) py1 (cdr (assoc 11 data1)) )
- (setq pt1 (midpt px1 py1))
- (setq px1 (cdr (assoc 10 data2)) py1 (cdr (assoc 11 data2)) )
- (setq pt2 (midpt px1 py1))
- (command "fillet" (list en1 pt1) (list en2 pt2) )
- (setq i (1+ i))
- )
- (setvar "osmode" os1)
|