概要 - ユーザ入力関数の条件をコントロールする(AutoLISP)

initget 関数を使用すると、次に呼び出すユーザ入力関数を特定レベルでコントロールできます。

initget 関数は、次に呼び出す entselnentselnentselpgetXXX 関数( getstringgetvargetenv を除く)で使用する各種のオプションを定義します。この関数には bits と string の 2 つの引数を指定します。これらの引数は両方とも省略可能です。bits 引数に、1 つまたは複数のコントロール ビットを指定することにより、次に呼び出すユーザ入力関数に対して、特定の入力値を許可または禁止にします。string 引数には、次に呼び出すユーザ入力関数が認識するキーワードを指定できます。

initget のビット値とキーワードは、次に呼び出すユーザ入力関数にだけに適用され、その関数を呼び出した後は放棄されます。アプリケーションは特定の条件を解除するために、もう一度 initget を呼び出す必要はありません。

入力オプションを設定する

initget の引数 bits の値は、次に呼び出すユーザ入力関数に対してユーザ入力のタイプを制限します。これにより、エラー チェックの必要性が少なくなります。

次に、使用可能なビット値のいくつかを示します。

(任意の組み合わせの)値を加算して 0 ~ 255 のビット値を作成することにより、一度に複数の条件を設定することができます。bits を省略した場合、または 0(ゼロ)に設定した場合、コントロール条件は次に呼び出すユーザ入力関数に適用されません。(initget ビット設定の完全なリストの場合)。

たとえば、これらの値を、次に呼び出される getint 関数に適用すると、ユーザは 0(ゼロ)より大きな整数値を入力しなくてはなりません。

(initget (+ 1 2 4))
(getint "\nHow old are you? ")

このコードは、ユーザの年齢を要求します。ユーザが負の値やゼロを入力したり、[Enter]だけを押したり、または文字列を入力すると(getint 関数は整数以外の値の入力を拒否します)、AutoCAD はエラー メッセージを表示します。

キーワード オプションを設定する

initget の省略可能な string 引数には、次に呼び出すユーザ入力関数が認識する一連のキーワードのリストを指定します。ユーザ入力関数は、ユーザの入力がキーワードのスペルと一致した場合(大文字と小文字は区別されません)や、ユーザがキーワードの省略形を入力した場合に、定義済みのキーワードの 1 つを返します。

次のコード例に、getreal を呼び出す前に、initget を使用して 2 つのキーワードを定義する方法を示します。プログラムはこれらのキーワードをチェックし、それに従って入力値を設定します。

(defun C:GETNUM (/ num)
  (initget 1 "Pi Two-pi")
  (setq num (getreal "Pi/Two-pi/<number>: "))
  (cond
    ((eq num "Pi") pi)
    ((eq num "Two-pi") (* 2.0 pi))
    (T num)
  )
)

initget の bits 引数には null 入力を禁止する値 1 が渡され、string 引数には 2 つのキーワード、"Pi" と "Two-pi" を表す文字列値が渡されます。 getreal 関数を使用して実数を取得しますが、このとき次のプロンプトが表示されます。

Pi/Two-pi/<number>:

結果はローカル変数シンボル num に格納されます。ユーザが数値を入力すると、C:GETNUM はその数値を返します。しかし、ユーザがキーワード Pi (または単に P)と入力すると、getreal はキーワード Pi を返します。cond 関数はこれを検出し、この例では PI の値を返します。キーワード Two-pi も同様に扱われます。

注: initget を使用して entselnentselnentselp 関数でキーワードの入力を受け入れるようにすることもできます。