AutoCAD顧問
還沒有註冊嗎...即日起免費註冊,所有最完整的AutoCAD討論、教學及資源都在論壇裡喔~
[發問]if 大於小於問題 2020-211 [發問]if 大於小於問題 Oooo-110 [發問]if 大於小於問題 Oo-2-110 [發問]if 大於小於問題 Ziao1510 [發問]if 大於小於問題 BPl3tjj [發問]if 大於小於問題 Uos15010

[發問]if 大於小於問題

向下

[發問]if 大於小於問題 Empty [發問]if 大於小於問題

發表 由 as920029as 于 2020-03-27, 15:17

原本寫一個程式
點選一條線 (正交的線)
算出這條線方向 與距離
距離小於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
as920029as
一般會員
一般會員

文章總數 : 79
年齡 : 29
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 3416
威望值 : 37
注冊日期 : 2012-05-06
男 白羊座 羊

回頂端 向下

[發問]if 大於小於問題 Empty 回復: [發問]if 大於小於問題

發表 由 naruto018 于 2020-03-27, 19:31

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
naruto018
naruto018
中級會員
中級會員

文章總數 : 170
年齡 : 28
來自 : 高雄
職業 : 學習中(CAD,Revit,Excel VBA)
愛好 : 當個懶熊
個性 : 內向
使用年資 : 新手
使用版本 : 2015
AutoCAD基礎篇等級 : 10星級
積分 : 5
經驗值 : 2481
威望值 : 405
注冊日期 : 2016-11-29
藍鵲726號
男 摩羯座 羊

回頂端 向下

[發問]if 大於小於問題 Empty 回復: [發問]if 大於小於問題

發表 由 as920029as 于 2020-03-27, 21:48

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
as920029as
一般會員
一般會員

文章總數 : 79
年齡 : 29
來自 : 台南市
職業 : 繪圖員
愛好 : 電腦遊戲
個性 : 開朗
使用年資 : 3年
使用版本 : 2010
經驗值 : 3416
威望值 : 37
注冊日期 : 2012-05-06
男 白羊座 羊

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章
[發問]if 大於小於問題 Uos15010 [發問]if 大於小於問題 BPl3tjj [發問]if 大於小於問題 Ziao1510 [發問]if 大於小於問題 Oo-2-110 [發問]if 大於小於問題 Oooo-110 [發問]if 大於小於問題 2020-211