サイトアイコン CAD日記

imageclip

ラスターイメージをクリップするAutoCADのコマンド。

imageclip

モデル空間に配置したラスターを、レイアウト上のビューポート内で

表示した場合、そのラスターがビューポート枠によって切り取られて

一部が表示されないということがありえる。

そんな状態をモデル空間上で実現しようとしたとき、ラスターのクリップが

大変役に立つ。(レイアウト図面をモデル空間図面に変換したときの話)

データ構造的な、ラスターのクリップを解説する。

まずは、クリップされているかどうかという情報。

そして、クリップ領域を表現する2点または、3点以上の座標列。

2点の場合は、矩形の対角となる2点を意味し、

3点以上の場合は、その座標列で囲まれる多角形を意味する。

コマンド内で指定する「クリップの種類」として、矩形にするのか

ポリゴンにするのかに対応する。

この座標、XYの座標ではなくてピクセルの座標になっているのが曲者だ。

左下を、0,0としたピクセル座標となっていて、DXFリファレンスによると、

「既定は(- 0.5, – 0.5)、(size.x-0.5, size.y-0.5)。」だそうだ。

この「-0.5」の意味はよくわからない。

外側に0.5ずつ広げるというなら、枠の分ということで理解できるが、

式から判断するに、左下に0.5ずらすということになるので、意味不明だ。

問題はピクセル座標だということ。

ビューポート枠の座標はXY座標で保持されている。

ビューポート枠を考慮して、ラスターのクリップ座標を計算しなおすには、

両者を同じ基準の座標に変換しなければならない。

ピクセル座標と、その画像の縦と横のピクセル数、尺度、角度を考慮して、

XY座標に変換する。

ややこしい計算になりそうだと頭を悩ませていたところに、そのものずばりのAPIを発見。

OdDbRasterImage::­getPixelToModelTransform ※DWGdirectの関数

Returns the pixel-to-model coordinate transformation matrix for this raster image entity.

このAPIにより得られる3次元マトリックスから2次元マトリックスを取得して、

ピクセル座標を変形(OdGePoint2d::transformBy)すると、XY座標が取得できた。

あとは、ビューポート枠の領域とラスタークリップの領域のANDをとり、

得られた座標をピクセル座標に逆変換(OdGeMatrix2d::­inverse)すればよい。

最後に、ピクセル座標をラスターのクリップ情報にセットする。

我ながら会心の出来だ。

ところで、ラスターイメージはAutoCAD LTでは扱えない。

まず、LTではラスターイメージの挿入ができない。

ラスターイメージが挿入されたDWG図面をLTで開くと、

そのままの状態で表示されて、移動や複写、削除はできる。

ただ、明るさやコントラスト、尺度、クリップの状態など、

ラスターイメージ固有情報の編集ができない。

LTらすたという有名なフリーソフトがある。

Vectorの人気ランキングで、常に上位だ。(現在は1位)

AutoCAD LTでラスターデータをレギュラー版と同様に使えるようにする、大変便利なソフトだ。

モバイルバージョンを終了