Drafters Forum | JOBS | Drafting Standards | Funnies | Technical Dictionary | AutoCAD Tutorials | Free Lisp | Free Blocks

ARTICLE: Top ways drafters can make money online with Freelancer.com

AutoLISP Lesson 2 - THE AutoLISP ENVIRONMENT

From Draftsperson.net

(April 1999)

The AutoLISP environment is entered when AutoCAD receives a "(" symbol at the command line. When AutoCAD sees the opening parentheses, it runs the AutoLISP interpreter. The interpreter then evaluates, as a list, what is between the opening "(" symbol and the closing ")" symbol.

Data types

There are three basic data types in AutoLISP. They are functions, symbols, and lists.

Function: is the first item in every list. The remainder of the list is used as the parameters or arguments to the function. If the first item in the list is not a function you will receive an error message stating: "bad function."

Symbol: is what other programming languages call a variable, and from this point on when I refer to a variable I am really talking about a symbol. A symbol in LISP however can be a whole lot more than just a value, as a normal variable would hold. A symbol can contain a list or a function definition. A symbol has a value bound to it. If it has no binding it is said to be "nil". All symbols should be set to nil upon ending a program or encountering an error.

List: is anything that is not a symbol.

Errors

If an error occurs while running an AutoLISP program, the interpreter will return a trace of the function starting with the most recent function and continuing to the top of the program. This is handy for debugging. You should define your own error handler so the user doesn't have to see this and wonder what is going on.

Special characters

There are some characters in AutoLISP, like any language, which cannot be used under certain circumstances.

  • Symbol names can contain any sequence of printable characters except the following:
     ( ) . ' " ;
  • Certain characters terminate a symbol name or numeric constant, they are as follows:
( ) ' " ;
  • A minus (-) sign can be used to signify negative integers or reals.
  • The plus (+) sign is optional when signifying positive integers or reals.
  • Literal strings are entered between double quotes (""). Within quotes strings, the backslash (\) character may be used to enter control characters. The control characters are as follows:
  • \\ Gives a normal backslash character.
  • \" Gives a normal double quote character.
  • \e Gives an escape character.
  • \n Gives a new line character.
  • \r Gives a return character.
  • \t Gives the tab character.
  • \nnn Gives a character who’s octal code is nnn.

The single quote character can be used in place of the quote function such as:

'This is equivalent to (quote this)

Every comment in LISP must start with the semicolon character:

; This is a comment

Comments will be discussed in depth later in the lessons.

The LISP interpreter

At the heart of the LISP interpreter is the evaluator. The evaluator takes a line of lisp code, evaluates it, and returns a result. Evaluation happens in the following manner:

  • Integers, reals, strings, file pointers, and functions evaluate to themselves.
  • Symbols evaluate to the value of their current binding.
  • Lists are evaluated according to the first element of the list.
  • If the first element of the list is a predefined AutoLISP function, the remaining elements are passed to the predefined function, and evaluated by the function.
  • If the first element of the list evaluates to a list, the list is assumed to be a function definition and the function is evaluated using the rest of the list as its arguments.

The current bindings of functions and variables can be retrieved at the command line by using the exclamation character "!". If the value being retrieved is a function the entire function list will scroll across the screen. If the value being retrieved is a variable, the value of the current binding will be returned. This is normally what you are after when you check the current binding of an object. When checking for errors in code it is sometimes helpful to see that your variables are getting set correctly.

Command functions

You can create your own command functions within AutoLISP. The DEFUN function is used to create functions in AutoLISP. If when creating your function you define them like this:

(defun c:function_name ( / )
(do something)
)

The function can be called within AutoCAD without having to put parenthesis around it. The "c:" has nothing to do with your disk drives; it merely tells LISP that the function should be defined as a command line function.

Lisp libraries

You can create your own library of lisp routines using the ACAD.LSP file. If one does not exist on your system you can create one and add your routines to it. If it already exists, your routines can be added to the end so they load every time you enter AutoCAD.

If you have certain things you do every time you enter a drawing, they can be added to the ACAD.LSP file and automatically executed every time the ACAD.LSP file is loaded. To do this you must define a function that is called "s::startup". The s::startup function is executed every time ACAD.LSP is loaded.

Any lisp function may be loaded by typing (load "lispname"). The command must be inside parenthesis, and the ".lsp" extension should not be added. If you find your lisp programs will not load, make sure you have followed the rules above, then try what comes next.

AutoLISP will search the support file search path that is set in the CONFIG command. If it doesn't find your program the search path it will not load it and will tell you it couldn't find it. It will list all the places it looked. If your file is not in a search path, and can't be put there, you can still load it by giving AutoLISP the entire path to the file in the load command, example:

(load "c:/acad/dave/myprog")

Note I used forward slashes instead of back slashes. AutoLISP will not interpret back slashes correctly if you only use (1) one. Remember from earlier in the lesson the back slash is a special character in AutoLISP and cannot be used in the literal use. Also remember that it can be used literally if you put (2) two in a row. Like this:

(load "c:\\acad\\dave\\myprog")

More Lessons


Need drafting work?

We are having great success with Freelancer.com. With this website we can win all types of drafting work. People from all over the world are looking for freelancers skilled in AutoCAD, Revit, Civil 3D and Microstation, are you one of those people? If so you can live the freelancer lifestyle! and work from any location you want too. Freelancer.com, it works really well - we like it - and we believe you will too.

Looking for CAD drafters?

With modern construction, software and increased legal requirements, we often require specialized assistance with our projects. Putting skilled staff on full time is not always economically feasible for small businesses. Freelancer.com solves this problem. On this website you can engage skilled drafters. Either on fixed prices for specific tasks, or reasonably priced hourly rates for longer term contracts.

E-book: AutoCAD Block Best Practices

We draw repetitively when using AutoCAD. If we manage the drawing elements as reusable contents, it will increase our productivity significantly. Not only can we draw faster, we can add information to our blocks. Which allows us to generate useful reports. This is what Edwins e-book entitled AutoCAD Block Best Practices is all about. Yes, increase your productivity with the block!



Printable version

Toolbox

Views

Main Page | Free AutoCAD Blocks | Free Revit Families | Funnies | Drafting Standards | Drafting & CAD Forums | Structural Drafting | Technical Dictionary

Personal tools

MediaWiki