【回帖精華】圖塊自訂性質參數
+2
Tiger&蘋果爸
hoiyen
6 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 2D討論 :: 已解決主題精華區
第1頁(共1頁)
【回帖精華】圖塊自訂性質參數
大家好!!
我本身工作是繪製水電圖說
常常會繪製像 燈具 插座 出線口...等等
每次在算數量時總是很麻煩的一個個算
早期我想到一個方式,就是把我所有會用到的設備都變成圖塊
每一個設備都有單一的圖層
例如: 40W*4的T-bar燈具 我就做成一圖塊一個圖層
最後算數量時我只要這張圖全選->快速選取->就可算出我設備數量
但管線卻一直只用 量測工具 去算我管線長度
最近發現可以用Lisp程式解決這問題
真是讓我太感動了...
現在我還有一個問題,就是我在繪製電力迴路時
負載也是很重要的考量,關係到可以連接多少設備
我一直在試可是還沒找出方法
就是我的設備都是圖塊,有沒方法可以另外定義它一個數值
例如:40W*4的T-bar燈具 它這圖塊可不可以把它另定義成160W的耗電量
這樣每串連完一個迴路,我想把這迴路圖塊全選起,它就可以自動把這迴路
所有的圖塊的數值加總起來
例如:40W*4的T-bar燈具我共用了8盞,總負載共1280W <-這是我想要得到的數字
不知各位先進有沒什麼好意見可以提供嗎?
----------------------------------------------------------------------------------------
解決方式:
我整理一下這方法步驟:
1.attdef先定義屬性文字 (標籤:power 預設:輸入 值 ; 模式:不可見,預置)
2.與圖形定義成圖塊
3.執行Lisp程式(powersum)
4.選取要計算之圖塊計算出結果
Lisp程式 (虛線以下)
----------------------------------------------------------------------------------------
(vl-load-com)
(defun c:powersum (/ ssBlock intIncrement dblAttTotal objBlock strValue strTotal)
(princ "\n選取圖塊加總功率 \n")
(setq ssBlock (ssget '((0 . "INSERT"))))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "POWER")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總功率 : " (rtos dblAttTotal) "W"))
(princ)
)
-----------------------------------------------------------------------------
另補充管線計算方式,給需要的人
1.將所有連接 燈具,插座 的線,弧等全都設定在同一圖層
2.運用cad 快速選取功能選擇 多重,管線設定之圖層
3.執行管線Lisp程式 sum
4.即可計算出管線之總長度
sum 之 Lisp 程式 (虛線以下)
----------------------------------------------------------------------------------
(defun C:sum(/ sumlen ss n curve ObjectName len)
(princ"\n統計<直線、圓弧、多義線、樣條線、圓、橢圓>等圖元的長度")
(princ"\n For 中華鋼結構論壇 \n 版本2004.03.03")
(vl-load-com)
(setq sumlen 0)
(setq ss (ssget '((0 . "CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE,ARC"))))
(setq n 0)
(repeat (sslength ss)
(setq curve (vlax-ename->vla-object (ssname ss n)))
(setq ObjectName (vlax-get-property curve 'ObjectName))
(setq ObjectName (substr ObjectName 5))
(setq len (vlax-curve-getdistatparam curve (vlax-curve-getendparam curve) ))
(setq sumlen (+ sumlen len))
(setq n (1+ n))
(princ (strcat "\n第" (rtos n) "條是 " ObjectName ))
(princ (strcat " 長度: " (rtos len 2 5)))
)
(princ (strcat "\n共" (rtos n) "條 " ))
(princ (strcat "總長度: " (rtos sumlen 2 5)))
(textscr)
(princ)
)
---------------------------------------------------------------------------
我本身工作是繪製水電圖說
常常會繪製像 燈具 插座 出線口...等等
每次在算數量時總是很麻煩的一個個算
早期我想到一個方式,就是把我所有會用到的設備都變成圖塊
每一個設備都有單一的圖層
例如: 40W*4的T-bar燈具 我就做成一圖塊一個圖層
最後算數量時我只要這張圖全選->快速選取->就可算出我設備數量
但管線卻一直只用 量測工具 去算我管線長度
最近發現可以用Lisp程式解決這問題
真是讓我太感動了...
現在我還有一個問題,就是我在繪製電力迴路時
負載也是很重要的考量,關係到可以連接多少設備
我一直在試可是還沒找出方法
就是我的設備都是圖塊,有沒方法可以另外定義它一個數值
例如:40W*4的T-bar燈具 它這圖塊可不可以把它另定義成160W的耗電量
這樣每串連完一個迴路,我想把這迴路圖塊全選起,它就可以自動把這迴路
所有的圖塊的數值加總起來
例如:40W*4的T-bar燈具我共用了8盞,總負載共1280W <-這是我想要得到的數字
不知各位先進有沒什麼好意見可以提供嗎?
----------------------------------------------------------------------------------------
解決方式:
我整理一下這方法步驟:
1.attdef先定義屬性文字 (標籤:power 預設:輸入 值 ; 模式:不可見,預置)
2.與圖形定義成圖塊
3.執行Lisp程式(powersum)
4.選取要計算之圖塊計算出結果
Lisp程式 (虛線以下)
----------------------------------------------------------------------------------------
(vl-load-com)
(defun c:powersum (/ ssBlock intIncrement dblAttTotal objBlock strValue strTotal)
(princ "\n選取圖塊加總功率 \n")
(setq ssBlock (ssget '((0 . "INSERT"))))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "POWER")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總功率 : " (rtos dblAttTotal) "W"))
(princ)
)
-----------------------------------------------------------------------------
另補充管線計算方式,給需要的人
1.將所有連接 燈具,插座 的線,弧等全都設定在同一圖層
2.運用cad 快速選取功能選擇 多重,管線設定之圖層
3.執行管線Lisp程式 sum
4.即可計算出管線之總長度
sum 之 Lisp 程式 (虛線以下)
----------------------------------------------------------------------------------
(defun C:sum(/ sumlen ss n curve ObjectName len)
(princ"\n統計<直線、圓弧、多義線、樣條線、圓、橢圓>等圖元的長度")
(princ"\n For 中華鋼結構論壇 \n 版本2004.03.03")
(vl-load-com)
(setq sumlen 0)
(setq ss (ssget '((0 . "CIRCLE,ELLIPSE,LINE,*POLYLINE,SPLINE,ARC"))))
(setq n 0)
(repeat (sslength ss)
(setq curve (vlax-ename->vla-object (ssname ss n)))
(setq ObjectName (vlax-get-property curve 'ObjectName))
(setq ObjectName (substr ObjectName 5))
(setq len (vlax-curve-getdistatparam curve (vlax-curve-getendparam curve) ))
(setq sumlen (+ sumlen len))
(setq n (1+ n))
(princ (strcat "\n第" (rtos n) "條是 " ObjectName ))
(princ (strcat " 長度: " (rtos len 2 5)))
)
(princ (strcat "\n共" (rtos n) "條 " ))
(princ (strcat "總長度: " (rtos sumlen 2 5)))
(textscr)
(princ)
)
---------------------------------------------------------------------------
Tiger&蘋果爸 在 2010-05-06, 09:19 作了第 13 次修改 (原因 : 更改主題顏色)
hoiyen- 一般會員
- 文章總數 : 22
年齡 : 52
來自 : Taipei
職業 : 建築
愛好 : 電腦
個性 : 溫和
使用年資 : 10
使用版本 : 2010
經驗值 : 5355
威望值 : 3
注冊日期 : 2010-04-29
回復: 【回帖精華】圖塊自訂性質參數
主題類型若為詢問方向或討論功能,請在主題前請加入[討論],顏色請指定為[綠色]。討論主題沒有時間限制。
[說明]發表主題前,請遵守相關要領!
http://autocad.bestoforum.net/forum-f12/topic-t1521.htm
謝謝您的配合~
[說明]發表主題前,請遵守相關要領!
http://autocad.bestoforum.net/forum-f12/topic-t1521.htm
謝謝您的配合~
____________________________________________________________________________________
👉[訂購]AutoCAD圖塊大師課程(點我)👈
回復: 【回帖精華】圖塊自訂性質參數
我用2008版試了一下
1.attdef先定義屬性文字
2.加上圖形block定義成圖塊
3.insert插入圖塊,並輸入您要的數值
4.複製圖塊
5.ddedit修改屬性文字內容
6.不同迴路改成不同圖層(關閉或凍結,只留下要選取的圖層)
7.eattext轉成xls檔案(記得選在目前的圖面中)
這樣是不是您要的呢?
1.attdef先定義屬性文字
2.加上圖形block定義成圖塊
3.insert插入圖塊,並輸入您要的數值
4.複製圖塊
5.ddedit修改屬性文字內容
6.不同迴路改成不同圖層(關閉或凍結,只留下要選取的圖層)
7.eattext轉成xls檔案(記得選在目前的圖面中)
這樣是不是您要的呢?
Tiger&蘋果爸 寫到: 謝謝熱心回覆~< 積分 +1>
[公告]關於團隊成員的回文及貢獻
Tiger&蘋果爸 在 2010-05-04, 09:12 作了第 1 次修改 (原因 : 加分囉~)
jack0615.tw- 中級會員
- 文章總數 : 206
年齡 : 62
來自 : Taipei
職業 : 可憐的上班族
愛好 : 照相
個性 : 善良
使用年資 : 3
使用版本 : 2011&2012
積分 : 7
經驗值 : 6360
威望值 : 383
注冊日期 : 2010-03-07
回復: 【回帖精華】圖塊自訂性質參數
jack0615.tw 寫到:我用2008版試了一下
1.attdef先定義屬性文字
2.加上圖形block定義成圖塊
3.insert插入圖塊,並輸入您要的數值
4.複製圖塊
5.ddedit修改屬性文字內容
6.不同迴路改成不同圖層(關閉或凍結,只留下要選取的圖層)
7.eattext轉成xls檔案(記得選在目前的圖面中)
這樣是不是您要的呢?
感謝您!! 可能是我沒說清楚
我是想要在cad上的每一個圖塊都可以對應一個數值
當我把這些圖塊框選在一起資料匯出,自動把圖塊相對應的數值加總起來
不知這在cad辦不辦得到呀?
hoiyen- 一般會員
- 文章總數 : 22
年齡 : 52
來自 : Taipei
職業 : 建築
愛好 : 電腦
個性 : 溫和
使用年資 : 10
使用版本 : 2010
經驗值 : 5355
威望值 : 3
注冊日期 : 2010-04-29
回復: 【回帖精華】圖塊自訂性質參數
我想這是客製化需求,必須透過lisp才能滿足!!hoiyen 寫到:jack0615.tw 寫到:我用2008版試了一下
1.attdef先定義屬性文字
2.加上圖形block定義成圖塊
3.insert插入圖塊,並輸入您要的數值
4.複製圖塊
5.ddedit修改屬性文字內容
6.不同迴路改成不同圖層(關閉或凍結,只留下要選取的圖層)
7.eattext轉成xls檔案(記得選在目前的圖面中)
這樣是不是您要的呢?
感謝您!! 可能是我沒說清楚
我是想要在cad上的每一個圖塊都可以對應一個數值
當我把這些圖塊框選在一起資料匯出,自動把圖塊相對應的數值加總起來
不知這在cad辦不辦得到呀?
所以AutoCAD只能按照 jack0615.tw 滿足部份需求~
____________________________________________________________________________________
👉[訂購]AutoCAD圖塊大師課程(點我)👈
回復: 【回帖精華】圖塊自訂性質參數
小弟我對這個議題很感興趣....因為我也是畫電機圖說的
不過我在工作上的經驗不是很充足,所以在圖塊製作的考量方面常常缺東缺西的
不知道hoiyen是否本身也是會寫lisp呢??希望能跟您配合討論....
再請問1280W是否要匯出到EXCEL或是做照度的計算呢?
還有能否提供簡單的圖片說明您的需求呢?...這樣問題會再清楚一點
不過我在工作上的經驗不是很充足,所以在圖塊製作的考量方面常常缺東缺西的
不知道hoiyen是否本身也是會寫lisp呢??希望能跟您配合討論....
再請問1280W是否要匯出到EXCEL或是做照度的計算呢?
還有能否提供簡單的圖片說明您的需求呢?...這樣問題會再清楚一點
leoneriol- 榮譽顧問
- 文章總數 : 818
年齡 : 40
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 9161
威望值 : 960
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
回復: 【回帖精華】圖塊自訂性質參數
根據樓主的敘述以前有接觸過lisp,底下這個範例是將值帶入圖塊的屬性,跟您要取出屬性值計算應該蠻類似的,請參考。
http://www.cadtutor.co.uk/forum/showthread.php?t=17246
http://www.cadtutor.co.uk/forum/showthread.php?t=17246
jack0615.tw- 中級會員
- 文章總數 : 206
年齡 : 62
來自 : Taipei
職業 : 可憐的上班族
愛好 : 照相
個性 : 善良
使用年資 : 3
使用版本 : 2011&2012
積分 : 7
經驗值 : 6360
威望值 : 383
注冊日期 : 2010-03-07
回復: 【回帖精華】圖塊自訂性質參數
圖塊屬性設定如下圖
配合以下Lisp取出該屬性總和:
配合以下Lisp取出該屬性總和:
- 代碼:
(defun c:powersum (/ ssBlock intIncrement dblAttTotal objBlock strValue strTotal)
(princ "\n選取圖塊加總功率 \n")
(setq ssBlock (ssget '((0 . "INSERT"))))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "POWER")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總功率 : " (rtos dblAttTotal) "W"))
(princ)
)
DevilWang 在 2010-05-04, 12:20 作了第 1 次修改
DevilWang- 高級會員
- 文章總數 : 113
年齡 : 57
來自 : 台北
職業 : AEC
愛好 : Thinking...
個性 : 閒散
使用年資 : 25↑
使用版本 : 2012
積分 : 15
經驗值 : 6015
威望值 : 355
發帖精華 : 1
回帖精華 : 3
注冊日期 : 2010-03-29
回復: 【回帖精華】圖塊自訂性質參數
hoiyen 寫到:
感謝您!! 可能是我沒說清楚
我是想要在cad上的每一個圖塊都可以對應一個數值
當我把這些圖塊框選在一起資料匯出,自動把圖塊相對應的數值加總起來
不知這在cad辦不辦得到呀?
突發奇想.....既然不想使用屬性文字.....
那如果單純的在圖塊內建立一個單行文字(內容"160")....再用動態圖塊的可見性參數改成不可見
再用lisp將其值取出?...似乎很麻煩....
jack0615.tw & DevilWang的方式也是相同效果,而且lisp取出值得程式也分享出來了,採納此方式似乎較實際??
leoneriol 在 2010-05-04, 18:31 作了第 1 次修改 (原因 : 修改內容)
leoneriol- 榮譽顧問
- 文章總數 : 818
年齡 : 40
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 9161
威望值 : 960
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
回復: 【回帖精華】圖塊自訂性質參數
leoneriol 寫到:小弟我對這個議題很感興趣....因為我也是畫電機圖說的
不過我在工作上的經驗不是很充足,所以在圖塊製作的考量方面常常缺東缺西的
不知道hoiyen是否本身也是會寫lisp呢??希望能跟您配合討論....
再請問1280W是否要匯出到EXCEL或是做照度的計算呢?
還有能否提供簡單的圖片說明您的需求呢?...這樣問題會再清楚一點
1.在圖塊製作的考量方面常常缺東缺西的<--不知是指哪方面? 看看我能不能幫上忙!!
2.我本身電腦是還可以,唯獨程式這方面弱得可以,我也是前些日子才找到各位熱心人寫的lisp程式
讓我現在在計算 電力管線數量 有了非常大的幫助!!
3.1280W匯出是要讓我在設計電源迴路時,串接設備能很快速的算出負載,不必拿計算機一樣一樣
設備的加總!! 尤其是當土建圖一變更,電氣最倒霉幾乎都要重算,還好我現在負載表是用excel 打好
再插入autocad 總負載不必拿計算機按了
hoiyen- 一般會員
- 文章總數 : 22
年齡 : 52
來自 : Taipei
職業 : 建築
愛好 : 電腦
個性 : 溫和
使用年資 : 10
使用版本 : 2010
經驗值 : 5355
威望值 : 3
注冊日期 : 2010-04-29
回復: 【回帖精華】圖塊自訂性質參數
DevilWang 寫到:圖塊屬性設定如下圖
配合以下Lisp取出該屬性總和:
- 代碼:
(defun c:powersum (/ ssBlock intIncrement dblAttTotal objBlock strValue strTotal)
(princ "\n選取圖塊加總功率 \n")
(setq ssBlock (ssget '((0 . "INSERT"))))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "POWER")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總功率 : " (rtos dblAttTotal) "W"))
(princ)
)
感謝~~ 我就是這意思!!
不過Lisp 程式我執行後出現錯誤耶??
我不懂程式!! 不知是哪出錯了!! 不知您有跑出來嗎?
hoiyen- 一般會員
- 文章總數 : 22
年齡 : 52
來自 : Taipei
職業 : 建築
愛好 : 電腦
個性 : 溫和
使用年資 : 10
使用版本 : 2010
經驗值 : 5355
威望值 : 3
注冊日期 : 2010-04-29
回復: 【回帖精華】圖塊自訂性質參數
jack0615.tw 寫到:根據樓主的敘述以前有接觸過lisp,底下這個範例是將值帶入圖塊的屬性,跟您要取出屬性值計算應該蠻類似的,請參考。
http://www.cadtutor.co.uk/forum/showthread.php?t=17246
感謝!!
可是我試不出來! 不知您跑得出來嗎?
hoiyen- 一般會員
- 文章總數 : 22
年齡 : 52
來自 : Taipei
職業 : 建築
愛好 : 電腦
個性 : 溫和
使用年資 : 10
使用版本 : 2010
經驗值 : 5355
威望值 : 3
注冊日期 : 2010-04-29
回復: 【回帖精華】圖塊自訂性質參數
DevilWang 寫到:圖塊屬性設定如下圖
配合以下Lisp取出該屬性總和:
- 代碼:
(defun c:powersum (/ ssBlock intIncrement dblAttTotal objBlock strValue strTotal)
(princ "\n選取圖塊加總功率 \n")
(setq ssBlock (ssget '((0 . "INSERT"))))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "POWER")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總功率 : " (rtos dblAttTotal) "W"))
(princ)
)
我跑不出來耶!! 程式有錯!? 我不懂Lisp程式
不知您有跑出來嗎?
hoiyen- 一般會員
- 文章總數 : 22
年齡 : 52
來自 : Taipei
職業 : 建築
愛好 : 電腦
個性 : 溫和
使用年資 : 10
使用版本 : 2010
經驗值 : 5355
威望值 : 3
注冊日期 : 2010-04-29
回復: 【回帖精華】圖塊自訂性質參數
請先確認圖塊中所含屬性值是否正確。hoiyen 寫到:
感謝~~ 我就是這意思!!
不過Lisp 程式我執行後出現錯誤耶??
我不懂程式!! 不知是哪出錯了!! 不知您有跑出來嗎?
下圖為執行過程,請參考
Tiger&蘋果爸 寫到: 恭喜您的回覆獲選為回帖精華文章! < 積分+1、威望+3 >
[公告]關於論壇的文章價值
Tiger&蘋果爸 在 2010-05-06, 09:18 作了第 2 次修改 (原因 : 精華文章)
DevilWang- 高級會員
- 文章總數 : 113
年齡 : 57
來自 : 台北
職業 : AEC
愛好 : Thinking...
個性 : 閒散
使用年資 : 25↑
使用版本 : 2012
積分 : 15
經驗值 : 6015
威望值 : 355
發帖精華 : 1
回帖精華 : 3
注冊日期 : 2010-03-29
回復: 【回帖精華】圖塊自訂性質參數
DevilWang 寫到:請先確認圖塊中所含屬性值是否正確。hoiyen 寫到:
感謝~~ 我就是這意思!!
不過Lisp 程式我執行後出現錯誤耶??
我不懂程式!! 不知是哪出錯了!! 不知您有跑出來嗎?
下圖為執行過程,請參考
哈哈~~對對對,就是我要的!!
可是怎麼我還是執行錯誤
錯誤訊息 :
錯誤: no function definition: VLAX-ENAME->VLA-OBJECT
我先畫個120x60 的長方形 ->attdef定義屬性文字->2個block起來
選取這個block -> powersum ->就出現 錯誤: no function definition: VLAX-ENAME->VLA-OBJECT
屬性文字我也有輸入了160
不知是我哪個地方錯了嗎?
hoiyen- 一般會員
- 文章總數 : 22
年齡 : 52
來自 : Taipei
職業 : 建築
愛好 : 電腦
個性 : 溫和
使用年資 : 10
使用版本 : 2010
經驗值 : 5355
威望值 : 3
注冊日期 : 2010-04-29
回復: 【回帖精華】圖塊自訂性質參數
你在程式第一行加入
(vl-load-com)
應該就可以了。
(vl-load-com)
應該就可以了。
DevilWang- 高級會員
- 文章總數 : 113
年齡 : 57
來自 : 台北
職業 : AEC
愛好 : Thinking...
個性 : 閒散
使用年資 : 25↑
使用版本 : 2012
積分 : 15
經驗值 : 6015
威望值 : 355
發帖精華 : 1
回帖精華 : 3
注冊日期 : 2010-03-29
回復: 【回帖精華】圖塊自訂性質參數
DevilWang 寫到:你在程式第一行加入
(vl-load-com)
應該就可以了。
加入後,程式跑完了
但顯示 0W !!??
hoiyen- 一般會員
- 文章總數 : 22
年齡 : 52
來自 : Taipei
職業 : 建築
愛好 : 電腦
個性 : 溫和
使用年資 : 10
使用版本 : 2010
經驗值 : 5355
威望值 : 3
注冊日期 : 2010-04-29
回復: 【回帖精華】圖塊自訂性質參數
在前篇操作過程示範中,有一個確認屬性值的動作,請再確認是否有 POWER 這個屬性及其值是否正確。
如果是一張既有圖塊的圖,新增屬性到圖塊中,方法可以參考這篇
同步屬性 ATTSYNC 2
如果是一張既有圖塊的圖,新增屬性到圖塊中,方法可以參考這篇
同步屬性 ATTSYNC 2
DevilWang- 高級會員
- 文章總數 : 113
年齡 : 57
來自 : 台北
職業 : AEC
愛好 : Thinking...
個性 : 閒散
使用年資 : 25↑
使用版本 : 2012
積分 : 15
經驗值 : 6015
威望值 : 355
發帖精華 : 1
回帖精華 : 3
注冊日期 : 2010-03-29
回復: 【回帖精華】圖塊自訂性質參數
[quote="hoiyen"]
感謝感謝~~太感動了~~~
我試出來了~~
原來我把屬性裡的power名稱改成40Wx4 值還是160
難怪程式一直抓不到值
真是太感謝了!!!
也感謝 Tiger&蘋果爸 的技術支援!!
DevilWang 寫到:圖塊屬性設定如下圖
配合以下Lisp取出該屬性總和:
- 代碼:
(defun c:powersum (/ ssBlock intIncrement dblAttTotal objBlock strValue strTotal)
(princ "\n選取圖塊加總功率 \n")
(setq ssBlock (ssget '((0 . "INSERT"))))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "POWER")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總功率 : " (rtos dblAttTotal) "W"))
(princ)
)
感謝感謝~~太感動了~~~
我試出來了~~
原來我把屬性裡的power名稱改成40Wx4 值還是160
難怪程式一直抓不到值
真是太感謝了!!!
也感謝 Tiger&蘋果爸 的技術支援!!
hoiyen- 一般會員
- 文章總數 : 22
年齡 : 52
來自 : Taipei
職業 : 建築
愛好 : 電腦
個性 : 溫和
使用年資 : 10
使用版本 : 2010
經驗值 : 5355
威望值 : 3
注冊日期 : 2010-04-29
回復: 【回帖精華】圖塊自訂性質參數
這個方法真的是太讚了啦~省了超多時間的~照著方法做了一遍
完全沒問題~超開心的啦 ^^
真的是沒事就要來逛逛~學習學習
完全沒問題~超開心的啦 ^^
真的是沒事就要來逛逛~學習學習
verlth- 初級會員
- 文章總數 : 36
年齡 : 46
來自 : Taipei
職業 : 機電工程
愛好 : 打球
個性 : 溫和
使用年資 : 10年
使用版本 : AUTOCAD 2014
積分 : 2
經驗值 : 5706
威望值 : 6
注冊日期 : 2009-05-21
回復: 【回帖精華】圖塊自訂性質參數
再請教,如果我在圖塊設3個標籤,數值,lisp程式要取出圖塊屬性值要怎麼改?我想說同程式跑3次再ㄧ次秀出,結果不行,它只會秀最後的值,不知您知道要怎修正嗎?DevilWang 寫到:你在程式第一行加入
(vl-load-com)
應該就可以了。
hoiyen- 一般會員
- 文章總數 : 22
年齡 : 52
來自 : Taipei
職業 : 建築
愛好 : 電腦
個性 : 溫和
使用年資 : 10
使用版本 : 2010
經驗值 : 5355
威望值 : 3
注冊日期 : 2010-04-29
回復: 【回帖精華】圖塊自訂性質參數
hoiyen 寫到:再請教,如果我在圖塊設3個標籤,數值,lisp程式要取出圖塊屬性值要怎麼改?我想說同程式跑3次再ㄧ次秀出,結果不行,它只會秀最後的值,不知您知道要怎修正嗎?DevilWang 寫到:你在程式第一行加入
(vl-load-com)
應該就可以了。
(strcase "POWER")<===找到這一行.....
然後把power改成另外兩個標籤試試看!!!
~~~~~~~~~~~~~~~~~~~~~~~~詳細修改方式~~~~~~~~~~~~~~~~~~
- 代碼:
(vl-load-com)
(defun c:powersum (/ ssBlock intIncrement dblAttTotal objBlock strValue strTotal)
(princ "\n選取圖塊加總功率 \n")
(setq ssBlock (ssget '((0 . "INSERT"))))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "POWER")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總功率 : " (rtos dblAttTotal) "W"))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "aaaa")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總aaaa : " (rtos dblAttTotal) "aaaa的單位"))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "bbbb")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總bbbb : " (rtos dblAttTotal) "bbbb的單位"))
(princ)
)
請將aaaa及bbbb的部分改成您設定的屬性標籤名稱,這是較簡單點的修改方式,將程式重複貼三次
leoneriol 在 2010-05-10, 09:58 作了第 1 次修改 (原因 : 修改內容)
leoneriol- 榮譽顧問
- 文章總數 : 818
年齡 : 40
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 9161
威望值 : 960
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
回復: 【回帖精華】圖塊自訂性質參數
照您的方式修改,我試成功了,真是太感謝了~謝謝啦!leoneriol 寫到:hoiyen 寫到:再請教,如果我在圖塊設3個標籤,數值,lisp程式要取出圖塊屬性值要怎麼改?我想說同程式跑3次再ㄧ次秀出,結果不行,它只會秀最後的值,不知您知道要怎修正嗎?DevilWang 寫到:你在程式第一行加入
(vl-load-com)
應該就可以了。
(strcase "POWER")<===找到這一行.....
然後把power改成另外兩個標籤試試看!!!
~~~~~~~~~~~~~~~~~~~~~~~~詳細修改方式~~~~~~~~~~~~~~~~~~.............................
- 代碼:
(vl-load-com)
(defun c:powersum (/ ssBlock intIncrement dblAttTotal objBlock strValue strTotal)
(princ "\n選取圖塊加總功率 \n")
(setq ssBlock (ssget '((0 . "INSERT"))))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "POWER")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總功率 : " (rtos dblAttTotal) "W"))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "aaaa")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總aaaa : " (rtos dblAttTotal) "aaaa的單位"))
(setq intIncrement 0
dblAttTotal 0
)
(repeat (sslength ssBlock)
(setq objBlock (vlax-ename->vla-object (CDR (CAR (entget (ssname ssBlock intIncrement))))))
(foreach objAttribute (vlax-invoke objBlock "getattributes")
(if (= (strcase (vla-get-tagstring objAttribute))
(strcase "bbbb")
)
(progn
(setq strValue (vla-get-textstring objAttribute))
(setq dblAttTotal (+ (atof strValue) dblAttTotal))
)
)
)
(setq intIncrement (1+ intIncrement))
)
(prompt (strcat "\n總bbbb : " (rtos dblAttTotal) "bbbb的單位"))
(princ)
)
請將aaaa及bbbb的部分改成您設定的屬性標籤名稱,這是較簡單點的修改方式,將程式重複貼三次
hoiyen- 一般會員
- 文章總數 : 22
年齡 : 52
來自 : Taipei
職業 : 建築
愛好 : 電腦
個性 : 溫和
使用年資 : 10
使用版本 : 2010
經驗值 : 5355
威望值 : 3
注冊日期 : 2010-04-29
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 2D討論 :: 已解決主題精華區
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章