[發問]if 大於小於問題
2 posters
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
[發問]if 大於小於問題
原本寫一個程式
點選一條線 (正交的線)
算出這條線方向 與距離
距離小於100 在線 中點 插入圖塊
大於100 線的兩端點各減少15後的座標 插入圖塊
大於230 線的兩端點各減少15後的座標 跟 中點插入圖塊
但在寫大於430時發生個問題
原本是打算 線的兩端點各減少15後的座標 然後在這個座標上在往左或往右+200距離 插入圖塊 (中點部插入凸塊)
但假如線長500 卻同時達成 230 430 的條件 會變成連中點也有
是否可以限制成 線長>430 時只執行某某程式?
或者限制成 230~430時 執行某某程式?
以下是程式 但已把430部分去除掉了
點選一條線 (正交的線)
算出這條線方向 與距離
距離小於100 在線 中點 插入圖塊
大於100 線的兩端點各減少15後的座標 插入圖塊
大於230 線的兩端點各減少15後的座標 跟 中點插入圖塊
但在寫大於430時發生個問題
原本是打算 線的兩端點各減少15後的座標 然後在這個座標上在往左或往右+200距離 插入圖塊 (中點部插入凸塊)
但假如線長500 卻同時達成 230 430 的條件 會變成連中點也有
是否可以限制成 線長>430 時只執行某某程式?
或者限制成 230~430時 執行某某程式?
以下是程式 但已把430部分去除掉了
- 代碼:
(defun c:EXE1()
(setvar "cmdecho" 0)
(command "LAYER" "S" "切割線" "")
(setq en (entsel "1文字"))
(setq en_data (entget (car en)))
(setq en_rad (cdr (assoc 10 en_data)));起點
(setq en_END (cdr (assoc 11 en_data)));終點
(setq EX_RX (car en_rad));X
(setq EX_EX (car en_END));X
(setq EX_RY (cadr en_rad));Y
(setq EX_EY (cadr en_END));Y
(setq EX_EXE1 (- EX_EX EX_RX))
(if (> EX_EXE1 0)
(progn
(setq EX_EXE2 (ABS EX_EXE1))
(if (< EX_EXE2 100)
(progn
(setq EX_TT(/ EX_EXE2 2))
(setq EX_TTT (+ EX_RX EX_TT))
(setq EX_TTXY (list EX_TTT EX_RY))
(setvar "osnapcoord" 1)
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY))
(setvar "osnapcoord" 2)
)
)
(if (>= EX_EXE2 100)
(progn
(setq EX_AX1(+ EX_RX 15))
(setq EX_AX2(- EX_EX 15))
(setq EX_TTXY (list EX_AX1 EX_RY))
(setq EX_TTXY2 (list EX_AX2 EX_RY))
(setvar "osnapcoord" 1)
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY))
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY2))
(setvar "osnapcoord" 2)
)
)
(if (> EX_EXE2 230)
(progn
(setq EX_AX1(+ EX_RX 15))
(setq EX_AX2(- EX_EX 15))
(setq EX_TT2(/ EX_EXE2 2))
(setq EX_TTT (+ EX_RX EX_TT2))
(setq EX_TTXY3 (list EX_TTT EX_RY))
(setq EX_TTXY (list EX_AX1 EX_RY))
(setq EX_TTXY2 (list EX_AX2 EX_RY))
(setvar "osnapcoord" 1)
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY))
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY2))
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY3))
(setvar "osnapcoord" 2)
)
)
)
)
(if (< EX_EXE1 0)
(progn
(setq EX_EXE2 (ABS EX_EXE1))
(if (< EX_EXE2 100)
(progn
(setq EX_TT(/ EX_EXE2 2))
(setq EX_TTT (- EX_RX EX_TT))
(setq EX_TTXY (list EX_TTT EX_RY))
(setvar "osnapcoord" 1)
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY))
(setvar "osnapcoord" 2)
)
)
(if (>= EX_EXE2 100)
(progn
(setq EX_AX1(- EX_RX 15))
(setq EX_AX2(+ EX_EX 15))
(setq EX_TTXY (list EX_AX1 EX_RY))
(setq EX_TTXY2 (list EX_AX2 EX_RY))
(setvar "osnapcoord" 1)
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY))
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY2))
(setvar "osnapcoord" 2)
)
)
(if (> EX_EXE2 230)
(progn
(setq EX_AX1(- EX_RX 15))
(setq EX_AX2(+ EX_EX 15))
(setq EX_TT2(/ EX_EXE2 2))
(setq EX_TTT (- EX_RX EX_TT2))
(setq EX_TTXY3 (list EX_TTT EX_RY))
(setq EX_TTXY (list EX_AX1 EX_RY))
(setq EX_TTXY2 (list EX_AX2 EX_RY))
(setvar "osnapcoord" 1)
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY))
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY2))
(setq en_data (command "insert" "連接孔" "s" "1" "r" "0" EX_TTXY3))
(setvar "osnapcoord" 2)
)
)
)
)
(prin1)
)
as920029as 在 2020-03-28, 00:45 作了第 1 次修改
as920029as- 一般會員
- 文章總數 : 110
年齡 : 33
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 5182
威望值 : 47
注冊日期 : 2012-05-06
回復: [發問]if 大於小於問題
IF後的條件判斷可以用AND進行多條件邏輯判斷
範例:
或是用COND來進行多條件判斷
範例:
- 代碼:
(if (< EX_EXE2 100)
(prompt "\n<100")
)
(if (and
(>= EX_EXE2 100)
(< EX_EXE2 230))
(prompt "\n>=100,<230")
)
(if (and
(>= EX_EXE2 230)
(< EX_EXE2 430))
(prompt "\n>=230,<430")
)
(if (>= EX_EXE2 430)
(prompt "\n>=430")
)
或是用COND來進行多條件判斷
- 代碼:
(cond
((< EX_EXE2 100)
(prompt "\n<100")
)
((< EX_EXE2 230)
(prompt "\n>=100,<230")
)
((< EX_EXE2 430)
(prompt "\n>=230,<430")
)
((>= EX_EXE2 430)
(prompt "\n>=430")
)
);_cond
naruto018- 中級會員
- 文章總數 : 224
年齡 : 32
來自 : 高雄
職業 : 學習中(CAD,Revit,Excel VBA)
愛好 : 當個懶熊
個性 : 內向
使用年資 : 新手
使用版本 : 2015
AutoCAD基礎篇等級 : 10星級
積分 : 5
經驗值 : 4490
威望值 : 564
注冊日期 : 2016-11-29
Tiger&蘋果爸 likes this post
回復: [發問]if 大於小於問題
原來如此 感謝大大教學naruto018 寫到:IF後的條件判斷可以用AND進行多條件邏輯判斷
範例:
- 代碼:
(if (< EX_EXE2 100)
(prompt "\n<100")
)
(if (and
(>= EX_EXE2 100)
(< EX_EXE2 230))
(prompt "\n>=100,<230")
)
(if (and
(>= EX_EXE2 230)
(< EX_EXE2 430))
(prompt "\n>=230,<430")
)
(if (>= EX_EXE2 430)
(prompt "\n>=430")
)
或是用COND來進行多條件判斷
- 代碼:
(cond
((< EX_EXE2 100)
(prompt "\n<100")
)
((< EX_EXE2 230)
(prompt "\n>=100,<230")
)
((< EX_EXE2 430)
(prompt "\n>=230,<430")
)
((>= EX_EXE2 430)
(prompt "\n>=430")
)
);_cond
因為手邊沒書 LISP全靠網路上找資料自學 所以許多地方不會 但感謝這論壇的大大 耐心教學
as920029as- 一般會員
- 文章總數 : 110
年齡 : 33
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 5182
威望值 : 47
注冊日期 : 2012-05-06
AutoCAD顧問 :: 技術(發言等級:一般會員) :: :: 進階討論
第1頁(共1頁)
這個論壇的權限:
您 無法 在這個版面回復文章