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

[已解決]LISP-將線型bylayer改成continuous

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

[已解決]LISP-將線型bylayer改成continuous

發表 由 leoneriol 于 2009-08-20, 02:44

我碰到的問題是....當線型為bylayer時....物件群碼是省略的狀態.....
之前是有嘗試使用CHPROP這個指令去達到我想要的更換線型指令
測試的時候是ok...但是正式使用時...系統總是回應我選到的選項是在配置空間然後指令就中止了
(造成只令終止的是無法刪除的viewport,而且也是在圖紙空間,沒有作用平常也看不到選不到,但是卻又可以用filter選到)
所以我就捨棄了使用CHPROP這個指令...改用物件群碼.....
但是我發現我所用的lisp程式對省略的物件群碼無作用....而我又找不到將(6 . "continuous")增加入物件群馬的方式...
請高手們幫幫忙...

(defun chglt ()
(prompt "改線型continuous")
(setq ss nil)
(setq ss (ssget "x" '((0 . "*")(6 . "bylayer"))))
(setq i 0)
(repeat (sslength ss)
(setq en (ssname ss i))
(chgendata en 6 "continuous")
(setq i (1+ i))
)
)

(defun chgendata (#en #qnum #new)
(setq endata(entget #en));;;取得圖元資料
(setq oldlist (assoc #qnum endata))
(setq newlist (cons #qnum #new))
(setq endata (subst newlist oldlist endata))
(entmod endata)
)


leoneriol 在 2009-08-20, 04:19 作了第 1 次修改
avatar
leoneriol
榮譽顧問
榮譽顧問

文章總數 : 816
年齡 : 33
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 6583
威望值 : 938
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
經典問與答讀者 藍鵲34號
2009聚會勳章 2014聚會勳章 男 雙魚座 鼠

回頂端 向下

回復: [已解決]LISP-將線型bylayer改成continuous

發表 由 阿希 于 2009-08-20, 02:51

leoneriol 寫到:我碰到的問題是....當線型為bylayer時....物件群碼是省略的狀態.....
之前是有嘗試使用CHPROP這個指令去達到我想要的更換線型指令
測試的時候是ok...但是正式使用時...系統總是回應我選到的選項是在配置空間然後指令就中止了
(造成只令終止的是無法刪除的viewport,而且也是在圖紙空間,沒有作用平常也看不到選不到,但是卻又可以用filter選到)
所以我就捨棄了使用CHPROP這個指令...改用物件群碼.....
但是我發現我所用的lisp程式對省略的物件群碼無作用....而我又找不到將(6 . "continuous")增加入物件群馬的方式...
請高手們幫幫忙...

(defun chglt ()
(prompt "改線型continuous")
(setq ss nil)
(setq ss (ssget "x" '((0 . "*")(6 . "bylayer"))))
(setq i 0)
(repeat (sslength ss)
(setq en (ssname ss i))
(chgendata en 6 "continuous")
(setq i (1+ i))
)
)

(defun chgendata (#en #qnum #new)
(setq endata(entget #en));;;取得圖元資料
(setq oldlist (assoc #qnum endata))
(setq newlist (cons #qnum #new))
(setq endata (subst newlist oldlist endata))
(entmod endata)
)

不清楚你的程式需求為何 ?
將所有物件線型改成BYLAYER ?

阿希
高級會員
高級會員

文章總數 : 335
年齡 : 36
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 4145
威望值 : 196
發帖精華 : 1
注冊日期 : 2008-09-22
男 摩羯座 猴

回頂端 向下

回復: [已解決]LISP-將線型bylayer改成continuous

發表 由 leoneriol 于 2009-08-20, 02:55

我的需求是...將所有物件線型為bylayer的..全部改成continuous...
avatar
leoneriol
榮譽顧問
榮譽顧問

文章總數 : 816
年齡 : 33
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 6583
威望值 : 938
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
經典問與答讀者 藍鵲34號
2009聚會勳章 2014聚會勳章 男 雙魚座 鼠

回頂端 向下

回復: [已解決]LISP-將線型bylayer改成continuous

發表 由 阿希 于 2009-08-20, 03:27

leoneriol 寫到:我的需求是...將所有物件線型為bylayer的..全部改成continuous...

就如同你所提問的 "我發現我所用的lisp程式對省略的物件群碼無作用"
如果線型為BYLAYER ~ 則群碼6是不存在的
這時你只要先把自己虛設(6.XXX) 加到資料串列內再去更換即可

沒有 - 加入虛設群馬 - 新群碼取代需設群馬 - 圖面更新 - 完成

阿希
高級會員
高級會員

文章總數 : 335
年齡 : 36
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 4145
威望值 : 196
發帖精華 : 1
注冊日期 : 2008-09-22
男 摩羯座 猴

回頂端 向下

回復: [已解決]LISP-將線型bylayer改成continuous

發表 由 leoneriol 于 2009-08-20, 03:37

加入虛設群碼.....請問這個動作要怎麼做呢???
我該使用哪一個指令?? 是cons嗎??
avatar
leoneriol
榮譽顧問
榮譽顧問

文章總數 : 816
年齡 : 33
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 6583
威望值 : 938
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
經典問與答讀者 藍鵲34號
2009聚會勳章 2014聚會勳章 男 雙魚座 鼠

回頂端 向下

回復: [已解決]LISP-將線型bylayer改成continuous

發表 由 leoneriol 于 2009-08-20, 03:39

(defun chgendata (#en #qnum #new)
(setq endata(entget #en));;;取得圖元資料
(setq oldlist (assoc #qnum endata))
(setq newlist (cons #qnum #new))
(setq endata (subst newlist oldlist endata))不知是不是再這一行做變動即可??...把subst改成cons??
(entmod endata)
)
avatar
leoneriol
榮譽顧問
榮譽顧問

文章總數 : 816
年齡 : 33
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 6583
威望值 : 938
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
經典問與答讀者 藍鵲34號
2009聚會勳章 2014聚會勳章 男 雙魚座 鼠

回頂端 向下

回復: [已解決]LISP-將線型bylayer改成continuous

發表 由 阿希 于 2009-08-20, 04:03

leoneriol 寫到:(defun chgendata (#en #qnum #new)
(setq endata(entget #en));;;取得圖元資料
(setq oldlist (assoc #qnum endata))
(setq newlist (cons #qnum #new))
(setq endata (subst newlist oldlist endata))不知是不是再這一行做變動即可??...把subst改成cons??
(entmod endata)
)


(setq endata (CONS (cons 6 0) endata)) ; 將群碼點串列加到ENDATA資料串列內
(setq endata (subst newlist oldlist endata)) ;新舊串列替換

阿希
高級會員
高級會員

文章總數 : 335
年齡 : 36
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 4145
威望值 : 196
發帖精華 : 1
注冊日期 : 2008-09-22
男 摩羯座 猴

回頂端 向下

回復: [已解決]LISP-將線型bylayer改成continuous

發表 由 leoneriol 于 2009-08-20, 04:18

(defun c:addtest()
(setvar "cmdecho" 0);關閉LISP在指令區的操綽回應
;修改
(prompt "改線型continuous")
(setq ss nil)
(setq ss (ssget "x" '((0 . "*")(6 . "bylayer"))))
(setq i 0)
(repeat (sslength ss)
(setq en (ssname ss i))
(addendata en 6 "continuous")
(setq i (1+ i))
)
(setvar "cmdecho" 1);還原LISP在指令區的操綽回應
(prin1)
)
(defun addendata (#en #qnum #new)
(setq endata(entget #en));;;取得圖元資料
(setq endata(cons (cons #qnum #new) endata));;直接將群碼加入endata!!
(entmod endata);;更新Endata
)


太感謝阿希大了!!!!這是我程式最後的樣子....請過目


leoneriol 在 2009-08-20, 04:49 作了第 3 次修改
avatar
leoneriol
榮譽顧問
榮譽顧問

文章總數 : 816
年齡 : 33
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 6583
威望值 : 938
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
經典問與答讀者 藍鵲34號
2009聚會勳章 2014聚會勳章 男 雙魚座 鼠

回頂端 向下

回復: [已解決]LISP-將線型bylayer改成continuous

發表 由 Tiger&蘋果爸 于 2009-08-20, 04:32

阿希 寫到:(setq endata (CONS (cons 6 0) endata)) ; 將群碼點串列加到ENDATA資料串列內
(setq endata (subst newlist oldlist endata)) ;新舊串列替換
******************************************************
讚啦!! 謝謝技術指導~< 積分 +1>

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

文章總數 : 17201
年齡 : 41
來自 : 台北市文山區
職業 : AutoCAD顧問
愛好 : 蹓狗/戶外活動/拍照
個性 : 幽默/樂觀/善良
使用年資 : 15↑
使用版本 : AutoCAD 2016
經驗值 : 64655
威望值 : 12756
注冊日期 : 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

回頂端 向下

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


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