CAD Advanced AutoLISP Teaser

So far I have discussed a few things about improving our industry through sharing of knowledge. AutoLISP has been around since I started with AutoCAD in 89’. AutoLISP continues to be a strong API for AutoCAD. This Post will just be a little bit of a teaser to see how interested you actually are in AutoLISP. I will show you a few quick things you can do at the command line inside AutoCAD that will hopefully pique your interest enough to come back for more.

First a couple of things to note. AutoLISP uses Parenthesis to enclose code segments. Some special things to pay attention to are for every opening parenthesis there needs to be a closing one. Similarly for every opening double quote, signifying a string, there needs to be a closing one.

Try this out (in typical programming tradition)

(defun C:HELLOLISP() (princ “\nHello World!”))

The above AutoLISP code will create a command called HELLOLISP that is now available within the AutoCAD Dwg Session you loaded it in. So give it a try. Type HELLOLISP at the command prompt.

Congratulations you just typed in and executed your first AutoLISP defined command!

That’s great and all, but what good does that do me? Well, it basically shows you how easy AutiLISP is to use inside AutoCAD directly from the command prompt. Let’s do some more, but directly with AutoCAD commands.

Open a drawing, any drawing that has something in it, hopefully a good collection of entity types, circles, lines, blocks, polylines, wipeouts, text… Make sure it is a copy of the drawing and not one you care to keep.

Once inside your drawing lets erase all the text in your drawing. There are a few ways to do it, but this is after all an AutoLISP lesson. So let’s use AutoLISP.

Start the Erase command, then when you are at the Select objects prompt, type in the following. (pay attention there is a single quote char and is special to the AutoLISP interpreter.

Select objects: (ssget “X” ‘((0 . “TEXT“)))
18 found
Select objects: [Enter]

All text (excluding MTEXT, Attributes, and any text inside blocks) should now be deleted.

Try it with other entity types. (“LINE” ; “CIRCLE”; “INSERT” (Block inserts); “LWPOLYLINE”)

In this intro we will not dig into what each things means, but we will show you some easy stuff to try.

Let’s move on.

AutoLISP can be used as an In line calculator. Take for instance those Scale Factors we talked about in the Scale Factors Post. With AutoLISP you can enter them directly at the command line instead of using a calculator. Say you want to scale something down to 1/48th of its original size. Start the SCALE command and select your object to scale, pick your base point and then when prompted for the scale factor input the following:

(/ 1.0 48.0)

Make sure you use the decimals. We will discuss why in later lessons.

You can use this even without a command. Try it:

(+ 37 2.5)

(- 20 19)

(/ 1.0 2)

(* 12 12)

You can use AutoLISP to access system variables. Imagine you are inserting symbol into a drawing and you don’t actually know the scale factor. Is it 64 or is 96. Assuming it is a scaled drawing and we are in Modelspace. Start the insert command, pick one of your symbols to insert and then when prompted for a scale factor try the following input.

(getvar “DIMSCALE“)

This will retrieve the current dimstyle’s scale factor setting. If you only use dimensions in Paper space this will basically be one. Again this is just to show some quick things to try.

What if you are working and you have two versions of the same file opened from different file paths. You can look it up using AutoLISP at the command line.

(getvar “DWGPREFIX“)

The result is your drawing file’s path.

AutoLISP is AutoCAD’s version of LISP. LISP Stands for List Processing, so it means we can’t have a in intro to AutoLISP without processing a list or two.

Find a circle in your drawing and let’s work with it. Type the following at the command line, then pick the circle.

(setq myCircle (entget (car (entsel “\nSelect Circle: “))))

The result is a list of all the DXF data for that Circle. Now let’s look at the parts. Type the following at the command prompt:

(foreach dxfitem myCircle (princ “\n”) (princ dxfitem))

You should see something like this:

(-1 . <Entity name: 7ffffb05f70>)
(0 . CIRCLE)
(330 . <Entity name: 7ffffb039f0>) 
(5 . 1EF) 
(100 . AcDbEntity) 
(67 . 0)
 (410 . Model) 
(8 . MyLayer) 
(100 . AcDbCircle) 
(10 20.5482 9.05521 0.0) 
(40 . 0.854867) 
(210 0.0 0.0 1.0) 
(210 0.0 0.0 1.0)

What is all that? (You may need to hit F2 to see)  It is the data that makes up the circle. The AutoCAD drawing is a VECTOR format and not a RASTER format. In other words it’s data and not dots. Let’s wrap up with a quick discussion of what some of these things are.

(0 . CIRCLE)

0 is the DXF code for entity type. This entity happens to be a CIRCLE, Hopefully you picked a circle.

(67 . 0)

67 is the DXF code for space, ZERO means Model Space, ONE means Paperspace.

(8 . MyLayer)

8 is the DXF code for Layer. This entity is on the MyLayer Layer.

(10 20.5482 9.05521 0.0)

10 is the code for coordinate, a circle on has one coordinate at the center.

(40 . 0.854867)

40 is the code for Radius. This one has a radius of 0.854867

Now you see how easy it is to use AutoLISP. Now looking at the above, note that using AutoLISP you can change all those values. You could change it’s Radius, it’s Layer, it’s center point…. And so much more.

I hope you have enjoyed this AutoLISP Teaser. If you would like to see more, let me know in the comments section.

Leave a Reply