座標系と図面データベース

MCS

MCS は nentselp 関数でブロック参照図形内の内部要素をユーザーが選択した時に現れます。MCS は、任意の場所に配置されたブロック参照図形内の座標系と、WCSとの関係を表します。

nentselp 関数でブロック参照図形内の図形を選択した場合の戻り値は以下のようなリストの構成になっています。

( <図形名: 7ff6a5271a70>
  (13719.0 19621.3 0.0)
  ( (1.0 0.0 0.0 1.4647e+006)
    (0.0 1.0 0.0 -1.23511e+006)
    (0.0 0.0 1.0 0.0)
    (0.0 0.0 0.0 1.0)
  )
  (<図形名: 7ff6a5231870> <図形名: 7ff6a520ca20>)
)
  説明
第1要素 【図形名】 選択された図形要素。【複合図形】だった場合は、ひとつのまとまった図形ではなく、その頂点であったりする。
第2要素 ユーザーがクリックした点 座標系 UCS。あくまでクリックした点であり、図形上の点では無い。
第3要素 変換マトリックス MCS 図形から得られた図面データベースの座標データに MCS をかけると WCS の座標に変換される。
第4要素 ブロック参照図形を指す【図形名】のリスト 選択図形が含まれるブロック参照図形が入れ子になっている関係を表す【図形名】のリスト。
入れ子になっていない場合は、該当図形が含まれるブロック参照図形の【図形名】のみが含まれ、そのブロック参照図形が他のブロック定義に含まれている場合は、リストの後ろにそれを含むブロック参照図形の【図形名】が追加されていく。

単純なケースで MCS の活用方法を述べます。

  1. nentselp 関数が第3要素以降を含むリストを返した場合は、ブロック参照図形内の要素が選択されたことを示す。
  2. 得られた 【図形名】 の図面データベースの座標情報は、ブロック定義内の座標系によるものであり、それを MCS で座標変換をすると WCS の座標になる。UCS の座標はさらに変換を行う。
  3. UCS の座標をブロック参照図形内の座標と関係づけて演算したい場合は、まず UCS 座標を WCS 座標に変換し、次に変換マトリックス MCS の逆行列でブロック定義内の座標系にもっていく。

次に該当図形が含まれるブロック参照図形、ここではインサート A とします、が他のブロック参照図形、インサート B に含まれている場合を考えてみます。この場合も、得られる MCS は図形の図面データベースから得られた座標を WCS に一気に変換するのは変わりありません。そして、この場合は nentselp 関数の戻り値の第四要素が (<インサート A の【図形名】> <インサート B の【図形名】>) というリストになっています。

もし、インサート B の座標系における該当図形の座標を得たい場合は MCS は使えません。インサート A の【図形名】から得られる座標と回転、そして尺度の情報と【押し出し方向】を考慮して変換マトリックスを作成します。これを図形から得られた座標にかけて、インサート B の座標系に変換します。さらにブロックが入れ子になっている場合は、この変換を繰り返します。

ややこしくは見えますが、これらの関係を見失わないようにすれば MCS やブロック定義、ブロック参照図形も使いこなすことができます。