Sei sulla pagina 1di 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!
Example: 25 11

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 * = multiplication
/ = division - = 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 )
)
(defun c:ls ( ) SHORT.LSP
(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

(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

(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 or ACADDOC.LSP
Automatic Visual Lisp 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

(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 loading LISP files

ACAD.LSP 2
ACADDOC.LSP 4
ACAD.MNL 5
-------------
ACAD200X.LSP 1
ACAD200XDOC.LSP 3
Undefine and Redefine

Permits undefining and redefining the


internal AutoCAD commands

Note: AutoCAD commands can always be


executed with a leading period.
S::STARTUP
a special section of 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 to torture your 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 wrong with this 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
LISP stands for. . . undefine
List Acad.lsp
Function s::startup
Command
string
pause

DEFUN
(princ)
(d)
Lynn Allen
lynn.allen@autodesk.com

Lynns Blog
www.autodesk.com/blog

Potrebbero piacerti anche