You are on page 1of 52

Mastering AutoLISP in 80

Minutes
Instructor:
Lynn Allen
Course Summary:
AutoLISP has been around for a long time and has always separated the AutoCAD
green thumbs from the gurus. This course begins by debunking some popular rumors
and explores the amount of AutoLISP code used in CAD-dependent industries today.
AutoLISP is more powerful, its free and it provides users with the ability to create new
AutoCAD commands in minutes. This class helps seasoned AutoCAD users enter the
world of customization and programming using AutoCAD's native graphical language.
The class is designed for intermediate-level AutoCAD users who have never
programmed in AutoLISP before.

Objectives
To lay a firm foundation of the basics of
Visual Lisp.
Prepare you to write your own Visual Lisp
routines
Start you down the path to official
AutoCAD Gurudom ( or Nerdom)
Teach you some quick and dirty basics of
Visual Lisp (dont look too close!).
Discover new ways to torture your
coworkers!

Hold on - we have a lot of information to


cover in 80 minutes!

First and Foremost!


Dont let Visual Lisp intimidate
you!

What does LISP stand for?


LISt Processor
(not Lost In Stupid
Parentheses!)

The Basics

Lists
Functions
Arguments
Golden Rules of AutoLISP

What is a LIST?
Anything inside of
parentheses
Examples of LISTS:
(a b c)
(setq x 1)
(princ)

What is a FUNCTION?
(or subr)
The ACTION you want Visual Lisp to do!

In Visual Lisp the function


ALWAYS go first!!!
Visual Lisp uses Prefix notation
Example: (+ 1 2)
(- 5 3)
(inters A B C D)
(setq x 3)

Visual Lisp as a Calculator


INFIX Notation
(1 + 1)
(3 * 4)
(6 / 2)
PREFIX Notation
(+ 1 1)
(* 3 4)
(/ 6 2)

Arguments
Arguments are the values you pass to a
function
(+ 5 6)
+ is the function
5 and 6 are the arguments
(setq x Autodesk)
Setq is the function
X and Autodesk are the
arguments

The Golden Rules of Visual


Lisp

For every open paren, you must have


a closed paren
Example: (setq x (+ a b))
For every open double quote, you
must have a closed double quote.
Example: (prompt How are you?)

The Key to unlocking complicated


LISP routines:
Visual Lisp works from the Inside Out
(+ 5 (* 4 3))
is equal to
(4 * 3) + 5
(- (+ 5 2) (* 6 (- 7 6)))
is equal to
(5 + 2) - (6 * (7 - 6))
7 - (6 * 1)

Quiz Time!

(* 4 (/ (+ 6 3) 3))
12
(+ (* (- 5 2) (/ 15 3)) 6)
21
(/ (* (- 11 9) (+ 25 5)) (* 3 2))
10

Some popular Data Types:

Real Numbers
1.5
Integers
5
Strings
LINE
Lists
(8 . DIM)
Subrs (or functions) SETQ

Real Numbers and Integers


Real Numbers have decimal points
Example:
1.3
5.0
Integers do not!
11

Example: 25

Real Numbers must have a leading zero.


.5 is incorrect
0.5 is correct

Dotted pair: (0 . CIRCLE)


error: misplaced dot on input

(/ 7 2)
=> 3
(/ 7 2.0)
=> 3.5
(+ 1 2 3 4 5 6. ) => 21.0
(+ 1 .5)
=> invalid dotted pair
(+ 1 0.5)
=> 1.5

One real number changes the entire pot!

Basic Arithmetic Functions


(for you math-heads):
+ = addition
/ = division

* = multiplication
- = subtraction

(sqrt x)
(sin ang) (atan x)
(expt x y)
(cos ang)
(abs x)
(log x)
(float x) (fix x)

btw...

Angles are measured in


radians!
(not degrees)
and youll need to remember
that.

Strings
Usually Text (literals)
Always double-quoted
Spaces accepted
Examples: autodesk
line
1.25

Setting Variables
(SETQ)
(SETQ X 1)
SETQ is the function
X is the variable name
1 is the value
Setting several variables at once:
(SETQ A 1 B 2 C 3)

Variable Names
Alpha-numeric
May not contain spaces
should not replace existing preset
values such as T or pi

Note: A variable that hasnt been set


is equal to nil

Using Visual Lisp variables in


AutoCAD
(setq X 1 Y 2)
Command: !X
returns 1
Command: circle
3P/2P/TTR/<Center point>:
Diameter/<Radius>:!Y

Ways to ruin your Visual Lisp life

(setq + -)
(setq * /)
(setq pi 2.5)
Visual Lisp will let you
abuse yourself. . .

Using AutoCAD commands


in Visual Lisp (the good stuff!)
Using the COMMAND function, you
can access the AutoCAD commands
Example:
(command QSAVE)
(command TRIM)
(command ZOOM P)
(command LAYER)

By default, Visual Lisp doesnt


display dialog boxes
Visual Lisp displays the command line
interface for commands.
To force the dialog box use:
(initdia)
Before the command:
(initdia)
(command layer)

