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

[討論]相同block名稱

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

[討論]相同block名稱

發表 由 jkhi 于 2016-07-28, 09:05

我有兩張圖面(A及B)各有相同的block名稱但尺寸不同,如果我把B圖的block copy到A圖,尺寸則被A圖取代,請問 auto lisp 如何撰寫判斷圖面中block名稱是否已經存在,如果存在則不插入block並警示?我需要用到那些函數?
avatar
jkhi
一般會員
一般會員

文章總數 : 5
年齡 : 39
來自 : 桃園縣
職業 : 製造
愛好 : 電影
個性 : 溫和
使用年資 : 8
使用版本 : 2014
經驗值 : 1169
威望值 : 0
注冊日期 : 2014-11-01
男 天秤座 馬

回頂端 向下

回復: [討論]相同block名稱

發表 由 shenhung 于 2016-07-28, 10:03

(tblsearch "block" "A") A 是圖塊名稱 如果A圖塊存在於圖面中.則會有圖塊群碼資料SHOW出..如果沒有. 會回應nil

(if (= (tblsearch "block" "A") nil)
(print "圖塊不存在")
(print "圖塊存在")
)
avatar
shenhung
高級會員
高級會員

文章總數 : 238
年齡 : 50
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 5062
威望值 : 913
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回復: [討論]相同block名稱

發表 由 Tiger&蘋果爸 于 2016-07-28, 10:40

shenhung 寫到:(tblsearch "block" "A")   A 是圖塊名稱   如果A圖塊存在於圖面中.則會有圖塊群碼資料SHOW出..如果沒有. 會回應nil

(if (= (tblsearch "block" "A") nil)
   (print "圖塊不存在")
   (print "圖塊存在")
)
shenhung大
我不太明白,樓主的意思...
是要使用LSP程式複製B圖檔的圖塊,然後貼到A圖檔再判斷"圖塊存在"就不貼上圖塊
這可以透過LSP程式辦到嗎?
疑問

____________________________________________________________________________________
avatar
Tiger&蘋果爸
系統管理員
系統管理員

文章總數 : 17328
年齡 : 41
來自 : 台北市文山區
職業 : AutoCAD顧問
愛好 : 蹓狗/戶外活動/拍照
個性 : 幽默/樂觀/善良
使用年資 : 15↑
使用版本 : AutoCAD 2016
經驗值 : 65335
威望值 : 12868
注冊日期 : 2008-04-23
2D基礎函授 2D進階函授 3D基礎函授 https://i11.servimg.com/u/f11/19/71/67/71/2d3d10.png2D+3D線上 顧問外掛程式 經典問與答讀者 藍鵲1號
2009聚會勳章 2010聚會勳章 2011聚會勳章 2012聚會勳章 2013勳章-2D基礎 2014聚會勳章 2015聚會勳章 2016聚會勳章 串連貼紙成功 男 水瓶座 兔

http://mypaper.pchome.com.tw/kv1012tiger

回頂端 向下

回復: [討論]相同block名稱

發表 由 shenhung 于 2016-07-28, 11:32

Tiger&蘋果爸 寫到:
shenhung 寫到:(tblsearch "block" "A")   A 是圖塊名稱   如果A圖塊存在於圖面中.則會有圖塊群碼資料SHOW出..如果沒有. 會回應nil

(if (= (tblsearch "block" "A") nil)
   (print "圖塊不存在")
   (print "圖塊存在")
)
shenhung大
我不太明白,樓主的意思...
是要使用LSP程式複製B圖檔的圖塊,然後貼到A圖檔再判斷"圖塊存在"就不貼上圖塊
這可以透過LSP程式辦到嗎?
疑問

跨2圖之間的..LISP 運作.我還沒寫過.~上面的是一張圖內.~
avatar
shenhung
高級會員
高級會員

文章總數 : 238
年齡 : 50
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 5062
威望值 : 913
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回復: [討論]相同block名稱

發表 由 Tiger&蘋果爸 于 2016-07-28, 12:30

shenhung 寫到:跨2圖之間的..LISP 運作.我還沒寫過.~上面的是一張圖內.~
明白了~這個需求倒是有點特別! 竊喜


jkhi 寫到:我有兩張圖面(A及B)各有相同的block名稱但尺寸不同,如果我把B圖的block copy到A圖,尺寸則被A圖取代,請問 auto lisp 如何撰寫判斷圖面中block名稱是否已經存在,如果存在則不插入block並警示?我需要用到那些函數?
是否想過為了避免圖塊名稱衝突,可以先把B圖的block名稱先全部更名~
認同

____________________________________________________________________________________
avatar
Tiger&蘋果爸
系統管理員
系統管理員

