Jump to content

Extending lines


tgibbo

Recommended Posts

Can somebody help with this one? I am new to lisp and have just written this.

 

(defun c:sqlines ()
 (setq oldsnap (getvar "osmode"))
 (setvar "osmode" 2)
;; Pick the 4 points around the square shape;;
 (while
 (setq p1 (getpoint "\nPick Midpoint Top "))
 (setq p2 (getpoint "\nPick Midpoint Right Side "))
 (setq p3 (getpoint "\nPick Midpoint Bottom "))
 (setq p4 (getpoint "\nPick Midpoint Left Side "))
;  (princ)
;; Draw 2 Lines within the rectangle;;
(command "line" p1 p3 ""
    "line" p2 p4 ""
    ))
 (setvar "osmode" oldsnap)
(princ)
 )

 

It works quite well. You need to draw a square say 100mm x 100mm and run the routine. What I want to do is have the routine extend the lines at the 4 midpoints outside the square by 10mm. so the lines are 120mm long

Link to comment
Share on other sites

To extend the lines, look into the (polar) function

 

(setq p1e (polar p1 (angle p3 p1) 10))
(setq p3e (polar p3 (angle p1 p3) 10))

 

-David

Link to comment
Share on other sites

Thanks David I used the polar and got it work good. Are you able get an error trap to work as if I press ESC at the end some of the original settings don't revert

(defun c:ttcenterline ()
;;Save old settings;;
 (setq oldsnap (getvar "osmode"))
 (setq oldlayer (getvar "clayer"))
 (setq oldcolor (getvar "cecolor"))
 (setq oldltype (getvar "celtype"))
;;Make new settings;;
 (setvar "osmode" 18)
 (setvar "clayer" "Lines")
 (setvar "cecolor" "8")
 (setvar "celtype" "CENTERTOZA")
;;Get the setout points;;
 (while
 (setq p1 (getpoint "\nPick Midpoint Top "))
 (setq p2 (getpoint "\nPick Midpoint Bottom "))
 (setq p3 (getpoint "\nPick Midpoint Left Side "))
 (setq p4 (getpoint "\nPick Midpoint Right Side ")) 
;;Make new points outside the square by 2mm
 (setq p1e (polar p1 (dtr 90.0) 2))
 (setq p2e (polar p2 (dtr 270.0) 2))
 (setq p3e (polar p3 (dtr 180.0) 2))
 (setq p4e (polar p4 (dtr 0.0) 2))
;;Draw the lines from the extended points
 (command "line" p1e p2e ""
      "line" p4e p3e "")
 (princ)
 )
;;Reinstate old settings;;
 (setvar "osmode" oldsnap)
 (setvar "clayer" oldlayer)
 (setvar "cecolor" oldcolor)
 (setvar "celtype" oldltype)
 (princ)
;end routine
 )

 

Regards

 

Tony

Link to comment
Share on other sites

A robust routine should include UNDO control / store modes / error trapping / reset modes / as well some input ( initget ) restrictions :

 

