AutoCad Lisp Routines
Moderator: Mike Everman
AutoCad Lisp Routines
For those Autocad users who live and die by their lisps. I've decided to add a few of my favorites. Some of these are band-aids to have Autocad to function more like Solidworks.
The first I named "V" for view, use a key to toggle between each while running.
(defun c:v ()
(command "-view" "_swiso" pause)
(command "-view" "_seiso" pause)
(command "-view" "_top" pause)
(command "-view" "_bottom" pause)
(command "-view" "_front" pause)
(command "-view" "_back" pause)
(command "-view" "_left" pause)
(command "-view" "_right" pause)
)
The first I named "V" for view, use a key to toggle between each while running.
(defun c:v ()
(command "-view" "_swiso" pause)
(command "-view" "_seiso" pause)
(command "-view" "_top" pause)
(command "-view" "_bottom" pause)
(command "-view" "_front" pause)
(command "-view" "_back" pause)
(command "-view" "_left" pause)
(command "-view" "_right" pause)
)
Last edited by PyroJoe on Fri Nov 02, 2007 3:03 pm, edited 2 times in total.
For the more advanced users, A routine that draws a cylinder around an existing line of your choice. It prompts for the Diameter. The .DCL file is included.
(defun c:CY ()
(setq subroutine1 0)
(setq rad1 nil)
(setq rtext 0)
(setq dcl_id (load_dialog "CY.dcl"))
(if (not (new_dialog "CY" dcl_id))
(exit)
)
(mode_tile "editbox1" 2)
(mode_tile "editbox1" 3)
(action_tile
"accept"
"(setq rad1(get_tile \"editbox1\"))(done_dialog)(setq subroutine1 1)"
)
; if ;;accept;; is picked sets rad1 = editbox1's STRING.
; then closes dialogue box
;then set subroutine flag
(action_tile
"cancel"
"(done_dialog)"
)
(start_dialog)
(unload_dialog dcl_id)
;subroutine
(if subroutine1
(progn
(setq rtext (strcat rad1))
(princ rtext)
(setq PLS1 (atof rtext))
(setq PLS2 (/ PLS1 2))
(command "UCS" "w")
;(command "SHADEMODE" "G")
(setq LN1 (entsel))
(setq numbers (entget (car LN1)))
(setq p1 (cdr (assoc 10 numbers)))
(setq p2 (cdr (assoc 11 numbers)))
(command "cylinder" p1 PLS2 "c" p2)
(command "UCS" "p")
)))
------------------Next is the .DCL file
CY : dialog
{
label = "SUPER CYLINDER";
: text {label = "CYLINDER BY DIAMETER";}
: edit_box {label = "DIAMETER:";
key = "editbox1";
fixed_width = true;
edit_width = 10;}
: button {key = "accept";
label = "OK";
is_default = true;
fixed_width = true;
alignment = centered;}
: button {key = "cancel";
label = "cancel";
is_default = false;
fixed_width = true;
alignment = centered;}
}
(defun c:CY ()
(setq subroutine1 0)
(setq rad1 nil)
(setq rtext 0)
(setq dcl_id (load_dialog "CY.dcl"))
(if (not (new_dialog "CY" dcl_id))
(exit)
)
(mode_tile "editbox1" 2)
(mode_tile "editbox1" 3)
(action_tile
"accept"
"(setq rad1(get_tile \"editbox1\"))(done_dialog)(setq subroutine1 1)"
)
; if ;;accept;; is picked sets rad1 = editbox1's STRING.
; then closes dialogue box
;then set subroutine flag
(action_tile
"cancel"
"(done_dialog)"
)
(start_dialog)
(unload_dialog dcl_id)
;subroutine
(if subroutine1
(progn
(setq rtext (strcat rad1))
(princ rtext)
(setq PLS1 (atof rtext))
(setq PLS2 (/ PLS1 2))
(command "UCS" "w")
;(command "SHADEMODE" "G")
(setq LN1 (entsel))
(setq numbers (entget (car LN1)))
(setq p1 (cdr (assoc 10 numbers)))
(setq p2 (cdr (assoc 11 numbers)))
(command "cylinder" p1 PLS2 "c" p2)
(command "UCS" "p")
)))
------------------Next is the .DCL file
CY : dialog
{
label = "SUPER CYLINDER";
: text {label = "CYLINDER BY DIAMETER";}
: edit_box {label = "DIAMETER:";
key = "editbox1";
fixed_width = true;
edit_width = 10;}
: button {key = "accept";
label = "OK";
is_default = true;
fixed_width = true;
alignment = centered;}
: button {key = "cancel";
label = "cancel";
is_default = false;
fixed_width = true;
alignment = centered;}
}
Here is my .PGP file, notice 3P for ROTATE3D and XR for EXTRUDE. With this PGP file I normally run without any toolbars. Commands reduced to one or two keystrokes. Hope these help.
3A, *3Darray
3F, *3Dface
3P, *3DORBIT
3Z, *3dzoom
3R, *ROTATE3D
3MR, *MIRROR3D
3MI, *MIRROR3D
A, *ALIGN
Aa, *Area
AAA, *Align
Ar, *Array
ASSO, *DIMREASSOCIATE
At, *Attedit
B, *break
BH, *BHATCH
Bt, *Btrim
Bx, *Bextend
bl, *block
C, *Copy
ce, *CE
CC, *COPYBASE
Cl, *ddcolor
ci, *circle
cd, *ddcolor
cg, *CHPROP
cp, *ddinsert
CU, *SUBTRACT
ct, *subtract
D, *Dist
DA, *dimreassociate
Dd, *Divide
Ddd, *Ddatte
Do, *Donut
Dv, *Dview
DL, *DIMLINEAR
Dp, *DP
Dx, *Dtext
E, *Erase
Ee, *Ddedit
Ex, *Extend
G, *GRIPON
GO, *GRIPOFF
X, *xplode
F, *Filter
Fl, *fillet
Ft, *filter
H, *Hide
HH, *bhatch
I, *Ddinsert
LA, *LAYER
LL, *Lengthen
LE, *QLEADER
L, *Line
Li, *List
Lt, *ddltype
M, *Move
MP, *MATCHPROP
Mi, *Mirror
Ml, *Mline
Mm, *Measure
Ms, *Mspace
MT, *MTEXT
N, *RENDER
O, *Offset
P, *3DPan
pc, *PASTECLIP
Pl, *Pline
Pp, *Pedit
PO, *Polygon
Ps, *Pspace
R, *Regen
Rd, *render
rn, *render
Re, *Regen
REC, *RECTANGLE
Rt, *Rotate
;;;;Rr, *Region
Ro, *rotate
S, *Stretch
Sc, *Scale
SZ, *scale
Ss, *Subtract
T, *Trim
Tl, *dTEXT
Te, *ddedit
Wb, *Wblock
Z, *Zoom
Xt, *extend
xr, *EXTRUDE
x, *explode
3A, *3Darray
3F, *3Dface
3P, *3DORBIT
3Z, *3dzoom
3R, *ROTATE3D
3MR, *MIRROR3D
3MI, *MIRROR3D
A, *ALIGN
Aa, *Area
AAA, *Align
Ar, *Array
ASSO, *DIMREASSOCIATE
At, *Attedit
B, *break
BH, *BHATCH
Bt, *Btrim
Bx, *Bextend
bl, *block
C, *Copy
ce, *CE
CC, *COPYBASE
Cl, *ddcolor
ci, *circle
cd, *ddcolor
cg, *CHPROP
cp, *ddinsert
CU, *SUBTRACT
ct, *subtract
D, *Dist
DA, *dimreassociate
Dd, *Divide
Ddd, *Ddatte
Do, *Donut
Dv, *Dview
DL, *DIMLINEAR
Dp, *DP
Dx, *Dtext
E, *Erase
Ee, *Ddedit
Ex, *Extend
G, *GRIPON
GO, *GRIPOFF
X, *xplode
F, *Filter
Fl, *fillet
Ft, *filter
H, *Hide
HH, *bhatch
I, *Ddinsert
LA, *LAYER
LL, *Lengthen
LE, *QLEADER
L, *Line
Li, *List
Lt, *ddltype
M, *Move
MP, *MATCHPROP
Mi, *Mirror
Ml, *Mline
Mm, *Measure
Ms, *Mspace
MT, *MTEXT
N, *RENDER
O, *Offset
P, *3DPan
pc, *PASTECLIP
Pl, *Pline
Pp, *Pedit
PO, *Polygon
Ps, *Pspace
R, *Regen
Rd, *render
rn, *render
Re, *Regen
REC, *RECTANGLE
Rt, *Rotate
;;;;Rr, *Region
Ro, *rotate
S, *Stretch
Sc, *Scale
SZ, *scale
Ss, *Subtract
T, *Trim
Tl, *dTEXT
Te, *ddedit
Wb, *Wblock
Z, *Zoom
Xt, *extend
xr, *EXTRUDE
x, *explode
Re: AutoCad Lisp Routines
AutoCAD Release 2010 has a parametrics menu!
Solid Works must be creating a healthy dent in their income. ha
Solid Works must be creating a healthy dent in their income. ha
Re: AutoCad Lisp Routines
a little bit of fun
- Attachments
-
- mpg1.mpg
- (613.34 KiB) Downloaded 528 times
Re: AutoCad Lisp Routines
A lisp program I use that draws a circle to find arclength.
Here is the AR1.LSP
(defun c:ar1 ()
;;;;;;;;;;;;;;;;;;;;;;;;gets radius rad1 of selected circle
(setq ci1 (entsel))
(setq numbers (entget (car ci1)))
(setq rad1 (cdr (assoc 40 numbers)))
(setq subroutine1 0)
(setq arcl1 nil)
(setq dcl_id (load_dialog "ar1.dcl"))
(if (not (new_dialog "ar1" dcl_id))
(exit)
)
(mode_tile "editbox1" 2)
(mode_tile "editbox1" 3)
(action_tile
"accept"
"(setq arcl1(get_tile \"editbox1\"))
(done_dialog)(setq subroutine1 1))"
)
;;;;;;;;; if ;;accept;; is picked sets arcleng = editbox1's STRING.
;;;;;;;;;; then closes dialogue box
;;;;;;;;;;;then set subroutine flag
(action_tile
"cancel"
"(done_dialog)"
)
(start_dialog)
(unload_dialog dcl_id)
;;;;;;;;;;;;;;;;subroutine
(if subroutine1
(progn
(setq arcle (atof arcl1))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;starts math to find chord
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;pi divided by 180
(setq piebyonet (/ pi 180))
;;;;;;;;;;;;;;;;;;;;;;;;;;; take resultant piebyonet times rad1
(setq pretheta (* piebyonet rad1))
;;;;;;;;;;;;;;;;;;;;;;;;;;; invert
(setq prethet (/ 1 pretheta))
;;;;;;;;;;;;;;;;;;;;;;;;;;; take resultant prethet times arclength equals angle
(setq theta (* arcle prethet))
;;;;;;;;;;;;;;;;;;;;theta found
;;;;;;;;;;;;;;;;;;;now math for chord length
;;;;;;;;;;;;;;;;;;;;;;;;;;;;two times radius
(setq radsquare (* 2 rad1))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;one half theta
(setq halftheta (/ theta 2))
;;;;;;;;;;;;;;convert half theta to radians to use sin function
(setq haftheta1 (/ halftheta 180))
(setq hafthtaradias (* haftheta1 pi))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;sin of half theta
(setq prechord1 (sin hafthtaradias))
;;;;;;;;;;;;;;;;;;;;;;;; 2 radius times sin half theta is chordlength
(setq chord1 (* radsquare prechord1))
;;;;;;;;;;;;;;;;;;;;gets center point for scribed chord circle
(command "circle" pause chord1)
)))
Here is the AR1.LSP
(defun c:ar1 ()
;;;;;;;;;;;;;;;;;;;;;;;;gets radius rad1 of selected circle
(setq ci1 (entsel))
(setq numbers (entget (car ci1)))
(setq rad1 (cdr (assoc 40 numbers)))
(setq subroutine1 0)
(setq arcl1 nil)
(setq dcl_id (load_dialog "ar1.dcl"))
(if (not (new_dialog "ar1" dcl_id))
(exit)
)
(mode_tile "editbox1" 2)
(mode_tile "editbox1" 3)
(action_tile
"accept"
"(setq arcl1(get_tile \"editbox1\"))
(done_dialog)(setq subroutine1 1))"
)
;;;;;;;;; if ;;accept;; is picked sets arcleng = editbox1's STRING.
;;;;;;;;;; then closes dialogue box
;;;;;;;;;;;then set subroutine flag
(action_tile
"cancel"
"(done_dialog)"
)
(start_dialog)
(unload_dialog dcl_id)
;;;;;;;;;;;;;;;;subroutine
(if subroutine1
(progn
(setq arcle (atof arcl1))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;starts math to find chord
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;pi divided by 180
(setq piebyonet (/ pi 180))
;;;;;;;;;;;;;;;;;;;;;;;;;;; take resultant piebyonet times rad1
(setq pretheta (* piebyonet rad1))
;;;;;;;;;;;;;;;;;;;;;;;;;;; invert
(setq prethet (/ 1 pretheta))
;;;;;;;;;;;;;;;;;;;;;;;;;;; take resultant prethet times arclength equals angle
(setq theta (* arcle prethet))
;;;;;;;;;;;;;;;;;;;;theta found
;;;;;;;;;;;;;;;;;;;now math for chord length
;;;;;;;;;;;;;;;;;;;;;;;;;;;;two times radius
(setq radsquare (* 2 rad1))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;one half theta
(setq halftheta (/ theta 2))
;;;;;;;;;;;;;;convert half theta to radians to use sin function
(setq haftheta1 (/ halftheta 180))
(setq hafthtaradias (* haftheta1 pi))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;sin of half theta
(setq prechord1 (sin hafthtaradias))
;;;;;;;;;;;;;;;;;;;;;;;; 2 radius times sin half theta is chordlength
(setq chord1 (* radsquare prechord1))
;;;;;;;;;;;;;;;;;;;;gets center point for scribed chord circle
(command "circle" pause chord1)
)))
Re: AutoCad Lisp Routines
and the required AR1.DCL
ar1 : dialog
{
label = "FAST ARCLENGTH";
: text {label = "AUTO ARCLENGTH";}
: edit_box {label = "ARCLENGTH:";
key = "editbox1";
fixed_width = true;
edit_width = 10;}
: button {key = "accept";
label = "OK";
is_default = true;
fixed_width = true;
alignment = centered;}
: button {key = "cancel";
label = "cancel";
is_default = false;
fixed_width = true;
alignment = centered;}
}
ar1 : dialog
{
label = "FAST ARCLENGTH";
: text {label = "AUTO ARCLENGTH";}
: edit_box {label = "ARCLENGTH:";
key = "editbox1";
fixed_width = true;
edit_width = 10;}
: button {key = "accept";
label = "OK";
is_default = true;
fixed_width = true;
alignment = centered;}
: button {key = "cancel";
label = "cancel";
is_default = false;
fixed_width = true;
alignment = centered;}
}
Re: AutoCad Lisp Routines
What use is arclength?
If I create a cone section, and draw circles at both ends, then list the circles, it will show the circumference.
Then if I draw arc#1 and arc#2, then all I need is to create a arclength equal to the circumference to create a template.
to use AR1.LSP I input the diameter value then pick point on the arc that touches the cone section. This creates the circle shown in red intersects arc#1 creating the correct arclength.
If I create a cone section, and draw circles at both ends, then list the circles, it will show the circumference.
Then if I draw arc#1 and arc#2, then all I need is to create a arclength equal to the circumference to create a template.
to use AR1.LSP I input the diameter value then pick point on the arc that touches the cone section. This creates the circle shown in red intersects arc#1 creating the correct arclength.
Last edited by PyroJoe on Fri Sep 10, 2010 5:06 pm, edited 1 time in total.
-
- Posts: 5007
- Joined: Fri Oct 31, 2003 7:25 am
- Antipspambot question: 0
- Location: santa barbara, CA
- Contact:
Re: AutoCad Lisp Routines
Nice. I used to love me some autolisp programming.
Mike Often wrong, never unsure.
__________________________
__________________________
-
- Posts: 887
- Joined: Wed Dec 24, 2003 12:12 pm
- Antipspambot question: 0
- Location: France
- Contact:
Re: AutoCad Lisp Routines
Lisp isn't obfuscated any more than any other language. It's just different (and has a lot of brackets). Once you get your head around it, though, it's the embodiment of beauty.PyroJoe wrote:http://en.wikipedia.org/wiki/Obfuscated_code
Other languages are becoming more lisp-ish as time goes on (Ruby *is* a lisp with different syntax, to all intents and purposes, and C/C++/ObjC have grown closures).
http://c2.com/cgi/wiki?GreenspunsTenthRuleOfProgramming
Any sufficiently complicated C or Fortran program contains an ad-hoc, informally-specified, bug-ridden, slow implementation of half of CommonLisp.