文章總數 : 17328
年齡 : 41
來自 : 台北市文山區
職業 : AutoCAD顧問
愛好 : 蹓狗/戶外活動/拍照
個性 : 幽默/樂觀/善良
使用年資 : 15↑
使用版本 : AutoCAD 2016
經驗值 : 65335
威望值 : 12868
注冊日期 : 2008-04-23
2D基礎函授 2D進階函授 3D基礎函授 https://i11.servimg.com/u/f11/19/71/67/71/2d3d10.png2D+3D線上 顧問外掛程式 經典問與答讀者 藍鵲1號
2009聚會勳章 2010聚會勳章 2011聚會勳章 2012聚會勳章 2013勳章-2D基礎 2014聚會勳章 2015聚會勳章 2016聚會勳章 串連貼紙成功 男 水瓶座 兔

http://mypaper.pchome.com.tw/kv1012tiger

回頂端 向下

回復: [討論]相同block名稱

發表 由 shenhung 于 2016-07-28, 14:33

Tiger&蘋果爸 寫到:
shenhung 寫到:跨2圖之間的..LISP 運作.我還沒寫過.~上面的是一張圖內.~
明白了~這個需求倒是有點特別! 竊喜


jkhi 寫到:我有兩張圖面(A及B)各有相同的block名稱但尺寸不同,如果我把B圖的block copy到A圖,尺寸則被A圖取代,請問 auto lisp 如何撰寫判斷圖面中block名稱是否已經存在,如果存在則不插入block並警示?我需要用到那些函數?
是否想過為了避免圖塊名稱衝突,可以先把B圖的block名稱先全部更名~
認同
這倒是一個好方法.看是要BLOCK.加前綴或後綴..~全部更名後再插入圖面.
avatar
shenhung
高級會員
高級會員

文章總數 : 238
年齡 : 50
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 5062
威望值 : 913
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回復: [討論]相同block名稱

發表 由 jkhi 于 2016-07-29, 01:29

shenhung 寫到:
Tiger&蘋果爸 寫到:
shenhung 寫到:(tblsearch "block" "A")   A 是圖塊名稱   如果A圖塊存在於圖面中.則會有圖塊群碼資料SHOW出..如果沒有. 會回應nil

(if (= (tblsearch "block" "A") nil)
   (print "圖塊不存在")
   (print "圖塊存在")
)
shenhung大
我不太明白,樓主的意思...
是要使用LSP程式複製B圖檔的圖塊,然後貼到A圖檔再判斷"圖塊存在"就不貼上圖塊
這可以透過LSP程式辦到嗎?
疑問

跨2圖之間的..LISP 運作.我還沒寫過.~上面的是一張圖內.~

的確是跨圖的lisp運作,我會有這個需求其實只要是為了防呆, 因為我們的一張圖面上會有很多的block name, 為了避免從另一圖複製過來的block跟原本圖面的圖塊名稱相同而被取代(因為真的發生過了....)
是否可先在開啟圖面時自動執行確認該圖內的所有block name,在開啟另一張圖時複製貼上時判斷?
avatar
jkhi
一般會員
一般會員

文章總數 : 5
年齡 : 39
來自 : 桃園縣
職業 : 製造
愛好 : 電影
個性 : 溫和
使用年資 : 8
使用版本 : 2014
經驗值 : 1169
威望值 : 0
注冊日期 : 2014-11-01
男 天秤座 馬

回頂端 向下

回復: [討論]相同block名稱

發表 由 shenhung 于 2016-07-29, 02:55

我是不會寫跨圖的LISP運作.~不過以跨圖複製BLOCK的這麼常用的功能.都會有圖塊被取代的問題.~~
我自己在圖塊命名上.有一定法則. 對LISP產生零件圖塊~命名基本上.不會重覆..會重覆.一定是一樣規格的零件..被取代是無所謂.
另外有一個以時間為開頭..自動製作隨機圖塊..也不會重覆命名.!! 所以基本上..目前每天用這麼多圖塊..沒有被取代過圖塊.
要避免圖塊被取代...是建議做好命名規格.或隨機命名.~.以管理圖塊的方向去改善...會讓你少傷很多腦筋.~
avatar
shenhung
高級會員
高級會員

文章總數 : 238
年齡 : 50
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 5062
威望值 : 913
注冊日期 : 2009-06-03
男 摩羯座 馬

回頂端 向下

回復: [討論]相同block名稱

發表 由 Tiger&蘋果爸 于 2016-07-29, 03:05

