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

Join the forum, it's quick and easy

AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~
AutoCAD顧問
Would you like to react to this message? Create an account in a few clicks or log in to continue.
[已解決]屬性文字修改 Ioaoe110[已解決]屬性文字修改 2020-310[已解決]屬性文字修改 Oiu15010[已解決]屬性文字修改 2020-211[已解決]屬性文字修改 Ia15010[已解決]屬性文字修改 Aizyao10[已解決]屬性文字修改 Uos15010[已解決]屬性文字修改 BPl3tjj[已解決]屬性文字修改 Ziao1510
[已解決]屬性文字修改 Oo-2-110[已解決]屬性文字修改 Zuoiy_10[已解決]屬性文字修改 Aizyao11[已解決]屬性文字修改 Iyb_1510[已解決]屬性文字修改 Aoe1-111[已解決]屬性文字修改 Uos15011[已解決]屬性文字修改 Aoe2da10[已解決]屬性文字修改 Aoe2da11[已解決]屬性文字修改 Aoe10

[已解決]屬性文字修改

2 posters

向下

[已解決]屬性文字修改 Empty [已解決]屬性文字修改

發表 由 Conquerable 2012-08-23, 17:30

問題:已用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


Conquerable 在 2012-08-24, 13:04 作了第 1 次修改
Conquerable
Conquerable
初級會員
初級會員

文章總數 : 47
年齡 : 34
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 4552
威望值 : 30
注冊日期 : 2012-07-09
男 雙魚座 馬

回頂端 向下

[已解決]屬性文字修改 Empty 回復: [已解決]屬性文字修改

發表 由 shenhung 2012-08-24, 10:44

這個程式.只是修改目前已經插入到圖面的BLOCK的屬性提示.並沒有改到標籤!!
一般屬性在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
shenhung
高級會員
高級會員

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

回頂端 向下

[已解決]屬性文字修改 Empty 回復: [已解決]屬性文字修改

發表 由 Conquerable 2012-08-24, 11:13

改用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跟炸開後都可以是新的?



Conquerable
Conquerable
初級會員
初級會員

文章總數 : 47
年齡 : 34
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 4552
威望值 : 30
注冊日期 : 2012-07-09
男 雙魚座 馬

回頂端 向下

[已解決]屬性文字修改 Empty 回復: [已解決]屬性文字修改

發表 由 shenhung 2012-08-24, 12:45

ssget 和tblsearch 抓到的屬性資料不太一樣.!!
比方[客戶機種]標籤.圖塊插入之後.機種你輸入值 "A1234"
tblsearch[ATTDEF] 是抓到原始定義的圖塊巢狀圖元.你搜到的是用attdef定義的屬性.
群碼2.就是[客戶機種] <<==炸開之後會現出原形的~就是這部分
ssget[ATTRIB] 搜到的已插入圖面圖塊使用者輸入給屬性的值!! [可用ATTEDIT編輯]
群碼2是屬性標籤{或稱提示}.群碼1就是 "A1234" 使用者輸入的 屬性值.<==你原程式修改的是這個部分!!!

你若要修正.已插入的圖塊.和原始圖塊ATTDEF所設定的資料.就是要將2段程式合併沒錯.!! 因為修正的是不同的資料項目.


VLISP我不會.或許你可以請教其他先進.用VLISP看會不會簡單一些.!!


shenhung
shenhung
高級會員
高級會員

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

回頂端 向下

[已解決]屬性文字修改 Empty 回復: [已解決]屬性文字修改

發表 由 Conquerable 2012-08-24, 13:04

原來真的不一樣...

感謝shenhung大大的解說!!

以後我會自己多注意這兩種不同的方式!又學到寶貴的一課 感謝! 超開心
Conquerable
Conquerable
初級會員
初級會員

文章總數 : 47
年齡 : 34
來自 : 新北市板橋區
職業 : 繪圖員
愛好 : 繪圖
個性 : 好動
使用年資 : 12
使用版本 : 2000
積分 : 1
經驗值 : 4552
威望值 : 30
注冊日期 : 2012-07-09
男 雙魚座 馬

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章
[已解決]屬性文字修改 Ioaoe110[已解決]屬性文字修改 2020-310[已解決]屬性文字修改 Oiu15010[已解決]屬性文字修改 2020-211[已解決]屬性文字修改 Ia15010[已解決]屬性文字修改 Aizyao10[已解決]屬性文字修改 Uos15010[已解決]屬性文字修改 BPl3tjj[已解決]屬性文字修改 Ziao1510
[已解決]屬性文字修改 Oo-2-110[已解決]屬性文字修改 Zuoiy_10[已解決]屬性文字修改 Aizyao11[已解決]屬性文字修改 Iyb_1510[已解決]屬性文字修改 Aoe1-111[已解決]屬性文字修改 Uos15011[已解決]屬性文字修改 Aoe2da10[已解決]屬性文字修改 Aoe2da11[已解決]屬性文字修改 Aoe10