Going further...
Code:
; to insert block from block library file
(defun dwg-insert (dwg_name block_name ins_point x_scale
y_scale rot_angle / lib_file
)
(if (not (tblsearch "BLOCK" block_name))
(progn
(setvar "cmdecho" 0)
(setq lib_file (findfile dwg_name))
(if (not lib_file)
(progn
(alert "Library is not found")
(exit)
(princ)
)
(progn
(command "-insert" lib_file)
(command nil)
)
)
)
)
(if (tblsearch "BLOCK" block_name)
(progn
(command "-insert" block_name "_X" x_scale
"_Y" y_scale "_R" rot_angle
ins_point
)
(command "purge" "_B" "*" "_N")
)
)
(setvar "cmdecho" 1)
(princ)
)
; Test :
(defun C:test1
(/ block_name dwg_name ins_point rot_angle x_scale y_scale)
(setq dwg_name "C:/MyLisp/tornillo-com.dwg"
block_name "ALLEM-cc-03-08"
ins_point (getpoint "\nPick ins point >>>\n")
x_scale 1.
y_scale 1.
rot_angle 0.
)
(dwg-insert
dwg_name block_name ins_point x_scale y_scale rot_angle)
(princ)
)
;CaLL : (C:test1)
Then you can to count all the blocks
and write data in to any file i.e. txt-file:
Code:
(defun sub-total (lst elem / count)
(setq count 0)
(while (member elem lst)
(setq count (1+ count))
(setq lst (cdr (member elem lst)))
)
count
)
;CaLL : (setq sub-count (sub-total count_list bname))
(defun get-total (source_list match_list / data_list)
(foreach i match_list
(setq tmp (cons i (sub-total source_list i))
data_list (cons tmp data_list)
)
)
data_list
)
;CaLL : (setq data_list (get-total count_list bname_list))
(defun get-count (/ bname bname_list count_list elist en i ssb)
(setvar "cmdecho" 0)
(command "zoom" "e")
(setvar "cmdecho" 1)
(if (setq ssb (ssget "_X" (list (cons 0 "INSERT") (cons 2 "*#x#*"))))
(progn
(setq i -1)
(repeat (sslength ssb)
(setq en (ssname ssb (setq i (1+ i)))
elist (entget en)
bname (cdr (assoc 2 elist))
)
(if (not (member bname bname_list))
(setq bname_list (cons bname bname_list))
)
(setq count_list (cons bname count_list))
)
)
(alert "No blocks found here")
)
(get-total count_list bname_list)
)
;CaLL : (setq data (get-count))
(defun write-data (data / fname)
(setq
fname (getstring
"\nEnter file name to write data in without extension :"
)
)
(setq fname (open (strcat (getvar "dwgprefix") fname "." "txt") "w"))
(foreach i data
(prin1 i fname)
)
(close fname)
(princ)
)
;CaLL :(write-data data)
(defun read-data (/ data_list fname rline)
(setq fname (getstring
"\nEnter file name to read data without extension :"
)
)
(setq fname (open (strcat (getvar "dwgprefix") fname "." "txt") "r"))
(setq rline (read-line fname))
(setq data_list (read (strcat "(" rline ")")))
(close fname)
(reverse data_list)
)
;CaLL :(setq ret_data (read-data))
;;TesT :
(defun C:test2 (/ data)
(setq data (get-count))
(write-data data)
(princ)
)
;CaLL : (C:test2)
~'J'~
Bookmarks