590 likes | 605 Views
Learn the fundamentals of Visual Lisp to write routines in AutoCAD. Start your journey to becoming an AutoCAD expert. Understand Lisp lists, functions, and rules. Practice basic arithmetic, strings, and variables usage in Visual Lisp. 8
E N D
2. You have come to the right place if... You know nothing or very little about Visual Lisp
You want to write your own Visual Lisp routines but have no idea where to begin.
You would like to have better control over your AutoCAD environment
You tried to “Walk down the Garden Path” but landed in a ditch!
You do not have a programming background
3. 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 (don’t look too close!).
Discover new ways to torture your coworkers!
4. Hold on - we have a lot of information to cover in 80 minutes!
5. First and Foremost! Don’t let Visual Lisp intimidate you!
6. What does LISP stand for? LISt Processor
(not Lost In Stupid Parentheses!)
7. The Basics Lists
Functions
Arguments
Golden Rules of AutoLISP
8. What is a LIST?
Anything inside of parentheses
Examples of LISTS:
(a b c)
(setq x 1)
(princ)
9. What is a FUNCTION?(or subr) The ACTION you want Visual Lisp to do!
10. 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)
11. Visual Lisp as a Calculator INFIX Notation
(1 + 1)
(3 * 4)
(6 / 2)
PREFIX Notation
(+ 1 1)
(* 3 4)
(/ 6 2)
12. 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
13. 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?”)
14. 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)
15. Quiz Time! (* 4 (/ (+ 6 3) 3))
12
(+ (* (- 5 2) (/ 15 3)) 6)
21
(/ (* (- 11 9) (+ 25 5)) (* 3 2))
10
16. Some popular Data Types: Real Numbers 1.5
Integers 5
Strings “LINE”
Lists (8 . “DIM”)
Subrs (or functions) SETQ
17. 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
18. (/ 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
19. 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)
20. btw... Angles are measured in radians!
(not degrees)
and you’ll need to remember that.
21. Strings Usually Text (literals)
Always double-quoted
Spaces accepted
Examples: “autodesk”
“line”
“1.25”
22. Setting Variables (SETQ)(SETQ X 1)SETQ is the functionX is the variable name1 is the valueSetting several variables at once:(SETQ A 1 B 2 C 3)
23. Variable Names Alpha-numeric
May not contain spaces
should not replace existing preset values such as T or pi
Note: A variable that hasn’t been set is equal to nil
24. 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
25. Ways to ruin your Visual Lisp life (setq + -)
(setq * /)
(setq pi 2.5)
Visual Lisp will let you abuse yourself. . .
26. 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”)
27. By default, Visual Lisp doesn’t 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”)
28. pause allow for user input
(command) cancel
“” enter
29. (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)
30. Creating your own AutoCAD Commands(DEFUN) DEFUN binds a set of expressions to a variable.
(DEFUN C:ZAP ( )
Command: zap
31. DEFUN is the function
C: indicates the function will be an AutoCAD command
( ) indicates no local variables and no arguments (we’ll get to that another time!) Anatomy of DEFUN
32. DEFUN examples (DEFUN C:ZA ( )
(Command “ZOOM” “A”)
)
(DEFUN C:SQ ( )
(Command “POLYGON” 4 “E” pause pause)
)
(DEFUN C:ZAP ( )
(Command “erase” “all” ““)
)
33. 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 )
)
34. Loading Visual Lisp routines APPLOAD - used to load one or more Visual Lisp routines
(load “short”)
35. Opening a dialog to a specific tab (command “+dialogname” X)
(command “+options” 7)
will open the Options dialog to tab #8
(command “+customize” 0)
36. What’s wrong with this picture? (defun c:door
(“insert” “door” pause 1 1 45)
)
(defun c:fun ())
(prompt “are we having fun yet?)
)
37. PPurge.LSP (Defun c:ppurge ( )
(command “purge” “all” “*” “N”)
)
38. Let’s create a command that breaks an object in the same spot twice (defun c:crack ()
39. Clean up your ACT! PRINC (get rid of the nils!)
40. PPurge.LSP (Defun c:ppurge ( )
(command “purge” “all” “*” “N”)
(princ)
)
41. Blind the user!(he doesn’t really want to know what’s going on. ..) (SETVAR “CMDECHO” 0)
but don’t forget to turn it back on!
(SETVAR “CMDECHO” 1)
42. PPurge.LSP (Defun c:ppurge ( )
(setvar “cmdecho” 0)
(command “purge” “all” “*” “N”)
(setvar “cmdecho” 1)
(princ)
)
43. Talk to your user with PROMPT (defun c:clean ( )
(setvar “cmdecho” 0)
(prompt “this command will pick up all of your objects and clean the drawing file…please wait”)
(command “erase” “all” “”)
(prompt “\nthere..that’s better”)
(setvar “cmdecho” 1)
(princ)
)
44. SSGET-Getting a selection set(a bit tougher…hang on!) Used to grab a group of objects.
(setq ss1 (ssget))
Select objects:
(ssget “x”)
grabs all the objects in the drawing
45. Using SSGET (defun c:cm ( )
(setq ss1 (ssget))
(command “copy” ss1 “” “m”)
)
46. Let’s create a command that does a full circle, rotated objects Polar Array (defun c:polar ()
47. Just for fun!ALERT ALERT sends an ALERT box to the screen with the indicated text
Example:
(ALERT “Formatting the hard drive”)
48. ACAD.LSP or ACADDOC.LSPAutomatic 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
49. 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))
50. Automatic loading LISP files ACAD.LSP 2
ACADDOC.LSP 4
ACAD.MNL 5
-------------
ACAD200X.LSP 1
ACAD200XDOC.LSP 3
51. Undefine and Redefine Permits undefining and redefining the internal AutoCAD commands
Note: AutoCAD commands can always be executed with a leading period.
52. S::STARTUPa special section of ACAD.LSP (defun C:LINE ( )
(prompt “Shouldn’t 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.
53. 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”)
)
54. 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!”)
55. (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”)
)
56. 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”)
57. What’s 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 ( )
58. Review LISP stands for. . .
List
Function
Command
pause
“”
DEFUN
(princ)
(d) undefine
Acad.lsp
s::startup
string
59. Lynn Allenlynn.allen@autodesk.comLynn’s Blogwww.autodesk.com/blog