ActiveDraw

正式公開版 Ver 1.1(97/9/16公開)


ActiveDrawはリアルタイムに操作可能な絵を実現するためのドローツールです。

扱えるオブジェクトは、直線・ベジェ曲線・閉曲面・ビットマップとこれらをグループ化したオブジェクトで、移動・拡大・縮小・回転が行えます。

ただし、通常のドローツールと違い移動・拡大・縮小・回転時に画面をリアルタイムに変更します。
この際、ビットマップも同様に移動・拡大・縮小・回転をリアルタイムに行います。
ビットマップとポリゴンを混在させたグループ化も可能です。
ビットマップの透過色を指定することもできます。

他にActiveDrawでは、オブジェクト間にリンクを設定することで関節などの表現が可能であり、それぞれのオブジェクトに加速度や動作限界などの設定が可能です。

これらの、ドローツールの特徴である、オブジェクトの拡大・縮小、回転が自由に出来ることに加えて、リアルタイム描画、オブジェクト間のリンクにより、ActiveDrawではインタラクティブな絵を表現することができます。

詳細を知りたい方はこちら(Ver1.1ヘルプ)

ActiveDraw ver1.1をダウンロードする(Windows95,NT4.0用、自己解凍、328KB)

なお、シェアレジに参加しましたので、クレジットカードがあればどこからでもシェアウェア登録ができる様になりました。
←ここで送金することができます。シェアウェア代金は2,000円です。Nifty-Serveに入られてないかたはこちらで送金お願いします。なおシェアレジ番号はSR002076ですが、左のアイコンを押した方が早いです。シェアレジ自体のアドレスは、http://www.vector.co.jp/swreg/swreg.htmlです。

あと、試用期間は2週間ありますので、送金する前に良く試用してくださいね。


作者のたわごと

98/3/25日、シェアレジからの送金受付を開始

