Presentation on theme: "Mastering AutoLISP in 80 Minutes Instructor: Lynn Allen Course Summary: AutoLISP has been around for a long time and has always separated the AutoCAD."— Presentation transcript:
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.
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
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)
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)
Some popular Data Types: Real Numbers1.5 Integers5 StringsLINE Lists(8. DIM) Subrs (or functions)SETQ
Real Numbers and Integers Real Numbers have decimal points Example: Integers do not! Example: 2511 Real Numbers must have a leading zero..5 is incorrect0.5 is correct Dotted pair: (0. CIRCLE) error: misplaced dot on input
(/ 7 2)=> 3 (/ 7 2.0)=> 3.5 ( )=> 21.0 (+ 1.5)=> invalid dotted pair ( )=> 1.5 One real number changes the entire pot!
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
U sing Visual Lisp variables in AutoCAD (setq X 1 Y 2) Command: !X returns1 Command: circle 3P/2P/TTR/ : Diameter/ :!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
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!) Anatomy of DEFUN
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..thats better) (setvar cmdecho 1) (princ) )
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
Using SSGET (defun c:cm ( ) (setq ss1 (ssget)) (command copy ss1 m) )
Lets create a command that does a full circle, rotated objects Polar Array (defun c:polar ()
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
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!)