大変に恐縮ですが、お知恵を頂きたく質問させていだだきます。
使用CAD:AutoCAD2025
角パイプのブロック挿入をLISPで書いております。
角パイプのサイズによって肉厚が違うので外形サイズを選択後に対応した肉厚を選択してそれぞれ選択したサイズ、肉厚を結合し、ファイル名にして挿入しております。
肉厚を選択する際、*last-Tsize*をgetkwordでリストに入れることにより右クリックで再選択できるようにしました。
この時、リストに無いサイズが前回選択値で表示されることがあります。間違って無いサイズを右クリックしてしまった時にエラーメッセージが出るように(コマンドに表示するよりalertで表示させたほうがわかりやすいためalertにしました)したいのですが、現在のLISPでは右クリック再選択ができない状態です。(alertメッセージを肉厚選択時に出るように変更したらできなくなりました)
長々書いてしまいましたが、最終的には右クリックで肉厚を選択できるようにし、且つリストに無い肉厚を選択した時にエラーメッセージが出て再選択できるようにしたいです。
どのように変更すれば可能になりますでしょうか?
お忙しい中申し訳ありませんがよろしくお願いします。
以下LISPです。
(defun c:insert_SQUARE ()
(setq LUP (getvar "LUPREC"))
(setvar "LUPREC" 1)
(initget "25 31 40 45 50 60 75 80 100 125 150 175 200 250 LAST")
(setq SQUARESSsize (getkword (strcat "\n角パイプ SS 正方形\n●=現在選択中角パイプサイズ 右クリックまたは【Enter】で再選択<" *last-SQUARESSsize*
">[25/31/40/45/50/60/75/80/100/125/150/175/200/250]: ")))
(cond ((= SQUARESSsize nil) (setq SQUARESSsize *last-SQUARESSsize*))
((= (strcase SQUARESSsize) "LAST") (setq SQUARESSsize *last-SQUARESSsize*))
(T (setq SQUARESSsize (strcat "□" SQUARESSsize))))
(setq *last-SQUARESSsize* SQUARESSsize)
(if (not *last-Tsize*) (setq *last-Tsize* "t2.3"))
(cond
((or (= SQUARESSsize "□25") (= SQUARESSsize "□31"))
(setq Tsize nil)
(while (= Tsize nil)
(initget "1.6 2.3 3.2 LAST")
(setq Tsize_input (getkword (strcat "\n【" SQUARESSsize "】\n●=現在選択中の肉厚(" *last-Tsize* ") 右クリックまたは【Enter】で再選択<" *last-Tsize* ">[1.6/2.3/3.2]: ")))
(cond
;; 右クリックの場合を最初に判定
((= Tsize_input nil)
(setq Tsize Tsize_input)) ; Tsizeにnilを格納してループを抜ける
;; 有効なキーワードの場合
((member Tsize_input '("1.6" "2.3" "3.2" "LAST"))
(setq Tsize Tsize_input)) ; Tsizeに値を格納してループを抜ける
;; 上記以外(無効な入力)の場合
(T
(alert "\n<!> 有効な肉厚ではありません。リストから再選択してください。")
)
)
)
)
((or (= SQUARESSsize "□40") (= SQUARESSsize "□45"))
(setq Tsize nil)
(while (= Tsize nil)
(initget "2.3 3.2 LAST")
(setq Tsize_input (getkword (strcat "\n【" SQUARESSsize "】\n●=現在選択中の肉厚(" *last-Tsize* ") 右クリックまたは【Enter】で再選択<" *last-Tsize* ">[2.3/3.2]: ")))
(cond
((= Tsize_input nil) (setq Tsize Tsize_input))
((member Tsize_input '("2.3" "3.2" "LAST")) (setq Tsize Tsize_input))
(T (alert "\n<!> 有効な肉厚ではありません。リストから再選択してください。"))
)
)
)
((or (= SQUARESSsize "□50") (= SQUARESSsize "□60"))
(setq Tsize nil)
(while (= Tsize nil)
(initget "1.6 2.3 3.2 4.5 6.0 LAST")
(setq Tsize_input (getkword (strcat "\n【" SQUARESSsize "】\n●=現在選択中の肉厚(" *last-Tsize* ") 右クリックまたは【Enter】で再選択<"
*last-Tsize* ">[1.6/2.3/3.2/4.5/6.0]: ")))
(cond
((= Tsize_input nil) (setq Tsize Tsize_input))
((member Tsize_input '("1.6" "2.3" "3.2" "4.5" "6.0" "LAST")) (setq Tsize Tsize_input))
(T (alert "\n<!> 有効な肉厚ではありません。リストから再選択してください。"))
)
)
)
)
(cond ((= Tsize nil) (setq Tsize *last-Tsize*))
((= (strcase Tsize) "LAST") (setq Tsize *last-Tsize*))
(T (setq Tsize (strcat "t" Tsize))))
(setq *last-Tsize* Tsize)
(setq fit (strcat SQUARESSsize "x" Tsize))
(setq filename (strcat fit " SS"))
(my_insert_block_rotateOK)
(princ Tsize)
(princ)
)
右クリックで再選択、リストに無い時はエラーメッセージ表示
- mappy
- 2025/09/04 (Thu) 09:39:51