给这些线,而不是普林斯尝试工作
- [size=2]; offset perpendicular to line
- (defun c:p2p ()
- (setq tp1 (entsel "\nSelect line near end : "))
- (setq tpp1 (entget (car tp1)))
- (setq pt1 (cdr (assoc 10 tpp1)))
- (setq pt1 (list (car pt1) (cadr pt1) 0.0)) ;reset z to zero
- (setq pt2 (cdr (assoc 11 tpp1)))
- (setq pt2 (list (car pt2) (cadr pt2) 0.0)) ;reset z to zero
- (setq pt3 (cadr tp1))
- (setq d1 (distance pt1 pt3))
- (setq d2 (distance pt2 pt3))
- (if (> d1 d2)
- (progn
- (setq temp pt1)
- (setq pt1 pt2)
- (setq pt2 temp)
- )
- )
- (setq ang (angle pt1 pt2)
- )
- (setq pt4 (getpoint "\nSelect point"))
- (setq pt4 (list (car pt4) (cadr pt4) 0.0)) ;reset z to zero
- (setq ang2 (angle pt1 pt4))
- (setq dist2 (distance pt1 pt4))
- (setq angdiff (- ang ang2))
- (setq sidel (distance pt1 pt4))
- (setq offset (abs(* sidel (sin angdiff))))
- (setq offsetdist (rtos offset 2 3))
- (setq fromdist (sqrt (- (* dist2 dist2)(* offset offset))))
- (setq fromdist2 (rtos fromdist 2 3))
- (setq pt5 (polar pt1 ang fromdist))
- (setq remainder (- (distance pt1 pt2)(distance pt1 pt5)))
- (setq remain (rtos remainder 2 3))
- (setq messg1 "The offset is ")
- (setq messg2 " distance is ")
- (setq messg3 " remainder is ")
- (setq displayans (strcat messg1 offsetdist messg2 fromdist2 messg3 remain))
- (princ "\n")
- (princ displayans)
- (setq pt1 nil)
- (setq pt2 nil)
- (setq pt3 nil)
- (setq pt4 nil)
- (Princ)
- ) ;end defun
- [/size]
- [size=2]
- ; offset perpendicular to line
- (defun c:p2pp ()
- (setq pt1 (getpoint "\nSelect point 1 "))
- (setq pt1 (list (car pt1) (cadr pt1) 0.0)) ;reset z to zero
- (setq pt2 (getpoint "\nSelect point 2 "))
- (setq pt2 (list (car pt2) (cadr pt2) 0.0)) ;reset z to zero
- (setq ang (angle pt1 pt2))
- (setq pt4 (getpoint "\nSelect offset point "))
- (setq pt4 (list (car pt4) (cadr pt4) 0.0)) ;reset z to zero
- (setq ang2 (angle pt1 pt4))
- (setq dist2 (distance pt1 pt4))
- (setq angdiff (- ang ang2))
- (setq sidel (distance pt1 pt4))
- (setq offset (abs(* sidel (sin angdiff))))
- (setq offsetdist (rtos offset 2 3))
- (setq fromdist (sqrt (- (* dist2 dist2)(* offset offset))))
- (setq fromdist2 (rtos fromdist 2 3))
- (setq pt5 (polar pt1 ang fromdist))
- (setq remainder (- (distance pt1 pt2)(distance pt1 pt5)))
- (setq remain (rtos remainder 2 3))
- (setq messg1 "The offset is ")
- (setq messg2 " distance is ")
- (setq messg3 " remainder is ")
- (setq displayans (strcat messg1 offsetdist messg2 fromdist2 messg3 remain))
- (princ "\n")
- (princ displayans)
- (setq pt1 nil)
- (setq pt2 nil)
- (setq pt3 nil)
- (setq pt4 nil)
- (Princ)
- ) ;end defun
- [/size]
|