Jump to content

3dpoly - distance- perp.....


flopo

Recommended Posts

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

Link to comment
Share on other sites

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]

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...