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.
[發問]if 大於小於問題 Aoe1-113[發問]if 大於小於問題 Ioaoe110[發問]if 大於小於問題 2020-310[發問]if 大於小於問題 Oiu15010[發問]if 大於小於問題 2020-211[發問]if 大於小於問題 Ia15010[發問]if 大於小於問題 Aizyao10[發問]if 大於小於問題 Uos15010[發問]if 大於小於問題 BPl3tjj[發問]if 大於小於問題 Ziao1510
[發問]if 大於小於問題 Aoe15010[發問]if 大於小於問題 Oo-2-110[發問]if 大於小於問題 Zuoiy_10[發問]if 大於小於問題 Aizyao11[發問]if 大於小於問題 Iyb_1510[發問]if 大於小於問題 Aoe1-112[發問]if 大於小於問題 Uos15011[發問]if 大於小於問題 Aoe2da10[發問]if 大於小於問題 Aoe2da11[發問]if 大於小於問題 Aoe10

[發問]if 大於小於問題

2 posters

向下

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

發表 由 as920029as 周五 27 3月 - 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 在 周六 28 3月 - 0:45 作了第 1 次修改
as920029as
as920029as
一般會員
一般會員

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

回頂端 向下

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

發表 由 naruto018 周五 27 3月 - 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
中級會員
中級會員

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

Tiger&蘋果爸 likes this post

回頂端 向下

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

發表 由 as920029as 周五 27 3月 - 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
一般會員
一般會員

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

回頂端 向下

回頂端


 
這個論壇的權限:
無法 在這個版面回復文章
[發問]if 大於小於問題 Aoe1-113[發問]if 大於小於問題 Ioaoe110[發問]if 大於小於問題 2020-310[發問]if 大於小於問題 Oiu15010[發問]if 大於小於問題 2020-211[發問]if 大於小於問題 Ia15010[發問]if 大於小於問題 Aizyao10[發問]if 大於小於問題 Uos15010[發問]if 大於小於問題 BPl3tjj[發問]if 大於小於問題 Ziao1510
[發問]if 大於小於問題 Aoe15010[發問]if 大於小於問題 Oo-2-110[發問]if 大於小於問題 Zuoiy_10[發問]if 大於小於問題 Aizyao11[發問]if 大於小於問題 Iyb_1510[發問]if 大於小於問題 Aoe1-112[發問]if 大於小於問題 Uos15011[發問]if 大於小於問題 Aoe2da10[發問]if 大於小於問題 Aoe2da11[發問]if 大於小於問題 Aoe10