批量建块+图块统计
全屋定制使用lengxiaxi 发表于 2023-4-4 18:44
作者--LeeMac
data:image/png;base64,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不行
作者--LeeMac
;;--------------=={ Count.lsp - Advanced Block Counter }==--------------;;
;; ;;
;;This program enables the user to record the quantities of a ;;
;;selection or all standard or dynamic blocks in the working drawing. ;;
;;The results of the block count may be displayed at the AutoCAD ;;
;;command-line, written to a Text or CSV file, or displayed in an ;;
;;AutoCAD Table, where available. ;;
;; ;;
;;Upon issuing the command syntax 'count' at the AutoCAD ;;
;;command-line, the user is prompted to make a selection of standard;;
;;or dynamic blocks to be counted by the program. At this prompt, ;;
;;the user may right-click or press 'Enter' to automatically count ;;
;;all blocks in the drawing. ;;
;; ;;
;;Depending on the output setting, the results may then be printed ;;
;;to the AutoCAD command-line and displayed in the Text Window, or ;;
;;the user will be prompted to specify an insertion point for the ;;
;;table, or a filename & location for the Text or CSV output file. ;;
;; ;;
;;The program settings may be configured using the 'countsettings' ;;
;;command; this command will present the user with a dialog interface ;;
;;through which the data output, table & file headings, displayed ;;
;;columns, sorting field & sort order may each be altered. ;;
;;----------------------------------------------------------------------;;
;;Author:Lee Mac, Copyright ?2014-www.lee-mac.com ;;
;;----------------------------------------------------------------------;;
;;Version 1.0 - 2010-06-05 ;;
;; ;;
;;- First release. ;;
;;----------------------------------------------------------------------;;
;;Version 1.1 - 2010-06-06 ;;
;; ;;
;;- Updated code to include Settings dialog. ;;
;;- Added Undo Marks. ;;
;;----------------------------------------------------------------------;;
;;Version 1.2 - 2010-06-06 ;;
;; ;;
;;- Fixed bug with 64-bit systems. ;;
;;----------------------------------------------------------------------;;
;;Version 1.3 - 2011-03-02 ;;
;; ;;
;;- Program completely rewritten. ;;
;;- Updated code to work without error on 64-bit systems by fixing ;;
;; bug with ObjectID subfunction - my thanks go to member 'Jeff M' ;;
;; at theSwamp.org forums for helping me solve this problem. ;;
;;- Added ability to write block count to Text/CSV Files. ;;
;;----------------------------------------------------------------------;;
;;Version 1.4 - 2014-06-15 ;;
;; ;;
;;- Program completely rewritten. ;;
;;----------------------------------------------------------------------;;
(setq
count:version "1-4"
count:defaults
'(
(out "tab")
(tg1 "1")
(tg2 "1")
(tg3 "1")
(ed1 "Block Data")
(ed2 "Preview")
(ed3 "Block Name")
(ed4 "Count")
(srt "blk")
(ord "asc")
)
)
;;----------------------------------------------------------------------;;
(defun count:fixdir ( dir )
(vl-string-right-trim "\\" (vl-string-translate "/" "\\" dir))
)
;;----------------------------------------------------------------------;;
(defun count:getsavepath ( / tmp )
(cond
( (setq tmp (getvar 'roamablerootprefix))
(strcat (count:fixdir tmp) "\\Support")
)
( (setq tmp (findfile "acad.pat"))
(count:fixdir (vl-filename-directory tmp))
)
( (count:fixdir (vl-filename-directory (vl-filename-mktemp))))
)
)
;;----------------------------------------------------------------------;;
(setq count:savepath (count:getsavepath) ;; Save path for DCL & Config files
count:dclfname (strcat count:savepath "\\LMAC_count_V" count:version ".dcl")
count:cfgfname (strcat count:savepath "\\LMAC_count_V" count:version ".cfg")
)
;;----------------------------------------------------------------------;;
(defun c:count
(
/
*error*
all
col
des dir
ed1 ed2 ed3 ed4
fil fnm fun
hgt
idx ins
lst
ord out
row
sel srt
tab tg1 tg2 tg3 tmp
xrf
)
(defun *error* ( msg )
(if (= 'file (type des))
(close des)
)
(if (and (= 'vla-object (type tab))
(null (vlax-erased-p tab))
(= "AcDbTable" (vla-get-objectname tab))
(vlax-write-enabled-p tab)
)
(vla-put-regeneratetablesuppressed tab :vlax-false)
)
(if (and (= 'vla-object (type count:wshobject))
(not (vlax-object-released-p count:wshobject))
)
(progn
(vlax-release-object count:wshobject)
(setq count:wshobject nil)
)
)
(count:endundo (count:acdoc))
(if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
(princ (strcat "\nError: " msg))
)
(princ)
)
(if (not (findfile count:cfgfname))
(count:writecfg count:cfgfname (mapcar 'cadr count:defaults))
)
(count:readcfg count:cfgfname (mapcar 'car count:defaults))
(foreach sym count:defaults
(if (not (boundp (car sym))) (apply 'set sym))
)
(if (and (= "tab" out) (not (vlax-method-applicable-p (vla-get-modelspace (count:acdoc)) 'addtable)))
(setq out "txt")
)
(count:startundo (count:acdoc))
(while (setq tmp (tblnext "block" (null tmp)))
(if (= 4 (logand 4 (cdr (assoc 70 tmp))))
(setq xrf (vl-list* "," (cdr (assoc 2 tmp)) xrf))
)
)
(if xrf
(setq fil(list '(0 . "INSERT") '(-4 . "<NOT") (cons 2 (apply 'strcat (cdr xrf))) '(-4 . "NOT>")))
(setq fil '((0 . "INSERT")))
)
(cond
( (null (setq all (ssget "_X" fil)))
(count:popup
"No Blocks Found" 64
(princ "No blocks were found in the active drawing.")
)
)
( (and (= "tab" out) (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (getvar 'clayer)))))))
(count:popup
"Current Layer Locked" 64
(princ "Please unlock the current layer before using this program.")
)
)
( (progn
(setvar 'nomutt 1)
(princ "\nSelect blocks to count <all>: ")
(setq sel
(cond
( (null (setq sel (vl-catch-all-apply 'ssget (list fil))))
all
)
( (null (vl-catch-all-error-p sel))
sel
)
)
)
(setvar 'nomutt 0)
(null sel)
)
)
( (or (= "com" out)
(and (="tab" out) (setq ins (getpoint "\nSpecify point for table: ")))
(and (/= "tab" out)
(setq fnm
(getfiled "Create Output File"
(cond
( (and (setq dir (getenv "LMac\\countdir"))
(vl-file-directory-p (setq dir (count:fixdir dir)))
)
(strcat dir "\\")
)
( (getvar 'dwgprefix))
)
out 1
)
)
)
)
(repeat (setq idx (sslength sel))
(setq lst (count:assoc++ (count:effectivename (ssname sel (setq idx (1- idx)))) lst))
)
(if (= "blk" srt)
(setq fun (eval (list 'lambda '( a b ) (list (if (= "asc" ord) '< '>) '(strcase (car a)) '(strcase (car b))))))
(setq fun (eval (list 'lambda '( a b ) (list (if (= "asc" ord) '< '>) '(cdr a) '(cdr b)))))
)
(setq lst (vl-sort lst 'fun))
(cond
( (= "com" out)
(defun prinn ( x ) (princ "\n") (princ x))
(prinn (count:padbetween "" "" "=" 60))
(if (= "1" tg1)
(progn
(prinn ed1)
(prinn (count:padbetween "" "" "-" 60))
)
)
(prinn (count:padbetween ed3 ed4 " " 55))
(prinn (count:padbetween "" "" "-" 60))
(if (= "1" tg3)
(foreach itm lst
(prinn (count:padbetween (car itm) (itoa (cdr itm)) "." 55))
)
(foreach itm lst (prinn (car itm)))
)
(prinn (count:padbetween "" "" "=" 60))
(textpage)
)
( (= "tab" out)
(if (= "1" tg3)
(setq lst (mapcar '(lambda ( x ) (list (car x) (itoa (cdr x)))) lst))
(setq lst (mapcar '(lambda ( x ) (list (car x))) lst))
)
(setq hgt
(vla-gettextheight
(vla-item
(vla-item (vla-get-dictionaries (count:acdoc)) "acad_tablestyle")
(getvar 'ctablestyle)
)
acdatarow
)
)
(setq tab
(vla-addtable
(vlax-get-property (count:acdoc) (if (= 1 (getvar 'cvport)) 'paperspace 'modelspace))
(vlax-3D-point (trans ins 1 0))
(+ (length lst) 2)
(+ 1 (atoi tg2) (atoi tg3))
(* 2.5 hgt)
(* hgt
(max
(apply 'max
(mapcar 'strlen
(append
(if (= "1" tg2) (list ed2))
(if (= "1" tg3) (list ed4))
(cons ed3 (apply 'append lst))
)
)
)
(if (= "1" tg1) (/ (strlen ed1) (+ 1 (atoi tg2) (atoi tg3))) 0)
)
)
)
)
(vla-put-regeneratetablesuppressed tab :vlax-true)
(vla-put-stylename tab (getvar 'ctablestyle))
(setq col 0)
(mapcar
'(lambda ( a b ) (if (= "1" a) (progn (vla-settext tab 1 col b) (setq col (1+ col)))))
(list tg2 "1" tg3)
(list ed2 ed3 ed4)
)
(setq row 2)
(foreach itm lst
(if (= "1" tg2)
(count:setblocktablerecord tab row (setq col 0) (car itm))
(setq col -1)
)
(foreach txt itm
(vla-settext tab row (setq col (1+ col)) txt)
)
(setq row (1+ row))
)
(if (= "1" tg1)
(vla-settext tab 0 0 ed1)
(vla-deleterows tab 0 1)
)
)
( (setenv "LMac\\countdir" (count:fixdir (vl-filename-directory fnm)))
(if
(
(if (= "txt" out)
count:writetxt
count:writecsv
)
(append
(if (= "1" tg1)
(list (list ed1))
)
(if (= "1" tg3)
(cons (list ed3 ed4) (mapcar '(lambda ( x ) (list (car x) (itoa (cdr x)))) lst))
(cons (list ed3) (mapcar '(lambda ( x ) (list (car x))) lst))
)
)
fnm
)
(princ (strcat "\nBlock data written to " fnm))
(count:popup "Unable to Create Output File" 48
(princ
(strcat
"The program was unable to create the following file:\n\n"
fnm
"\n\nPlease ensure that you have write-permissions for the above directory."
)
)
)
)
)
)
)
)
(*error* nil)
(princ)
)
;;----------------------------------------------------------------------;;
(defun c:countsettings
(
/
*error*
dch des
ord out out-fun
srt
tg1 tg1-fun tg2 tg2-fun tg3 tg3-fun
)
(defun *error* ( msg )
(if (= 'file (type des))
(close des)
)
(if (and (= 'int (type dch))
(< 0 dch)
)
(unload_dialog dch)
)
(if (and (= 'vla-object (type count:wshobject))
(not (vlax-object-released-p count:wshobject))
)
(progn
(vlax-release-object count:wshobject)
(setq count:wshobject nil)
)
)
(if (and msg (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*")))
(princ (strcat "\nError: " msg))
)
(princ)
)
(if (not (findfile count:cfgfname))
(count:writecfg count:cfgfname (mapcar 'cadr count:defaults))
)
(count:readcfg count:cfgfname (mapcar 'car count:defaults))
(foreach sym count:defaults
(if (not (boundp (car sym))) (apply 'set sym))
)
(cond
( (not (count:writedcl count:dclfname))
(count:popup "DCL file could not be written" 48
(princ
(strcat
"The DCL file required by this program could not be written to the following location:\n\n"
count:dclfname
"\n\nPlease ensure that you have write-permissions for the above directory."
)
)
)
)
( (<= (setq dch (load_dialog count:dclfname)) 0)
(count:popup "DCL file could not be loaded" 48
(princ
(strcat
"The following DCL file required by this program could not be loaded:\n\n"
count:dclfname
"\n\nPlease verify the integrity of this file."
)
)
)
)
( (not (new_dialog "dia" dch))
(count:popup "DCL file contains an error" 48
(princ
(strcat
"The program dialog could not be displayed as the following DCL file file contains an error:\n\n"
count:dclfname
"\n\nPlease verify the integrity of this file."
)
)
)
)
( t
(set_tile "dcl"
(strcat
"Count.lsp Version "
(vl-string-translate "-" "." count:version)
" \\U+00A9 Lee Mac "
(menucmd "m=$(edtime,0,yyyy)")
)
)
(if (and (= "tab" out) (not (vlax-method-applicable-p (vla-get-modelspace (count:acdoc)) 'addtable)))
(progn
(mode_tile "tab" 1)
(setq out "txt")
)
)
( (setq tg1-fun (lambda ( val ) (mode_tile "ed1" (- 1 (atoi (setq tg1 val)))))) (set_tile "tg1" tg1))
(action_tile "tg1" "(tg1-fun $value)")
( (setq tg2-fun (lambda ( val ) (mode_tile "ed2" (- 1 (atoi (setq tg2 val)))))) (set_tile "tg2" tg2))
(action_tile "tg2" "(tg2-fun $value)")
( (setq tg3-fun (lambda ( val ) (mode_tile "ed4" (- 1 (atoi (setq tg3 val)))))) (set_tile "tg3" tg3))
(action_tile "tg3" "(tg3-fun $value)")
(foreach key '("ed1" "ed2" "ed3" "ed4")
(set_tile key (eval (read key)))
(action_tile key (strcat "(setq " key " $value)"))
)
(set_tile out "1")
( (setq out-fun
(lambda ( val )
(if (= "tab" (setq out val))
(progn
(mode_tile "tg2" 0)
(mode_tile "ed2" (- 1 (atoi tg2)))
)
(progn
(mode_tile "tg2" 1)
(mode_tile "ed2" 1)
)
)
)
)
out
)
(foreach key '("tab" "txt" "csv" "com")
(action_tile key "(out-fun $key)")
)
(set_tile srt "1")
(foreach key '("blk" "qty")
(action_tile key "(setq srt $key)")
)
(set_tile ord "1")
(foreach key '("asc" "des")
(action_tile key "(setq ord $key)")
)
(if (= 1 (start_dialog))
(count:writecfg count:cfgfname (mapcar 'eval (mapcar 'car count:defaults)))
)
)
)
(*error* nil)
(princ)
)
;;----------------------------------------------------------------------;;
(defun count:popup ( ttl flg msg / err )
(setq err (vl-catch-all-apply 'vlax-invoke-method (list (count:wsh) 'popup msg 0 ttl flg)))
(if (null (vl-catch-all-error-p err))
err
)
)
;;----------------------------------------------------------------------;;
(defun count:wsh nil
(cond (count:wshobject) ((setq count:wshobject (vlax-create-object "wscript.shell"))))
)
;;----------------------------------------------------------------------;;
(defun count:tostring ( arg / dim )
(cond
( (= 'int (type arg))
(itoa arg)
)
( (= 'real (type arg))
(setq dim (getvar 'dimzin))
(setvar 'dimzin 8)
(setq arg (rtos arg 2 15))
(setvar 'dimzin dim)
arg
)
( (vl-prin1-to-string arg))
)
)
;;----------------------------------------------------------------------;;
(defun count:writecfg ( cfg lst / des )
(if (setq des (open cfg "w"))
(progn
(foreach itm lst (write-line (count:tostring itm) des))
(setq des (close des))
t
)
)
)
;;----------------------------------------------------------------------;;
(defun count:readcfg ( cfg lst / des itm )
(if
(and
(setq cfg (findfile cfg))
(setq des (open cfg "r"))
)
(progn
(foreach sym lst
(if (setq itm (read-line des))
(setsym (read itm))
)
)
(setq des (close des))
t
)
)
)
;;----------------------------------------------------------------------;;
(defun count:writedcl ( dcl / des )
(cond
( (findfile dcl))
( (setq des (open dcl "w"))
(foreach itm
'(
"//--------------------=={ Count Dialog Definition }==-------------------//"
"// //"
"//Dialog definition file for use in conjunction with Count.lsp //"
"//----------------------------------------------------------------------//"
"//Author:Lee Mac, Copyright ?2014-www.lee-mac.com //"
"//----------------------------------------------------------------------//"
""
"b15 : edit_box"
"{"
" edit_width = 16;"
" edit_limit = 1024;"
" fixed_width = true;"
" alignment = centered;"
" horizontal_margin = none;"
" vertical_margin = none;"
"}"
"b30 : edit_box"
"{"
" edit_width = 52;"
" edit_limit = 1024;"
" fixed_width = true;"
" alignment = centered;"
" horizontal_margin = none;"
" vertical_margin = none;"
"}"
"tog : toggle"
"{"
" vertical_margin = none;"
" horizontal_margin = 0.2;"
"}"
"rwo : row"
"{"
" fixed_width = true;"
" alignment = centered;"
"}"
"rrw : radio_row"
"{"
" fixed_width = true;"
" alignment = centered;"
"}"
"dia : dialog"
"{"
" key = \"dcl\";"
" spacer_1;"
" : boxed_column"
" {"
" label = \"Output\";"
" : rrw"
" {"
" : radio_button { key = \"tab\"; label = \"Table\"; }"
" : radio_button { key = \"txt\"; label = \"Text File\"; }"
" : radio_button { key = \"csv\"; label = \"CSV File\"; }"
" : radio_button { key = \"com\"; label = \"Command line\"; }"
" }"
" spacer;"
" }"
" : boxed_column"
" {"
" label = \"Headings\";"
" spacer_1;"
" : rwo"
" {"
" : tog { key = \"tg1\"; }"
" : b30 { key = \"ed1\"; }"
" : spacer"
" {"
" fixed_width = true;"
" vertical_margin = none;"
" width = 2.5;"
" }"
" }"
" : rwo"
" {"
" spacer;"
" : tog { key = \"tg2\"; }"
" : b15 { key = \"ed2\"; }"
" : b15 { key = \"ed3\"; }"
" : b15 { key = \"ed4\"; }"
" : tog { key = \"tg3\"; }"
" spacer;"
" }"
" spacer_1;"
" }"
" : row"
" {"
" : boxed_column"
" {"
" label = \"Sort By\";"
" : rrw"
" {"
" : radio_button { key = \"blk\"; label = \"Block Name\"; }"
" : radio_button { key = \"qty\"; label = \"Quantity\"; }"
" }"
" spacer;"
" }"
" : boxed_column"
" {"
" label = \"Sort Order\";"
" : rrw"
" {"
" : radio_button { key = \"asc\"; label = \"Ascending\"; }"
" : radio_button { key = \"des\"; label = \"Descending\"; }"
" }"
" spacer;"
" }"
" }"
" spacer_1; ok_cancel;"
"}"
""
"//----------------------------------------------------------------------//"
"// End of File //"
"//----------------------------------------------------------------------//"
)
(write-line itm des)
)
(setq des (close des))
(while (not (findfile dcl))) ;; for slow HDDs
dcl
)
)
)
;;----------------------------------------------------------------------;;
(defun count:writecsv ( lst csv / des sep )
(if (setq des (open csv "w"))
(progn
(setq sep (cond ((vl-registry-read "HKEY_CURRENT_USER\\Control Panel\\International" "sList")) (",")))
(foreach row lst (write-line (count:lst->csv row sep) des))
(close des)
t
)
)
)
;;----------------------------------------------------------------------;;
(defun count:lst->csv ( lst sep )
(if (cdr lst)
(strcat (count:csv-addquotes (car lst) sep) sep (count:lst->csv (cdr lst) sep))
(count:csv-addquotes (car lst) sep)
)
)
;;----------------------------------------------------------------------;;
(defun count:csv-addquotes ( str sep / pos )
(cond
( (wcmatch str (strcat "*[`" sep "\"]*"))
(setq pos 0)
(while (setq pos (vl-string-position 34 str pos))
(setq str (vl-string-subst "\"\"" "\"" str pos)
pos (+ pos 2)
)
)
(strcat "\"" str "\"")
)
( str )
)
)
;;----------------------------------------------------------------------;;
(defun count:writetxt ( lst txt / des )
(if (setq des (open txt "w"))
(progn
(foreach itm lst (write-line (count:lst->str itm "\t") des))
(close des)
t
)
)
)
;;----------------------------------------------------------------------;;
(defun count:lst->str ( lst del )
(if (cdr lst)
(strcat (car lst) del (count:lst->str (cdr lst) del))
(car lst)
)
)
;;----------------------------------------------------------------------;;
(defun count:padbetween ( s1 s2 ch ln )
(
(lambda ( a b c )
(repeat (- ln (length b) (length c)) (setq c (cons a c)))
(vl-list->string (append b c))
)
(ascii ch)
(vl-string->list s1)
(vl-string->list s2)
)
)
;;----------------------------------------------------------------------;;
(defun count:setblocktablerecord ( obj row col blk )
(eval
(list 'defun 'count:setblocktablerecord '( obj row col blk )
(cons
(if (vlax-method-applicable-p obj 'setblocktablerecordid32)
'vla-setblocktablerecordid32
'vla-setblocktablerecordid
)
(list
'obj 'row 'col
(list 'count:objectid (list 'vla-item (vla-get-blocks (count:acdoc)) 'blk))
':vlax-true
)
)
)
)
(count:setblocktablerecord obj row col blk)
)
;;----------------------------------------------------------------------;;
(defun count:objectid ( obj )
(eval
(list 'defun 'count:objectid '( obj )
(cond
( (not (wcmatch (getenv "PROCESSOR_ARCHITECTURE") "*64*"))
'(vla-get-objectid obj)
)
( (= 'subr (type vla-get-objectid32))
'(vla-get-objectid32 obj)
)
( (list 'vla-getobjectidstring (vla-get-utility (count:acdoc)) 'obj ':vlax-false))
)
)
)
(count:objectid obj)
)
;;----------------------------------------------------------------------;;
(defun count:assoc++ ( key lst / itm )
(if (setq itm (assoc key lst))
(subst (cons key (1+ (cdr itm))) itm lst)
(cons(cons key 1) lst)
)
)
;;----------------------------------------------------------------------;;
(defun count:effectivename ( ent / blk rep )
(if (wcmatch (setq blk (cdr (assoc 2 (entget ent)))) "`**")
(if
(and
(setq rep
(cdadr
(assoc -3
(entget
(cdr
(assoc 330
(entget
(tblobjname "block" blk)
)
)
)
'("AcDbBlockRepBTag")
)
)
)
)
(setq rep (handent (cdr (assoc 1005 rep))))
)
(setq blk (cdr (assoc 2 (entget rep))))
)
)
blk
)
;;----------------------------------------------------------------------;;
(defun count:startundo ( doc )
(count:endundo doc)
(vla-startundomark doc)
)
;;----------------------------------------------------------------------;;
(defun count:endundo ( doc )
(while (= 8 (logand 8 (getvar 'undoctl)))
(vla-endundomark doc)
)
)
;;----------------------------------------------------------------------;;
(defun count:acdoc nil
(eval (list 'defun 'count:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
(count:acdoc)
)
;;----------------------------------------------------------------------;;
(vl-load-com)
(princ
(strcat
"\n:: Count.lsp | Version "
(vl-string-translate "-" "." count:version)
" | \\U+00A9 Lee Mac "
(menucmd "m=$(edtime,0,yyyy)")
" www.lee-mac.com ::"
"\n:: \"count\" - Main Program | \"countsettings\" - Settings ::"
)
)
(princ)
;;----------------------------------------------------------------------;;
;; End of File ;;
;;----------------------------------------------------------------------;;
liunian0524 发表于 2023-5-22 11:33
这个图块统计论坛有源码
你号源码再哪里呢 大神能否分享原码 这个有什么稀奇的哈 大神能否分享原码 每人每天均有免费的明经币2个。
觉得好用点击【评分】,赏个币 这个真厉害 本帖最后由 liunian0524 于 2023-9-6 09:17 编辑
6666666,支持 楼主的这个不错!
页:
[1]
2