flopo Posted November 30, 2009 Posted November 30, 2009 Hello everybody, after drawing perpendicular lines from points to a 3dpoly, I have to measure the distance between consecutive intersection 3dpoly - perpendicular line. A lisp to do this will help me a lot... See the attachment - drawing. Thanks! 3dpoly-dist.dwg Quote
BIGAL Posted December 1, 2009 Posted December 1, 2009 Give these a try works for lines not plines [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] Quote
CarlB Posted December 1, 2009 Posted December 1, 2009 Hey flopo, check your other thread about this topic-CAB posted a routine that exactly meets your request as near as I can tell... **edit, just curious, why do refer to it as a 3dpoly when it's an LWPOLYLINE at Z=0? Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.