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

[討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

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

[討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-03-18, 03:07

請問:
寫一個LISP功能為:框選一個範圍後只選取裡面顏色為綠色的所有物件,並設定線型為HIDDEN。

其中選取顏色為綠色的所有物件,指令寫法是?
要將以選取的物件設定線型為HIDDEN,指令寫法是?

請問以上兩點LISP有指令可以做到嗎?還是還要經過特殊的方法做到。

感謝回覆!!
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 tan866 于 2013-03-19, 07:23

(defun c:2 ()
(SETQ SS (ssget '((8 . "3"))))
(if ss (command "change" ss "" "P" "LT" "HIDDEN" ""))
(princ)
)
avatar
tan866
初級會員
初級會員

文章總數 : 68
年齡 : 40
來自 : 高雄
職業 : 繪圖
愛好 : 騎腳踏車
個性 : 開朗
使用年資 : 5
使用版本 : 2008
積分 : 1
經驗值 : 2959
威望值 : 39
注冊日期 : 2010-10-24
藍鵲346號
男 摩羯座 龍

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-03-20, 02:49

原本程式執行出現類似最下的錯誤,後來我把程式改為以下測試錯誤,
但找不到怎改才能正確執行

我把程式改成以下這樣:
(defun c:2 ()
(COMMAND "SELECT" "\\")
(command "change" "" "P" "LT" "HIDDEN" "")
(princ)
)

但執行出現

指令: 2 SELECT
選取物件: 找到 1 個
選取物件: 找到 1 個,共 2
選取物件:
指令: change
選取物件:
指令: P 不明的指令「P」。請按 F1 取得說明。
指令: LT 不明的指令「LT」。請按 F1 取得說明。
指令: HIDDEN 不明的指令「HIDDEN」。請按 F1 取得說明。

請問怎改修正錯誤?
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-03-20, 04:07

原程式
(defun c:2 ()
(SETQ SS (ssget '((8 . "3"))))
(if ss (command "change" ss "" "P" "LT" "HIDDEN" ""))
(princ)
)

改為以下無錯誤
(defun c:2 ()
(PROMPT "測試")
(SETQ SS (ssget))
(command "change" SS "" "P" "LT" "HIDDEN" ""))
(prin1))

發現好像是'((8 . "3")有誤
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 adslwang 于 2013-03-20, 14:04

aaronchung.tw 寫到:原程式
(defun c:2 ()
(SETQ SS (ssget '((8 . "3"))))
(if ss (command "change" ss "" "P" "LT" "HIDDEN" ""))
(princ)
)

改為以下無錯誤
(defun c:2 ()
(PROMPT "測試")
(SETQ SS (ssget))
(command "change" SS "" "P" "LT" "HIDDEN" ""))
(prin1))

發現好像是'((8 . "3")有誤




上面兩行紅色部份皆錯,與題意不符
(8 . "3")指的是圖層並非顏色。
(SETQ SS (ssget))指的是物件選取並無設下篩選條件。

一句話就可以了
(command "change" (ssget '((62 . 3))) "" "P" "LT" "HIDDEN" "")
只撈綠色線條
avatar
adslwang
高級會員
高級會員

文章總數 : 372
年齡 : 39
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 4660
威望值 : 355
回帖精華 : 1
注冊日期 : 2008-10-02
藍鵲88號
男 處女座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-03-21, 01:36

adslwang 寫到:
aaronchung.tw 寫到:原程式
(defun c:2 ()
(SETQ SS (ssget '((8 . "3"))))
(if ss (command "change" ss "" "P" "LT" "HIDDEN" ""))
(princ)
)

改為以下無錯誤
(defun c:2 ()
(PROMPT "測試")
(SETQ SS (ssget))
(command "change" SS "" "P" "LT" "HIDDEN" ""))
(prin1))

發現好像是'((8 . "3")有誤




上面兩行紅色部份皆錯,與題意不符
(8 . "3")指的是圖層並非顏色。
(SETQ SS (ssget))指的是物件選取並無設下篩選條件。

一句話就可以了
(command "change" (ssget '((62 . 3))) "" "P" "LT" "HIDDEN" "")
只撈綠色線條

我想一次選綠色和紅色線設為隱藏線,我試了許久都不行,請問該怎麼寫,賜教了,感謝。
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-03-21, 03:02

再請教

我這樣寫
(defun c:TEST ()
(PROMPT "測試 ")
(command "ERASE" (ssget '((62 . 6))) "")
(prin1))

可以把洋紅色的挑出來刪除,那我要挑出線型為hidden的刪除,要怎麼改。
還有(ssget '((62 . 6))) "")裡面的數字62代表什麼?

謝謝!
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 tan866 于 2013-03-21, 07:43

(command "ERASE" (ssget '((62 . 6))) "")
==>
(command "ERASE" (ssget '((62 . 6)(6 . "HIDDEN"))) "")
avatar
tan866
初級會員
初級會員

文章總數 : 68
年齡 : 40
來自 : 高雄
職業 : 繪圖
愛好 : 騎腳踏車
個性 : 開朗
使用年資 : 5
使用版本 : 2008
積分 : 1
經驗值 : 2959
威望值 : 39
注冊日期 : 2010-10-24
藍鵲346號
男 摩羯座 龍

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-03-22, 04:14

tan866 寫到:(command "ERASE" (ssget '((62 . 6))) "")
==>
(command "ERASE" (ssget '((62 . 6)(6 . "HIDDEN"))) "")

恩,就是這樣,謝謝!

那我要一次挑兩種顏色是要怎麼寫,我一直改不出來
(command "change" (ssget '((62 . 1)))(ssget '((62 . 2))) "" "P" "LT" "HIDDEN" "")

(command "change" (ssget '((62 . 1)(62 . 2))) "" "P" "LT" "HIDDEN" "")
都不行,有人能幫我修正嗎?感恩!
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 tan866 于 2013-03-23, 03:04

指令: (command "change"
(ssget '((-4 . "<OR")(62 . 1)(62 . 2)(-4 . "OR>"))) "" "P" "LT" "HIDDEN" "")

**請將"<"及">"改成半形模式,因為半形模式上傳有問題**

Tiger&蘋果爸 寫到:讚啦!! 謝謝熱心回覆~< 積分 +1>
[公告]關於團隊成員的回文及貢獻
avatar
tan866
初級會員
初級會員

文章總數 : 68
年齡 : 40
來自 : 高雄
職業 : 繪圖
愛好 : 騎腳踏車
個性 : 開朗
使用年資 : 5
使用版本 : 2008
積分 : 1
經驗值 : 2959
威望值 : 39
注冊日期 : 2010-10-24
藍鵲346號
男 摩羯座 龍

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-03-25, 00:51

tan866 寫到:指令: (command "change"
(ssget '((-4 . "<OR")(62 . 1)(62 . 2)(-4 . "OR>"))) "" "P" "LT" "HIDDEN" "")

**請將"<"及">"改成半形模式,因為半形模式上傳有問題**

嗯,謝謝!測試可以,我再研究一下這個程式,有問題再來請教。
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-03-29, 02:14

aaronchung.tw 寫到:
tan866 寫到:指令: (command "change"
(ssget '((-4 . "<OR")(62 . 1)(62 . 2)(-4 . "OR>"))) "" "P" "LT" "HIDDEN" "")

**請將"<"及">"改成半形模式,因為半形模式上傳有問題**

嗯,謝謝!測試可以,我再研究一下這個程式,有問題再來請教。


1.再請問哪我如果要選紅色和黃色線以外的物件都改線型為隱藏線,要怎麼改寫?(以上面的程式架構)
(例:打lisp的觸發只令 ->空白鍵 -> 滑鼠框選 -> (動作:把滑鼠框選的所有物件中紅色線黃色線以外的物件都選取) ->動作之後的動作)

2.以下程式
(defun c:RYC ()
(PROMPT "複製紅色線 黃色線 ")
(command "COPY" (ssget '((-4 . "<OR" ) (62 . 1)(62 . 2) (-4 . "OR>"))) "")
(prin1))
我要改成只選擇紅色線 黃色線然後能自行入指令再去動作,要怎麼寫?
(例:打RYC ->空白鍵 -> 滑鼠框選 -> 打COPY ->動作之後的動作)

以上請教,謝謝!

avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 tan866 于 2013-04-06, 02:15

選紅色和黃色線以外的物件都改線型為隱藏線
指令: (command "change"
(ssget '((-4 . "<NOT")(-4 . "<OR")(62 . 1)(62 . 2)(-4 . "OR>")(-4 . "NOT>"))) "" "P" "LT" "HIDDEN" "")

**請將"<"及">"改成半形模式,因為半形模式上傳有問題**

--------------------------------------------------------------------------------
avatar
tan866
初級會員
初級會員

文章總數 : 68
年齡 : 40
來自 : 高雄
職業 : 繪圖
愛好 : 騎腳踏車
個性 : 開朗
使用年資 : 5
使用版本 : 2008
積分 : 1
經驗值 : 2959
威望值 : 39
注冊日期 : 2010-10-24
藍鵲346號
男 摩羯座 龍

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-04-09, 03:44

tan866 寫到:選紅色和黃色線以外的物件都改線型為隱藏線
指令: (command "change"
(ssget '((-4 . "<NOT")(-4 . "<OR")(62 . 1)(62 . 2)(-4 . "OR>")(-4 . "NOT>"))) "" "P" "LT" "HIDDEN" "")

**請將"<"及">"改成半形模式,因為半形模式上傳有問題**

--------------------------------------------------------------------------------

嗯,可以了,感謝!
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-04-09, 03:48

2.以下程式
(defun c:RY ()
(PROMPT "選取紅色線 黃色線 ")
(command "COPY" (ssget '((-4 . "<OR" ) (62 . 1)(62 . 2) (-4 . "OR>"))) "")
(prin1))
我要改成只選擇紅色線 黃色線然後之後自己打要做的動作 要怎寫?
(例:打RY ->空白鍵 -> 滑鼠框選(自動選取紅色線 黃色線) ->(之後的動作自己填指令)

以上請教,謝謝!
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 shenhung 于 2013-04-09, 04:45

代碼:

(defun c:RY (/ mod_cmd ed:cmd_inx ss)
(PROMPT "選取紅色線 黃色線")
(setq mod_cmd '("Change" "Erase""Move" "Copy" "Rotate" "Mirror"))
(initget "1 2 3 4 5 6")
(setq ed:cmd_inx (getkword "\nChange(1)/Erase(2)/Move(3)/Copy(4)/Rotate(5)/Mirror(6)"))
(if ed:cmd_inx
    (progn
    (setq ss (ssget '((-4 . "<OR")(62 . 1)(62 . 2) (-4 . "OR>"))))
    (if ss (command (nth (1- (atoi ed:cmd_inx)) mod_cmd) ss ""))
    )

(princ)
)
avatar
shenhung
高級會員
高級會員

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

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 adslwang 于 2013-04-27, 14:19

shenhung 寫到:
代碼:

(defun c:RY (/ mod_cmd ed:cmd_inx ss)
(PROMPT "選取紅色線 黃色線")
(setq mod_cmd '("Change" "Erase""Move" "Copy" "Rotate" "Mirror"))
(initget "1 2 3 4 5 6")
(setq ed:cmd_inx (getkword "\nChange(1)/Erase(2)/Move(3)/Copy(4)/Rotate(5)/Mirror(6)"))
(if ed:cmd_inx
    (progn
    (setq ss (ssget '((-4 . "<OR")(62 . 1)(62 . 2) (-4 . "OR>"))))
    (if ss (command (nth (1- (atoi ed:cmd_inx)) mod_cmd) ss ""))
    )

(princ)
)



謝謝前輩分享,程式強力吸收中

avatar
adslwang
高級會員
高級會員

文章總數 : 372
年齡 : 39
來自 : 台南
職業 : 自由業
愛好 : 電腦、旅行
個性 : 樂觀
使用年資 : 1年
使用版本 : 2009
積分 : 17
經驗值 : 4660
威望值 : 355
回帖精華 : 1
注冊日期 : 2008-10-02
藍鵲88號
男 處女座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-04-27, 14:46

shenhung 寫到:
代碼:

(defun c:RY (/ mod_cmd ed:cmd_inx ss)
(PROMPT "選取紅色線 黃色線")
(setq mod_cmd '("Change" "Erase""Move" "Copy" "Rotate" "Mirror"))
(initget "1 2 3 4 5 6")
(setq ed:cmd_inx (getkword "\nChange(1)/Erase(2)/Move(3)/Copy(4)/Rotate(5)/Mirror(6)"))
(if ed:cmd_inx
    (progn
    (setq ss (ssget '((-4 . "<OR")(62 . 1)(62 . 2) (-4 . "OR>"))))
    (if ss (command (nth (1- (atoi ed:cmd_inx)) mod_cmd) ss ""))
    )

(princ)
)

感謝回復,待我研究一下,有問題再來發問。謝謝!
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

回復: [討論]LISP選取所有綠色物件,並設定為線型HIDDEN?

發表 由 aaronchung.tw 于 2013-05-18, 03:13

shenhung 寫到:
代碼:

(defun c:RY (/ mod_cmd ed:cmd_inx ss)
(PROMPT "選取紅色線 黃色線")
(setq mod_cmd '("Change" "Erase""Move" "Copy" "Rotate" "Mirror"))
(initget "1 2 3 4 5 6")
(setq ed:cmd_inx (getkword "\nChange(1)/Erase(2)/Move(3)/Copy(4)/Rotate(5)/Mirror(6)"))
(if ed:cmd_inx
    (progn
    (setq ss (ssget '((-4 . "<OR")(62 . 1)(62 . 2) (-4 . "OR>"))))
    (if ss (command (nth (1- (atoi ed:cmd_inx)) mod_cmd) ss ""))
    )

(princ)
)

請問要是要把以上lisp功能顛倒過來程式要怎麼修改。
(輸入RY -> 輸入1或2 -> 選取紅色線(1)/選取黃色線(2) ->執行刪除)

謝謝!
avatar
aaronchung.tw
初級會員
初級會員

文章總數 : 85
年齡 : 39
來自 : Taipei
職業 : 繪圖
愛好 : 電腦網路,閑逛
個性 : 隨和
使用年資 : 8年
使用版本 : 2008
積分 : 1
經驗值 : 2637
威望值 : 24
注冊日期 : 2011-12-03
藍鵲198號
男 射手座 馬

回頂端 向下

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


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