Sie sind auf Seite 1von 45

Network Your AutoCAD with AutoLISP

Robert Green
Robert Green bio …

ƒ Mechanical engineer turned computer geek


ƒ CAD user since 1985
ƒ CAD manager since 1989
ƒ LISP hacker since Release 9
ƒ CADENCE/Cadalyst author since 1998
ƒ Still trying to learn everything I can …

Network Your AutoCAD with AutoLISP


Robert Green
Some fundamentals
ƒ LISP – LISt Processor
ƒ Should you still use LISP?
ƒ Everything is in lists

Network Your AutoCAD with AutoLISP


Robert Green
Key files and why they matter …
ƒ LSP
ƒ Load in order
ƒ What to mess with
ƒ What not to!

Network Your AutoCAD with AutoLISP


Robert Green
All those wacky file names …
ƒ ACAD20XX.LSP (system file – XX is version)
ƒ ACAD.LSP (This is your file)
ƒ ACAD20XXDOC.LSP (system file - XX is version)
ƒ ACADDOC.LSP (This is your file)
ƒ CUINAME.MNL (loads with CUI)
ƒ So what does it all mean?

Network Your AutoCAD with AutoLISP


Robert Green
What do they do, where they live …
ƒ They load on startup of AutoCAD
ƒ They load in a certain order (listed on previous slide)
ƒ Some have code in them and some don’t
(ACADDOC.LSP and ACAD.LSP don’t as an example)
ƒ They reside in the SUPPORT folder …

Network Your AutoCAD with AutoLISP


Robert Green
So what should I do …
ƒ Use ACADDOC.LSP to get started
ƒ You create your own ACADDOC.LSP
ƒ It loads with every new drawing
ƒ Put in in the SUPPORT folder and start hacking away
ƒ If you mess up too bad, just delete!

Network Your AutoCAD with AutoLISP


Robert Green
Make sure it works …
ƒ Create ACADDOC.LSP
ƒ Load from network?
ƒ Verify operation

Network Your AutoCAD with AutoLISP


Robert Green
Find the support folder …
ƒ Use OPTIONS to find the folders …

Network Your AutoCAD with AutoLISP


Robert Green
Add a network folder …
ƒ Use OPTIONS to add it …

Network Your AutoCAD with AutoLISP


Robert Green
Create the file …
ƒ Use Notepad – not Word!
ƒ Use (prompt “\nACADDOC.LSP loaded.”) as text

Network Your AutoCAD with AutoLISP


Robert Green
Save the file …
ƒ To the SUPPORT folder
ƒ Use ACADDOC.LSP as the name

Network Your AutoCAD with AutoLISP


Robert Green
Alternately …
ƒ You can use APPLOAD to load files
ƒ You can use STARTUP SUITE to load at each start

Network Your AutoCAD with AutoLISP


Robert Green
Syntax Basics
ƒ Lists and Arguments
ƒ Rules of AutoLISP
ƒ Accessing the command line
ƒ Special characters

Network Your AutoCAD with AutoLISP


Robert Green
Lists and Arguments
ƒ (+ 20 30)
ƒ Here the + is a FUNCTION and the two numbers are
ARGUMENTS

ƒ (command “line” “0,0” “1,1” “”)


ƒ Here COMMAND is the function, all others are ARGUMENTS

ƒ (getvar “dimscale”)
ƒ Which is the function? The argument?

Network Your AutoCAD with AutoLISP


Robert Green
What’s Going On Here?
ƒ (command “viewres” “y” “5000”)
ƒ (command “-color” “BYLAYER”)
ƒ (command “-linetype” “set” “BYLAYER” “”)
ƒ (command “menu” “menuname.mnc”)
ƒ (command “viewres” “y” pause)

ƒ That’s not so bad …intuitive actually …

Network Your AutoCAD with AutoLISP


Robert Green
User functions
ƒ Speed for the user
ƒ Lower support for you
ƒ A win-win scenario
ƒ Let’s put everything we’ve
learned into action to build
some functions.

Network Your AutoCAD with AutoLISP


Robert Green
User Function Examples

(defun C:ZA ()
(command “.zoom” “a”)
(princ)
)

Network Your AutoCAD with AutoLISP


Robert Green
User Function Examples

(defun C:ZA ()
(command “.zoom” “a”)
(princ)
)

Network Your AutoCAD with AutoLISP


Robert Green
User Function Examples
(defun C:VR ()
(command “viewres” “y” “5000”)
)

* Note that I left out PRINC?

(defun C:BL ()
(command “-color” “BYLAYER”)
(command “-linetype” “set” “BYLAYER” “”)
(princ)
)

Network Your AutoCAD with AutoLISP


Robert Green
Fillet Zero Function
Fillet Zero
(defun c:fz ()
(setvar “filletrad” 0.0)
(command “.fillet” pause pause)
(princ)
)

* What have I not done in this function?

Network Your AutoCAD with AutoLISP


Robert Green
Improved Fillet Zero
(defun c:fz ()
(setq old_filletrad (getvar “filletrad”))
(setvar “filletrad” 0.0)
(command “.fillet” pause pause)
(setvar “filletrad” old_filletrad)
(princ)
)

* Note how we store and recall the FILLETRAD so the


function puts things back the way they were!

Network Your AutoCAD with AutoLISP


Robert Green
Auto Purge Function
Auto Purge
(defun c:atp ()
(command “-purge” “a” “*” “n” “.qsave”)
(princ)
)

