guitarguy1685 Posted January 1, 2010 Posted January 1, 2010 I know I have alot of questions, hopefully i will be able to contribute soon as well. I wrote the following lisp (defun C:CN () (setq CRosmod (getvar "osmode")) (setq CRcecho (getvar "cmdecho")) ------------------------------------------------------------------------ (defun *error* (msg) ;;;error handler (if CRcecho (setvar "cmdecho" CRcecho)) ;;;resets echo,osnap if you cancel/quit (if CRosmod (setvar "osmode" CRosmod)) (princ msg) (princ)) ------------------------------------------------------------------------ (setq CBP (getpoint "\nSpecify base point: ")) (setq CL1 (getdist "\nSpecify width of channel: ")) [b][color=Red] (setq CL2 (getdist "\nSpecify size of legs: "))[/color][/b] (setq CW1 (getdist "\nSpecify thickness <0.125>: ")) (if (= CW1 nil) (setq CW1 0.125)) (setq P2 (list (+ (car CBP) CL1) (cadr CBP))) (setq P3 (list (car P2) (+ (cadr CBP) CL2))) (setq P4 (list (- (car P2) CW1) (cadr P3))) (setq P5 (list (car P4) (- (cadr P3) (- CL2 CW1)))) (setq P6 (list (- (car P4) (- CL1 (* CW1 2))) (cadr P5))) (setq P7 (list (car P6) (+ (cadr P5) (- CL2 CW1)))) (setq P8 (list (- (car P6) CW1) (cadr P7))) (setvar "osmode" 0) (setvar "cmdecho" 0) (command "_.pline" CBP P2 P3 P4 P5 P6 P7 P8 "close") (setvar "cmdecho" CRcecho) (setvar "osmode" CRosmod) (princ) ) This is a lisp to draw a U-Channel of any size and thickness. if you notice I highlighted a line in red. That line is used for the size of both legs of the channel. Sometimes one of the legs is longer than the other. So I'd like a 2nd line for the 2nd leg. However I would like that line to store the length of the first leg as a default size so you can just press enter if they are the same. So the line might read as follows "Specify size of first leg : " "Specify size of second leg : " i can just press enter I can't put the variable in the because it will just print the variable name. I hope this makes sense, any help is greatly appreciated. Quote
Lee Mac Posted January 1, 2010 Posted January 1, 2010 This may help you: http://www.cadtutor.net/forum/showthread.php?t=39634 Quote
Lee Mac Posted January 1, 2010 Posted January 1, 2010 This is how I would approach it: (setq CL2 (getdist "\nSpecify Size of Leg 1: ")) (setq CL3 (cond ((getdist (strcat "\nSpecify Size of Leg 2 <" (rtos CL2) "> : "))) (CL2))) Also, I would advise you to either use IF statements or the initget function in your code, to allow for null user input Quote
mdbdesign Posted January 2, 2010 Posted January 2, 2010 And little info: Specify Size of Leg 1(@ base point): will be handy. Edit: What about channel rotation? Quote
David Bethel Posted January 2, 2010 Posted January 2, 2010 Just to expand a little on what the others said and to clean up the code: [b][color=BLACK]([/color][/b]defun C:CN [b][color=FUCHSIA]([/color][/b]/ CRcecho CROsmod CRplwid CBP CL1 CL2 CW1 P2 P3 P4 P5 P6 P7 P8[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq CRosmod [b][color=NAVY]([/color][/b]getvar [color=#2f4f4f]"osmode"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq CRcecho [b][color=NAVY]([/color][/b]getvar [color=#2f4f4f]"cmdecho"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq CRplwid [b][color=NAVY]([/color][/b]getvar [color=#2f4f4f]"PLINEWID"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [color=#8b4513];------------------------------------------------------------------------[/color] [b][color=FUCHSIA]([/color][/b]setq *error* [b][color=NAVY]([/color][/b]lambda [b][color=MAROON]([/color][/b]msg[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setvar [color=#2f4f4f]"cmdecho"[/color] CRcecho[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]setvar [color=#2f4f4f]"osmode"[/color] CRosmod[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]princ msg[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]princ[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [color=#8b4513];------------------------------------------------------------------------[/color] [b][color=FUCHSIA]([/color][/b]initget 1[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq CBP [b][color=NAVY]([/color][/b]getpoint [color=#2f4f4f]"\nSpecify base point: "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]initget 7[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq CL1 [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nSpecify width of channel: "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]initget 7[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq CL2 [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nSpecify size of legs: "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]initget 6[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq CW1 [b][color=NAVY]([/color][/b]getdist [color=#2f4f4f]"\nSpecify thickness <0.125>: "[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]if [b][color=NAVY]([/color][/b]not CW1[b][color=NAVY])[/color][/b] [b][color=NAVY]([/color][/b]setq CW1 0.125[b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setq P2 [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]+ [b][color=GREEN]([/color][/b]car CBP[b][color=GREEN])[/color][/b] CL1[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cadr CBP[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] P3 [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]car P2[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]+ [b][color=GREEN]([/color][/b]cadr CBP[b][color=GREEN])[/color][/b] CL2[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] P4 [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]- [b][color=GREEN]([/color][/b]car P2[b][color=GREEN])[/color][/b] CW1[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cadr P3[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] P5 [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]car P4[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]- [b][color=GREEN]([/color][/b]cadr P3[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]- CL2 CW1[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] P6 [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]- [b][color=GREEN]([/color][/b]car P4[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]- CL1 [b][color=BLUE]([/color][/b]* CW1 2[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cadr P5[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] P7 [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]car P6[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]+ [b][color=GREEN]([/color][/b]cadr P5[b][color=GREEN])[/color][/b] [b][color=GREEN]([/color][/b]- CL2 CW1[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b] P8 [b][color=NAVY]([/color][/b]list [b][color=MAROON]([/color][/b]- [b][color=GREEN]([/color][/b]car P6[b][color=GREEN])[/color][/b] CW1[b][color=MAROON])[/color][/b] [b][color=MAROON]([/color][/b]cadr P7[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setvar [color=#2f4f4f]"osmode"[/color] 0[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setvar [color=#2f4f4f]"cmdecho"[/color] 0[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setvar [color=#2f4f4f]"PLINEWID"[/color] 0[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]command [color=#2f4f4f]"_.PLINE"[/color] CBP P2 P3 P4 P5 P6 P7 P8 [color=#2f4f4f]"_Close"[/color][b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setvar [color=#2f4f4f]"cmdecho"[/color] CRcecho[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setvar [color=#2f4f4f]"osmode"[/color] CRosmod[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]setvar [color=#2f4f4f]"PLINEWID"[/color] CRplwid[b][color=FUCHSIA])[/color][/b] [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b] -David Quote
guitarguy1685 Posted January 2, 2010 Author Posted January 2, 2010 1) Thanks for all the great help. I"m looking into that post by lee mac, thanks 2) I don't know what you mean by "Specify Size of Leg 1(@ base point):". And I was planing another line in the lisp to rotate the channel after it's drawn. I was thinking something along the lines of (command "_.rotate" "L" "" CBP pause) 3) lol yeah that code does look alot cleaner and easier to read. I guess I need to learn to to keep my lisp's neat. And thanks for that PLINEWID line. I didn't think of that but I can see how that can mess up my channel. I personally rarely use plines with thickness but to make this a lisp for everyone it's a great thought. Quote
Lee Mac Posted January 2, 2010 Posted January 2, 2010 I prefer to use "polar", so here is another way to approach things: [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] C:CN [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] SysVars OldVals CBP CL1 CL2 CL3 CW1 P2 P3 P4 P5 P6 P7 P8[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] SysVars [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#a52a2a]"CMDECHO"[/color][/b] [b][color=#a52a2a]"OSMODE"[/color][/b] [b][color=#a52a2a]"PLINEWID"[/color][/b][b][color=RED])[/color][/b] OldVals [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]getvar[/color][/b] SysVars[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099];------------------------------------------------------------------------[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] *error* [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]msg[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] SysVars OldVals[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] msg[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [i][color=#990099];------------------------------------------------------------------------[/color][/i] [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] CBP [b][color=RED]([/color][/b][b][color=BLUE]getpoint[/color][/b] [b][color=#a52a2a]"\nSpecify base point: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#009900]7[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] CL1 [b][color=RED]([/color][/b][b][color=BLUE]getdist[/color][/b] CBP [b][color=#a52a2a]"\nSpecify width of channel: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#009900]7[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] CL2 [b][color=RED]([/color][/b][b][color=BLUE]getdist[/color][/b] [b][color=#a52a2a]"\nSpecify size of Leg 1: "[/color][/b] CBP[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#009900]6[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] CL3 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]getdist[/color][/b] CBP [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#a52a2a]"\nSpecify Size of Leg 2 <"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]rtos[/color][/b] CL2[b][color=RED])[/color][/b] [b][color=#a52a2a]"> : "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]CL2[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#009900]6[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] CW1 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]getdist[/color][/b] [b][color=#a52a2a]"\nSpecify thickness <0.125>: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009999]0.125[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] P2 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] CBP [b][color=#009900]0[/color][/b] CL1[b][color=RED])[/color][/b] P3 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] P2 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]0.5[/color][/b] [b][color=BLUE]pi[/color][/b][b][color=RED])[/color][/b] CL3[b][color=RED])[/color][/b] p4 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] P3 [b][color=BLUE]pi[/color][/b] CW1[b][color=RED])[/color][/b] p5 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] p4 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]1.5[/color][/b] [b][color=BLUE]pi[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] CL3 CW1[b][color=RED])[/color][/b][b][color=RED])[/color][/b] p6 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] p5 [b][color=BLUE]pi[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] CL1 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]2.[/color][/b] CW1[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] p7 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] p6 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]0.5[/color][/b] [b][color=BLUE]pi[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] CL2 CW1[b][color=RED])[/color][/b][b][color=RED])[/color][/b] p8 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] p7 [b][color=BLUE]pi[/color][/b] CW1[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] SysVars [b][color=DARKRED]'[/color][/b][b][color=RED]([/color][/b][b][color=#009900]0[/color][/b] [b][color=#009900]0[/color][/b] [b][color=#009900]0[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] [b][color=#a52a2a]"_.PLINE"[/color][/b] CBP P2 P3 P4 P5 P6 P7 P8 [b][color=#a52a2a]"_Close"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=DARKRED]'[/color][/b][b][color=BLUE]setvar[/color][/b] SysVars OldVals[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]prin1[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] I have set the SysVars using a different method also. (Used some of your code David ) Lee Quote
Lee Mac Posted January 2, 2010 Posted January 2, 2010 2) I don't know what you mean by "Specify Size of Leg 1(@ base point):". GetDist (and GetPoint) can accept a point argument, in addition to the string. (see VLIDE help files). Example in above code. And I was planing another line in the lisp to rotate the channel after it's drawn. I was thinking something along the lines of (command "_.rotate" "L" "" CBP pause) I would use (entlast) to capture the polyline entity, or using entmakex: [b][color=RED]([/color][/b][b][color=BLUE]defun[/color][/b] C:CN [b][color=RED]([/color][/b][b][color=BLUE]/[/color][/b] CBP CL1 CL2 CL3 CW1 P2 P3 P4 P5 P6 P7 P8 POLY PTLST[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] *error* [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]msg[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b] msg[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]princ[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] CBP [b][color=RED]([/color][/b][b][color=BLUE]getpoint[/color][/b] [b][color=#a52a2a]"\nSpecify base point: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#009900]7[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] CL1 [b][color=RED]([/color][/b][b][color=BLUE]getdist[/color][/b] CBP [b][color=#a52a2a]"\nSpecify width of channel: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#009900]7[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] CL2 [b][color=RED]([/color][/b][b][color=BLUE]getdist[/color][/b] [b][color=#a52a2a]"\nSpecify size of Leg 1: "[/color][/b] CBP[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#009900]6[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] CL3 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]getdist[/color][/b] CBP [b][color=RED]([/color][/b][b][color=BLUE]strcat[/color][/b] [b][color=#a52a2a]"\nSpecify Size of Leg 2 <"[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]rtos[/color][/b] CL2[b][color=RED])[/color][/b] [b][color=#a52a2a]"> : "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b]CL2[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]initget[/color][/b] [b][color=#009900]6[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] CW1 [b][color=RED]([/color][/b][b][color=BLUE]cond[/color][/b] [b][color=RED]([/color][/b][b][color=RED]([/color][/b][b][color=BLUE]getdist[/color][/b] [b][color=#a52a2a]"\nSpecify thickness <0.125>: "[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=#009999]0.125[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] ptLst [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] CBP [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] P2 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] CBP [b][color=#009900]0[/color][/b] CL1[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] P3 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] P2 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]0.5[/color][/b] [b][color=BLUE]pi[/color][/b][b][color=RED])[/color][/b] CL3[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] p4 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] P3 [b][color=BLUE]pi[/color][/b] CW1[b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] p5 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] p4 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]1.5[/color][/b] [b][color=BLUE]pi[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] CL3 CW1[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] p6 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] p5 [b][color=BLUE]pi[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] CL1 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]2.[/color][/b] CW1[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] p7 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] p6 [b][color=RED]([/color][/b][b][color=BLUE]*[/color][/b] [b][color=#009999]0.5[/color][/b] [b][color=BLUE]pi[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]-[/color][/b] CL2 CW1[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] p8 [b][color=RED]([/color][/b][b][color=BLUE]polar[/color][/b] p7 [b][color=BLUE]pi[/color][/b] CW1[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]setq[/color][/b] poly [b][color=RED]([/color][/b][b][color=BLUE]entmakex[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]append[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]list[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]0[/color][/b] [b][color=#a52a2a]"LWPOLYLINE"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]100[/color][/b] [b][color=#a52a2a]"AcDbEntity"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]100[/color][/b] [b][color=#a52a2a]"AcDbPolyline"[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]90[/color][/b] [b][color=#009900]8[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]70[/color][/b] [b][color=#009900]1[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]mapcar[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]function[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]lambda[/color][/b] [b][color=RED]([/color][/b]x[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]cons[/color][/b] [b][color=#009900]10[/color][/b] x[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] ptLst[b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]command[/color][/b] [b][color=#a52a2a]"_.rotate"[/color][/b] poly [b][color=#a52a2a]""[/color][/b] CBP pause[b][color=RED])[/color][/b] [b][color=RED]([/color][/b][b][color=BLUE]prin1[/color][/b][b][color=RED])[/color][/b][b][color=RED])[/color][/b] Notice that you needn't change the Sys Vars such as OSMODE with entmakex, and you can add DXF group codes to change layer/width etc. 3) lol yeah that code does look alot cleaner and easier to read. I guess I need to learn to to keep my lisp's neat. For a quick format, you can click on the formatting button in the Visual LISP Editor Hope this all helps, and if you have any trouble understanding anything me or David has posted, don't hesitate to ask Lee Quote
mdbdesign Posted January 3, 2010 Posted January 3, 2010 2) I don't know what you mean by "Specify Size of Leg 1(@ base point): Just where will be located leg #1? Lets keep in mind someone will use your code and it be easy to know if leg #1 is going to be close to base point or on opposed side. Quote
guitarguy1685 Posted January 3, 2010 Author Posted January 3, 2010 thanx lee, a few questions 1) I noticed you used cond instead of if? what is the advantage of cond over if? I thought cond was if there were more than 2 expressions 2) I noticed you used (prin1) instead of (princ), what's the difference here? 3) I'm not familiar with using Polar coords, what's the advantage over Cartesian coords? Quote
guitarguy1685 Posted January 3, 2010 Author Posted January 3, 2010 i was reading on the afralisp site about if vs cond. From what i could understand cond should be used if you have more than 2 else statements and IF used for simple "if this" "do that" "else do that". My question is why every use IF if cond will do the trick. can you think of a situation where IF is superior to cond or the only option over cond? Quote
Lee Mac Posted January 3, 2010 Posted January 3, 2010 1) I noticed you used cond instead of if? what is the advantage of cond over if? I thought cond was if there were more than 2 expressions COND is just another way to doing the same thing - there are many times in programming where the same thing can be achieved using two different methods. 2) I noticed you used (prin1) instead of (princ), what's the difference here? Both can be used as a "clean exit", but to realise the difference between princ, prin1 and print, run this code: (defun c:test (/ *error* str f of) (defun *error* (msg) (and of (close of)) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **"))) (princ)) (setq str "Hello, my name is GuitarGuy") (if (setq f (getfiled "Select Output File" "" "txt" 1)) (progn (setq of (open f "w")) (write-line "Print returns: " of) (print str of) (write-line "\nPrin1 returns: " of) (prin1 str of) (write-line "\nPrinc returns: " of) (princ str of) (setq of (close of)))) (princ)) Notice the extra line that "print" will write. For more on these functions, look in the Visual LISP Editor help under: AutoLISP Developers' Guide > Using the AutoLISP Language > AutoLISP Basics > Basic Output Functions > Displaying Messages 3) I'm not familiar with using Polar coords, what's the advantage over Cartesian coords? Perhaps not an "advantage", but I find them much easier to manipulate. But then I suppose it depends in the situation. In this situation you are referencing the previous point, so polars seem an obvious choice, but as you have demonstrated, you can accomplish the same result by manipulating the individual cartesian components. Hope this helps, Lee Quote
guitarguy1685 Posted January 3, 2010 Author Posted January 3, 2010 it sure does help. this is what I have so far. I added a few sysvars to add unit/prec to the prompts. I added a prompt line to mimic what CHAMFER command displays. Also i'm not sure if this was a good idea, but I left out some variable from the localized list of variables. I figure if they are not localized they will be active throughout the drawing and I can recall them to display in my prompts. Those polar coords do look alot simpler and I'll have to learn to do that, but I left it out for now. Same w/ the entlast. I just don't understand them and I don't like to use code that I have no idea what it's doing . I have some homwork to do lol. I'll figure it out (defun C:CN (/ CRosmod CRcecho Crplwid CBP P2 P3 P4 P5 P6 P7 P8) (setq CRosmod (getvar "osmode")) (setq CRcecho (getvar "cmdecho")) (setq CRplwid (getvar "PLINEWID")) (setq CRuprec (getvar "LUPREC")) (setq CRLunit (getvar "LUNITS")) ;------------------------------------------------------------------------ (setq *error* (lambda (msg) (setvar "cmdecho" CRcecho) (setvar "osmode" CRosmod) (setvar "plinewid" CRplwid) (princ msg) (princ))) ;------------------------------------------------------------------------ (if (not CW) (setq CW 1.000)) ;;;sets defaults (if (not CL1) (setq Cl1 1.000)) ;;;if not already defined (if (not CL2) (setq CL2 1.000)) (if (not CT) (setq CT 0.125)) ;------------------------------------------------------------------------ (prompt (strcat "\nCurrent channel Width = " (rtos CW CRLunit CRuprec) ", Legs = " (rtos CL1 CRLunit CRuprec) ", Thickness = "(rtos CT CRLunit CRuprec))) (initget 1) (setq CBP (getpoint "\nSpecify base point: ")) (initget 6) (setq CW (cond ((getdist CBP (strcat "\nSpecify width of channel <" (rtos CW CRLunit CRuprec) ">: "))) (CW))) (initget 6) (setq CL1 (cond ((getdist (strcat "\nSpecify size of first leg <" (rtos CL1 CRLunit CRuprec) ">: "))) (CL1))) (initget 6) (setq CL2 (cond ((getdist (strcat "\nSpecify size of second leg <" (rtos CL1 CRLunit CRuprec) ">: "))) (CL1))) (initget 6) (setq CT (cond ((getdist (strcat "\nSpecify thickness <" (rtos CT CRLunit CRuprec) ">: "))) (CT))) (setq P2 (list (car CBP) (+ (cadr CBP) CL1)) P3 (list (+ (car CBP) CT) (cadr P2)) P4 (list (car P3)(- (cadr P2) (- CL1 CT))) P5 (list (+ (car P3)(- CW (* CT 2))) (cadr P4)) P6 (list (car P5)(+ (cadr P4) (- CL2 CT))) P7 (list (+ (car P5) CT)(cadr P6)) P8 (list (car P7) (- (cadr P6) CL2))) (setvar "osmode" 0) (setvar "cmdecho" 0) (setvar "PLINEWID" 0) (command "_.pline" CBP P2 P3 P4 P5 P6 P7 P8 "_Close") (command "_.rotate" "L" "" CBP) (setvar "cmdecho" CRcecho) (setvar "osmode" CRosmod) (setvar "PLINEWID" CRplwid) (princ) ) Quote
Lee Mac Posted January 3, 2010 Posted January 3, 2010 You're welcome mate, glad to help you understand. The polars are great once you get your head around them -, as for the entmake(x) - I would recommend reading up on this, as it is a ton quicker than any command call method, and provides much more control over layers/styles etc. Lee Quote
David Bethel Posted January 3, 2010 Posted January 3, 2010 In general, it is not a good idea to leave globals. If you do, you should give them a very unique name. ie guitar_CW_def CW could easily be a pgp shortcut or a program name or used in another program. etc One of the draw backs to using polar is using boolean equal testing. (equal '(-1 0 0) (polar '(0 0 0) pi 1)) Can return nil on many machines. Just the way they store real numbers where the plus and minus of 3 decimals won't do that. My $0.02 -David Quote
Lee Mac Posted January 3, 2010 Posted January 3, 2010 One of the draw backs to using polar is using boolean equal testing. (equal '(-1 0 0) (polar '(0 0 0) pi 1)) Can return nil on many machines. Just the way they store real numbers where the plus and minus of 3 decimals won't do that. My $0.02 -David Thanks David - I wasn't aware of that Quote
guitarguy1685 Posted January 3, 2010 Author Posted January 3, 2010 that's a really good point David. Quote
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.