flopo Posted November 30, 2009 Share 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 Link to comment Share on other sites More sharing options...
BIGAL Posted December 1, 2009 Share 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 Link to comment Share on other sites More sharing options...
CarlB Posted December 1, 2009 Share 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 Link to comment Share on other sites More sharing options...
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.