A way of achieving Australian architectural-style dimensioning using standard AutoCAD or IntelliCAD facilities, without resorting to LISP programming that also works in AutoCAD LT.
AutoCAD does not have built-in support for the style of dimensioning used for architecture in Australia and Europe, and IntelliCAD mimics its limitations. For those not familiar with architectural practice, this style consists of arranging all dimensions well outside the drawing outlines in several stacked continuous runs, with very short leader lines that do not extend up to the drawing outlines. They typically involve alternating long and very short dimensions relating to rooms and the wall thickness between them. Ticks are used rather than arrows. Some US-based CAD products do not provide for this method, as American architectural practice uses a style more like mechanical practice and places dimensions within the building outlines.
The method outlined here has its limitations due to relying only on built-in features without using LISP. It was suggested to me by two AutoCAD users I know, Hernan Robaldo & Robert Cunningham. It uses user-defined arrow blocks to provide the short extension lines and turns off AutoCAD’s own extension lines.
For a more thorough solution in AutoCAD or IntelliCAD (but not in LT) recourse must be had to custom programming in LISP or ADS. Major add-on architectural applications naturally provide this, but I will outline a programmed solution in LISP in a sequel to this article.
Define a new Dimension Style and one (or two) blocks that it uses. First, define the block. (For the role of the optional second block see later.)
Select the layer you use for dimension lines, or make one. Most users call it DIMS. Set its default color to whatever you use for a pen width of 0.25mm (often yellow, but black in our illustration).
Draw a cross 2 units wide x 2 units high, then draw a tick (diagonal line) through the intersection, 2 units long and change the color of the tick to what you use for pen width 0.35mm (often green, but blue shows up better in our illustration).
Create a block by the Block command with a name such as ARCDIM1. Select the entities just drawn, with the insertion point at the intersection of the three lines.
This block will need to be inserted into your prototype drawing. For now, insert it into the current drawing. Then use the WBLOCK command to save it as a DWG file somewhere so you can later place it in the prototype file. You don’t need have it visible as an inserted block. If you do, delete it the visible insertion. The idea is just to get its definition into the drawing’s invisible Blocks Table. You can do that by using the Insert command and then canceling when it asks for the insertion point.
Give the command DDIM, or pick the appropriate menus or icon, to get the Dimension Style Dialog Box. The following instructions relate to AutoCAD and LT. IntelliCAD, although often easier to work than AutoCAD, is in this case more difficult, as its dimension setting dialog box has several deficiencies.
In the AutoCAD dialog box, set the Geometry items first. When you click in the geometry button, you are presented with five editable main areas. The first one, Dimension Lines, we don’t need to edit, so go to the second one, Extension Lines.
Tick Suppress 1st and 2nd extension lines, this will save you the trouble of having to set the dimexe and dimexo variables and the possibility of difficulties with different dimexo settings.
In the Third Area you set the overall scale in relation to the intended final plot scale. (i.e. 200 for 1:200 scale etc.) Do not tick the “Scale to Paper Space” square, as dimensioning in Paperspace is, most regrettably, an unsatisfactory option, even though it ought to be the better way.
The Fourth area deals with Arrowheads. Click on the first arrowhead line and select USER ARROW. When the next dialogue box appears asking for an Arrow Name, type in the name of your dimblock (ARCDIM1). If the message “Can’t find the Arrow block” appears it means that the block has not been added to the current drawing (or prototype drawing), so you will have to insert the block, before proceeding.
The default for the second User Arrow is to use the same as the first one. Accept this and set the size to somewhere between 1 and 2. It’s a matter of personal preference. Try 1.5 for starters. AutoCAD automatically aligns such arrow blocks with the dimension line and mirrors the two ends. The block has to be created as the right hand end one, although that is not relevant here since it is symmetrical.
For IntelliCAD, some of the above can be done in the Setdims dialog box, but not all. They can all be set by using the old SETVARS command mechanism that predated dialog boxes in AutoCAD. In fact I think it is easier to set it all the old way as the IntelliCAD dimension setting labels are quite misleading. So, with IntelliCAD’s command window option enabled, type SETVAR and keep repeating that command for the following settings:
SETVAR DIMBLK1 "ARCDIM1" SETVAR DIMBLK2 "ARCDIM1" SETVAR DIMSE1 1 (or 'ON') SETVAR DIMSE2 1 SETVAR DIMTAD 1 SETVAR DIMTIH O (or 'OFF') SETVAR DIMTIX 1 SETVAR DIMTOH 0 SETVAR DIMSAH 2
For the full list of variables, check Dimension Variables in AutoCAD & IntelliCAD.
If you look at the IntelliCAD SetDims dialog box now you will see the ‘User-defined’ arrows ticked, ‘Custom’ in the example window and the block name in the selection box. But it has not been added to the drop down list. You can type in the block name without dropping down the list or use SETVAR again to restore it. Most other items will be reflected in the dialog settings and can be adjusted if needed.
Amazingly I could find no way of setting the Australian/European convention of text aligned along dimension lines in the IntelliCAD dialog box. There are some labeled boxes that seem relevant but they don’t do it. The DIMTIH and DIMTOH variables set that (0 or OFF means ‘not horizontal’).
IntelliCAD has a defect in that user created arrow blocks do not get oriented to match the dimension line direction, or even to get mirrored for each end as in AutoCAD! In our case that means you need to use a block with vertical and horizontal lines equal. The effect is bizarre for user defined arrow heads! They probably assume they have provided all the arrow variations internally that anyone could ever want, but like so many USA companies they haven’t realized that American practice is contrary to the rest of the world.
That is the method to use if you can accept having equal dimension line extensions (equal distance above the dimension line and below it). The more correct way is to have a longer extension on the side toward the object being referenced, as seen in the dimensioning example above which was actually done with AutoCAD-plus-Karel*Mate.
That is difficult with this rather primitive method. It can be done, in theory at least, by creating two blocks (ARCDIM1 and ARCDIM2), one of which has a longer extension above the tick and the other below it.
The problem is, there doesn’t seem to be a firm logic about how AutoCAD places the first and second arrows, and it too often turns out with erratic long and short extension lines, and fixing up the mess manually is quite a chore. So it is probably better to make do with equal lengths both sides of the line and use one block. If you really want it done more correctly, see our LISP solution in a follow-up article.
If you still want to try unequal blocks, create blocks ARCDIM1 and ARCDIM2. Then follow the previous instructions on selecting the USER ARROW, but select DIM2 as the second arrowhead instead of defaulting it to the same as the first arrow.
You will probably need to define another dimension style such as “Arrows” to use for any radial and angular dimensions and any leader line notes, as otherwise those will appear with ticks and strange short leaders.
AutoCAD and systems that replicate its features do not have dimension format options that allow dimensions to be drawn in the format normally used for architectural plans in most countries other than the USA. That is, a style where dimensions are grouped in continuous strings placed well outside the drawn plan and with extension lines that extend only a short, fixed, distance toward the drawn outlines. You can set variables to control how close extensions lines go to the definition points, and how far they extend beyond the dimension line, but not to limit them to a set distance from the dimension line toward the objects, which is what is needed for this style.
In my first article on this topic I outlined a method that uses only custom arrow blocks and built-in settings to achieve a fair approximation of what is wanted, but with some compromises. Since that method does not use any LISP programming, it will work with AutoCAD LT. Users of AutoCAD R13/R14, FelixCAD, TurboCAD or IntelliCAD have access to LISP and more refined methods can be developed. This article looks at one way of using LISP for this purpose.
I originally intended to present my own code to do this, but in the meantime, a New Zealand reader of the first article, Ken Taylor, contacted me by e-mail and attached LISP files that he had found on the internet, and some he had written. One of these use a technique that had not occurred to me, and provides quite a simple and effective solution. This was written by Christof Candido in Austria and made available for free use by kind consent of the author.
The basic technique used here is for the user to place ordinary AutoCAD dimensions and then the program trims the extension lines back to a fixed length.
It is worth noting that AutoCAD’s ‘associative’ dimensions are not truly linked to the graphic outlines. They only appear to be because the control points that are placed on the Defpoints layer are normally snapped onto drawing features and hence are usually successfully included in the selection-set when you stretch objects. Truly ‘object-based’ CAD systems can have fully linked dimensions because they are parameters of objects such as walls. This becomes a more evident proviso when you use Christof’s LISP routines, because the defpoints are then on the ends of the shortened extension lines and no longer co-incident with the drawing features. So if you want to stretch things, you need to consciously include the possibly remote defpoints, or else just delete and redo the dimensions.
Christof’s LISP file (A-DIMS2.LSP) provides several new commands, and includes several internal LISP functions that are used by those command functions. For those completely new to LISP, ‘command’ functions are those defined by (defun..) statements using a name that begins with C: and are by convention written in capitals. Eg:
(defun C:NEWCMD () ... some lisp code ... )
..which would create a new AutoCAD command word ‘NEWCMD’.
When the LISP file is loaded, command functions become new AutoCAD commands that can be typed at the command line. This LISP file lists the defined new commands at the end of the program as print statements so that it displays the names of the new commands when it has loaded.
‘Internal’ functions are defined by defun statements that have names without a leading C: and are by convention shown in lower case. They are intended to be called from other LISP code when the program runs.
The main new command is DIMCUT, defined by (defun C:DIMCUT () …). When you invoke it by typing DIMCUT at the command prompt, it prompts you to select the dimensions to alter. It therefore requires you to have placed ordinary AutoCAD dimensions before using DIMCUT. The normal ‘Select:’ mechanism is used, so you can pick however many already placed dimensions you like, use a window or type ALL, and finish selecting by pressing enter. I found that with IntelliCAD 98c I had to use Refresh after it finished if I had used ALL as it left all the drawing dotted. The extension lines of all the selected dimensions will then have been truncated to a fixed length.
In the version of the program as received, the fixed extension-line length is preset to 300, which is alright for a typical plan at 1/50 or 1/100 dimensioned in Modelspace drawn full size. For enlarged details or dimensions done in PaperSpace it would need changing. For PaperSpace a value of something like 5 or 10 would be appropriate.
The value for the extension-line length to trim to is defined in the program by the variable *EXTLEN* (including the stars). The program initialises its value to 300.00 but you can alter the value after the program has been loaded by typing at the command prompt:
(setq *EXTLEN* 10.00)
..or some other value.
The new value will apply until you alter it again the same way, but will be lost when you close the current drawing. The programmed default value will apply next time you load the program. Note that you MUST type a decimal part to the value, even if just zeros, as here, because it is defined in the program as a ‘real’ (floating-point) value and the program will crash if there is no decimal part such as if you typed 100 as the value.
You can change the programmed default extension-line length if you want to by editing the LISP program file. Open the LISP file with a text editor (eg Notepad) and find the text:
;;; Get extension lines length: (defun get_extl (/ l) (setq l 300.00) )
Type your preferred value in place of 300.00, ensuring you have a decimal part even if only zeros. Note that the ‘l’ is a letter ‘ell’, not a figure ‘one’. Then save and exit the file.
This highlights a program design issue in LISP – where to store values. If the variable is created in the LISP program when loaded, it will always start with the programmed value but may be altered by the user and will retain the new value only during that one editing session. To store values that will carry over to later sessions they need to be saved in the drawing somehow. The AutoCAD System Variables provide one possibility. You can save the value in USERI1 to 5 (for integer values) or USERR1 to 5 (for decimal values) or USERS1 to 5 (for text values). But there can be conflicts if other LISP programs also use those variables. Other ways are to place an invisible Block with attributes, or write an external data file in some well chosen folder.
The DIMCUT command function calls an internal function ‘dimtrim’ to do the actual trimming. The DIMCUT function mainly organises the interactive selection of dimensions. The program code uses AutoCAD’s UNDO and GROUP commands to break into the dimension block. It applies several calculations to figure out which direction is ‘toward the object features’ so that it alters the correct end of the extension lines and preserves the correct alignment.
Because the work is done with an internal function, that function can also be called from other command functions, and the file provides several new commands that are alternatives to the normal AutoCAD DIM commands HOR, VERT, CONT and ALIGNED. The versions provided here work similarly. In fact they use the normal DIM commands internally, but go on to immediately trim the extension lines of the just placed dimension. So it may be more convenient to use the new DIMH, DIMV, DIMC or DIMA commands rather than place all the dimensions using ordinary AutoCAD commands and then apply DIMCUT to the results. You have the option.
There is also an extra facility here that will probably only be of use in those countries that use the convention of writing the decimal part of a value in smaller or superscripted characters, like the Americans do for cents. Since this program was written in Austraia, I presume that convention must be used there. But with millimetre dimensions on building-size objects, it is in any case usual to not show any decimals by setting AutoCAD’s units to zero decimals. But if you want it, DIMSUP will convert the decimal part of selected dimensions text to superscripted figures. It allows you to enter the decimal marker character being used, and defaults to a full-stop. If used in most parts of Europe you would need to specify a comma each time, or alter the default in the LISP. I doubt if DIMSUP will be of any use to readers but have left it in the file as received.
I also received other LISP files from Christof Candido and also from the reader in New Zealand, Ken Taylor. They provide some other ways of tackling this dimensioning issue which will be presented in a later article.
The usage procedure will be obvious to those who have used LISP bits and pieces before. For those new to LISP, the old AutoCAD way is to type (load “A-DIMS1.LSP”) at the command prompt, assuming that the downloaded file has been saved in a directory listed in AutoCAD’s support files search paths. The newer, and easier way, is to use AutoCAD’s APPLOAD facility which pops up a dialog where you can browse to find the file. In IntelliCAD, use the ‘Load LISP/ADS’ item on the Tools menu, and browse for the file in the dialog that pops up. TurboCAD and FelixCAD have something similar. Having found the file so that it shows in the window, click the Load button. Then the new commands will be available while that drawing is being edited. If you should alter the LISP file, be sure to click the Load button again otherwise you will continue using the original version.