Dessin 2DModélisation 3DBIM Mechanical Applications

7 Tips for LISP Programming - Customizing BricsCAD® – P25

Par Ralph Grabowski 7 min 9 août 2020
7 Tips for LISP Programming - Customizing BricsCAD® – P25

In the last few posts we've looked at most powerful method available to "non-programmers" for customizing BricsCAD --- the LISP programming language. In this post, I'm going to conclude our LISP coding with 7 tips for writing LISP code.

Tip #1. Use an ASCII Text Editor

BricsCAD has it's own, built-in LISP editor: BLADE. To access it simply enter BLADE into the Command line.

LISP code must be written in plain ASCII text --- no special characters and no formatting (like bolface or color) of the sort that word processors add to the file. When you programming  LISP with, say, Word, then save as a .doc-format file (the default), BricsCAD will simply refuse to load the LISP file, even when the file extension is .lsp.

In an increasingly Window-ized world, it is harder to find a true ASCII text editor. There is one, however, supplied free by Microsoft with Windows called Notepad, which you'll find in the \windows folder. Do not use Write or WordPad supplied with Windows. While both of these have an option to save in ASCII, you're bound to forget sometimes and end up frustrated. Linux provides the excellent Text Edit (aka gedit) text editor, while Mac has TextEdit.

Almost any other word processor has an option to save text in plain ASCII, but not by default. Word processors have a number of different terms for what I mean by "pure ASCII format." Word calls it "Text Only"; WordPerfect calls it "DOS Text"; WordPad calls it "Text Document"; and Atlantis calls it "Text Files." You get the idea.

Tip #2: Loading LSP Code into BricsCAD

To load the LISP code into BricsCAD, you use the load function. Here's an example where points.

lsp is the name of the LISP routine:

(load "points")

You don't need to type the .lsp extension.

When BricsCAD cannot find points.lsp, you need to specify the folder name by using either a forward slash or double backslashes --- your choice:

(load "\\BricsCAD\\points")

After you've typed this a few times, you'll find it gets tedious. To solve the problem, write a one-line LISP routine that reduces the keystrokes, like this:

(defun c:x () (load "points"))

Now anytime you need to load the points.lsp routine, you just type X and press Enter, as follows:

x

Under Windows, you could also just drag the .lsp file from the File Manager into BricsCAD. Note that the code moves one way: from the text editor to BricsCAD; you cannot drag the code from BricsCAD back to the text editor.

Tip #3: Toggling System Variables

One problem in programming is: How to change a value when you don't know what the value is? In BricsCAD, you come across this problem with system variables, many of which are toggles. A toggle system variable has a value of 0 or 1, indicating that the value is either off (0) or on (1). For example, system variable SplFrame is by default 0: when turned off, splined polylines do not display their frame.

No programmer ever assumes that the value of SplFrame is going to be zero just because that's its default value. In the case of toggle system variables, there two solutions:

  1. Employ the if function to see if the value is 0 or 1.
  2. Subtract 1 and take the absolute value.

Tip #4: Be Neat and Tidy

Remember, your mother told you to always pick up your things. This problem of setting system variables applies universally. When your LISP routine changes the values of system variables, it must always set them back to the way they were before the routine began running.

Many programmers write a set of generic functions that save the current settings at the beginning of the routine, carries out the changes and then restores the saved values at the end of the routine. Here's a code fragment that shows this, where the original value of SplFrame is stored in variable SplVar using getvar and then restored with setvar:

(setq splvar (getvar "splframe"))
...
(setvar "splframe" splvar)

Tip #5: UPPER vs. lowercase

In (almost) all cases, the LISP programming language doesn't care if you use UPPERCASE or lowercase for writing the code.

For legibility, there are some conventions:

  • LISP function names in all lowercase.
  • Your function names in Mixed Case.
  • BricsCAD variables and command names in all UPPERCASE.

As I said, LISP doesn't care and converts everything into uppercase in any case. It also strips out all comments, excess white space, tabs, and return characters. The exception is text in quote marks, such as prompts, which are left as is.

There are two exception where LISP does care: when you are working with escape codes and the letter T.

Escape codes are used in text strings and must remain lowercase. For example, \e is the escape character (equivalent to ASCII 27) and \t is the tab character.

Note: they use backslashes; it is for this reason that you cannot use the backslash for separating folders names back in Tip #2. LISP would think you were typing an escape code.

And some functions use the letter T as a flag. It must remain UPPERCASE.

Tip # 6: Quotation Marks as Quotation Marks

