+CADLabo.comCAD / LISP / AUTOMATION
AutoLISP初心者講座

Lesson 5|クリックした点を取得する

AutoLISPの基本・図形操作のTips一覧
要点

getpointで点の入力を待ち、setqでその座標を変数に保存できます。変数は値に付けた名前です。

こんな人向け

プログラミング未経験で、AutoLISPをひとつずつ学びたい方。

基本を理解する

点は通常X・Y・Zの数値をまとめたリストで返ります。Zは高さです。取得される値は現在のUCSを基準とするため、世界座標と同じとは限りません。ここでは図形を作らず、選んだ位置をコマンド欄へ表示して動きを確認します。

操作手順

  1. コードを.lspファイルへ保存し、練習図面で読み込みます。
  2. CR_POINTを入力します。
  3. 図面上の点をクリックします。
  4. コマンド履歴へ座標が表示されることを確認します。何も選ばずEnterを押した場合も試します。

実際の例

部品の配置位置をクリックで決める自動化の基礎です。座標を確認するだけなら、図面への書き込みを伴わず入力の流れを学べます。

実務で試す:点を選ぶ場合と選ばない場合を比べる

ユーザー入力は常に得られるとは限りません。正常入力と入力しない場合を分けて考えます。

  1. 掲載例を読み込み、図面上の一点を指定します。
  2. 表示された座標とクリックした位置を確認します。
  3. 別の実行では点を指定せずEnterを押した場合を確認します。

結果の確認ポイント

点を返した場合とnilの場合で扱いを分けます。Escによる中断はEnterと同じとは限らず、業務用へ広げる際は中断時の処理も検討します。

学習用の例です。まずコピーした図面で試し、現在の設定を控えてください。CAD実機での検証は未実施です。

コード

AutoLISP
(defun c:CR_POINT (/ pt)
  (setq pt (getpoint "\nPick a point: "))
  (if pt (princ pt))
  (princ)
)

この1行は何をしている?

  1. 1行目:CR_POINTを定義します。/ ptは、この処理中だけ使うローカル変数ptの宣言です。
  2. 2行目:getpointで点を選んでもらい、setqでptへ保存します。
  3. 3行目:ifは条件分岐です。点が取得できた場合だけprincで表示します。Enterで入力がなければnilとなり、表示しません。
  4. 4行目:終了時の余計な表示を抑えます。
  5. 5行目:コマンドの定義を閉じます。

よくある失敗

この値を別の座標系の値として無条件に流用しないでください。UCSとWCSの変換が必要な処理は別に学びます。

それでも解決しない場合

Escは処理を中断し、キャンセルのメッセージが出る場合があります。この例は変更する図形や設定がありません。エラー処理の詳しい実装は後続レッスンで扱います。

公式資料・確認範囲

資料確認:2026年10月4日。操作は主に AutoCAD / AutoCAD LT 2024以降(Windows、LISP対応環境) を想定。資料の対象年はリンクに記載しています。画面や選択肢はバージョンで異なる場合があります。 掲載コードのCAD実機テストは未実施です。