dlib C++ ライブラリでAntTweakBarを使う

イメージ 1

OpenGL機能を追加したdlib C++ライブラリでAntTweakBarを使うことができました。

サンプルのソースと実行ファイルは↓にあります。
http://www.tok2.com/home/mocchi2008/samples/dlib_anttweakbar/dlib_anttweakbar.htm




もっちーの小部屋 自作のソフトを公開してます。
http://www.geocities.jp/mocchi_2003/index.html

もっちー書庫 プログラムサンプルや改造ライブラリを置いてあります。
http://www.tok2.com/home/mocchi2008/index.htm

窓助タッチバージョンアップ ver 1.13

自作ソフト 窓助タッチ をバージョンアップしました。
http://www.geocities.jp/mocchi_2003/soft.html

最新バージョンは 1.13です。

前回のバージョンアップで、キー操作による透明度調整を可能にしましたが、
テキストエディタでコピー&ペースト等を繰り返すと、窓助タッチのキー操作モード
への移行コマンドshift,shift,ctrlを無意識のうちに入力してしまうことが結構あり
ましたので、この移行コマンドの変更をしました。
ctrl,ctrl,ctrl,ctrl(最後のctrlは押しっぱなし)が新しいコマンドです。

変更はこれだけです。

dlib C++ ライブラリ 本家アップデート(Ver.16.1)

Davis E. King氏が作成・配布している、dlib C++ ライブラリのバージョンが16.1になりました。

今回のバージョンアップにより、フォントの切り替えができるようになりました。

これまで配布してきた日本語化パッチでは、日本語に対応しているフォントクラスをパッチの
中に含めていましたが、今回のアップデートによりそのフォントクラスとdlibを分離できるよ
うになりましたので、今回から別々にしたいと思います。

↓差分パッチ
バージョン16.1

↓ネイティブフォントレンダリング機能を用いたフォントクラス
native_fontクラス

使い方
・dlib_widgets.hとnativefont.hをそれぞれインクルードする。
#include "dlib_widgets.h"
#include "nativefont.h"

・drawable_window派生クラス(例 gui_api_ex.cppのwinクラス)のコンストラクタ内などで、
widget 派生クラスのオブジェクトのset_main_fontメソッドを呼ぶ
// (widget 派生クラスのオブジェクト名を b1とします)
b1.set_main_font(nativefont::native_font::get_font());

これでb1で表示される文字がnative_fontクラスの文字になります。
この処理を行ったウィジェットはこれまでと同じように日本語が表示できるようになります。

また、フォント切り替え機能を応用することで、専用のマークを文字として扱うことも簡単に
できるかと思います。
手順の例
(1) 専用マークが登録されているbdfフォントファイルをあらかじめ作成する。
(2) bdf_fontオブジェクトを作成する。
(3) bdf_font::read_bdf_file メソッドで(1)を読み込む
(4) 専用マークを表示したいwidgetにset_main_fontで(2)のフォントを登録する。




もっちーの小部屋 自作のソフトを公開してます。
http://www.geocities.jp/mocchi_2003/index.html

dlib C++ ライブラリ メジャーバージョンアップ

dlib C++ ライブラリのバージョンが16.0になりました。

メジャーバージョンの変更(15=>16)ということで、色々追加修正が施されている模様です。

GUI周りで気になる追加修正点が数点あります。
・winmain関数の廃止
 バージョン15台では、winmain関数がエントリポイントとなっていましたが、
今回のバージョンはこれを廃止し、通常のプログラムと同様にmain関数(またはWinMain関数)
からスタートするようになっています。
この変更に伴い、プログラム開始と同時にメッセージループを回す専用のスレッドが作られる
ようになりました。つまり、メッセージループはmain関数(WinMain関数)とは別のスレッドで
動きます。main関数(WinMain関数)を終了させるとプログラムが終了してしまいますので、
base_window::wait_until_closed()メソッドをmain関数(WinMain関数)の最後に入れて、
ウィンドウが閉じるまで処理を止めておく必要があります。

Unicode文字列の実装
UTF32を扱うための文字列クラスustringと、文字型unicharが実装されました。
C++標準のワイド文字列wstringでもUnicodeを扱うことができますが、
wstringはWindowsではUTF16、LinuxではUTF32という具合に内部形式が環境によりまちまち
となりますので、ustringを使うことで文字列形式をUTF32に統一できるというメリットがあります。
また、今回のバージョンアップにより合成文字かどうかを判定するメソッドが実装さ
れ、それをGUI周りの内部処理に使っています。まだ文字列の入出力はstd::stringを
使っていますが、今後ustringを使うようになるのかもしれません。