9/16日、Ver1.10 正式版公開

 細かく調べていったら山の様にバグがあったのでいろいろバグとりしてました。実はまだバグがあります。それは印刷周りで、変形ビットマップが表示されないというものですが、もうこれはどうしようもない(作るの結構面倒)のでそのままです。とりあえず、いきなりクラッシュすることはほとんど無くなったと思うんですが、メモリがなくなってくると警告が出た瞬間にクラッシュする可能性が残っています(^^;ドキュメント編集中は頻繁にセーブして下さい(^^;
 さて、バグとり以外のβとの変更点ですが、ビットマップバッファというものを実装しました。βでは変形ビットマップのデータは常にカレントディレクトリから読み出すようになっており、必要最低限のデータのみメモリ上にもっていました。こうしないとアンドゥなどがメモリの関係でほとんど不可能になるためです。これはこれでなかなか便利な面もあって、ビットマップを変更すると直にその結果が画面に反映されるという、ビットマップとActiveDrawの両方を同時に変更する時にうまく働く状態でした。といってもこのままだと、BMPだけ必ず別ファイルにしなくてはなりませんし、OLE2への対応がほとんど無理になります。
 そのため、内部に仮想的なファイルバッファを設けてここから表示データを得るようにしました。これにより、ビットマップをドキュメント内に保存できると同時に、アンドゥ、リドゥも従来同様、かなりの回数可能で、ファイル上とのBMPファイルともある程度同期が取れます。
 これにともない、従来からあった背景ビットマップもビットマップバッファを用いるように変化していますので、背景ビットマップを細かく変更しながらのドキュメント変更も可能となっています。
 あと、ADFファイルのフォーマットが変わったため、βで作ったデータは完全に読めないはずです。まあ、もともとβでは細かい差があったのでいろいろ問題があったはずですが。もちろん、Ver1.0のデータは完全に読めます。
 その他、まだ問題があるのでヘルプには書きませんでしたが、正式にOLE2に対応しています。といってもインプレース編集は出来ませんし、そもそもWAVEの様にアイコン表示です(^^; Drawツールなのにアイコン表示じゃ何に使うんだと言われそうですが、そのうち直します(^^;
 さて、次は動き周りをもう少し凝ったことができる様にする予定ですが、このプログラムは変更がかなり厄介なので、いつになったらできるやら(^^;気長にお待ち下さい。

9/9日、Ver1.1β

 実装法を思い付いたので、変形ビットマップのグループ化や再変換などの機能を実装しました。今までは変形ビットマップは座標系に他のオブジェクトとは違う独自なもの(アフィン変換用の行列データで変形状態を表現する)を用いていたためグループ化などの処理が面倒で悩んでたんですが、単に枠をポリゴンと考え、その中をテクスチャで塗りつぶすと考えることで簡単に解決できました。この方法の場合、変形ビットマップの状態は変形を表す行列としてではなく、枠を表すポリゴンデータという形で持つことになります。あの面倒くさい行列計算は何だったんだーという所ですね。
 ということで、Ver1.1で実装しようと思っていた機能は大体できたので、β版として公開します。あとは細かいバグつぶしぐらいでしょうか。やっと正式にバージョンが上げられそうです。このソフトは半年ぐらいほったらかしの目にあってましたから。
 あと、OLE2への対応はしない予定です。変形ビットマップはドキュメントに埋め込む形だといろいろ面倒(特にアンドゥ処理周り)だし、変形ビットマップ自身をエディットしたくなることがよくあると思いますので、全てリンクの形でビットマップを持つ方が便利だろうと。となると、基本的にデータを埋め込むのが基本であるOLEとは相性が悪いと考えたためです。ただ、Ver1.0で既に背景のビットマップがドキュメントに埋め込む形で実装してしまったので、この辺りをどうにかする必要があります。背景だけ埋め込みで、変形オブジェクトはリンクという形にすると思いますが、正式版ではこの辺りを変えるかもしれません。
 

9/8日、Ver1.1α2

 VC++のバージョンを5.0に上げたので久しぶりにActiveDraw側も変更してみました。といっても、機能面での大きな変更を行ったわけではなく、細かいバグフィックスです。具体的には、1.1αで新しく付けた連動グループ化周りの動作のバグフィックスや、従来からあった、オブジェクトの色を指定した際に透明化が指定されてしまうバグ、変形ビットマップでの24ビットデータへの対応などです。
 Ver1.1には表現能力の向上ということで、変形ビットマップと連動グループ化、OLE2化が含まれるわけですが、ActiveDrawは内部構造が結構複雑なので、変更がなかなか大変です。あと残っている問題点は、変形ビットマップ機能が256色モードでまともに動作しないこと、連動グループ化で変形ビットマップのグループ化ができないこと、OLE2でまったく表示がされないことなどでしょうか。まあ、ActiveDrawに関しては、いそいでもバグが増えるだけなのでのんびりやります。
 Ver1.2ではVisualBasicの様にオブジェクトにプロパティとメソッドの概念を持たせてもう少し細かい動きの制御をできるようにする予定なんですが、いつになったらできるんでしょうねぇ(^^;
 

8/9日、Ver1.1α

自分で作っといてなんなんですが、何に使うのかよーわからんツールです(^^;

基本的な考えは、今のPCはWindowsが広まったおかげでGDIがめちゃくちゃ早くなったので、このGDIだけでも十分アニメーションなどができるんじゃないのかというものです。

で、GDI(Windowsで単純なラインとか扱っている部分)で得意なことといえば、やはり変形などの座標変換系だろうということで、ビットマップではリアルタイムでは難しいオブジェクトの回転や拡大をインタラクティブに行ってみようと、あとついでにオブジェクト間の間接の処理もしてしまえ、ここまできたら実際に物理計算してしまえということで出来上がったものです。

現在の改造点ですが、二つの方向性があって、まずまともなドローツールにしようという方向性と、わけがわからないなりに実用性を上げようという方向性があります。

まず前者。現在まともなドローツール化を目指して、α版ではOLE2の機能を持たせてあります。ただし都合によりα版ではコンテナ内の表示が変なのに加えて、インプレース編集ができません(^^;。保存などはMFCの機能でさくっと実現できてますけど。
ドローツールとしてはベジェ曲線をサポートしている(というか、ベジェのみサポート)しているために、表現能力は高いはずなのですが、まともなドローツール化(普通のラインやサークル、ボックス表現や、文字表示など)するには各インターフェイス部分を作るのが面倒(^^;
そもそも、通常のドローツールと違って、集約オブジェクトの扱いが特殊

-> ActiveDrawは普通のドローツールと違い、オブジェクトの回転などした場合に座標系を変更するだけで実際に再変換しない(これによりリアルタイムに変形できる)

なので、ActiveDrawのまともなドローツール化は難しいと考えています。
オンラインソフトの類でドローツールというのは珍しいので、できればまともなドローツールにしたいとはおもっているんですけどねぇ。

次に後者の変なツールなりに実用性を持たせることに関して。
こういうツールの応用としては、DOSでのKISS(着せ替えソフトですね)的な利用が考えられるので、こちらの方向で多少拡張してみました。そのため現在のα版では、リアルタイムで回転、拡大できるオブジェクトとしてベクトルデータ以外に、ビットマップが加わってます。これを実現するのはDirectX系を用いないとだめかと思ってたんですが、今のマシンは早いのでCreateDIBSection(Win3.1のころのWinG)の機能だけでどうにかビットマップのリアルタイム変形ぐらいは対応できそうです。ただ、なぜかNT上だとめちゃくちゃ遅いです(^^; これはNTの仕様ということで。
あと、今のαだとフルカラー以外の画面モードだとまともに動作しないとかいろいろ問題が(^^; このビットマップのリアルタイム変形に関しては、MMXが有効に働くはずなので、将来的にはMMX対応にしようと考えています。

また、KISSなどではオブジェクト間の重なりを表現するためにセル的な概念をもっているので、ActiveDrawでも同様のことができる様にしました。通常のドローツールでは、グループ化するとオブジェクトの上下関係に欠損がでますが、他とのオブジェクトとの間で上下関係を保ったままグループ化できるようになりました。これはグループ化ではなく正確には、オブジェクトの関連付けです -> 一つ動かすと引きずられてみな動く。

あと、ビットマップの色を指定して透明化を指定するとその色が透明に扱われる機能などもつけました。

これで、移動以外に回転や拡大、関節表現可能がビットマップレベルでも実現できたと言えなくもないかなぁと<-弱気(^^;
とりあえずいろいろ不都合がありますが、新機能を実験できるレベルにはなってますので、Ver1.1αを公開しておきます。



ソフトウェアトップページに戻る