(defun c:atp ()
(command “-purge” “b” “*” “n” “.qsave”)
(princ)
)

Network Your AutoCAD with AutoLISP


Robert Green
Take Control of the Command Set …

ƒ Undefine
ƒ Dot form
ƒ Redefine
ƒ Alerts
ƒ CMDECHO

Network Your AutoCAD with AutoLISP


Robert Green
Undefining …
ƒ (command “.undefine” “LINE”)
ƒ (command “.undefine” “TORUS”)

ƒ Don’t want them messing with a command? Just undefine


it …

Now you can SUBTRACT from the AutoCAD


Command set in your ACADDOC.LSP file.

Network Your AutoCAD with AutoLISP


Robert Green
The DOT form …
ƒ Invoke commands like this: .LINE
ƒ Note the dot “.” character?
ƒ This allows you to invoke a command whether it has been
undefined or not!
ƒ This is our little secret right ...

Network Your AutoCAD with AutoLISP


Robert Green
Redefining …
ƒ (command “.redefine” “LINE”)
ƒ (command “.redefine” “TORUS”)

ƒ Want to be sure that a command is active?


ƒ Just redefine it …

Now you can UNSUBTRACT from the


AutoCAD Command set with ease.

Network Your AutoCAD with AutoLISP


Robert Green
Undefining revisited …
ƒ What if your users find out about REDEFINE and start
REDEFINING your UNDEFINES?

ƒ Just undefine the redefine like this:

ƒ (command “.undefine” “REDEFINE”)

ƒ That’ll stop users from redefining …

Network Your AutoCAD with AutoLISP


Robert Green
Redefining …
ƒ You can undefine a command and redefine it like this:

(command “.undefine” “TORUS”)

(defun C:TORUS ()
(alert “Don’t use that command!”)
(princ)
)

Now you do whatever you want!

Network Your AutoCAD with AutoLISP


Robert Green
What Does This Do?
(command “.undefine” “QSAVE”)

(defun c:qsave ()
(command “-purge” “b” “*” “n”)
(command “.qsave”)
(princ)
)

Network Your AutoCAD with AutoLISP


Robert Green
Alerting the user …
ƒ You can send a message to the user like this:

(alert “Message goes here”)

Network Your AutoCAD with AutoLISP


Robert Green
Command echo (CMDECHO)
Run in STEALTH mode like this:
(defun C:BL ()
(setvar “cmdecho” 0)
(command “-color” “BYLAYER”)
(command “-linetype” “set” “BYLAYER” “”)
(setvar “cmdecho” 1)
(princ)
)

* SETVAR is on or off so no need to store it’s value

Network Your AutoCAD with AutoLISP


Robert Green
Automate the Folders …
ƒ Registry reads
ƒ Registry writes
ƒ Impose profiles without
actually using profiles
ƒ Let’s make the leap

Network Your AutoCAD with AutoLISP


Robert Green
Locate the registry keys

Use REGEDIT
Find the version
Find the profile

Network Your AutoCAD with AutoLISP


Robert Green
Locate the registry keys

Find the key

Network Your AutoCAD with AutoLISP


Robert Green
Override with code

(setenv "PrinterConfigDir" "C:\\TEMP\\acad\\Plotters")

Network Your AutoCAD with AutoLISP


Robert Green
Synch the Folders …
ƒ Network files
ƒ Copy to local folder
ƒ Consistency
ƒ No permissions hassles

Network Your AutoCAD with AutoLISP


Robert Green
Add this to ACADDOC.LSP

(command "shell" "robocopy \\\\server\\folder c:\\temp /e")

Where \\\\server is your server location


And \\folder is the full path to the files

Let’s see an example:

Network Your AutoCAD with AutoLISP


Robert Green
Compile and remote load code …
ƒ VLIDE
ƒ Load operations

Network Your AutoCAD with AutoLISP


Robert Green
VLIDE environment …
ƒ You can write code in the VLIDE window like
this:

Network Your AutoCAD with AutoLISP


Robert Green
Compile your code …
ƒ Use the VLIDE environment like this:
(vlisp-compile ‘st “c:\\test\\myprog.lsp”)

ƒ You’ll get MYPROG.FAS as a result

Network Your AutoCAD with AutoLISP


Robert Green
Load compiled code …
ƒ Use a LOAD statement like this:
(load “c:\\test\\myprog.fas”)

ƒ Now your LSP code is secure!


ƒ Be sure not to lose your LSP file though!

Network Your AutoCAD with AutoLISP


Robert Green
Centralized code …
(if (findfile "x:\\autolisp\\utils1.fas")
(load "x:\\autolisp\\utils1.fas"))
)

Network loaded compiled programs are the way


to go for security.

Load these files from your ACADDOC.LSP

Network Your AutoCAD with AutoLISP


Robert Green
Wrapping up: Resources
ƒ The course handout (it has extra coverage)
ƒ CAD-Manager.com/su password = synergis
ƒ Email: rgreen@CAD-Manager.com
ƒ Cadalyst Magazine (Hot Tip Harry)
ƒ Developer’s Help
ƒ The Garden Path example

Network Your AutoCAD with AutoLISP


Robert Green
Thank you and keep in touch!

Robert Green
rgreen@CAD-Manager.com

Network Your AutoCAD with AutoLISP


Robert Green

Das könnte Ihnen auch gefallen