[討論]修改配置空間的圖塊屬性
5 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[討論]修改配置空間的圖塊屬性
想要寫個修改圖框屬性質的程式.....
一般的寫法要取得圖塊屬性內的值必須先建立ActiveX所需的AutoCAD基本物件環境
(vl-load-com)
(setq acadobj(vlax-get-acad-object))
(setq dwgobj (vla-get-ActiveDocument acadobj))
(setq mspace (vla-get-ModelSpace dwgobj)) <---取得模型空間集合物件
因為我的屬性圖塊是放在配置空間的...
所以關於紅色的部分我本來以為要改成vla-get-PaperSpace,但是查詢過後並無這個指令~
請教各位高手是有相似的指令可以用嗎?還是我的出發點錯了?有另外的方式可以解決呢?
一般的寫法要取得圖塊屬性內的值必須先建立ActiveX所需的AutoCAD基本物件環境
(vl-load-com)
(setq acadobj(vlax-get-acad-object))
(setq dwgobj (vla-get-ActiveDocument acadobj))
(setq mspace (vla-get-ModelSpace dwgobj)) <---取得模型空間集合物件
因為我的屬性圖塊是放在配置空間的...
所以關於紅色的部分我本來以為要改成vla-get-PaperSpace,但是查詢過後並無這個指令~
請教各位高手是有相似的指令可以用嗎?還是我的出發點錯了?有另外的方式可以解決呢?
Tiger&蘋果爸 在 2010-01-04, 15:10 作了第 6 次修改 (原因 : 改為討論!)
leoneriol- 榮譽顧問
- 文章總數 : 818
年齡 : 40
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 9199
威望值 : 960
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
回復: [討論]修改配置空間的圖塊屬性
可以告之一下,你要修改圖框的那些東西嗎?用途跟想法。
或許不用寫程式,可用【功能變數】來達成。
小弟想到的是,你可能是用配置來出圖;用配置出圖,有可能就會配合圖紙集的使用方式。這樣或許可以使用現成的【功能變數】來自動變更圖框屬性值。
或許不用寫程式,可用【功能變數】來達成。
小弟想到的是,你可能是用配置來出圖;用配置出圖,有可能就會配合圖紙集的使用方式。這樣或許可以使用現成的【功能變數】來自動變更圖框屬性值。
____________________________________________________________________________________
簡單的心,是真正有福
單純的心,是真正的快樂
幸福是種溫馨的感覺
T480 i5-8250U,32GB,SSD:PM961 1TB+T11 25
litung- 中級會員
- 文章總數 : 226
年齡 : 49
來自 : 高雄市阿蓮區
職業 : PLC設計、HMI規劃、VB6、接案
愛好 : 電腦、卡通、桌球
個性 : 溫和、內向
使用年資 : 現在只出嘴
使用版本 : CAD 2008
積分 : 7
經驗值 : 6376
威望值 : 247
發帖精華 : 1
注冊日期 : 2009-10-30
回復: [討論]修改配置空間的圖塊屬性
litung您好...先謝謝您的回覆
我目前主要的目的是修改"比例"(1:100,1:200,....)
之後也希望能夠方便修改"建築名稱","建築物編號"等等配置裡圖框圖塊上內容重覆性統一性高的屬性
-------我是分隔線------------
我現在修改這類重複性統一性高的屬性圖塊,做法都是使用"尋找與取代(find)的功能來做修改.....
但是隨著時間推移,慢慢的圖的張數會越來越多,所以想使用程式配合修改
希望可以能自動開啟指定檔案並且操作修改動作....而小弟目前已經擁有自動開啟指定檔案的程式了
卡在"操作修改的動作"一直研究不出來該怎麼解決才好
我目前主要的目的是修改"比例"(1:100,1:200,....)
之後也希望能夠方便修改"建築名稱","建築物編號"等等配置裡圖框圖塊上內容重覆性統一性高的屬性
-------我是分隔線------------
我現在修改這類重複性統一性高的屬性圖塊,做法都是使用"尋找與取代(find)的功能來做修改.....
但是隨著時間推移,慢慢的圖的張數會越來越多,所以想使用程式配合修改
希望可以能自動開啟指定檔案並且操作修改動作....而小弟目前已經擁有自動開啟指定檔案的程式了
卡在"操作修改的動作"一直研究不出來該怎麼解決才好
leoneriol- 榮譽顧問
- 文章總數 : 818
年齡 : 40
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 9199
威望值 : 960
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
回復: [討論]修改配置空間的圖塊屬性
配置的設計本來就是用來出圖用的,所以圖框上的比例常常會出現必須自己輸入的問題,除此之外很多的lisp外掛根本無法用在配置中,所以請各位要有一個認知配置出圖主要是給無法寫程式的繪圖者使用的最便利的方式,但是對有能力開發程式的人來說,配置反而是個困擾,所以大部分的機械相關產業的公司很少會去利用配置的方式出圖,對機械業來說圖面上有很多的標註需要靠lisp程式去輔助標註上的不足,所以你們遇到的麻煩到目前為止沒有一個很好的方法來解決.我自己有寫過修改的程式但是這個部分是相當麻煩解決的,要花很多時間去思考但是我可以提供幾個函數你可以參考看看entnext,因為圖框中所有的屬性是包含在圖框圖塊中,所以你必須去找出你想修改的屬性,所以難度算蠻高的,你可以用entnext去幫你找,但是他無法直接找出,而是你必須去比對每一個屬性,去找出符合條件的屬性,這個程式會讓你有的傷腦筋,所以這也考驗你的功力了,真的不容宜喔!
張譽璋- 榮譽顧問
- 文章總數 : 304
年齡 : 54
來自 : 彰化縣員林鎮
職業 : 機械設計工程師/AutoCAD講師/AutoCAD外掛系統開發/AutoCAD書籍作者
愛好 : 旅行及電影
個性 : 風趣健談
使用年資 : 25年
使用版本 : AutoCAD2010/2011/2012/2013
積分 : 20
經驗值 : 7520
威望值 : 641
發帖精華 : 2
回帖精華 : 1
注冊日期 : 2008-05-28
回復: [討論]修改配置空間的圖塊屬性
寫程式的確是很複雜...
我所使用的方式是腳本檔(SCR)來更改屬性圖塊!!
我所使用的方式是腳本檔(SCR)來更改屬性圖塊!!
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
回復: [討論]修改配置空間的圖塊屬性
感謝蘋果爸,litung與張譽璋老師給的建議以及意見,小弟我會多去嘗試的
leoneriol 在 2010-01-04, 10:48 作了第 1 次修改 (原因 : 修改)
leoneriol- 榮譽顧問
- 文章總數 : 818
年齡 : 40
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 9199
威望值 : 960
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
回復: [討論]修改配置空間的圖塊屬性
ok~leoneriol 寫到:感謝蘋果爸,litung與張譽璋老師給的建議以及意見,小弟我會多去嘗試的
有問題請再提出!!
PS:另外我將主題改為討論,看看有沒有其他成員可以一起加入討論~
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
回復: [討論]修改配置空間的圖塊屬性
這有修改屬性副程式一支
你可以修改屬性值後出圖
出完圖後再改回原值
;用法 : (attchval <圖元名稱: 7ed7cda8> 標籤 新值)
(defun attchval (bkname label nv / bn sn snlist chk0 labname lab)
(if (/= bkname nil)
(progn
(setq bkname (entget bkname))
(setq sn (cdr (assoc -1 bkname)))
)
(setq sn nil)
)
(while (/= sn nil)
(setq snlist (entget sn))
(setq chk0 (cdr (assoc 0 snlist)))
(if (= chk0 "ATTRIB")
(progn
(setq labname (cdr (assoc 2 snlist)))
(if (= (strcase labname) (strcase label))
(progn
(setq snlist (subst (cons 1 nv) (assoc 1 snlist) snlist))
(entmod snlist)
(entupd sn)
(setq lab 1)
(setq sn nil)
)
(setq sn (entnext sn))
)
)
(setq sn (entnext sn))
)
)
(if (and (= sn nil) (= lab nil))
(princ "\n找不到符合的屬性標籤\n")
;(princ "\nchange OK")
)
(princ)
)
你可以修改屬性值後出圖
出完圖後再改回原值
;用法 : (attchval <圖元名稱: 7ed7cda8> 標籤 新值)
(defun attchval (bkname label nv / bn sn snlist chk0 labname lab)
(if (/= bkname nil)
(progn
(setq bkname (entget bkname))
(setq sn (cdr (assoc -1 bkname)))
)
(setq sn nil)
)
(while (/= sn nil)
(setq snlist (entget sn))
(setq chk0 (cdr (assoc 0 snlist)))
(if (= chk0 "ATTRIB")
(progn
(setq labname (cdr (assoc 2 snlist)))
(if (= (strcase labname) (strcase label))
(progn
(setq snlist (subst (cons 1 nv) (assoc 1 snlist) snlist))
(entmod snlist)
(entupd sn)
(setq lab 1)
(setq sn nil)
)
(setq sn (entnext sn))
)
)
(setq sn (entnext sn))
)
)
(if (and (= sn nil) (= lab nil))
(princ "\n找不到符合的屬性標籤\n")
;(princ "\nchange OK")
)
(princ)
)
Tiger&蘋果爸 寫到: 謝謝熱心回覆~< 積分 +1>
[公告]關於團隊成員的回文及貢獻
Tiger&蘋果爸 在 2010-04-09, 11:14 作了第 1 次修改 (原因 : 積分+1)
macgyver_hsu- 初級會員
- 文章總數 : 17
年齡 : 59
來自 : 岡山
職業 : 自動化設計
愛好 : 創造發明設計
個性 : 隨和
使用年資 : R10到現在
使用版本 : 2006M
積分 : 1
經驗值 : 5435
威望值 : 9
注冊日期 : 2010-03-12
回復: [討論]修改配置空間的圖塊屬性
再補一支副程式
;;;;;抓取屬性值
;;(get_att_val <圖元名稱: 4008b690> 標簽)
(defun get_att_val (bkname lab / snlist chk0 labname val)
(while (/= bkname nil)
(setq snlist (entget bkname))
(setq chk0 (cdr (assoc 0 snlist)))
(if (= chk0 "ATTRIB")
(progn
(setq labname (cdr (assoc 2 snlist)))
(if (= (strcase labname) (strcase lab))
(progn
(setq val (cdr (assoc 1 snlist)))
(setq bkname nil)
)
(setq bkname (entnext bkname))
)
)
(setq bkname (entnext bkname))
)
)
(if (= val nil)
(progn
(princ "\nNot find Block & setting the value is 1")
(setq val 1)
)
)
val
)
;;;;;抓取屬性值
;;(get_att_val <圖元名稱: 4008b690> 標簽)
(defun get_att_val (bkname lab / snlist chk0 labname val)
(while (/= bkname nil)
(setq snlist (entget bkname))
(setq chk0 (cdr (assoc 0 snlist)))
(if (= chk0 "ATTRIB")
(progn
(setq labname (cdr (assoc 2 snlist)))
(if (= (strcase labname) (strcase lab))
(progn
(setq val (cdr (assoc 1 snlist)))
(setq bkname nil)
)
(setq bkname (entnext bkname))
)
)
(setq bkname (entnext bkname))
)
)
(if (= val nil)
(progn
(princ "\nNot find Block & setting the value is 1")
(setq val 1)
)
)
val
)
macgyver_hsu- 初級會員
- 文章總數 : 17
年齡 : 59
來自 : 岡山
職業 : 自動化設計
愛好 : 創造發明設計
個性 : 隨和
使用年資 : R10到現在
使用版本 : 2006M
積分 : 1
經驗值 : 5435
威望值 : 9
注冊日期 : 2010-03-12
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章