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.
請教一下關於 COND 的用法 Io15011 請教一下關於 COND 的用法 2020-310 請教一下關於 COND 的用法 Oiu15010 請教一下關於 COND 的用法 2020-211 請教一下關於 COND 的用法 Oo-2-110 請教一下關於 COND 的用法 BPl3tjj

請教一下關於 COND 的用法

2 posters

向下

請教一下關於 COND 的用法 Empty 請教一下關於 COND 的用法

發表 由 閃電俠 2021-08-25, 22:29

請教各位先輩我的程式中
SelSub "A"
SelSub "B"
SelSub "C"
三組裡面的組成有共同的變數 X Y Z 但三組我所指定的值是不同的
  (setq x 10)
  (setq y 10)
  (setq z 20)
三組裡面有共同的變數定義如下
我該如何將他們切割出來 放在COND外面或者其他地方只要想用這一段的定義就可以直接從SelSub "A" SelSub "B" SelSub "C" 把下面虛線內這一大段的參數拉來用
因為Cond   選了A就會跑A段裡面的程式碼  選B只會跑B裡面的 我想要把共用的部分移出該如何連接
謝謝各位

-----------------
(setq ll (+ L1 x))
  (setq ww (+ W1 y))
  (setq hh (+ H1 z))

  (setq p2(list (+ (car p1) ll) (cadr p1))) ;
  (setq p3(list (+ (car p2) ww) (cadr p2))) ;
  (setq p4(list (+ (car p3) ll) (cadr p3)));
  (setq p5(list (+ (car p4) (- ww 10)) (cadr p4))) ;
-----------------









;(initget "A B C")
 ;(setq SelSub (getkword "\n 輸入A 輸入B 輸入C"))
(cond
 ((eq SelSub "A")
  (setq x 10)
  (setq y 10)
  (setq z 20)

  (setq ll (+ L1 x))
  (setq ww (+ W1 y))
  (setq hh (+ H1 z))

  (setq p2(list (+ (car p1) ll) (cadr p1))) ;
  (setq p3(list (+ (car p2) ww) (cadr p2))) ;
  (setq p4(list (+ (car p3) ll) (cadr p3)));
  (setq p5(list (+ (car p4) (- ww 10)) (cadr p4))) ;

  (command "line" p1 p2 p3 p4 p5"")
 )    
 ((eq SelSub "B")
  (setq x 20)
  (setq y 30)
  (setq z 40)

  (setq ll (+ L1 x))
  (setq ww (+ W1 y))
  (setq hh (+ H1 z))

  (setq p2(list (+ (car p1) ll) (cadr p1))) ;
  (setq p3(list (+ (car p2) ww) (cadr p2))) ;
  (setq p4(list (+ (car p3) ll) (cadr p3)));
  (setq p5(list (+ (car p4) (- ww 10)) (cadr p4))) ;
(command "line" p1 p2 p3 p4 p5"")

 )
 ((eq SelSub "C")
  (setq x -28)
  (setq y -38)
  (setq z -40)


  (setq ll (+ L1 x))
  (setq ww (+ W1 y))
  (setq hh (+ H1 z))

  (setq p2(list (+ (car p1) ll) (cadr p1))) ;
  (setq p3(list (+ (car p2) ww) (cadr p2))) ;
  (setq p4(list (+ (car p3) ll) (cadr p3)));
  (setq p5(list (+ (car p4) (- ww 10)) (cadr p4))) ;

(command "line" p1 p2 p3 p4 p5"")

 )  
 
)
閃電俠
閃電俠
一般會員
一般會員

文章總數 : 22
年齡 : 38
來自 : 新竹
職業 : Package Design
愛好 : 玩電腦
個性 : 喜愛思考
使用年資 : N+5years
使用版本 : 初學
經驗值 : 274
威望值 : 2
注冊日期 : 2021-04-19
Other / Decline to state 摩羯座 狗

回頂端 向下

請教一下關於 COND 的用法 Empty 回復: 請教一下關於 COND 的用法

發表 由 shenhung 2021-08-26, 11:09

;cond 單獨的做數值設定就好.
(cond
((eq SelSub "A")(setq x  10 y  10 z  20))    
((eq SelSub "B")(setq x  20 y  30 z  40))
((eq SelSub "C")(setq x -28 y -38 z -40))
)
(pt-cal) ; <--執行共用副程式
(command "line" p1 p2 p3 p4 p5"")  ;共同的部份也可以提出來.~
;;=============================================================
;;共用副程式
(defun pt-cal ()
 (setq ll (+ L1 x))
 (setq ww (+ W1 y))
 (setq hh (+ H1 z))

 (setq p2(list (+ (car p1) ll) (cadr p1))) ;
 (setq p3(list (+ (car p2) ww) (cadr p2))) ;
 (setq p4(list (+ (car p3) ll) (cadr p3)));
 (setq p5(list (+ (car p4) (- ww 10)) (cadr p4))) ;
)
shenhung
shenhung
高級會員
高級會員

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

Tiger&蘋果爸 and 閃電俠 like this post

回頂端 向下