[color=#8b4513];[/color]
[color=#8b4513];    Cle.Lsp                                    Mar 30, 2015[/color]
[color=#8b4513];    An Examle Of A Robust Center Line Extension Routine[/color]
[color=#8b4513];    !!! Linetype CENTERTOZA MUST EXIST !!![/color]
[color=#8b4513];++++++++++++ Set Modes & Error[/color]
[b][color=BLACK]([/color][/b]defun cle_smd [b][color=FUCHSIA]([/color][/b][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]SetUndo[b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]setq olderr *error*
     *error* [b][color=NAVY]([/color][/b]lambda [b][color=MAROON]([/color][/b]msg[b][color=MAROON])[/color][/b]
               [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]> [b][color=BLUE]([/color][/b]getvar [color=#2f4f4f]"CMDACTIVE"[/color][b][color=BLUE])[/color][/b] 0[b][color=GREEN])[/color][/b]
                      [b][color=GREEN]([/color][/b]command[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
               [b][color=MAROON]([/color][/b]and [b][color=GREEN]([/color][/b]/= msg [color=#2f4f4f]"quit / exit abort"[/color][b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]princ [b][color=BLUE]([/color][/b]strcat [color=#2f4f4f]"\nError: *** "[/color] msg [color=#2f4f4f]" *** "[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
               [b][color=MAROON]([/color][/b]and [b][color=GREEN]([/color][/b]= [b][color=BLUE]([/color][/b]logand [b][color=RED]([/color][/b]getvar [color=#2f4f4f]"UNDOCTL"[/color][b][color=RED])[/color][/b] 8[b][color=BLUE])[/color][/b] 8[b][color=GREEN])[/color][/b]
                    [b][color=GREEN]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_END"[/color] [color=#2f4f4f]"_.U"[/color][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
               [b][color=MAROON]([/color][/b]cle_rmd[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
      cle_var '[b][color=NAVY]([/color][/b][b][color=MAROON]([/color][/b][color=#2f4f4f]"BLIPMODE"[/color]  . 1[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"SORTENTS"[/color]  . 119[b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"SNAPMODE"[/color]  . 1[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"OSMODE"[/color]    . 18[b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"ELEVATION"[/color] . 0[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"THICKNESS"[/color] . 0[b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"UCSICON"[/color]   . 1[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"COORDS"[/color]    . 2[b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"ORTHOMODE"[/color] . 0[b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"CELTSCALE"[/color] . 1[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b][color=#2f4f4f]"CECOLOR"[/color]   . [color=#2f4f4f]"8"[/color][b][color=MAROON])[/color][/b]
                [b][color=MAROON]([/color][/b][color=#2f4f4f]"CELTYPE"[/color]   . [color=#2f4f4f]"CENTERTOZA"[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]foreach v cle_var
  [b][color=NAVY]([/color][/b]and [b][color=MAROON]([/color][/b]getvar [b][color=GREEN]([/color][/b]car v[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]setq cle_rst [b][color=GREEN]([/color][/b]cons [b][color=BLUE]([/color][/b]cons [b][color=RED]([/color][/b]car v[b][color=RED])[/color][/b] [b][color=RED]([/color][/b]getvar [b][color=PURPLE]([/color][/b]car v[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b] cle_rst[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
       [b][color=MAROON]([/color][/b]setvar [b][color=GREEN]([/color][/b]car v[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]cdr v[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]princ[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

[color=#8b4513];++++++++++++ Return Modes & Error[/color]
[b][color=BLACK]([/color][/b]defun cle_rmd [b][color=FUCHSIA]([/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]setq *error* olderr[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]foreach v cle_rst [b][color=NAVY]([/color][/b]setvar [b][color=MAROON]([/color][/b]car v[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cdr v[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_END"[/color][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

[color=#8b4513];++++++++++++ Set And Start An Undo Group[/color]
[b][color=BLACK]([/color][/b]defun SetUndo [b][color=FUCHSIA]([/color][/b][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]zerop [b][color=MAROON]([/color][/b]getvar [color=#2f4f4f]"UNDOCTL"[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_ALL"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]= [b][color=MAROON]([/color][/b]logand [b][color=GREEN]([/color][/b]getvar [color=#2f4f4f]"UNDOCTL"[/color][b][color=GREEN])[/color][/b] 2[b][color=MAROON])[/color][/b] 2[b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_CONTROL"[/color] [color=#2f4f4f]"_ALL"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]= [b][color=MAROON]([/color][/b]logand [b][color=GREEN]([/color][/b]getvar [color=#2f4f4f]"UNDOCTL"[/color][b][color=GREEN])[/color][/b] 8[b][color=MAROON])[/color][/b] 8[b][color=NAVY])[/color][/b]
     [b][color=NAVY]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_END"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
[b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.UNDO"[/color] [color=#2f4f4f]"_GROUP"[/color][b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

[color=#8b4513];************ Main Program[/color]
[b][color=BLACK]([/color][/b]defun c:cle [b][color=FUCHSIA]([/color][/b]/ olderr cle_var cle_rst el p1 p2 p3 p4[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]cle_smd[b][color=FUCHSIA])[/color][/b]

[color=#8b4513];;; Extension Length[/color]
 [b][color=FUCHSIA]([/color][/b]initget 6[b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]setq el [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nLine Extension Length <10>:   "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
 [b][color=FUCHSIA]([/color][/b]or el [b][color=NAVY]([/color][/b]setq el 10[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]

[color=#8b4513];;;Pick Points[/color]
 [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]setq p1 [b][color=MAROON]([/color][/b]getpoint [color=#2f4f4f]"\nPick Midpoint Top:   "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]initget 1[b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]setq p2 [b][color=MAROON]([/color][/b]getpoint p1 [color=#2f4f4f]"\nPick Midpoint Right Side:   "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]initget 1[b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]setq p3 [b][color=MAROON]([/color][/b]getpoint p2 [color=#2f4f4f]"\nPick Midpoint Bottom:   "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]initget 1[b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]setq p4 [b][color=MAROON]([/color][/b]getpoint p3 [color=#2f4f4f]"\nPick Midpoint Left Side:   "[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]

[color=#8b4513];;;Construct LINEs[/color]
        [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"LINE"[/color][b][color=GREEN])[/color][/b]
                       [b][color=GREEN]([/color][/b]cons 8 [color=#2f4f4f]"LINES"[/color][b][color=GREEN])[/color][/b]
                       [b][color=GREEN]([/color][/b]cons 10 [b][color=BLUE]([/color][/b]polar p1 [b][color=RED]([/color][/b]angle p3 p1[b][color=RED])[/color][/b] el[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                       [b][color=GREEN]([/color][/b]cons 11 [b][color=BLUE]([/color][/b]polar p3 [b][color=RED]([/color][/b]angle p1 p3[b][color=RED])[/color][/b] el[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]entmake [b][color=MAROON]([/color][/b]list [b][color=GREEN]([/color][/b]cons 0 [color=#2f4f4f]"LINE"[/color][b][color=GREEN])[/color][/b]
                       [b][color=GREEN]([/color][/b]cons 8 [color=#2f4f4f]"LINES"[/color][b][color=GREEN])[/color][/b]
                       [b][color=GREEN]([/color][/b]cons 10 [b][color=BLUE]([/color][/b]polar p2 [b][color=RED]([/color][/b]angle p4 p2[b][color=RED])[/color][/b] el[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
                       [b][color=GREEN]([/color][/b]cons 11 [b][color=BLUE]([/color][/b]polar p4 [b][color=RED]([/color][/b]angle p2 p4[b][color=RED])[/color][/b] el[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
        [b][color=NAVY]([/color][/b]redraw[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]

 [b][color=FUCHSIA]([/color][/b]cle_rmd[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 

-David

Link to comment
Share on other sites

While I'm not usually a fan of ( entsel ), that is probably a better choice than ( getpoint ) for this application. You can error trap it easier. -David

Link to comment
Share on other sites

Thanks David

 

I am a beginner with lisp. You have overwhelmed me with all of that code.I think I need to learn more on error trapping through some simpler explanations.

Thanks all the same

 

Regards

 

Tony

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