;;;CODING STARTS HERE
;;;This application will Batch Bind All Xref's in a selection of drawings.
;;;
;;;
;;;Known Dependencies :
;;;DosLib must be available and within the AutoCAD Search Path.
;;;Doslib is available from Robert McNeel & Associates
;;;http://www.mcneel.com
;;;Single Drawing Interface must be ON. (setvar "SDI" 1)
;;;The current drawing loaded must be saved before running BatchBind.
;;;---------------------------------------
;;;Written by Kenny Ramage
;;;March 2002
;;;afralisp@mweb.com.na
;;;http://www.afralisp.com
;;;---------------------------------------
(prompt "\nBatchBind Ver 1.1 - Written
by Kenny Ramage - AfraLisp@mweb.com")
(defun c:batchbind ( / 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.
;;;Now, we need to retrieve the names of
the files that we would
;;;like to bind all xrefs.
(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 Bind" 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.
;;;write the commands to the script file
;;;You can change this section to suit almost any type of batch script file
;;;that your imagination can come up with.
(write-line (strcat "open " fname)
file1)
;open the drawing
;write it to the script file
(write-line (strcat "filedia"
" 0") file1)
;switch off dialogues
;write it to the script file
(write-line (strcat "xref "
"b " "*") file1)
;bind all xrefs
;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
(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)
;CODING ENDS HERE
|