Thursday, August 23, 2007

Auto Increment Numbering Macro for AutoCAD LT

Have you ever tried automating tasks in AutoCAD LT? If so, you will find it really difficult due to lack of programming support inside it. Often this leads you to experiment with DIESEL to achieve the results you normally achieve in full version of AutoCAD. As an result of this AUGI thread, here is a tricky macro to automate the process of increment numbering in AutoCAD LT.

*^c^c_text;\;;$M=$(+,$(getvar,USERR1),$(getvar,USERR2));setvar;USERR1;$M=$(+,$(getvar,USERR1),$(getvar,USERR2));

Configure the macro in a button (or wherever you are comfortable). Click on the button once and click on the required locations continuously to keep the incremented numbers. use USERR1 system variable to set the starting number and USERR2 for the increment. For example, suppose you need to start numbering from 1.001 and continue like 1.002,1.003,1.004........, set USERR1 to 1 and USERR2 to .001. This will enable you to do the numbering as stated before.

The above macro is restricted to work only when the text height in the current text style is 0. If you have the habit of assigning specific text height to a text style, then you should better use the following macro.
Quote:

*^c^c_text;\;$M=$(+,$(getvar,USERR1),$(getvar,USERR2));setvar;USERR1;$M=$(+,$(getvar,USERR1),$(getvar,USERR2));

I just removed only one semicolumn from the second macro after the 'Text' command. It's becuase the 'Text' command skips one step (Text height) if the current text style has already got text height assigned. Hope AutoCAD LT people find this tip very useful. Needless to say, it will give you the same result in AutoCAD full version.

*EDIT*

Thanks to a very good suggestion from Russ for adding a prefix, I ended up adding both prefix and suffix to the numbers.

*^c^c_text;\;;$M=$(getvar,USERS1)$M=$(+,$(getvar,USERR1),$(getvar,USERR2))$M=$(getvar,USERS2);setvar;USERR1;$M=$(+,$(getvar,USERR1),$(getvar,USERR2));

The macro uses USERS1 system variable to hold the prefix and USERS2 for the suffix. Thanks to comments from an anonymous visitor, I realised that USERSx system variables are not supported in AutoCAD LT. So I replaced the macro with a new one using (getenv,variable) function in place of (getvar,USERSx).


*^c^c_text;\;;$M=$(getenv,StrPrefix)$M=$(+,$(getvar,USERR1),$(getvar,USERR2))$M=$(getenv,StrSuffix);setvar;USERR1;$M=$(+,$(getvar,USERR1),$(getvar,USERR2));

You need to set two environment variables (I used StrPreifx for prefix and StrSuffix for suffix) using SETENV command which, I beleive, is available in AutoCAD LT. Don't forget to respect the text height of the current text style as mentioned eariler. Again, I don't have AutoCAD LT to test this macro. I would be really thankful if somebody could test it on LT and post a feedback on it.

*EDIT*

5 comments:

Teri said...

Nice Blog :)

Anonymous said...

Nice work.

Don't suppose you could modify this to include the thirds user variable to hold some prefix text so that you could autonumber something like: W100, W101, W102.....

Russ

har!s said...

I have modified the macro to include a suffix and prefix. Thanks for the suggestion.

har!s

Anonymous said...

Does LT allow the use of the USERSx variables?

har!s said...

To be frank, I have never seen AutoCAD LT in my life :-). Since it supported USERIx and USERRx, I guessed it would also support USERSx. Now my guess seems to be wrong. I may have to use SETENV and GETENV instead of USERSx variables. Thanks a lot for the suggestion.