development of

Tieghaに関する備忘録とおまけ

【IJCAD】任意の軸のアルゴリズムについて

任意の軸のアルゴリズムとは

任意の軸のアルゴリズムは、特定のオブジェクトで OCS(オブジェクト座標系)を生成するために、CAD の内部で使用されているアルゴリズムです。

例えば、円オブジェクトの OCS が任意の軸のアルゴリズムによって、円の X 軸と Y 軸の方向が決められています。

アルゴリズムの詳細

AutoCAD のヘルプには、任意の軸のアルゴリズムについて次のような感じで説明されています。

  1. オブジェクトの法線ベクトルを N とする。
  2. ベクトル N の X の絶対値と Y の絶対値が、両方とも 1/64 未満の場合は、WCS の Y 軸と法線ベクトル N の外積の値が X 軸になる。 それ以外の場合は WCS の Z 軸と法線ベクトル N の外積の値が X 軸 になる。
  3. 法線ベクトル N と、2 で求めた X 軸のベクトルの外積の値が Y 軸になる。

.NET API だとこんな感じですね。

Vector3d normal = ent.Normal;
Vector3d axisX, axisY;
if (Math.Abs(normal.X) < 1.0 / 64.0 && Math.Abs(normal.Y) < 1.0 / 64.0)
{
    axisX = Vector3d.YAxis.CrossProduct(normal);
}
else
{
    axisX = Vector3d.ZAxis.CrossProduct(normal);
}
axisY = normal.CrossProduct(axisX);

サンプルプロジェクト

任意の軸のアルゴリズムを用いて、円オブジェクト上にカーソルが近づいている時に、円のオブジェクト座標系を表示させすサンプルを作成してみました。

ArbitraryAxisAlgorithmSample.zip - Google ドライブ

実行結果

サンプルを IJCAD 上で動かしてみると次のようになります。


ArbitraryAxisAlgorithmSample