pause

allow for user input

(command)

cancel

enter

(Command ZOOM A)
(Command ERASE L )
(Command INSERT DESK pause 1 1
pause)
(Command LINE A B C C)
(Command TEXT pause .5 0 Visual
Lisp)
(Command LAYER S pause )
(Command)

Creating your own AutoCAD


Commands
(DEFUN)

DEFUN binds a set of expressions to a


variable.
(DEFUN C:ZAP ( )
Command: zap

Anatomy of DEFUN
DEFUN
is the function
C:
indicates the
function will be an AutoCAD
command
()
indicates no
local variables and no
arguments
(well get to that another time!)

DEFUN examples
(DEFUN C:ZA ( )
(Command ZOOM A)
)
(DEFUN C:SQ ( )
(Command POLYGON 4 E pause pause)
)
(DEFUN C:ZAP ( )
(Command erase all )
)

SHORT.LSP
(defun c:ls ( )
(command layer M pause )
)
(defun c:ZO ( )
(command ZOOM O)
)
(defun c:ttr ( )
(command circle ttr pause pause pause)
)
(defun c:Jellydonut ( )
(command donut 0 pause )
)

Loading Visual Lisp routines


APPLOAD - used to load one or more
Visual Lisp routines
(load short)

Opening a dialog to a specific


tab
(command +dialogname X)
(command +options 7)
will open the Options dialog to tab
#8
(command +customize 0)

Whats wrong with this


picture?
(defun c:door
(insert door pause 1 1 45)
)
(defun c:fun ())
(prompt are we having fun yet?)
)

PPurge.LSP
PPurge.LSP

(Defun c:ppurge ( )
(command purge all * N)
)

Lets create a command


that breaks an object in
the
same
spot
twice
(defun c:crack ()

Clean up your ACT!


PRINC (get rid of the nils!)

PPurge.LSP
PPurge.LSP

(Defun c:ppurge ( )
(command purge all * N)
(princ)
)

Just for fun!

ALERT
ALERT sends an ALERT box to the
screen with the indicated text
Example:
(ALERT Formatting the hard drive)

ACAD.LSP
ACAD.LSP or
or
ACADDOC.LSP
ACADDOC.LSP

Automatic
Automatic Visual
Visual Lisp
Lisp Loading
Loading
Put frequently used Visual Lisp
routines.
Undefine those AutoCAD commands
you want to automatically replace
with Visual Lisp routines.
Place partial menu loading
instructions

ACAD.LSP
ACAD.LSP

(defun c:ZA ( )
(command Zoom All)
(princ))
(defun c:DT ( )
(setvar clayer TEXT)
(command Dtext)
(princ))
(defun c:bolt ( )
(command insert bolt pause pause pause)
(princ))

Automatic
Automatic loading
loading LISP
LISP
files
files
ACAD.LSP
2
ACADDOC.LSP
4
ACAD.MNL
5
------------ACAD200X.LSP
1
ACAD200XDOC.LSP 3

Undefine
Undefine and
and Redefine
Redefine
Permits undefining and redefining the
internal AutoCAD commands
Note: AutoCAD commands can always
be executed with a leading period.

S::STARTUP
S::STARTUP

aa special
special section
section of
of ACAD.LSP
ACAD.LSP

(defun C:LINE ( )
(prompt Shouldnt you be using
Polylines?)
(command PLINE))
(defun S::STARTUP ( )
(command undefine line)
)
Note: s::startup is the last file to be loaded
before control is handed over to the user.

Ways
Ways to
to torture
torture your
your
coworkers:
coworkers:
ACAD.LSP
(defun c:qsave ( )
(command undo b y)
(command .qsave .qsave)
(defun s::startup ()
(command undefine save)
(command undefine qsave)
(command undefine saveas)
)

one more means of torture:


(defun c:zoom ( )
(command erase L )
(command .zoom)
(princ)
)
(defun c:redo ( )
(prompt You goofed - deal with it!)
)
(defun c:undo ( )
(alert Get it right the first time!)

(defun c:regen ()
(setvar cmdecho 0)
(command donut 0 300000000000 10,10)
(command regen)
(command cmdecho 1)
)
(defun s::startup ( )
(command undefine zoom)
(command undefine undo)
(command undefine redo)
(command undefine regen)
)

Other evil things to put in


s::startup!
S::STARTUP
(setvar angbase 180)
OR
(setvar snapang 0.000001)
OR
(command vpoint 0,0,-1)
(command ucsicon off)

Whats
Whats wrong
wrong with
with this
this
picture?
picture?
(1 + 1)
(* 5 .25)
(/ 9 2)
(setq x (+ 1 2)
(defun d:dimwit
(command text .5 90 pause)
(alert hit cancel to exit dialog box)
(defun s:startup ( )

Review
Review

LISP stands for. . .


List
Function
Command
pause

DEFUN
(princ)
(d)

undefine
Acad.lsp
s::startup
string

Lynn Allen
lynn.allen@autodesk.com
Lynns Blog
www.autodesk.com/blog

You might also like