[討論]相同block名稱
4 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[討論]相同block名稱
我有兩張圖面(A及B)各有相同的block名稱但尺寸不同,如果我把B圖的block copy到A圖,尺寸則被A圖取代,請問 auto lisp 如何撰寫判斷圖面中block名稱是否已經存在,如果存在則不插入block並警示?我需要用到那些函數?
jkhi- 一般會員
- 文章總數 : 6
年齡 : 46
來自 : 桃園市
職業 : 製造
愛好 : 電影
個性 : 溫和
使用年資 : 15年
使用版本 : 2022
經驗值 : 3706
威望值 : 0
注冊日期 : 2014-11-01
回復: [討論]相同block名稱
(tblsearch "block" "A") A 是圖塊名稱 如果A圖塊存在於圖面中.則會有圖塊群碼資料SHOW出..如果沒有. 會回應nil
(if (= (tblsearch "block" "A") nil)
(print "圖塊不存在")
(print "圖塊存在")
)
(if (= (tblsearch "block" "A") nil)
(print "圖塊不存在")
(print "圖塊存在")
)
shenhung- 高級會員
- 文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8074
威望值 : 1188
注冊日期 : 2009-06-03
回復: [討論]相同block名稱
shenhung大shenhung 寫到:(tblsearch "block" "A") A 是圖塊名稱 如果A圖塊存在於圖面中.則會有圖塊群碼資料SHOW出..如果沒有. 會回應nil
(if (= (tblsearch "block" "A") nil)
(print "圖塊不存在")
(print "圖塊存在")
)
我不太明白,樓主的意思...
是要使用LSP程式複製B圖檔的圖塊,然後貼到A圖檔再判斷"圖塊存在"就不貼上圖塊
這可以透過LSP程式辦到嗎?
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
回復: [討論]相同block名稱
Tiger&蘋果爸 寫到:shenhung大shenhung 寫到:(tblsearch "block" "A") A 是圖塊名稱 如果A圖塊存在於圖面中.則會有圖塊群碼資料SHOW出..如果沒有. 會回應nil
(if (= (tblsearch "block" "A") nil)
(print "圖塊不存在")
(print "圖塊存在")
)
我不太明白,樓主的意思...
是要使用LSP程式複製B圖檔的圖塊,然後貼到A圖檔再判斷"圖塊存在"就不貼上圖塊
這可以透過LSP程式辦到嗎?
跨2圖之間的..LISP 運作.我還沒寫過.~上面的是一張圖內.~
shenhung- 高級會員
- 文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8074
威望值 : 1188
注冊日期 : 2009-06-03
回復: [討論]相同block名稱
明白了~這個需求倒是有點特別!shenhung 寫到:跨2圖之間的..LISP 運作.我還沒寫過.~上面的是一張圖內.~
是否想過為了避免圖塊名稱衝突,可以先把B圖的block名稱先全部更名~jkhi 寫到:我有兩張圖面(A及B)各有相同的block名稱但尺寸不同,如果我把B圖的block copy到A圖,尺寸則被A圖取代,請問 auto lisp 如何撰寫判斷圖面中block名稱是否已經存在,如果存在則不插入block並警示?我需要用到那些函數?
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
回復: [討論]相同block名稱
這倒是一個好方法.看是要BLOCK.加前綴或後綴..~全部更名後再插入圖面.Tiger&蘋果爸 寫到:明白了~這個需求倒是有點特別!shenhung 寫到:跨2圖之間的..LISP 運作.我還沒寫過.~上面的是一張圖內.~是否想過為了避免圖塊名稱衝突,可以先把B圖的block名稱先全部更名~jkhi 寫到:我有兩張圖面(A及B)各有相同的block名稱但尺寸不同,如果我把B圖的block copy到A圖,尺寸則被A圖取代,請問 auto lisp 如何撰寫判斷圖面中block名稱是否已經存在,如果存在則不插入block並警示?我需要用到那些函數?
shenhung- 高級會員
- 文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8074
威望值 : 1188
注冊日期 : 2009-06-03
回復: [討論]相同block名稱
shenhung 寫到:Tiger&蘋果爸 寫到:shenhung大shenhung 寫到:(tblsearch "block" "A") A 是圖塊名稱 如果A圖塊存在於圖面中.則會有圖塊群碼資料SHOW出..如果沒有. 會回應nil
(if (= (tblsearch "block" "A") nil)
(print "圖塊不存在")
(print "圖塊存在")
)
我不太明白,樓主的意思...
是要使用LSP程式複製B圖檔的圖塊,然後貼到A圖檔再判斷"圖塊存在"就不貼上圖塊
這可以透過LSP程式辦到嗎?
跨2圖之間的..LISP 運作.我還沒寫過.~上面的是一張圖內.~
的確是跨圖的lisp運作,我會有這個需求其實只要是為了防呆, 因為我們的一張圖面上會有很多的block name, 為了避免從另一圖複製過來的block跟原本圖面的圖塊名稱相同而被取代(因為真的發生過了....)
是否可先在開啟圖面時自動執行確認該圖內的所有block name,在開啟另一張圖時複製貼上時判斷?
jkhi- 一般會員
- 文章總數 : 6
年齡 : 46
來自 : 桃園市
職業 : 製造
愛好 : 電影
個性 : 溫和
使用年資 : 15年
使用版本 : 2022
經驗值 : 3706
威望值 : 0
注冊日期 : 2014-11-01
回復: [討論]相同block名稱
我是不會寫跨圖的LISP運作.~不過以跨圖複製BLOCK的這麼常用的功能.都會有圖塊被取代的問題.~~
我自己在圖塊命名上.有一定法則. 對LISP產生零件圖塊~命名基本上.不會重覆..會重覆.一定是一樣規格的零件..被取代是無所謂.
另外有一個以時間為開頭..自動製作隨機圖塊..也不會重覆命名.!! 所以基本上..目前每天用這麼多圖塊..沒有被取代過圖塊.
要避免圖塊被取代...是建議做好命名規格.或隨機命名.~.以管理圖塊的方向去改善...會讓你少傷很多腦筋.~
我自己在圖塊命名上.有一定法則. 對LISP產生零件圖塊~命名基本上.不會重覆..會重覆.一定是一樣規格的零件..被取代是無所謂.
另外有一個以時間為開頭..自動製作隨機圖塊..也不會重覆命名.!! 所以基本上..目前每天用這麼多圖塊..沒有被取代過圖塊.
要避免圖塊被取代...是建議做好命名規格.或隨機命名.~.以管理圖塊的方向去改善...會讓你少傷很多腦筋.~
shenhung- 高級會員
- 文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8074
威望值 : 1188
注冊日期 : 2009-06-03
回復: [討論]相同block名稱
這點我很認同~shenhung 寫到:我是不會寫跨圖的LISP運作.~不過以跨圖複製BLOCK的這麼常用的功能.都會有圖塊被取代的問題.~~
我自己在圖塊命名上.有一定法則. 對LISP產生零件圖塊~命名基本上.不會重覆..會重覆.一定是一樣規格的零件..被取代是無所謂.
另外有一個以時間為開頭..自動製作隨機圖塊..也不會重覆命名.!! 所以基本上..目前每天用這麼多圖塊..沒有被取代過圖塊.
要避免圖塊被取代...是建議做好命名規格.或隨機命名.~.以管理圖塊的方向去改善...會讓你少傷很多腦筋.~
應該先從源頭有效管理圖塊名稱,這是標準作業中很重要的一環!
我也是有規則的命名標準圖塊~
臨時用的我都用內建方式產生隨機名稱的圖塊(如:圖塊名稱: "A$C79DD1254")
至於跨圖的LISP運作,我目前想到程式的思維,可能要分幾個步驟jkhi 寫到:的確是跨圖的lisp運作,我會有這個需求其實只要是為了防呆, 因為我們的一張圖面上會有很多的block name, 為了避免從另一圖複製過來的block跟原本圖面的圖塊名稱相同而被取代(因為真的發生過了....)
是否可先在開啟圖面時自動執行確認該圖內的所有block name,在開啟另一張圖時複製貼上時判斷?
1.B圖產生圖塊清單.TXT
2.A圖產生圖塊清單.TXT
3.比較A.B圖的圖塊清單.TXT
4.產生結果
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
回復: [討論]相同block名稱
阿貴公司遇到的問題是, 客戶的零件圖個別畫, 但都取相同的圖塊名稱.
如果是純圖形的圖塊, 直接炸開圖塊即可;
如果是帶有屬性的圖塊, 如含有數量標籤的屬性, 不同圖檔相同圖塊, 插入到我的樣板圖檔中則沒問題, 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)
)
如果是純圖形的圖塊, 直接炸開圖塊即可;
如果是帶有屬性的圖塊, 如含有數量標籤的屬性, 不同圖檔相同圖塊, 插入到我的樣板圖檔中則沒問題, 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)
)
yakuei88- 一般會員
- 文章總數 : 28
年齡 : 58
來自 : 高雄市
職業 : 雷射板金繪圖
愛好 : autolisp程式設計
個性 : 勤奮努力
使用年資 : 20年
使用版本 : 2012
經驗值 : 4123
威望值 : 39
注冊日期 : 2014-01-14
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章