DOSLib - Batch Slide Application
In this application we are going to use some of the DOSLib functions
to Convert a selection of drawings to slides. I've explained the program
within the coding by including comments for each line. Good luck and here
we go...
(defun c:batchslide ( / CNTR DPATH DWGPATH FILE1 FLAG FLEN FNAME
FNAME1 LEN1 MESSAGE NFILES NFILES1 SCRFILE
UFILES)
;;;Firstly we need to check if DOSLib is loaded.
(cond
((= (atoi (substr (getvar "acadver") 1 2)) 13)
(if (not (member "doslib13.arx" (arx)))
(arxload (findfile "doslib13.arx"))))
((= (atoi (substr (getvar "acadver") 1 2)) 14)
(if (not (member "doslib14.arx" (arx)))
(arxload (findfile "doslib14.arx"))))
((= (atoi (substr (getvar "acadver") 1 2)) 15)
(if (not (member "doslib2k.arx" (arx)))
(arxload (findfile "doslib2k.arx"))))
);cond
;;;This, first checks the version of AutoCAD in use.
;;;It then checks to see if that version of Doslib is loaded.
;;;If it is not, it searches the AutoCAD search path for the
;;;relevant version, and then loads it.
;;;We must now check that, if we are using A2K, Single Document
;;;Mode is switched OFF.
(if (= (atoi (substr (getvar "acadver") 1 2)) 15)
;if A2K
(setvar "sdi" 0)
;switch off single document interface
);if
;;;Now we are going to do a bit of advertising and display a
;;; Splash Screen for about 5 seconds.
(dos_splash "afralisp.bmp" 5)
;display the splash screen
;;;Now, we need to retrieve the names of the files that we would
;;;like to make slides from.
(setq dwgpath (getvar "dwgprefix"))
;get the path to the current directory
(setq ufiles (dos_getfilem "Select Drawings"
dwgpath "Drawing Files (*.DWG)|*.DWG"))
;display the file dialogue box
(if (not ufiles)
;if no files selected or Cancel
(exit)
;exit the application
);
;;;The first item in the list "ufiles" is the directory path
;;;The remaining items are the file names.
;;;First, let's retrieve the directory path.
(setq dpath (nth 0 ufiles))
;retrieve the directory path - the first item.
;;;Next, let's get the number of items in the list,
;;;and make sure that the user wants to continue.
(setq nfiles (length ufiles))
;get the length of the list
(setq nfiles1 (itoa (- nfiles 1)))
;count only the file names and convert to a string
(setq message (strcat "You have choosen " nfiles1 " files.
\nDo you want to continue?"))
;set up the message
(setq flag (dos_msgbox message "AfraLisp Batch Slides" 4 4))
;display the message box
(if (= flag 6)
;if Yes selected
(progn
;do the following
;;;We'll now open an external file to write our script to.
(setq scrfile (strcat dpath "batdir.scr"))
;add the path to the script file name
(setq file1 (open scrfile "w"))
;open the file to write
(setq cntr 1)
;set the counter
;;;We'll now start the loop, format the file names, and add
;;;the commands to the script file.
(repeat (- nfiles 1)
;start the loop
(setq fname (nth cntr ufiles))
;get the file name
(setq fname (strcat dpath fname))
;add the path to the file name.
;"fname" will be used to open each
;drawing.
(setq flen (strlen fname))
;get the length of file name
(setq len1 (- flen 4))
;take away the last 4 characters (.DWG)
(setq fname1 (substr fname 1 len1))
;get just the filename without the extension.
;"fname1" will be used as our slide file name.
;;;write the commands to the script file
(write-line (strcat "open " fname) file1)
;open the drawing
;write it to the script file
(write-line (strcat ".zoom" " e") file1)
;zoom to extents
;write it to the script file
(write-line (strcat "filedia" " 0") file1)
;switch off dialogues
;write it to the script file
(write-line (strcat "mslide " fname1) file1)
;make the slide
;write it to the script file
(write-line (strcat "filedia" " 1") file1)
;switch on dialogues
;write it to the script file
(write-line "qsave" file1)
;save the drawing
;write it to the script file
(if (= (atoi (substr (getvar "acadver") 1 2)) 15)
;if A2K
(write-line "close" file1)
;close the drawing
;write it to the script file
);if
(setq cntr (1+ cntr))
;increment the counter
);repeat
;;;now that we've finished writing the commands to the script
;;;file, we must remember to close it.
(close file1)
;close the script file
(command "script" scrfile)
;run the script file and sit back and have a beer.
);progn
);if
(princ)
);defun
(princ)
The script file, batdir.scr should look something like this :
open O:\E51D\E51D1\temp\L102.dwg
.zoom e
filedia 0
mslide O:\E51D\E51D1\temp\L102
filedia 1
qsave
close (A2K Only)
open O:\E51D\E51D1\temp\L101.dwg
.zoom e
filedia 0
mslide O:\E51D\E51D1\temp\L101
filedia 1
qsave
close (A2K Only)
To download this application, Click Here.
Click here to download the latest version of DOSLib.
Click here to visit Robert Mcneel and
Associates. |