サイトアイコン CAD日記

Teighaラスター出力の実力

CAD日記らしく、最近注力しているTeighaについて。
今さらながらTeighaについて軽く説明してみよう。
Teighaは、AutoCADクローンCADのエンジンとしての長い歴史があるものだが、
おいらが注力しているのはDWGの変換エンジンとしての利用。
CADがDWGを読み込んだり書き込んだりするのに、DWGの中身がわからなきゃ
話にならんわけで、それを助けてくれるコンポーネントなのだ。
CADにこだわる必要もなくて、何らかのアプリがCADの国際的デファクトスタンダード
であるAutoCADのDWGを解釈したいってのもある。
AutoCADが国際的な事実上の標準である一方、日本ではそうでもなくて国産CADが
まだまだ生き残れているってのもあって、それゆえにおいらがメシを食えている
ってのもある。
さて、Teighaのラスター出力である。
昔DWGビューアを作ったことがあり、ビューアで画面で見るだけじゃ
つまらんと思って、ラスター(BMP、JPEG、PNG)で出力できるようにしてみた。
紙への印刷もって考えたんだけど、その奥の深さに辟易して半端な状態に
なっているということは、今回の話には関係ない。
BMPにするのが簡単にできたので、BMPをあるツールを使ってJPEGやPNGに
変換できるようにしたのだった。
最近PDFがいろんなところで注目されているという話を少し前にした。
複合機でスキャンしたデータがPDFになるってのが話しの入り口だ。
(JPEGやTIFFにすることもできるが扱いやすさからPDFがよく選ばれる)
そのPDFをアプリでプログラム的に読み取ろうとするとき、壁がある。
PDFはAdobe Readerや何らかのフリーソフトがあれば見れるけれども、アプリとして
その中身を閲覧するには、PDFレンダリングエンジンが必要でそんなものがタダで
そこらに落ちているものではなかったりする。
そこで登場するのがTeighaなのだ。
TeihaはPDFレンダリングエンジンとしてVisual Integrity社の技術を取り込んでいて、
PDFを扱うことができる。
Teighaはタダってわけではないので、手軽に使えないけれども、おいらが長いこと
使っていたものなので、おいらにとっては手軽ってこと。
PDFに注力しはじめたのはCADの世界がけっこうはやくて、CAD図面にPDFを
配置して下書きとして使おうっていう発想があったのだ。
そこでおいらが実装したのが以下の処理だ。
空のDWGにPDFを配置して、PDFで全体表示してラスターファイルとして保存する。
今回調査したところ、saveRasterImageでBMPだけでなくJPEG、TIFF、PNG、GIFにも
変換できることがわかった。
なるべくTeighaだけで完結させたかったのだが、以下いくつかの問題が表面化した。
・解像度(DPI)が指定できない
・TIFFのG4のような白黒2値化を行う際のしきい値が指定できない
この2つの問題をクリアするべく、Teighaの調査をタラタラとやっていたのだが、
最終的にはできないという結論にたどり着いた。
「BMPをあるツールを使ってJPEGやPNGに変換できるようにした」ということを上で書いた。
そのツールがImageKitだ。
これまたタダってわけではないけれども、昔からちょこちょこ使っていたものだったので、
とっかかりはつかむことができた。
ImageKitで解像度と2値化の際のしきい値設定を行う方法がわかった。
ということで、TeighaでBMP化して、ImageKitでファイルタイプ、解像度、2値化のしきい値
設定を行う仕様とした。
ここで新たな問題が出た。
Teighaによる出力結果をImageKitで処理するために、一時ファイルを作るように
したのだが一時ファイル読み書きでディスクIOが発生してオーバーヘッドがかかる?
Teighaの出力結果はsaveRasterImageを使う限りファイルにしかならないが、
convertRasterImageを使うと何やらメモリーストリームみたいなクラスで受けることが
できた。
一方、ImageKitはファイルからの入力(IKFileLoad)以外に、メモリーからの
入力(IKFileLoadMem)ができることがわかり、その引数がHANDLEだった。
OdMemoryStream→OdBinaryData→GlobalAllocしたメモリーのHANDLE
TeighaとImageKitのあいだをオンメモリーでつなぐことができたのだった。
一時ファイルを作って変換するものとオンメモリーで変換するものの時間を計ってみた。
たいして時間に違いが出なかった。。。
そう、具体的に問題が出たということではなく、懸念事項があったというだけの話
だったのだ。
でもまあ、いろいろと勉強になったのは確かでおもしろいテーマでもあった。
ともあれ、PDFのラスター化について一定の結論が出たのだった。
Teighaは仕事でもあり、趣味でもあるってところか。

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