AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~

[已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字

上一篇主題 下一篇主題 向下

[已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字

發表 由 pc200098 于 2017-01-01, 09:59

因小弟從事鋼筋撿料行業,自己原手動計算,現在想透過圖面有的資訊進行資料計算,因小弟Lisp功力實在落後很多,想請教板上高手幫我修改或建議,謝謝~
圖面有片我撿好的牆,也改好了簡易數值計算LISP,但不會新增判斷與多行文字格式
圖面有圖層3#(白色)、4#(綠色)5#(紫色)6#(天空藍)
希望能增加選取後判斷圖層後再判斷文字內的符號,^為加總記號+號為搭接記號不是加總記號
以範例"上層筋5#20@20^400+600+420*10"
選取後可以判斷為上層筋、5#、20@、20^400(長度)*10(數量)、600*10、420*10
析出為 上層筋(忽視),5#為鋼筋徑(忽視),20@為間距(忽視),400*10為第一組料,600*10為第二組料,420*10為第三組料,圖層為5#,且第一組料420與第三組料420視為不同資料不合併
然後暫存記憶體後再判斷下一個文字,若下一組文字內容一樣5#,且長度一樣為20^400*n,則會合併數量10+n,也因與第三組視為相異,所以不與第三組合併
最後分類各圖層內容計算,插入多行文字
並指定插入位置、指定文字高度、圖層為0、顏色為3#白色、4#綠色5#紫色6#天空藍、小數精確度為個位數

如果文字前方無5#或20@會以圖層做判別,例如只有180*6,圖層為5#,則判斷為紫色180*6並計入5#資料內
圖檔我會以文字標示,圖層會確實定義,線條只會示意,不會全部繪出,所以可能有三種文字格式
1.文字4#20@300*10
2.4#300*10
3.300*10
但判別析出資料只有圖層300*10

這邊是我的代碼,我覺得很有挑戰性,希望有高手若不嫌麻煩,也請多指點,謝謝!
代碼:
(defun C:TTR () ;/ sum eset enlist oldht len ln total pt)
;(princ "\n \n \nSelect Text: ")
(princ
"\n \n \n請選取多個看起來像數字的文字 Text, 來加總求和 : "
)
(if (setq eset (ssget))
(progn
(setq len (sslength eset)
ln (- len 1)
total 0
)
(while (>= (setq len (- len 1)) 0)
(setq en (ssname eset len)
enlist (entget en)
)
(if (= "TEXT" (cdr (assoc 0 enlist)))
(progn
(if (= len ln)
(princ
"\n \n \n...請稍候....正在計算選取內容..."
)
)
(setq sum (atof (cdr (assoc 1 enlist))))
(setq total (+ total sum))
)
(setq ln (- ln 1))
)
)
(princ "\n \nTotal = ")
(princ total)
;(setq pt (getpoint "\nInsertion Point: "))
(setq pt (getpoint "\n[ 數值總和 ] 文字的插入點 : "))
(command "text" "c" pt "" "" (rtos total 2))
)
(princ "\n \n....*錯誤*.. 沒有選擇動作! \n ")
)
(princ)
)

附上圖片及檔案,萬分感謝
附件
SumLisp.zip 您無權下載這里的附件。(31 Kb) 下載 6 次


pc200098 在 2017-01-03, 10:21 作了第 2 次修改
avatar
pc200098
初級會員
初級會員

文章總數 : 46
年齡 : 31
來自 : 台南市
職業 : 機械製圖
愛好 : 電玩
個性 : 執著
使用年資 : 12
使用版本 : 2013&2016
積分 : 1
經驗值 : 2622
威望值 : 54
注冊日期 : 2011-03-10
男 天秤座 牛

回頂端 向下

回復: [已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字

發表 由 Atsai 于 2017-01-02, 03:36

4#20@20^340*10
4#340*2
340*20
20^340*10
x跟*可以當成乘數,目前只能吃這幾種文字格式。
205+340*8,這種類型,我的認知:205的組數1,340的組數8,這我就不處理了。
附件
ttr_鋼筋統計.zip 命令:ttr您無權下載這里的附件。(3 Kb) 下載 4 次
avatar
Atsai
中級會員
中級會員

文章總數 : 115
年齡 : 42
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 7
經驗值 : 2846
威望值 : 337
注冊日期 : 2012-04-06
男 金牛座 兔

回頂端 向下

回復: [已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字

發表 由 pc200098 于 2017-01-02, 04:14

Atsai 寫到:4#20@20^340*10
4#340*2
340*20
20^340*10
x跟*可以當成乘數,目前只能吃這幾種文字格式。
205+340*8,這種類型,我的認知:205的組數1,340的組數8,這我就不處理了。

205+340*8 意思是205+340的搭接有8組
所以能改成205的8組,340的8組嗎? 非常感謝!!!

avatar
pc200098
初級會員
初級會員

文章總數 : 46
年齡 : 31
來自 : 台南市
職業 : 機械製圖
愛好 : 電玩
個性 : 執著
使用年資 : 12
使用版本 : 2013&2016
積分 : 1
經驗值 : 2622
威望值 : 54
注冊日期 : 2011-03-10
男 天秤座 牛

回頂端 向下

回復: [已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字

發表 由 Atsai 于 2017-01-02, 05:35

pc200098 寫到:
Atsai 寫到:4#20@20^340*10
4#340*2
340*20
20^340*10
x跟*可以當成乘數,目前只能吃這幾種文字格式。
205+340*8,這種類型,我的認知:205的組數1,340的組數8,這我就不處理了。

205+340*8 意思是205+340的搭接有8組
所以能改成205的8組,340的8組嗎? 非常感謝!!!


這個應該是你要的結果,測試看看吧!
附件
ttr_鋼筋統計_ok.zip 您無權下載這里的附件。(4 Kb) 下載 6 次
avatar
Atsai
中級會員
中級會員

文章總數 : 115
年齡 : 42
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 7
經驗值 : 2846
威望值 : 337
注冊日期 : 2012-04-06
男 金牛座 兔

回頂端 向下

回復: [已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字

發表 由 pc200098 于 2017-01-02, 06:20

[quote="Atsai"][quote="pc200098"]
Atsai 寫到:4#20@20^340*10
4#340*2
340*20
20^340*10
x跟*可以當成乘數,目前只能吃這幾種文字格式。
205+340*8,這種類型,我的認知:205的組數1,340的組數8,這我就不處理了。

205+340*8 意思是205+340的搭接有8組
所以能改成205的8組,340的8組嗎? 非常感謝!!!



這個應該是你要的結果,測試看看吧!


非常謝謝你,但如果可以,是否能給我原始碼,或是私下給我,因為有必要時想隨時設變就不用在線上麻煩您
未來可能會把^彎鉤記號改成┌,或是把圖層"3#"判斷改成"3分鋼筋",或是把熱鍵指令TTR改TTR2
但如果可以直接改原始碼,我就直接改就好,不然還要再PO麻煩您為我修改,除非您真的不介意...
在此也十分感謝您的幫助,謝謝您~
avatar
pc200098
初級會員
初級會員

文章總數 : 46
年齡 : 31
來自 : 台南市
職業 : 機械製圖
愛好 : 電玩
個性 : 執著
使用年資 : 12
使用版本 : 2013&2016
積分 : 1
經驗值 : 2622
威望值 : 54
注冊日期 : 2011-03-10
男 天秤座 牛

回頂端 向下

上一篇主題 下一篇主題 回頂端


 
這個論壇的權限:
無法 在這個版面回復文章