請教一下關於 COND 的用法 Empty 回復: 請教一下關於 COND 的用法

發表 由 閃電俠 2021-08-30, 17:02

請教一下如果共用副程式
若有3組的話該怎麼 描述比較洽當
cond可以在做一層嗎?

(cond
((eq SelSub "A")(command XX))    
((eq SelSub "B")(Command YY))
((eq SelSub "C")(Command ZZ))
)

(cond
((eq SelSub "XX")(setq x  10 y  10 z  20))    
((eq SelSub "YY")(setq x  20 y  30 z  40))
((eq SelSub "ZZ")(setq x -28 y -38 z -40))
)
(pt-cal) ; <--執行共用副程式
(command "line" p1 p2 p3 p4 p5"")  ;共同的部份也可以提出來.~
;;=============================================================
;;共用副程式
(defun pt-cal ()
 (setq ll (+ L1 x))
 (setq ww (+ W1 y))
 (setq hh (+ H1 z))

 (setq p2(list (+ (car p1) ll) (cadr p1))) ;
 (setq p3(list (+ (car p2) ww) (cadr p2))) ;
 (setq p4(list (+ (car p3) ll) (cadr p3)));
 (setq p5(list (+ (car p4) (- ww 10)) (cadr p4))) ;
)[/quote]
閃電俠
閃電俠
一般會員
一般會員

文章總數 : 22
年齡 : 38
來自 : 新竹
職業 : Package Design
愛好 : 玩電腦
個性 : 喜愛思考
使用年資 : N+5years
使用版本 : 初學
經驗值 : 274
威望值 : 2
注冊日期 : 2021-04-19
Other / Decline to state 摩羯座 狗

回頂端 向下

請教一下關於 COND 的用法 Empty 回復: 請教一下關於 COND 的用法

發表 由 shenhung 2021-08-30, 18:46

你能不能把完整LSP列出來.? 另外三組副程式..是什麼.我不太了解你的意思.~

cond 是可以做很多層.沒問題.~!!
shenhung
shenhung
高級會員
高級會員

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

回頂端 向下

請教一下關於 COND 的用法 Empty 回復: 請教一下關於 COND 的用法

發表 由 閃電俠 2021-08-30, 21:01

感謝回復
程式如下
我要做的事情是選擇ABC三種繪圖的方式
而我的各個點位需要經過L1 W1 R1 的數值來推演相對點的位置(這些點位都是共用的)
而L1 W1 R1 需要輸入我要的數值 L W R 分別加上 三組 X Y Z 來產生
我想要做的就是先選A B C 在選S M L 再輸入L W R 最後繪圖


(defun c:q1( / oldlayer oldsnap oldpick SelSub) ;|程式開始-保存原有系統變數|;
(setq oldlayer (getvar "clayer")) ;目前圖層)
(setq oldsnap (getvar "osmode")) ;(儲存目前的抓點設定)
(setq oldpick (getvar "pickbox")) ;(儲存目前的選取框大小值)

(initget "A B C");ABC是繪圖的三種方式
(setq SelSub (getkword "\n 選擇程式:[A/B/C]"))
(setq p1 (getpoint "Enter Left/Low Point:選擇起始點"))

(setq L(getreal "輸入長:"))
(setq W (getreal "輸入寬:"))
(setq R (getreal "輸入半徑:"))


;副程式 三種SML是相關參數
(initget "S M L")
(setq SelSub (getkword "\n 選擇程式:[S/M/L]"))
(cond
((eq SelSub "S")(setq x 10 y 5 z 15))
((eq SelSub "M")(setq x 10 y 5 z 15))
((eq SelSub "L")(setq x 10 y 5 z 15))
)

;隨著選擇參數 S M L產生出 L1 W1 R1 各種對應數值產生我需要的L1 W1 R1 的相對位置
(setq L1 (+ L x))
(setq W1 (+ W y))
(setq R1 (+ R z))


(setq p2(list (+(car p1)L1) (cadr p1)))
(setq p3(list (car p2) (+(cadr p2)W1)))
(setq p4(list (car p1) (+(cadr p1)W1)))
(setq p5(list (car p2) (+(cadr p1)(/ W1 2))))
(setq p6(list (car p1) (+(cadr p1)(/ W1 2))))

(setvar "osmode" 0)
(setvar "cmdecho" 0)

(cond
((eq SelSub "A")
;執行程式A程式碼畫出方形+圓形
(command "LAYER" "M" "0" "");依照0圖層畫線
(command "line" p1 p2 p3 p4 "c");劃出長板四方
(command "_circle" p5 R1 "");以p2 p3 中心點為圓心劃出圓形
(princ "執行程式A程式碼")
);_end_SubA


((eq SelSub "B")
;執行程式B程式碼
(command "LAYER" "M" "1" "");依照1圖層畫線
(command "line" p1 p5 p4 "c");劃出三角形
(command "_circle" p5 R1 "");以p5 中心點為圓心劃出圓形
(princ "執行程式B程式碼")
);_end_SubB

((eq SelSub "C")
;執行程式C程式碼
(command "LAYER" "M" "1" "");依照1圖層畫線
(command "line" p1 p3 p2 p4 "c");劃出三角形
(command "_circle" p6 R1 "");以p5 中心點為圓心劃出圓形
(princ "執行程式C程式碼")
);_end_SubC
);_end_cond
;;;共同結尾程式碼
;(princ)
;);



