tgibbo Posted March 26, 2015 Share Posted March 26, 2015 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 Quote Link to comment Share on other sites More sharing options...
David Bethel Posted March 26, 2015 Share Posted March 26, 2015 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 Quote Link to comment Share on other sites More sharing options...
tgibbo Posted March 30, 2015 Author Share Posted March 30, 2015 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 Quote Link to comment Share on other sites More sharing options...
David Bethel Posted March 30, 2015 Share Posted March 30, 2015 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 Quote Link to comment Share on other sites More sharing options...
David Bethel Posted March 30, 2015 Share Posted March 30, 2015 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 Quote Link to comment Share on other sites More sharing options...
tgibbo Posted April 1, 2015 Author Share Posted April 1, 2015 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 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.