今回もいつものように機能追加パッチをアップします。
今回はUnicode文字列が実装されましたので、それに合わせた機能追加を施してあります。

↓差分パッチ
バージョン16.0

自作パッチで追加した機能
OpenGL機能 (いままでと同様です。)
widget系クラスとクリップボード関数の文字列入出力のマルチバイト化及びUnicode
オリジナルのライブラリでは現在もまだwidget系クラスの文字列入出力は
std::string(非マルチバイト)です。これを
・std::string(マルチバイト)
・std::wstring
・dlib::ustring
で入出力できるようにしました。また、内部形式もstd::stringからdlib::ustringに変更
しています。

・std::string<=>std::wstring、std::string<=>dlib::ustring、std::wstring<=>dlib::ustring変換関数の実装
stringをwstringに変換するためには convert_mbstring_to_wstring
wstringをustringに変換するためには convert_wstring_to_utf32
ustringをstringに変換するためには convert_utf32_to_mbstring
という具合に関数名を作成しました。
ただし、std::stringはプラットフォーム依存のマルチバイト文字列として解釈します。
例えばWindowsならばCP932(シフトJIS)、Linuxならば環境により設定されている文字コード
(EUC-JPかUTF8といったところでしょうか)として解釈します。




もっちーの小部屋 自作のソフトを公開してます。
http://www.geocities.jp/mocchi_2003/index.html

dlib C++ 本家ライブラリ アップデート + initialize_opengl関数バグ修正

dlib C++ ライブラリの本家のバージョンが15.11になったようです。

以下のような追加修正がそれぞれのバージョンアップで行われているようです。

15.9 => 15.10 : 描画処理にアルファブレンドを追加
15.10 => 15.11 : バグ修正

それと、自分がパッチとして追加したinitialize_opengl関数の処理が原因で、
initialize_opengl関数を行ったウィンドウで突然OpenGL描画が利かなくなるという
不具合が発生していましたので、それも修正してあります。






もっちーの小部屋 自作のソフトを公開してます。
http://www.geocities.jp/mocchi_2003/index.html

dlib C++ ライブラリにglutの幾何系関数をそのまま組み込んでみた

dlib C++ライブラリにfreeglutのソースを使ってOpenGL機能を組み込んだので、
ついでにfreeglutの幾何系関数やティーポット関数もそのまま組み込んでみました。

以下の関数をdlib名前空間に入れてあります。

void glutWireCube( GLdouble size );
void glutSolidCube( GLdouble size );
void glutWireSphere( GLdouble radius, GLint slices, GLint stacks );
void glutSolidSphere( GLdouble radius, GLint slices, GLint stacks );
void glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks );
void glutSolidCone( GLdouble base, GLdouble height, GLint slices, GLint stacks );
void glutWireTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings );
void glutSolidTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings );
void glutWireDodecahedron( void );
void glutSolidDodecahedron( void );
void glutWireOctahedron( void );
void glutSolidOctahedron( void );
void glutWireTetrahedron( void );
void glutSolidTetrahedron( void );
void glutWireIcosahedron( void );
void glutSolidIcosahedron( void );
void glutWireTeapot( GLdouble size );
void glutSolidTeapot( GLdouble size );

freeglut 2.4.0 のソース freeglut_geometry.c と freeglut_teapot.c に対して
以下の処理を施してます。

・freeglut用のエラー処理の行をコメントアウト
・ソースの拡張子を.cから.cppに変更
・関数やstatic変数をdlib名前空間の中に全部入れる

ついでに本家のバージョンが15.9になったので、バージョンを合わせました。
↓差分パッチ
バージョン15.9




もっちーの小部屋 自作のソフトを公開してます。
http://www.geocities.jp/mocchi_2003/index.html

dlib C++ Library 目次

自分が書いたdlib C++ ライブラリ に関するブログエントリが多くなってきたので目次を作ってみました。




本家ライブラリ配布元
http://dclib.sourceforge.net/


もっちーの小部屋 自作のソフトを公開してます。
http://www.geocities.jp/mocchi_2003/index.html

もっちー書庫 オープンソースライブラリ改造品やプログラムサンプルを公開しています。
http://www.tok2.com/home/mocchi2008/index.htm