(setvar "clayer" oldlayer)
(setvar "osmode" oldsnap)
(setvar "pickbox" oldpick)
(command "(gc)" )
;|程式結束-恢復原有系統變數|;

(princ)
)
閃電俠
閃電俠
一般會員
一般會員

文章總數 : 22
年齡 : 38
來自 : 新竹
職業 : Package Design
愛好 : 玩電腦
個性 : 喜愛思考
使用年資 : N+5years
使用版本 : 初學
經驗值 : 274
威望值 : 2
注冊日期 : 2021-04-19
Other / Decline to state 摩羯座 狗

回頂端 向下

請教一下關於 COND 的用法 Empty 回復: 請教一下關於 COND 的用法

發表 由 shenhung 2021-08-30, 22:03

;副程式 三種SML是相關參數
(initget "S M L")
(setq SelSub1 (getkword "\n 選擇程式:[S/M/L]"))

; 變數名稱修改為 SelSub1 -因為跟上面A/B/C 的變數同名. 這理NG

(cond
((eq SelSub1 "S")(setq x 10 y 5 z 15))
((eq SelSub1 "M")(setq x 10 y 5 z 15))
((eq SelSub1 "L")(setq x 10 y 5 z 15))
)
(command "_circle" p5 R1 )  ;<== 取消最後的 "" 號

最後 (command "(gc)") 這個沒辦法執行

其餘執行起來沒什麼問題.~
;=================


q1.lsp 載點.
https://www.dropbox.com/s/bazx2b9uu2oq15l/q1.lsp?dl=0
shenhung
shenhung
高級會員
高級會員

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

Tiger&蘋果爸 likes this post

回頂端 向下

請教一下關於 COND 的用法 Empty 感謝回應

發表 由 閃電俠 2021-09-02, 22:11

假如我的SML 每個都有三組參數要做選擇
先選SML
在選S1 S2 S2 或 M1 M2 M3 或 L1 L2 L3
我是否要再把Cond 往下一層寫



[quote="shenhung"];副程式 三種SML是相關參數
(initget "S M L")
(setq SelSub1 (getkword "\n 選擇程式:[S/M/L]"))


(cond
((eq SelSub1 "S")
(initget "S1 S2 S3")
(setq SelSub3 (getkword "\n 選擇程式:[S1/S2/S3]"))
(cond
((eq SelSub3 "S1")(setq x 10 y 5 z 15))
((eq SelSub3 "S2")(setq x 0 y 7 z9 ))
((eq SelSub3 "S2")(setq x 0 y 7 z9 ))
)
)
((eq SelSub1 "M")
(initget "M1 M2 M3")
(setq SelSub3 (getkword "\n 選擇程式:[M1/M2/M3]"))
(cond
((eq SelSub3 "M1")(setq x 20 y 15 z -15))
((eq SelSub3 "M2")(setq x 10 y 10 z 19 ))
((eq SelSub3 "M2")(setq x 30 y 7 z 29 ))
);依此類推

)
)

閃電俠
閃電俠
一般會員
一般會員

文章總數 : 22
年齡 : 38
來自 : 新竹
職業 : Package Design
愛好 : 玩電腦
個性 : 喜愛思考
使用年資 : N+5years
使用版本 : 初學
經驗值 : 274
威望值 : 2
注冊日期 : 2021-04-19
Other / Decline to state 摩羯座 狗

回頂端 向下

請教一下關於 COND 的用法 Empty 回復: 請教一下關於 COND 的用法

發表 由 shenhung 2021-09-03, 08:43

是的差不多就是這樣..這樣寫沒問題. 只是多層的設定.輸入會麻煩一點而已.!!
未來程式若改用對話框~!! 使用者操作起來.就容易很多了.
shenhung
shenhung
高級會員
高級會員

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

回頂端 向下

請教一下關於 COND 的用法 Empty 請教一下對話框的基本語法

發表 由 閃電俠 2021-09-06, 20:18

請教一下前輩 對話框的基本語法
我只需要簡易型態的語法
其他的我會寫
感激不盡
閃電俠
閃電俠
一般會員
一般會員

文章總數 : 22
年齡 : 38
來自 : 新竹
職業 : Package Design
愛好 : 玩電腦
個性 : 喜愛思考
使用年資 : N+5years
使用版本 : 初學
經驗值 : 274
威望值 : 2
注冊日期 : 2021-04-19
Other / Decline to state 摩羯座 狗

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章
請教一下關於 COND 的用法 Uos15010 請教一下關於 COND 的用法 BPl3tjj 請教一下關於 COND 的用法 Ziao1510 請教一下關於 COND 的用法 Oo-2-110 請教一下關於 COND 的用法 Oooo-110 請教一下關於 COND 的用法 2020-211