[已解決]LISP-將線型bylayer改成continuous
3 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
[已解決]LISP-將線型bylayer改成continuous
我碰到的問題是....當線型為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)
)
之前是有嘗試使用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, 11:19 作了第 1 次修改
leoneriol- 榮譽顧問
- 文章總數 : 818
年齡 : 40
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 9199
威望值 : 960
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
回復: [已解決]LISP-將線型bylayer改成continuous
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 ?
阿希- 高級會員
- 文章總數 : 348
年齡 : 43
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 6824
威望值 : 226
發帖精華 : 1
注冊日期 : 2008-09-22
回復: [已解決]LISP-將線型bylayer改成continuous
我的需求是...將所有物件線型為bylayer的..全部改成continuous...
leoneriol- 榮譽顧問
- 文章總數 : 818
年齡 : 40
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 9199
威望值 : 960
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
回復: [已解決]LISP-將線型bylayer改成continuous
leoneriol 寫到:我的需求是...將所有物件線型為bylayer的..全部改成continuous...
就如同你所提問的 "我發現我所用的lisp程式對省略的物件群碼無作用"
如果線型為BYLAYER ~ 則群碼6是不存在的
這時你只要先把自己虛設(6.XXX) 加到資料串列內再去更換即可
沒有 - 加入虛設群馬 - 新群碼取代需設群馬 - 圖面更新 - 完成
阿希- 高級會員
- 文章總數 : 348
年齡 : 43
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 6824
威望值 : 226
發帖精華 : 1
注冊日期 : 2008-09-22
回復: [已解決]LISP-將線型bylayer改成continuous
加入虛設群碼.....請問這個動作要怎麼做呢???
我該使用哪一個指令?? 是cons嗎??
我該使用哪一個指令?? 是cons嗎??
leoneriol- 榮譽顧問
- 文章總數 : 818
年齡 : 40
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 9199
威望值 : 960
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
回復: [已解決]LISP-將線型bylayer改成continuous
(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(entget #en));;;取得圖元資料
(setq oldlist (assoc #qnum endata))
(setq newlist (cons #qnum #new))
(setq endata (subst newlist oldlist endata))不知是不是再這一行做變動即可??...把subst改成cons??
(entmod endata)
)
leoneriol- 榮譽顧問
- 文章總數 : 818
年齡 : 40
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 9199
威望值 : 960
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
回復: [已解決]LISP-將線型bylayer改成continuous
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)) ;新舊串列替換
阿希- 高級會員
- 文章總數 : 348
年齡 : 43
來自 : 台北
職業 : 水電設計
愛好 : autolisp
個性 : 和平主義者
使用年資 : 5
使用版本 : 2008
積分 : 19
經驗值 : 6824
威望值 : 226
發帖精華 : 1
注冊日期 : 2008-09-22
回復: [已解決]LISP-將線型bylayer改成continuous
(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
)
太感謝阿希大了!!!!這是我程式最後的樣子....請過目
(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, 11:49 作了第 3 次修改
leoneriol- 榮譽顧問
- 文章總數 : 818
年齡 : 40
來自 : 基隆市七堵區
職業 : 機電工程公司-繪圖(工地)
愛好 : 看小說
個性 : 不愛說話-反應慢
使用年資 : 6年
使用版本 : 2008 & 2012
積分 : 27
經驗值 : 9199
威望值 : 960
發帖精華 : 1
回帖精華 : 1
注冊日期 : 2009-03-12
回復: [已解決]LISP-將線型bylayer改成continuous
******************************************************阿希 寫到:(setq endata (CONS (cons 6 0) endata)) ; 將群碼點串列加到ENDATA資料串列內
(setq endata (subst newlist oldlist endata)) ;新舊串列替換
謝謝技術指導~< 積分 +1>
____________________________________________________________________________________
👉快速比例設定與出圖技巧-線上課程(點我)👈
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論 :: 已解決主題精華區
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章