CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

DWG

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は仕事でもあり、趣味でもあるってところか。

-DWG
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

TrueView

先月、DWG TrueViewの新バージョン2008が出たようだ。 早速インストールしてみた。 AutoCAD OEMアプリケーションなので、見た目はAutoCADそっくり。 AutoCADから、図面 …

no image

DWGdirect 2.4.1

予告通り、2.4.1がリリースされていた。 DWGdirect Version 2.04.01, posted 7/19/2007 自分のためにも、リリースノートを翻訳しておいて損はないだろう。 原文 …

no image

DWGdirect 2.3.0

3月末にリリースされるとの情報。 DWGdirect 2.3.0。 サポート掲示板で、開発チームのリーダー Sergey が 以下の回答をしているのを発見。 (ある問題現象に関する回答。) This …

no image

ハッチング境界

塗りハッチング(パターン名=SOLID)の話。 ハッチングの境界図形が閉じていないことがある。 境界図形とは、ポリラインや線、円弧、楕円、スプラインなどのこと。 ポリラインの場合は、閉じていないという …

no image

explode

AutoCADのコマンドで言うと分解。 ブロックや寸法を分解するんだね。 けっこう気に入ってるんだ、エクスプロードという単語が。 爆発するという意味もある。 エクスプローラに似てる、語感が。 分解とい …