Jump to content

End of Line points


Abrasive

Recommended Posts

What I would like to do is start a line then, enter the second set of points but based on the location of start point?

What I need is to enter and draw the hypotenuse, by entering the hypotenuse length and the rise of the triangle.

The lines could be any directions but the "rise" will always be smaller than the base.

If possible the routine would find the direction of the offset so I don't have to enter the sign (+ or -)

The end result will be a closed shape.

Thanks In advance

 

Link to comment
Share on other sites

image.thumb.png.f66597008e3ca2bf1656e8d7e3cb3876.png

 

I'm still not good at explaining.

I need to draw Line 2 from entering 2 and 3 based from the start point

 

Edited by Tom Matson
Link to comment
Share on other sites

A bit basic but it works OK, you might want to look at the loop and options to continue with the next line segment or end the lines there, a check that the supplied distances are valid (triangles... can it be made up), and also a check if hypotenuse distance added is +/- to draw the line left or right.. nut this is the basics - will leave it up to you to change or ask for more details and help

 

 

(defun c:MakeLines ( / Pt1 Pt2 Hipo VD HD ss)
  (setq Pt1 (getpoint "\nSelect Start Point"))
  (setq Hipo (getreal "Enter hypotenuse Distance: "))
  (setq VD (getreal "Enter Vertical Distance: "))
  (setq HD (sqrt ( - (* Hipo Hipo) (* vd vd))))
  (setq Pt2 (mapcar '+ (list HD VD 0) Pt1 ))
  (command "Line" Pt1 Pt2 "")
  (setq Pt1 Pt2)
  (setq ss (ssadd (entlast)))

  (setq Loop "Yes")
  (while (= Loop "Yes")
    (setq Hipo (getreal "Enter hypotenuse Distance: "))
    (setq VD (getreal "Enter Vertical Distance: "))
    (setq HD (sqrt ( - (* Hipo Hipo) (* vd vd))))
    (setq Pt2 (mapcar '+ (list HD VD 0) Pt1 ))
    (command "Line" Pt1 Pt2 "")
    (setq ss (ssadd (entlast) ss ))
    (setq Pt1 Pt2)
    (initget "Y N")
    (if (= (getkword "Continue [Y/N]: ") "N")(setq Loop "No"))
  )
  (command "_.pedit" "_m" ss "" "Y" "_j" "" "")
)
  • Like 1
Link to comment
Share on other sites

  • 1 month later...

This works Nice!

Is there a way to capture what direction or angle the mouse is dragged based on start point?

Then draw the hypotenuse IN THAT "quadrant".

Based on Direction angle Check for a threshold value say:

"greater than zero but less than 45" = quadrant 1. =  +Pt1   +Pt2 

"greater than 45 but less than 90" = quadrant 2. =    + Pt2   +Pt1 (points both "+" just switched)

"greater than 90 but less than 135" = quadrant 3. =   +Pt2    -Pt1 (Pt1 sign changed)

"greater than 135 but less than 180" = quadrant 4. =  -Pt1   +Pt2 ...

etc etc

Link to comment
Share on other sites

Something like this? I don't know about the one between 45-90 because your OP mentioned "rise", so I'm not sure what you mean.

 

(defun c:foo ( / ep gr grp grv hor hyp msg off pt ris)
    (and
        (setq ang (* 0.5 pi) msg "\nSpecify point to place <exit>: " pt (getpoint "\nSpecify starting point <exit>: "))
        (while
            (and
                (setq hyp (getdist pt "\nSpecify hypothenuse length <exit>: "))
                (progn 
                    (while
                        (and
                            (setq ris (getdist pt "\nSpecify rise length <exit>: "))
                            (if (>= ris hyp) (princ "\nRise cannot exceed hypothenuse."))
                        )
                    )
                    ris
                )
                (progn
                    (setq 
                        hor (sqrt (- (expt hyp 2) (expt ris 2)))
                        off (mapcar 'abs (list hor ris 0.0))
                    )
                    (princ msg)
                    (while
                        (progn
                            (setq
                                gr (grread t 15 0)
                                grp (cadr gr)
                                grv (car gr)
                            )
                            (redraw)
                            (cond
                                (   (member grv '(5 3))
                                    (setq ep
                                        (mapcar '+ pt 
                                            (mapcar '* off 
                                                (list
                                                    (if (> (car grp) (car pt)) 1 -1)
                                                    (if (> (cadr grp) (cadr pt)) 1 -1)
                                                    1
                                                )
                                            )
                                        )
                                    )
                                    (grvecs (list -7 pt ep))
                                    (cond
                                        (   (= grv 5))
                                        (   (progn
                                                (entmake
                                                    (list
                                                        '(0 . "LINE")
                                                        (cons 10 (trans pt 1 0))
                                                        (cons 11 (trans ep 1 0))
                                                    )
                                                )
                                                (setq pt ep) nil
                                            )
                                        )
                                    )
                                )
                                (   (= grv 2)
                                    (cond
                                        (   (member grp '(13 32)) (setq hyp nil))
                                        (   t   )
                                    )
                                )
                                (   (= grv 25)
                                    (setq hyp nil)
                                )
                                (   t   )
                            )
                        )
                    )
                    (redraw)
                    hyp
                )
            )
        )
    )
    (princ)
)

 

Link to comment
Share on other sites

And this?

(defun where_cursor (alpha / )
  (cond
    ((not (eq (rem alpha (/ (* 3 pi) 2)) alpha))
      (setq dx '+ dy '-)
    )
    ((not (eq (rem alpha pi) alpha))
      (setq dx '- dy '-)
    )
    ((not (eq (rem alpha (/ pi 2)) alpha))
      (setq dx '- dy '+)
    )
    (T
      (setq dx '+ dy '+)
    )
  )
)
(defun c:My_pline ( / h_d v_d tmp dx dy)
  (initget 9)
  (setvar "LASTPOINT" (getpoint "\nStart point?: "))
  (command "_.pline" (getvar "LASTPOINT")
    (while (not (zerop (getvar "cmdactive")))
      (initget 6)
      (setq h_d (getdist (getvar "LASTPOINT") "\nEnter hypotenuse Distance/Enter for quit: "))
      (cond
        (h_d
          (initget 7)
          (setq v_d (getdist (getvar "LASTPOINT") "\nEnter vertical Distance: "))
          (initget 33)
          (getorient (getvar "LASTPOINT") "\nChoose quadrant with orientation of rubber-band line: ")
          (setq tmp (grread T 5 0))
          (if (eq (car tmp) 5)
            (where_cursor (angle (getvar "LASTPOINT") (cadr tmp)))
            (where_cursor 0.0)
          )
          (command "_none" (list ((eval dx) (car (getvar "LASTPOINT")) h_d) ((eval dy) (cadr (getvar "LASTPOINT")) v_d) (caddr (getvar "LASTPOINT"))))
        )
        (T (command ""))
      )
    )
  )
  (prin1)
)

 

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...