33
165
148
初露锋芒
使用道具 举报
15
315
361
初来乍到
(setq my_filename "C:\\UserTemp\\Book1.xls");; Groups elements in sublist by criteria(defun subtrack (test lst)(apply 'append (mapcar '(lambda (x)(if (eq (car x) test)(list x))) lst)));; Counts equivalent subs in list(defun countsub (lst sub) (cond ((null lst) 0) ((and (equal (caar lst) (car sub) 0.00001) (equal (cadar lst) (cadr sub) 0.00001) ) (1+ (countsub (cdr lst) sub)) ) (T (countsub (cdr lst) sub)) ));; Get info from block include from constant attributes in following form:;; (("TAG1" . "VALUE1") ("TAG2" . "VALUE2") ...("*CONSTANT*: TAGN" . "VALUEN")) (defun get-all-atts (obj / atts att_list const_atts const_list ent) (and (if (and obj (vlax-property-available-p obj 'Hasattributes) (eq :vlax-true (vla-get-hasattributes obj)) ) (progn (setq atts (vlax-invoke obj 'Getattributes)) (foreach att atts (setq att_list (cons (cons (vla-get-tagstring att) (vla-get-textstring att) ) att_list ) ) ) ) ) ) (cond ((vlax-method-applicable-p obj 'Getconstantattributes) (setq const_atts (vlax-invoke obj 'Getconstantattributes)) (foreach att const_atts (setq const_list (cons (cons (vla-get-tagstring att) (vla-get-textstring att) ) const_list ) ) ) (setq att_list (reverse (append const_list att_list))) ) (T (reverse att_list)) ) );; Main part ;; (defun C:ATOUT (/ acsp adoc aexc awb axss bname cll colm com_data csht data exc_data fname header_list info nwb osm row sht ss str1 str2 subtot tmp_data tmp_get tmp_snip tot ) (vl-load-com) (setq adoc (vla-get-activedocument (vlax-get-acad-object) ) acsp (vla-get-modelspace adoc) ) (setq osm (getvar "osmode")) (setvar "osmode" 0) (setvar "cmdecho" 0) (vla-endundomark adoc) (vla-startundomark adoc) (vl-cmdf "zoom" "a") (vl-cmdf "zoom" ".85x") ;; variations of the selection ;; All blocks : (setq ss (ssget "_X" (list (cons 0 "INSERT")(cons 66 1)))) ;; Selected on screen:;;;(setq ss (ssget '((0 . "INSERT")))) ;; All blocks by name:;;; (setq bname (getstring "\n *** Block name:\n"));;; (setq ss (ssget "_X" (list (cons 0 "INSERT")(cons 66 1) (cons 2 bname)))) (setq axss (vla-get-activeselectionset adoc)) (setq com_data nil) ;for debug only (vlax-for a axss (setq tmp_get (get-all-atts a)) (setq tmp_data (append (list (vla-get-name a)(vla-get-handle a)) tmp_get)) (setq com_data (cons tmp_data com_data)) (setq tmp_data nil) ) ;ok (setq tot (length com_data)) (setq exc_data nil) ;for debug only (while com_data (setq tmp_snip (subtrack (caar com_data) com_data) ) (setq str1 (strcat "Subtotal blocks " """ (caar com_data) """ ": " ) str2 (itoa (length tmp_snip)) ) (setq exc_data (append exc_data (list (append tmp_snip (list (list str2 str1)))) )