概要 - タブレットを位置合わせする(AutoLISP)

ディジタイザ/タブレットは、TABLET[タブレット設定]コマンドまたは AutoLISP の tablet 関数で位置合わせできます。

重要: タブレットのサポートは Windows のみに制限されています。

tablet 関数を使用すると、アプリケーションは、位置合わせを直接行い、今後の使用のために設定値を保存しておくことで、位置合わせを管理できるようになります。tablet 関数の最初の引数は整数 code です。code が 0(ゼロ)の場合、この関数は現在の位置合わせを返します。code が 1 の場合、位置合わせは残りの引数に従って設定されます。位置合わせは code に加えて、4 つの 3D 点として表されます。

最初の 3 つの点、row1row2row3 は、タブレットの変換マトリックスの 3 行です。4 番目の点 direction は、タブレットの表面を置く平面の標準ベクトルです(WCS[ワールド座標系]で表されます)。TABLET コマンドを使用して位置合わせを行う場合、そのタブレットの表面は現在の UCS の XY 平面に置かれるものとみなされます。

注: システム変数 TABMODE は、タブレット モードがオン(1)かオフ(0)かをコントロールします。これは setvar 関数を使用してコントロールできます。

次のコードは現在のタブレットの位置合わせを検索し、それを変数 tcal に保存します。

(defun C:TABGET ()
  (setq tcal (tablet 0))
  (if tcal
    (princ
      (strcat "\nConfiguration saved, "
              "use TABSET to retrieve calibration."
      )
    )
    (princ "\nCalibration not obtainable ")
  )
 (princ)
)

TABGET コマンドが正常に終了した場合、変数 tcal には tablet 関数から返されたリストが代入されます。このリストは、たとえば次のように表示されます。

(1 (0.00561717 -0.000978942 -7.5171)
  (0.000978942 0.00561717 -9.17308)
  (0.0 0.0 1.0)
  (0.0 0.0 1.0)
)

位置合わせを前のルーチンで取得した値にリセットするには、次のコードを使用することができます。

(defun C:TABSET ()
  (if (not (apply 'tablet tcal))
    (princ "\nUnable to reset calibration. ")
    (progn
      (princ "\nTablet calibration reset. ")
      (setvar "tabmode" 1)
      (if (= (getvar "tabmode") 0)
        (princ "\nUnable to turn on tablet mode ")
      )
    )
  )
 (princ)
)

タブレットの変換マトリックスを定義する

引数 row1row2row3 は、2D 点を変換する 3 x 3 変換行列として渡されます。2D 点は同次の座標における列ベクトルとして表されるので(3 番目の要素として 1.0 を追加)、変換は次のように行われます。

点の計算は、3D の場合に似ています。AutoCAD は、次の式を使用して点を変換します。

変換結果のベクトルは、最初の 2 つの(X',Y')コンポーネントを 3 番目のコンポーネント(尺度係数 D')で割ることによって、2D 点に戻すことができます。結果の 2D 点は(X'/D',Y'/D')のようになります。

最も一般的な投影変換については、tablet は完全な計算を行います。しかし、アフィン変換および直交変換については、M 20 と M 21 は両方とも 0(ゼロ)なので、D' は 1.0 になります。D' の計算と除算は省略され、結果の 2D 点は単に(X',Y')になります')。

これで明らかなように、アフィン変換は投影変換の特殊で均等な形です。直交変換はアフィン変換の特殊な形で、M 20 と M 21 が 0(ゼロ)で、M 00 = M 11 、M 10 = -M 01 です。

注: 位置合わせを設定しても、direction が正規化されていない場合、返されるリストは指定されたリストと同じにはなりません。AutoCAD はリストを返す前に方向ベクトルを正規化します。また、3 番目の列における 3 番目の要素(row3[Z])が必ず 1 になるようにもします。tablet によって AutoCAD から取得した値を使用して位置合わせを設定した場合、このような状況は起こらないはずです。ただし、プログラム自体が変換計算を行う場合は起こる可能性があります。