As we have seen, the LISP programming language uses quotation marks ( " ) for strings. Thus, you cannot use a quotation markto display quotation marks and inches, such as displaying 25 inches as 25".

The workaround is to use the escape codes mentioned above in Tip #5, specifically the octal code equivalent for the ASCII character for the quotation mark. Sound complicated? It is. But all you need to know is 042. Here's how it works:

First, assign the strings to variables, as follows:

(setq disttxt "The length is ")
(setq distval 25)
(setq qumark "\042")

Notice how I assigned octal 042 to variable qumark. The backslash tells LISP the numbers following are in octal. Octal, by the way, is half of hexadecimal: 0 1 2 3 4 5 6 7 10 11 12 ... 16 17 20 21 ...

Then concatenate the three strings together with the strcat function:

(strcat distxt distval qumark)

To produce the prompt:

The length is 25"

Tip #7: Tabs and Quotation Marks

Vijay Katkar is writing code for a dialog box with a list box. He told me, "I want to display strings in it --- just like the dialog box displayed by the Layer command. I am able to concatenate the values and print the strings but there is no vertical alignment, since the strings are of different lengths. I tried using the tab metacharacter (\t) in the string but it prints the literal '\t' in the list box. Is there any way I can get around this problem?"

I recall a similar problem: How to display quotation marks or the inches symbol within a text string?

For example, I have a line of LISP code that I want to print out as:

The diameter is 2.54"

Normally, I cannot use the quotation (") character in a string. LISP uses the quotation as its string delimiter to mark the beginning and ending of the string. In the following line of code:

(prompt "The diameter is 2.54"")

LISP sees the first quotation mark as the start of the string, the second quotation as the end of the string, and the third quotation mark as an error. The solution is the \nnn metacharacter. This lets me insert any ASCII character, including special characters, such as tab, escape, and quotation marks.

The workaround here is to use the ASCII code for the quotation mark, \042, like this:

prompt "The diameter is 2.54\042")

Similarly, Vijay needs to use the \009 metacharacter to space the text in his dialog box. And, in fact, that worked: "According to what you had told me, I used the same and it worked."

What's next?

That's all for LISP programming! Join me next time when I'll show you how to create custom dialog boxes in BricsCAD.

Start LISP Programming Today

Permanent or subscription licenses that work in all languages, in all regions.

Ralph Grabowski

par Ralph Grabowski - CAD Writer, publisher of upFront.eZine

Ralph is the publisher of the weekly 'upFront.eZine' e-newsletter on the business of CAD and the 'WorldCAD Access' blog on technology. Author of 240+ books and ebooks about computer-aided design, and producer of 220+ videos on using CAD.

15 avril 2024 3 min

BricsCAD® Pro V24.2 - Amélioration des performances

BricsCAD V24.2 est désormais disponible, avec de multiples améliorations des performances qui ne manqueront pas d'accroître votre efficacité et de renforcer la stabilité. Conçue pour les dessinateurs, les concepteurs et les fabricants de tous les secteurs, cette nouvelle version cherche à accélérer la création de la documentation, sans lésiner sur la précision, afin de répondre aux exigences essentielles des processus de construction et de fabrication. Examinons de plus près tous les avantages de la v24.2 pour accélérer votre délai de livraison.

8 avril 2024 4 min

Amélioration de la compatibilité des dessins dans BricsCAD® V24.2

Dans la v24.2, la compatibilité DWG de BricsCAD® gagne du terrain. Créer la documentation de conception devient plus rapide grâce aux flux de travail de Dessin 2D. Pour une collaboration toujours plus fluide, vous pouvez ouvrir et modifier les dessins BricsCAD dans tout autre programme de CAO basé sur le format DWG. Découvrons sans tarder les nouvelles améliorations !

25 mars 2024 4 min

Nouveautés de BricsCAD® Lite and Pro V24.2

Dans sa dernière mise à jour, BricsCAD® V24.2 introduit de nombreuses fonctionnalités innovantes et améliorées pour passer au niveau supérieur en matière de Dessin 2D. Nous avons renforcé l'intuitivité de l'expérience utilisateur, amélioré les performances et la stabilité et ajouté de nouvelles fonctionnalités avancées pour continuer à accroître votre productivité. Cette version livre des flux de travail qui vous offre le niveau de précision et de polyvalence dont vous avez besoin pour exécuter vos projets de dessin et de conception 2D avec efficacité. 

Suivez-nous sur les réseaux sociaux