[已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字
2 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
[已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字
因小弟從事鋼筋撿料行業,自己原手動計算,現在想透過圖面有的資訊進行資料計算,因小弟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
這邊是我的代碼,我覺得很有挑戰性,希望有高手若不嫌麻煩,也請多指點,謝謝!
附上圖片及檔案,萬分感謝
圖面有片我撿好的牆,也改好了簡易數值計算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)
)
附上圖片及檔案,萬分感謝
- 附件
pc200098 在 2017-01-03, 18:21 作了第 2 次修改
pc200098- 初級會員
- 文章總數 : 49
年齡 : 39
來自 : 台南市
職業 : 機械製圖
愛好 : 電玩
個性 : 執著
使用年資 : 12
使用版本 : 2013&2016
積分 : 1
經驗值 : 5287
威望值 : 53
注冊日期 : 2011-03-10
學習小孩 likes this post
回復: [已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字
4#20@20^340*10
4#340*2
340*20
20^340*10
x跟*可以當成乘數,目前只能吃這幾種文字格式。
205+340*8,這種類型,我的認知:205的組數1,340的組數8,這我就不處理了。
4#340*2
340*20
20^340*10
x跟*可以當成乘數,目前只能吃這幾種文字格式。
205+340*8,這種類型,我的認知:205的組數1,340的組數8,這我就不處理了。
- 附件
Atsai- 中級會員
- 文章總數 : 167
年齡 : 49
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 5929
威望值 : 524
注冊日期 : 2012-04-06
回復: [已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字
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組嗎? 非常感謝!!!
pc200098- 初級會員
- 文章總數 : 49
年齡 : 39
來自 : 台南市
職業 : 機械製圖
愛好 : 電玩
個性 : 執著
使用年資 : 12
使用版本 : 2013&2016
積分 : 1
經驗值 : 5287
威望值 : 53
注冊日期 : 2011-03-10
回復: [已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字
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組嗎? 非常感謝!!!
這個應該是你要的結果,測試看看吧!
- 附件
Atsai- 中級會員
- 文章總數 : 167
年齡 : 49
來自 : 台中
職業 : 工程
愛好 : 看漫畫
個性 : 樂天
使用年資 : 10
使用版本 : 2010
AutoCAD基礎篇等級 : 10星級
積分 : 8
經驗值 : 5929
威望值 : 524
注冊日期 : 2012-04-06
回復: [已解決]如何建立Lisp可判斷文字內容與屬性後匯整並插入文字
[quote="Atsai"][quote="pc200098"]
非常謝謝你,但如果可以,是否能給我原始碼,或是私下給我,因為有必要時想隨時設變就不用在線上麻煩您
未來可能會把^彎鉤記號改成┌,或是把圖層"3#"判斷改成"3分鋼筋",或是把熱鍵指令TTR改TTR2
但如果可以直接改原始碼,我就直接改就好,不然還要再PO麻煩您為我修改,除非您真的不介意...
在此也十分感謝您的幫助,謝謝您~
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麻煩您為我修改,除非您真的不介意...
在此也十分感謝您的幫助,謝謝您~
pc200098- 初級會員
- 文章總數 : 49
年齡 : 39
來自 : 台南市
職業 : 機械製圖
愛好 : 電玩
個性 : 執著
使用年資 : 12
使用版本 : 2013&2016
積分 : 1
經驗值 : 5287
威望值 : 53
注冊日期 : 2011-03-10
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章