[已解決]統計圖塊數量
2 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[已解決]統計圖塊數量
再次請教大大們!
在網路上找到一個可以統計數量後插入表格
而自己想要的結果是一個單行文字
去除"序號"另把"圖塊名稱" "數量"合併為一個單行文字且數量後面+"個"
如 M4攻牙_5個 為一個單行文字
以下是小弟所修改的~煩請各位大大幫幫忙~感謝再感謝~且附上原碼
;統計塊數量的源碼
(defun c:tjtk(/ en mpl ss n nn m xx pt0 mpl_new i)
(if *table-zg (princ)(setq *table-zg (* 10 (getvar "DIMSCALE"))));設置模式全局變量,初始默認值=1
(setq ss (ssget '((0 . "INSERT"))))
(or ss (setq ss (ssadd)))
(setq n 0 nn (sslength ss) mpl '())
(while (< n nn)
(setq en (ssname ss n) data (entget en))
(setq n (1+ n))
(setq name (cdr (assoc 2 data)));;;
(setq xx (assoc name mpl))
(if xx
(setq m (cadr xx) m (1+ m) mpl (subst (list name m) xx mpl))
(setq mpl (append (list (list name 1)) mpl))
)
)
(if mpl
(progn
(setq i 0)
(setq mpl_new '())
(foreach x mpl
(setq mpl_new (append (list(cons (setq i (1+ i)) x)) mpl_new))
)
(initget 0 "S")
(if (/= (setq pt0 (getpoint (strcat "\n點取插入點[設置(S)文字高度],當前文字高度:" (rtos *table-zg)))) nil)
(progn
(while (= pt0 "S")
(setq str (strcat "\n(建議高度:"(rtos (* 10 (getvar "DIMSCALE"))) ")" " 請輸文字高度:" "<" (rtos *table-zg) ">"))
(if (setq temp (getint str))(setq *table-zg temp));採用新輸入值
(initget 0 "S")
(setq pt0 (getpoint (strcat "\n點取插入點[設置(S)文字高度],當前文字高度:" (rtos *table-zg))))
(if (null pt0)(exit))
)
(if (and pt0 *table-zg)
(TableLst2Table mpl_new pt0 *table-zg)
)
)
)
(princ "/nNothing!")
)
(princ)
)
)
(defun c:tjzf(/ en mpl ss n nn m xx pt0 mpl_new i )
(if *table-zg (princ)(setq *table-zg (* 10 (getvar "DIMSCALE"))));設置模式全局變量,初始默認值=1
(setq ss (ssget '((0 . "text"))))
(or ss (setq ss (ssadd)))
(setq n 0 nn (sslength ss) mpl '())
(while (< n nn)
(setq en (ssname ss n) data (entget en))
(setq n (1+ n))
(setq name (cdr (assoc 1 data)));;;
(setq xx (assoc name mpl))
(if xx
(setq m (cadr xx) m (1+ m) mpl (subst (list name m) xx mpl))
(setq mpl (append (list (list name 1)) mpl))
;(setq m (cdr xx) m (1+ m) mpl (subst (cons name m) xx mpl))
;(setq mpl (cons (cons name 1) mpl))
)
)
(if mpl
(progn
(setq i 0)
(setq mpl_new '())
(foreach x mpl
(setq mpl_new (append (list(cons (setq i (1+ i)) x)) mpl_new))
)
(initget 0 "S")
(if (/= (setq pt0 (getpoint (strcat "\n點取插入點[設置(S)文字高度],當前文字高度:" (rtos *table-zg)))) nil)
(progn
(while (= pt0 "S")
(setq str (strcat "\n(建議高度:"(rtos (* 10 (getvar "DIMSCALE"))) ")" " 請輸文字高度:" "<" (rtos *table-zg) ">"))
(if (setq temp (getint str))(setq *table-zg temp));採用新輸入值
(initget 0 "S")
(setq pt0 (getpoint (strcat "\n點取插入點[設置(S)文字高度],當前文字高度:" (rtos *table-zg))))
(if (null pt0)(exit))
)
(if (and pt0 *table-zg)
(TableLst2Table mpl_new pt0 *table-zg)
)
)
)
(princ "/nNothing!")
)
(princ)
)
)
;參數:
;lis --- 表格型list
;pt --- 表格左上角(點)
;zg ---- 字高(數值型)
(defun TableLst2Table (lis pt zg / emkLine emkText h len1 len2 i h1 w2 len j w1 w2 wlst p0 p1 txt)
(defun emkLine (p1 p2)
(entmake (list '(0 . "LINE") (cons 8 "mtext") (cons 10 p1) (cons 11 p2)))
)
(defun emkText (pt str h)
(entmake (list '(0 . "TEXT") (cons 1 str) (cons 8 "mtext") (cons 10 pt) (cons 40 h) (cons 11 pt) (cons 72 1) (cons 73 2)))
)
(setq h (* zg 2) ; 表格高
len1 (length lis) ; 行數len1
len2 (apply 'max (mapcar 'length lis)) ; 列數len2
p0 (list (car pt) (- (cadr pt) (* 0.5 h))); 定義文字原點
)
(setq lis (mapcar '(lambda (y) (mapcar 'vl-princ-to-string y)) lis)) ; 將表中元素全部變為文本型
; 以下獲取列寬表 wlst
(setq i 0 w2 0 wlst '())
(repeat len2
(foreach e lis
(setq txt (nth i e))
(if (not txt) (setq txt "")) ;如果沒有字符
(setq w1 (* (+ (strlen txt) 1) zg)) ; 列寬=(文字長度+1)*zg
(if (> w1 w2) (setq w2 w1)) ;取最大列寬
)
(setq wlst (cons w2 wlst) w2 0 i (1+ i))
)
;以下按行寫出文字
(setq wlst (reverse wlst))
(setq i 0 j 0 w1 0 w2 0)
(foreach e lis
(setq h1 (- (cadr p0) (* i h))) ; 文字行的y坐標值
(foreach f e
(setq w1 (nth j wlst) w2 (+ w2 w1))
(setq p1 (list (- (+ (car p0) w2) (* w1 0.5)) h1)) ; 文字插入點
(emkText P1 f zg)
(setq j (1+ j))
)
(setq i (1+ i) j 0 w1 0 w2 0)
)
(princ)
)
原碼如下:
;統計塊數量的源碼
(defun c:tjtk(/ en mpl ss n nn m xx pt0 mpl_new i)
(if *table-zg (princ)(setq *table-zg (* 3 (getvar "DIMSCALE"))));設置模式全局變量,初始默認值=1
(setq ss (ssget '((0 . "INSERT"))))
(or ss (setq ss (ssadd)))
(setq n 0 nn (sslength ss) mpl '())
(while (< n nn)
(setq en (ssname ss n) data (entget en))
(setq n (1+ n))
(setq name (cdr (assoc 2 data)));;;
(setq xx (assoc name mpl))
(if xx
(setq m (cadr xx) m (1+ m) mpl (subst (list name m) xx mpl))
(setq mpl (append (list (list name 1)) mpl))
)
)
(if mpl
(progn
(setq i 0)
(setq mpl_new '())
(foreach x mpl
(setq mpl_new (append (list(cons (setq i (1+ i)) x)) mpl_new))
)
(setq mpl_new (append (list (list "序號" "圖塊名稱" "數量")) (reverse mpl_new)))
(initget 0 "S")
(if (/= (setq pt0 (getpoint (strcat "\n點取表格插入點[設置(S)表格文字高度],當前文字高度:" (rtos *table-zg)))) nil)
(progn
(while (= pt0 "S")
(setq str (strcat "\n(建議高度:"(rtos (* 3 (getvar "DIMSCALE"))) ")" " 請輸表格文字高度:" "<" (rtos *table-zg) ">"))
(if (setq temp (getint str))(setq *table-zg temp));採用新輸入值
(initget 0 "S")
(setq pt0 (getpoint (strcat "\n點取表格插入點[設置(S)表格文字高度],當前文字高度:" (rtos *table-zg))))
(if (null pt0)(exit))
)
(if (and pt0 *table-zg)
(TableLst2Table mpl_new pt0 *table-zg)
)
)
)
(princ "/nNothing!")
)
(princ)
)
)
(defun c:tjzf(/ en mpl ss n nn m xx pt0 mpl_new i)
(if *table-zg (princ)(setq *table-zg (* 3 (getvar "DIMSCALE"))));設置模式全局變量,初始默認值=1
(setq ss (ssget '((0 . "text"))))
(or ss (setq ss (ssadd)))
(setq n 0 nn (sslength ss) mpl '())
(while (< n nn)
(setq en (ssname ss n) data (entget en))
(setq n (1+ n))
(setq name (cdr (assoc 1 data)));;;
(setq xx (assoc name mpl))
(if xx
(setq m (cadr xx) m (1+ m) mpl (subst (list name m) xx mpl))
(setq mpl (append (list (list name 1)) mpl))
;(setq m (cdr xx) m (1+ m) mpl (subst (cons name m) xx mpl))
;(setq mpl (cons (cons name 1) mpl))
)
)
(if mpl
(progn
(setq i 0)
(setq mpl_new '())
(foreach x mpl
(setq mpl_new (append (list(cons (setq i (1+ i)) x)) mpl_new))
)
(setq mpl_new (append (list (list "序號" "提取字串" "數量")) (reverse mpl_new)))
(initget 0 "S")
(if (/= (setq pt0 (getpoint (strcat "\n點取表格插入點[設置(S)表格文字高度],當前文字高度:" (rtos *table-zg)))) nil)
(progn
(while (= pt0 "S")
(setq str (strcat "\n(建議高度:"(rtos (* 3 (getvar "DIMSCALE"))) ")" " 請輸表格文字高度:" "<" (rtos *table-zg) ">"))
(if (setq temp (getint str))(setq *table-zg temp));採用新輸入值
(initget 0 "S")
(setq pt0 (getpoint (strcat "\n點取表格插入點[設置(S)表格文字高度],當前文字高度:" (rtos *table-zg))))
(if (null pt0)(exit))
)
(if (and pt0 *table-zg)
(TableLst2Table mpl_new pt0 *table-zg)
)
)
)
(princ "/nNothing!")
)
(princ)
)
)
;參數:
;lis --- 表格型list
;pt --- 表格左上角(點)
;zg ---- 字高(數值型)
;測試(TableLst2Table '((1 12 123 1234 12345 123456 1234567 12345678 123456780 1234567890)(1.0 0.0 0.0)(100.0 12345.0 "5551000" "1234")) (getpoint) 10)
(defun TableLst2Table (lis pt zg / emkLine emkText h len1 len2 i h1 w2 tab_h len j w1 w2 wlst p0 p1 txt)
(defun emkLine (p1 p2)
(entmake (list '(0 . "LINE") (cons 8 "DM_文字表格") (cons 10 p1) (cons 11 p2)))
)
(defun emkText (pt str h)
(entmake (list '(0 . "TEXT") (cons 1 str) (cons 8 "DM_文字表格") (cons 10 pt) (cons 40 h) (cons 11 pt) (cons 72 1) (cons 73 2)))
)
(setq h (* zg 2) ; 表格高
len1 (length lis) ; 表格行數len1
len2 (apply 'max (mapcar 'length lis)) ; 表格列數len2
p0 (list (car pt) (- (cadr pt) (* 0.5 h))); 定義文字原點
)
(setq lis (mapcar '(lambda (y) (mapcar 'vl-princ-to-string y)) lis)) ; 將表中元素全部變為文本型
; 以下獲取列寬表 wlst
(setq i 0 w2 0 wlst '())
(repeat len2
(foreach e lis
(setq txt (nth i e))
(if (not txt) (setq txt "")) ;如果沒有字符
(setq w1 (* (+ (strlen txt) 1) zg)) ; 列寬=(文字長度+1)*zg
(if (> w1 w2) (setq w2 w1)) ;取最大列寬
)
(setq wlst (cons w2 wlst) w2 0 i (1+ i))
)
;以下按行寫出文字
(setq wlst (reverse wlst))
(setq i 0 j 0 w1 0 w2 0)
(foreach e lis
(setq h1 (- (cadr p0) (* i h))) ; 文字行的y坐標值
(foreach f e
(setq w1 (nth j wlst) w2 (+ w2 w1))
(setq p1 (list (- (+ (car p0) w2) (* w1 0.5)) h1)) ; 文字插入點
(emkText P1 f zg)
(setq j (1+ j))
)
(setq i (1+ i) j 0 w1 0 w2 0)
)
; 開始繪製豎線
(setq tab_h (* len1 h)) ; 豎線長
(emkLine pt (polar pt (* pi 1.5) tab_h)) ; 繪製左側第一根豎線
(setq len 0)
(foreach x wlst ; 繪製豎線
(setq len (+ x len) p1 (polar pt 0 len))
(emkLine p1 (polar p1 (* Pi 1.5) tab_h))
)
; 開始繪製橫線
(setq i 0 len 0)
(setq len (apply '+ wlst)) ; 橫線長度
(repeat (1+ len1) ; 繪製橫線
(setq p1 (polar pt (* Pi 1.5) (* i h)) i (1+ i))
(emkLine p1 (polar p1 0 len))
)
(princ)
)
在網路上找到一個可以統計數量後插入表格
而自己想要的結果是一個單行文字
去除"序號"另把"圖塊名稱" "數量"合併為一個單行文字且數量後面+"個"
如 M4攻牙_5個 為一個單行文字
以下是小弟所修改的~煩請各位大大幫幫忙~感謝再感謝~且附上原碼
;統計塊數量的源碼
(defun c:tjtk(/ en mpl ss n nn m xx pt0 mpl_new i)
(if *table-zg (princ)(setq *table-zg (* 10 (getvar "DIMSCALE"))));設置模式全局變量,初始默認值=1
(setq ss (ssget '((0 . "INSERT"))))
(or ss (setq ss (ssadd)))
(setq n 0 nn (sslength ss) mpl '())
(while (< n nn)
(setq en (ssname ss n) data (entget en))
(setq n (1+ n))
(setq name (cdr (assoc 2 data)));;;
(setq xx (assoc name mpl))
(if xx
(setq m (cadr xx) m (1+ m) mpl (subst (list name m) xx mpl))
(setq mpl (append (list (list name 1)) mpl))
)
)
(if mpl
(progn
(setq i 0)
(setq mpl_new '())
(foreach x mpl
(setq mpl_new (append (list(cons (setq i (1+ i)) x)) mpl_new))
)
(initget 0 "S")
(if (/= (setq pt0 (getpoint (strcat "\n點取插入點[設置(S)文字高度],當前文字高度:" (rtos *table-zg)))) nil)
(progn
(while (= pt0 "S")
(setq str (strcat "\n(建議高度:"(rtos (* 10 (getvar "DIMSCALE"))) ")" " 請輸文字高度:" "<" (rtos *table-zg) ">"))
(if (setq temp (getint str))(setq *table-zg temp));採用新輸入值
(initget 0 "S")
(setq pt0 (getpoint (strcat "\n點取插入點[設置(S)文字高度],當前文字高度:" (rtos *table-zg))))
(if (null pt0)(exit))
)
(if (and pt0 *table-zg)
(TableLst2Table mpl_new pt0 *table-zg)
)
)
)
(princ "/nNothing!")
)
(princ)
)
)
(defun c:tjzf(/ en mpl ss n nn m xx pt0 mpl_new i )
(if *table-zg (princ)(setq *table-zg (* 10 (getvar "DIMSCALE"))));設置模式全局變量,初始默認值=1
(setq ss (ssget '((0 . "text"))))
(or ss (setq ss (ssadd)))
(setq n 0 nn (sslength ss) mpl '())
(while (< n nn)
(setq en (ssname ss n) data (entget en))
(setq n (1+ n))
(setq name (cdr (assoc 1 data)));;;
(setq xx (assoc name mpl))
(if xx
(setq m (cadr xx) m (1+ m) mpl (subst (list name m) xx mpl))
(setq mpl (append (list (list name 1)) mpl))
;(setq m (cdr xx) m (1+ m) mpl (subst (cons name m) xx mpl))
;(setq mpl (cons (cons name 1) mpl))
)
)
(if mpl
(progn
(setq i 0)
(setq mpl_new '())
(foreach x mpl
(setq mpl_new (append (list(cons (setq i (1+ i)) x)) mpl_new))
)
(initget 0 "S")
(if (/= (setq pt0 (getpoint (strcat "\n點取插入點[設置(S)文字高度],當前文字高度:" (rtos *table-zg)))) nil)
(progn
(while (= pt0 "S")
(setq str (strcat "\n(建議高度:"(rtos (* 10 (getvar "DIMSCALE"))) ")" " 請輸文字高度:" "<" (rtos *table-zg) ">"))
(if (setq temp (getint str))(setq *table-zg temp));採用新輸入值
(initget 0 "S")
(setq pt0 (getpoint (strcat "\n點取插入點[設置(S)文字高度],當前文字高度:" (rtos *table-zg))))
(if (null pt0)(exit))
)
(if (and pt0 *table-zg)
(TableLst2Table mpl_new pt0 *table-zg)
)
)
)
(princ "/nNothing!")
)
(princ)
)
)
;參數:
;lis --- 表格型list
;pt --- 表格左上角(點)
;zg ---- 字高(數值型)
(defun TableLst2Table (lis pt zg / emkLine emkText h len1 len2 i h1 w2 len j w1 w2 wlst p0 p1 txt)
(defun emkLine (p1 p2)
(entmake (list '(0 . "LINE") (cons 8 "mtext") (cons 10 p1) (cons 11 p2)))
)
(defun emkText (pt str h)
(entmake (list '(0 . "TEXT") (cons 1 str) (cons 8 "mtext") (cons 10 pt) (cons 40 h) (cons 11 pt) (cons 72 1) (cons 73 2)))
)
(setq h (* zg 2) ; 表格高
len1 (length lis) ; 行數len1
len2 (apply 'max (mapcar 'length lis)) ; 列數len2
p0 (list (car pt) (- (cadr pt) (* 0.5 h))); 定義文字原點
)
(setq lis (mapcar '(lambda (y) (mapcar 'vl-princ-to-string y)) lis)) ; 將表中元素全部變為文本型
; 以下獲取列寬表 wlst
(setq i 0 w2 0 wlst '())
(repeat len2
(foreach e lis
(setq txt (nth i e))
(if (not txt) (setq txt "")) ;如果沒有字符
(setq w1 (* (+ (strlen txt) 1) zg)) ; 列寬=(文字長度+1)*zg
(if (> w1 w2) (setq w2 w1)) ;取最大列寬
)
(setq wlst (cons w2 wlst) w2 0 i (1+ i))
)
;以下按行寫出文字
(setq wlst (reverse wlst))
(setq i 0 j 0 w1 0 w2 0)
(foreach e lis
(setq h1 (- (cadr p0) (* i h))) ; 文字行的y坐標值
(foreach f e
(setq w1 (nth j wlst) w2 (+ w2 w1))
(setq p1 (list (- (+ (car p0) w2) (* w1 0.5)) h1)) ; 文字插入點
(emkText P1 f zg)
(setq j (1+ j))
)
(setq i (1+ i) j 0 w1 0 w2 0)
)
(princ)
)
原碼如下:
;統計塊數量的源碼
(defun c:tjtk(/ en mpl ss n nn m xx pt0 mpl_new i)
(if *table-zg (princ)(setq *table-zg (* 3 (getvar "DIMSCALE"))));設置模式全局變量,初始默認值=1
(setq ss (ssget '((0 . "INSERT"))))
(or ss (setq ss (ssadd)))
(setq n 0 nn (sslength ss) mpl '())
(while (< n nn)
(setq en (ssname ss n) data (entget en))
(setq n (1+ n))
(setq name (cdr (assoc 2 data)));;;
(setq xx (assoc name mpl))
(if xx
(setq m (cadr xx) m (1+ m) mpl (subst (list name m) xx mpl))
(setq mpl (append (list (list name 1)) mpl))
)
)
(if mpl
(progn
(setq i 0)
(setq mpl_new '())
(foreach x mpl
(setq mpl_new (append (list(cons (setq i (1+ i)) x)) mpl_new))
)
(setq mpl_new (append (list (list "序號" "圖塊名稱" "數量")) (reverse mpl_new)))
(initget 0 "S")
(if (/= (setq pt0 (getpoint (strcat "\n點取表格插入點[設置(S)表格文字高度],當前文字高度:" (rtos *table-zg)))) nil)
(progn
(while (= pt0 "S")
(setq str (strcat "\n(建議高度:"(rtos (* 3 (getvar "DIMSCALE"))) ")" " 請輸表格文字高度:" "<" (rtos *table-zg) ">"))
(if (setq temp (getint str))(setq *table-zg temp));採用新輸入值
(initget 0 "S")
(setq pt0 (getpoint (strcat "\n點取表格插入點[設置(S)表格文字高度],當前文字高度:" (rtos *table-zg))))
(if (null pt0)(exit))
)
(if (and pt0 *table-zg)
(TableLst2Table mpl_new pt0 *table-zg)
)
)
)
(princ "/nNothing!")
)
(princ)
)
)
(defun c:tjzf(/ en mpl ss n nn m xx pt0 mpl_new i)
(if *table-zg (princ)(setq *table-zg (* 3 (getvar "DIMSCALE"))));設置模式全局變量,初始默認值=1
(setq ss (ssget '((0 . "text"))))
(or ss (setq ss (ssadd)))
(setq n 0 nn (sslength ss) mpl '())
(while (< n nn)
(setq en (ssname ss n) data (entget en))
(setq n (1+ n))
(setq name (cdr (assoc 1 data)));;;
(setq xx (assoc name mpl))
(if xx
(setq m (cadr xx) m (1+ m) mpl (subst (list name m) xx mpl))
(setq mpl (append (list (list name 1)) mpl))
;(setq m (cdr xx) m (1+ m) mpl (subst (cons name m) xx mpl))
;(setq mpl (cons (cons name 1) mpl))
)
)
(if mpl
(progn
(setq i 0)
(setq mpl_new '())
(foreach x mpl
(setq mpl_new (append (list(cons (setq i (1+ i)) x)) mpl_new))
)
(setq mpl_new (append (list (list "序號" "提取字串" "數量")) (reverse mpl_new)))
(initget 0 "S")
(if (/= (setq pt0 (getpoint (strcat "\n點取表格插入點[設置(S)表格文字高度],當前文字高度:" (rtos *table-zg)))) nil)
(progn
(while (= pt0 "S")
(setq str (strcat "\n(建議高度:"(rtos (* 3 (getvar "DIMSCALE"))) ")" " 請輸表格文字高度:" "<" (rtos *table-zg) ">"))
(if (setq temp (getint str))(setq *table-zg temp));採用新輸入值
(initget 0 "S")
(setq pt0 (getpoint (strcat "\n點取表格插入點[設置(S)表格文字高度],當前文字高度:" (rtos *table-zg))))
(if (null pt0)(exit))
)
(if (and pt0 *table-zg)
(TableLst2Table mpl_new pt0 *table-zg)
)
)
)
(princ "/nNothing!")
)
(princ)
)
)
;參數:
;lis --- 表格型list
;pt --- 表格左上角(點)
;zg ---- 字高(數值型)
;測試(TableLst2Table '((1 12 123 1234 12345 123456 1234567 12345678 123456780 1234567890)(1.0 0.0 0.0)(100.0 12345.0 "5551000" "1234")) (getpoint) 10)
(defun TableLst2Table (lis pt zg / emkLine emkText h len1 len2 i h1 w2 tab_h len j w1 w2 wlst p0 p1 txt)
(defun emkLine (p1 p2)
(entmake (list '(0 . "LINE") (cons 8 "DM_文字表格") (cons 10 p1) (cons 11 p2)))
)
(defun emkText (pt str h)
(entmake (list '(0 . "TEXT") (cons 1 str) (cons 8 "DM_文字表格") (cons 10 pt) (cons 40 h) (cons 11 pt) (cons 72 1) (cons 73 2)))
)
(setq h (* zg 2) ; 表格高
len1 (length lis) ; 表格行數len1
len2 (apply 'max (mapcar 'length lis)) ; 表格列數len2
p0 (list (car pt) (- (cadr pt) (* 0.5 h))); 定義文字原點
)
(setq lis (mapcar '(lambda (y) (mapcar 'vl-princ-to-string y)) lis)) ; 將表中元素全部變為文本型
; 以下獲取列寬表 wlst
(setq i 0 w2 0 wlst '())
(repeat len2
(foreach e lis
(setq txt (nth i e))
(if (not txt) (setq txt "")) ;如果沒有字符
(setq w1 (* (+ (strlen txt) 1) zg)) ; 列寬=(文字長度+1)*zg
(if (> w1 w2) (setq w2 w1)) ;取最大列寬
)
(setq wlst (cons w2 wlst) w2 0 i (1+ i))
)
;以下按行寫出文字
(setq wlst (reverse wlst))
(setq i 0 j 0 w1 0 w2 0)
(foreach e lis
(setq h1 (- (cadr p0) (* i h))) ; 文字行的y坐標值
(foreach f e
(setq w1 (nth j wlst) w2 (+ w2 w1))
(setq p1 (list (- (+ (car p0) w2) (* w1 0.5)) h1)) ; 文字插入點
(emkText P1 f zg)
(setq j (1+ j))
)
(setq i (1+ i) j 0 w1 0 w2 0)
)
; 開始繪製豎線
(setq tab_h (* len1 h)) ; 豎線長
(emkLine pt (polar pt (* pi 1.5) tab_h)) ; 繪製左側第一根豎線
(setq len 0)
(foreach x wlst ; 繪製豎線
(setq len (+ x len) p1 (polar pt 0 len))
(emkLine p1 (polar p1 (* Pi 1.5) tab_h))
)
; 開始繪製橫線
(setq i 0 len 0)
(setq len (apply '+ wlst)) ; 橫線長度
(repeat (1+ len1) ; 繪製橫線
(setq p1 (polar pt (* Pi 1.5) (* i h)) i (1+ i))
(emkLine p1 (polar p1 0 len))
)
(princ)
)
wuwubaibai 在 2021-01-08, 22:16 作了第 3 次修改
wuwubaibai- 一般會員
- 文章總數 : 70
年齡 : 42
來自 : 彰化市
職業 : 板金
愛好 : 電腦
個性 : 外向
使用年資 : 4
使用版本 : 2010
經驗值 : 4242
威望值 : 0
注冊日期 : 2014-04-18
回復: [已解決]統計圖塊數量
可否把你的需求,用圖檔說明一下。
(1)未執行程式前
(2)希望執行後的成果
這樣比較容易知道你要的是什麼?
(1)未執行程式前
(2)希望執行後的成果
這樣比較容易知道你要的是什麼?
Atsai- 中級會員
- 文章總數 : 167
年齡 : 49
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 5930
威望值 : 524
注冊日期 : 2012-04-06
回復: [已解決]統計圖塊數量
Atsai 寫到:可否把你的需求,用圖檔說明一下。
(1)未執行程式前
(2)希望執行後的成果
這樣比較容易知道你要的是什麼?
大大已重新上傳圖片~麻煩大大幫忙看看
wuwubaibai- 一般會員
- 文章總數 : 70
年齡 : 42
來自 : 彰化市
職業 : 板金
愛好 : 電腦
個性 : 外向
使用年資 : 4
使用版本 : 2010
經驗值 : 4242
威望值 : 0
注冊日期 : 2014-04-18
回復: [已解決]統計圖塊數量
指令:tktj
直接把結果放在圖面上,測試看看吧!
直接把結果放在圖面上,測試看看吧!
- 附件
Atsai- 中級會員
- 文章總數 : 167
年齡 : 49
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 5930
威望值 : 524
注冊日期 : 2012-04-06
回復: [已解決]統計圖塊數量
Atsai 寫到:指令:tktj
直接把結果放在圖面上,測試看看吧!
大大是想要這個效果沒錯
但是有遇到問題
一 除了自行輸入高度外是否能增加如 (setq str (strcat "\n(建議高度:"(rtos (* 10 (getvar "DIMSCALE"))) ")" " 請輸文字高度:" "<" (rtos *table-zg) ">"))
且可選擇圖框~可點選圖框抓取比例~跟自行輸入比例~而默認比例是採(rtos (* 10 (getvar "DIMSCALE")~字體圖層也是0層(目前我是設定mtext層~可能日後也會想換另一個層
)
二 導入 vlx後~炸開圖塊的文字會變莫名的大~如圖
三 小弟我想把這個lisp合併到攻牙的lisp裡 (另外提問的lisp https://www.autocad-tw.com/t24449-topic)~也就是當我圖面繪製完~使用攻牙lisp 就自動執行圖塊計算
這樣我就無法合併了
再煩請大大看看~謝謝
wuwubaibai- 一般會員
- 文章總數 : 70
年齡 : 42
來自 : 彰化市
職業 : 板金
愛好 : 電腦
個性 : 外向
使用年資 : 4
使用版本 : 2010
經驗值 : 4242
威望值 : 0
注冊日期 : 2014-04-18
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章