shenhung 寫到:我是不會寫跨圖的LISP運作.~不過以跨圖複製BLOCK的這麼常用的功能.都會有圖塊被取代的問題.~~
我自己在圖塊命名上.有一定法則. 對LISP產生零件圖塊~命名基本上.不會重覆..會重覆.一定是一樣規格的零件..被取代是無所謂.
另外有一個以時間為開頭..自動製作隨機圖塊..也不會重覆命名.!! 所以基本上..目前每天用這麼多圖塊..沒有被取代過圖塊.
要避免圖塊被取代...是建議做好命名規格.或隨機命名.~.以管理圖塊的方向去改善...會讓你少傷很多腦筋.~
這點我很認同~
應該先從源頭有效管理圖塊名稱,這是標準作業中很重要的一環!
我也是有規則的命名標準圖塊~
臨時用的我都用內建方式產生隨機名稱的圖塊(如:圖塊名稱: "A$C79DD1254")


jkhi 寫到:的確是跨圖的lisp運作,我會有這個需求其實只要是為了防呆, 因為我們的一張圖面上會有很多的block name, 為了避免從另一圖複製過來的block跟原本圖面的圖塊名稱相同而被取代(因為真的發生過了....)
是否可先在開啟圖面時自動執行確認該圖內的所有block name,在開啟另一張圖時複製貼上時判斷?
至於跨圖的LISP運作,我目前想到程式的思維,可能要分幾個步驟
1.B圖產生圖塊清單.TXT
2.A圖產生圖塊清單.TXT
3.比較A.B圖的圖塊清單.TXT
4.產生結果

____________________________________________________________________________________
avatar
Tiger&蘋果爸
系統管理員
系統管理員

文章總數 : 17328
年齡 : 41
來自 : 台北市文山區
職業 : AutoCAD顧問
愛好 : 蹓狗/戶外活動/拍照
個性 : 幽默/樂觀/善良
使用年資 : 15↑
使用版本 : AutoCAD 2016
經驗值 : 65335
威望值 : 12868
注冊日期 : 2008-04-23
2D基礎函授 2D進階函授 3D基礎函授 https://i11.servimg.com/u/f11/19/71/67/71/2d3d10.png2D+3D線上 顧問外掛程式 經典問與答讀者 藍鵲1號
2009聚會勳章 2010聚會勳章 2011聚會勳章 2012聚會勳章 2013勳章-2D基礎 2014聚會勳章 2015聚會勳章 2016聚會勳章 串連貼紙成功 男 水瓶座 兔

http://mypaper.pchome.com.tw/kv1012tiger

回頂端 向下

回復: [討論]相同block名稱

發表 由 yakuei88 于 2016-08-02, 07:13

阿貴公司遇到的問題是, 客戶的零件圖個別畫, 但都取相同的圖塊名稱.
如果是純圖形的圖塊, 直接炸開圖塊即可;
如果是帶有屬性的圖塊, 如含有數量標籤的屬性, 不同圖檔相同圖塊, 插入到我的樣板圖檔中則沒問題, A 圖檔的圖塊, 數量為 1; B 圖檔的圖塊為 10; 同樣是 XX 圖塊名稱, 不會因為 A 圖檔先插入, 再插入 B 圖檔, 結果令 B 圖檔的 XX 圖塊的數量變為 1.

以下是阿貴用在炸開客戶圖檔內, 不含屬性的圖塊所寫的 AutoLisp:

(defun explode_block_of_ckd ()
(setq ss (ssget "x" (list '(0 . "INSERT") '(410 . "Model"))))
(if ss
(progn
(setq i 0
ne 0
)
(repeat (sslength ss)
(setq blken (ssname ss i))
(setq blkobj (vlax-ename->vla-object blken))
(setq blkn (vla-get-name blkobj))
(if (or
(/= blkn "*Model_Space")
(/= blkn "*Paper_Space")
)
(progn
(setq Has-Attributes (vla-get-HasAttributes blkobj))
(if (= Has-Attributes :vlax-false)
(progn
(command "explode" blken)
(setq ne (1+ ne))
)
)
)
)
(setq i (1+ i))
)
(if (> ne 0)
(setq alert_text
(strcat alert_text
"\n\n 炸開 "
(itoa ne)
" 個 不具屬性 的 圖塊..."
)
)
)
)
)
(setq ss nil)
)
avatar
yakuei88
一般會員
一般會員

文章總數 : 27
年齡 : 51
來自 : 高雄市
職業 : 雷射板金繪圖
愛好 : autolisp程式設計
個性 : 勤奮努力
使用年資 : 20年
使用版本 : 2012
經驗值 : 1589
威望值 : 42
注冊日期 : 2014-01-14
男 摩羯座 蛇

回頂端 向下

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


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