Lesson 5|クリックした点を取得する
要点
getpointで点の入力を待ち、setqでその座標を変数に保存できます。変数は値に付けた名前です。
こんな人向け
プログラミング未経験で、AutoLISPをひとつずつ学びたい方。
基本を理解する
点は通常X・Y・Zの数値をまとめたリストで返ります。Zは高さです。取得される値は現在のUCSを基準とするため、世界座標と同じとは限りません。ここでは図形を作らず、選んだ位置をコマンド欄へ表示して動きを確認します。
操作手順
- コードを.lspファイルへ保存し、練習図面で読み込みます。
- CR_POINTを入力します。
- 図面上の点をクリックします。
- コマンド履歴へ座標が表示されることを確認します。何も選ばずEnterを押した場合も試します。
実際の例
部品の配置位置をクリックで決める自動化の基礎です。座標を確認するだけなら、図面への書き込みを伴わず入力の流れを学べます。
実務で試す:点を選ぶ場合と選ばない場合を比べる
ユーザー入力は常に得られるとは限りません。正常入力と入力しない場合を分けて考えます。
- 掲載例を読み込み、図面上の一点を指定します。
- 表示された座標とクリックした位置を確認します。
- 別の実行では点を指定せずEnterを押した場合を確認します。
結果の確認ポイント
点を返した場合とnilの場合で扱いを分けます。Escによる中断はEnterと同じとは限らず、業務用へ広げる際は中断時の処理も検討します。
学習用の例です。まずコピーした図面で試し、現在の設定を控えてください。CAD実機での検証は未実施です。
コード
(defun c:CR_POINT (/ pt)
(setq pt (getpoint "\nPick a point: "))
(if pt (princ pt))
(princ)
)この1行は何をしている?
- 1行目:CR_POINTを定義します。/ ptは、この処理中だけ使うローカル変数ptの宣言です。
- 2行目:getpointで点を選んでもらい、setqでptへ保存します。
- 3行目:ifは条件分岐です。点が取得できた場合だけprincで表示します。Enterで入力がなければnilとなり、表示しません。
- 4行目:終了時の余計な表示を抑えます。
- 5行目:コマンドの定義を閉じます。
よくある失敗
この値を別の座標系の値として無条件に流用しないでください。UCSとWCSの変換が必要な処理は別に学びます。
それでも解決しない場合
Escは処理を中断し、キャンセルのメッセージが出る場合があります。この例は変更する図形や設定がありません。エラー処理の詳しい実装は後続レッスンで扱います。
公式資料・確認範囲
資料確認:2026年10月4日。操作は主に AutoCAD / AutoCAD LT 2024以降(Windows、LISP対応環境) を想定。資料の対象年はリンクに記載しています。画面や選択肢はバージョンで異なる場合があります。 掲載コードのCAD実機テストは未実施です。