[已解決]屬性文字修改
2 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
[已解決]屬性文字修改
問題:已用LISP進行修改,但炸開後會變回原值
有兩個屬性文字標籤分別為"客戶機種:"&"客戶作者:"一起作成圖塊(圖塊名稱"PBA7")
欲將兩者的標籤修改為"業務:"&"客戶RD:"
使用LISP後,再對圖塊"PBA7"用"ATTEDIT"修改,視窗上顯示是"業務:"&"客戶RD:"沒錯
但是炸開PBA7後屬性文字的標籤又變回"客戶機種:"&"客戶作者:"
以下是LISP內容,請各位高手幫忙找出我的問題點,感恩!!
(setq changepba (ssget "X" (list(cons 2 "PBA7"))))
(if (= changepba nil) (exit))
(setq n 0)
(setq ent (entget (ssname changepba n)))
(setq ent1 ent)
(while (= (cdr (assoc 0 (setq ent1 (entget (entnext (cdr (assoc -1 ent1))))))) "ATTRIB")
(cond
((= (cdr (assoc 2 ent1)) "客戶機種:")
(setq ent1 (subst (cons 2 "業務:") (assoc 2 ent1) ent1))
(entmod ent1))
((= (cdr (assoc 2 ent1)) "客戶作者:")
(setq ent1 (subst (cons 2 "客戶RD:") (assoc 2 ent1) ent1))
(entmod ent1))
);end cond
);end while
有兩個屬性文字標籤分別為"客戶機種:"&"客戶作者:"一起作成圖塊(圖塊名稱"PBA7")
欲將兩者的標籤修改為"業務:"&"客戶RD:"
使用LISP後,再對圖塊"PBA7"用"ATTEDIT"修改,視窗上顯示是"業務:"&"客戶RD:"沒錯
但是炸開PBA7後屬性文字的標籤又變回"客戶機種:"&"客戶作者:"
以下是LISP內容,請各位高手幫忙找出我的問題點,感恩!!
(setq changepba (ssget "X" (list(cons 2 "PBA7"))))
(if (= changepba nil) (exit))
(setq n 0)
(setq ent (entget (ssname changepba n)))
(setq ent1 ent)
(while (= (cdr (assoc 0 (setq ent1 (entget (entnext (cdr (assoc -1 ent1))))))) "ATTRIB")
(cond
((= (cdr (assoc 2 ent1)) "客戶機種:")
(setq ent1 (subst (cons 2 "業務:") (assoc 2 ent1) ent1))
(entmod ent1))
((= (cdr (assoc 2 ent1)) "客戶作者:")
(setq ent1 (subst (cons 2 "客戶RD:") (assoc 2 ent1) ent1))
(entmod ent1))
);end cond
);end while
Conquerable 在 周五 24 8月 - 13:04 作了第 1 次修改
Conquerable- 初級會員
- 文章總數 : 47
年齡 : 34
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 4790
威望值 : 30
注冊日期 : 2012-07-09
回復: [已解決]屬性文字修改
這個程式.只是修改目前已經插入到圖面的BLOCK的屬性提示.並沒有改到標籤!!
一般屬性在ATTDEF的時後.如果你提示沒有定義.內定會以屬性標籤作為輸入提示值..!!這也是為何你用ATTEDIT修改.可以看到視窗顯示的是業務和客戶RD的問題 .因為你改的只是提示.!!
如果你要修改.BLOCK最原始的定義ATTDEF.標籤.內定提示或預設值.. 那就修改原始BLOCK內的圖元.
如果對已經插入的BLOCK 做屬性值或提示做修改. 那就用你目前寫的程式!!
以上2者.有一點小區別.!!
令外 BATTMAN 這個指令.也是修正屬性定義的一個方便指令.
指令的某些特點和用法.請你自己去慢慢體會.難用言語表達!!
以下是修改標籤的LISP代碼.!!
一般屬性在ATTDEF的時後.如果你提示沒有定義.內定會以屬性標籤作為輸入提示值..!!這也是為何你用ATTEDIT修改.可以看到視窗顯示的是業務和客戶RD的問題 .因為你改的只是提示.!!
如果你要修改.BLOCK最原始的定義ATTDEF.標籤.內定提示或預設值.. 那就修改原始BLOCK內的圖元.
如果對已經插入的BLOCK 做屬性值或提示做修改. 那就用你目前寫的程式!!
以上2者.有一點小區別.!!
令外 BATTMAN 這個指令.也是修正屬性定義的一個方便指令.
指令的某些特點和用法.請你自己去慢慢體會.難用言語表達!!
以下是修改標籤的LISP代碼.!!
- 代碼:
(defun c:chg_label()
(setq ben (tblsearch "BLOCK" "PBA7"))
(if ben
(progn
(setq ben (cdr (assoc -2 ben))) ;取得block圖元.
(while ben
(setq ben_list (entget ben)) ;圖元串列
(if (= (cdr (assoc 0 ben_list)) "ATTDEF") ;如果是ATTDEF的圖元串列
(progn
(setq ben_list_2 (cdr (assoc 2 ben_list))) ;取得標籤名
(cond ((= ben_list_2 "客戶機種:") ;如果標籤名=客戶機種:
(setq ben_list (subst (cons 2 "業務:") (assoc 2 ben_list) ben_list)) ;修改ATTDEF圖元串列.標籤值為業務:
(entmod ben_list)
)
((= ben_list_2 "客戶作者:") ;如果標籤名=客戶作者:
(setq ben_list (subst (cons 2 "客戶RD:") (assoc 2 ben_list) ben_list));修改ATTDEF圖元串列.標籤值為客戶RD:
(entmod ben_list)
)
);cond
);prog
);
(setq ben (entnext ben))
);while
) ;progn
);if
)
shenhung- 高級會員
- 文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8075
威望值 : 1188
注冊日期 : 2009-06-03
回復: [已解決]屬性文字修改
改用shenhung大大的lisp就可以解決炸開跳回了!!感謝!!
可是我還是不解...
標籤文字的群碼2不就是標籤的屬性嗎?
為什麼修改的寫法是一樣的但是我卻沒有修改到內部的標籤文字?
(setq ent1 (subst (cons 2 "業務:") (assoc 2 ent1) ent1))<<我寫的
(setq ben_list (subst (cons 2 "業務:") (assoc 2 ben_list) ben_list))<< shenhung大大寫的
是因為一開始抓取圖塊的方式不同所以其實ent1跟ben_list其實是不同東西嗎?
因為我也有之前也有寫過用tblsearch的方法搜尋
是跟用ssget跟tblsearch抓到的block圖元會不一樣嗎??
再多問一個問題...
shenhung大大您所寫的這段程式修改後用ATTEDIT去修改會是舊的?
所以是要將兩段程式併用才可以讓他ATTEDIT跟炸開後都可以是新的?
可是我還是不解...
標籤文字的群碼2不就是標籤的屬性嗎?
為什麼修改的寫法是一樣的但是我卻沒有修改到內部的標籤文字?
(setq ent1 (subst (cons 2 "業務:") (assoc 2 ent1) ent1))<<我寫的
(setq ben_list (subst (cons 2 "業務:") (assoc 2 ben_list) ben_list))<< shenhung大大寫的
是因為一開始抓取圖塊的方式不同所以其實ent1跟ben_list其實是不同東西嗎?
因為我也有之前也有寫過用tblsearch的方法搜尋
是跟用ssget跟tblsearch抓到的block圖元會不一樣嗎??
再多問一個問題...
shenhung大大您所寫的這段程式修改後用ATTEDIT去修改會是舊的?
所以是要將兩段程式併用才可以讓他ATTEDIT跟炸開後都可以是新的?
Conquerable- 初級會員
- 文章總數 : 47
年齡 : 34
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 4790
威望值 : 30
注冊日期 : 2012-07-09
回復: [已解決]屬性文字修改
ssget 和tblsearch 抓到的屬性資料不太一樣.!!
比方[客戶機種]標籤.圖塊插入之後.機種你輸入值 "A1234"
tblsearch[ATTDEF] 是抓到原始定義的圖塊巢狀圖元.你搜到的是用attdef定義的屬性.
群碼2.就是[客戶機種] <<==炸開之後會現出原形的~就是這部分
ssget[ATTRIB] 搜到的已插入圖面圖塊使用者輸入給屬性的值!! [可用ATTEDIT編輯]
群碼2是屬性標籤{或稱提示}.群碼1就是 "A1234" 使用者輸入的 屬性值.<==你原程式修改的是這個部分!!!
你若要修正.已插入的圖塊.和原始圖塊ATTDEF所設定的資料.就是要將2段程式合併沒錯.!! 因為修正的是不同的資料項目.
VLISP我不會.或許你可以請教其他先進.用VLISP看會不會簡單一些.!!
比方[客戶機種]標籤.圖塊插入之後.機種你輸入值 "A1234"
tblsearch[ATTDEF] 是抓到原始定義的圖塊巢狀圖元.你搜到的是用attdef定義的屬性.
群碼2.就是[客戶機種] <<==炸開之後會現出原形的~就是這部分
ssget[ATTRIB] 搜到的已插入圖面圖塊使用者輸入給屬性的值!! [可用ATTEDIT編輯]
群碼2是屬性標籤{或稱提示}.群碼1就是 "A1234" 使用者輸入的 屬性值.<==你原程式修改的是這個部分!!!
你若要修正.已插入的圖塊.和原始圖塊ATTDEF所設定的資料.就是要將2段程式合併沒錯.!! 因為修正的是不同的資料項目.
VLISP我不會.或許你可以請教其他先進.用VLISP看會不會簡單一些.!!
shenhung- 高級會員
- 文章總數 : 281
年齡 : 57
來自 : 新北市
職業 : 塑膠模具設計.AUTOLISP
愛好 : 音樂
個性 : 隨和
使用年資 : 18年
使用版本 : 2010
積分 : 15
經驗值 : 8075
威望值 : 1188
注冊日期 : 2009-06-03
回復: [已解決]屬性文字修改
原來真的不一樣...
感謝shenhung大大的解說!!
以後我會自己多注意這兩種不同的方式!又學到寶貴的一課 感謝!
感謝shenhung大大的解說!!
以後我會自己多注意這兩種不同的方式!又學到寶貴的一課 感謝!
Conquerable- 初級會員
- 文章總數 : 47
年齡 : 34
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 4790
威望值 : 30
注冊日期 : 2012-07-09
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章