Shade online フォーラム
ログイン
ユーザ名:

パスワード:

IDとパスワードを記憶

パスワード紛失
スレッド表示 | 古いものから 投稿するには登録が必要です 前のスレッド | 次のスレッド | 下へ
投稿者 スレッド
投稿数: 11
投稿日時: 2004-07-18 17:18
Re: エクスポートプラグインの文字コード
bkfaustさん、コメント有り難うございます。

もう一度自分の書いたソースを見て間抜けなことをしていることに気付きました。create_interfaceでレガシーにセットしながらも処理が終わる前に戻してました。(^_^;)

shade_interface::encodeももしかして使い方間違っているのだろうか?再度検証してみます。
投稿数: 1
投稿日時: 2004-07-18 00:24
Re: エクスポートプラグインの文字コード
もう,解決されているかと思いますが,コメントを.
 
以下のように,create_interfaceで設定してやり,
プラグイン本体 exporter_component で,
処理終了時に,
preference->set_text_file_encoding ( text_file_encoding );
で戻してあげれば,
ユーザー側に意識させずに遂行できるかと思います.
 

extern_c void STDCALL create_interface (const IID &iid, int i, void **p, shade_interface *shade, void *)
{
	IUnknown *u = 0;
	if (iid == exporter_iid) {
		switch (i) {
		case 0: 
			{
				// 環境設定に関係なく Shift-JISで 出力させるための工夫
				compointer<preference_interface> preference (shade->get_preference_interface());
				int text_file_encoding = preference->get_text_file_encoding ( );
				if (shade->is_japanese_mode() ) { // 日本語環境なら 
					if ( text_file_encoding != 4 ) {
						// レガシーをセットする
						preference->set_text_file_encoding ( 4 ); 
					}
				} 
				u = new exporter_component(shade , text_file_encoding);
			}
			break;
		}
	}
	if (u) {
		u->AddRef();
		*p = (void *)u;
	}
	if (u == 0) throw error();
}
投稿数: 11
投稿日時: 2004-06-27 21:13
Re: エクスポートプラグインの文字コード
バイナリというのは試してないので、今度試してみます。
ただ、自分で文字コード変換部分を書くというのは
出来るだけやりたくないので、もう少し考えてみたいと
思ってます。

shade_interface::encodeに関しては、自分の使い方が
間違っていると思いたいのですが、やはりバグなのでしょうか?(T_T)
投稿数: 4
投稿日時: 2004-06-25 13:06
Re: エクスポートプラグインの文字コード
でしたら、根本の解決にはなりませんがバイナリで出力したらどうでしょう?
text_strem_interfaceを使うのではなくstream_interfaceを使えば良いのだと思います。
テキストへの変換を自分で行わなくてなりませんがSDK(のバグ?)に左右されないという意味では使い勝手がいいと思います。
私がエクスポータを作るときはテキスト形式のファイル形式もstream_interfaceを使用しています。

…また外していますか?
投稿数: 11
投稿日時: 2004-06-25 11:54
Re: エクスポートプラグインの文字コード
sio29さん、有り難うございます。

私が知りたいのは、ファイル名に関する事ではなく
出力するファイルの内容の方なのです。何れにしても
文字列なので、大差はないですが・・・。

文字コードの変換ですが、SDKのリファレンスを見ると
shade_interface::encodeで簡単に出来そうなのですが、
上手く動いてくれないのです。使い方が難しいとは思えない
のですが、色々と試しても上手く行かないので、
根本的に使い方を間違えているのかなと思い始めてます。
shade.decode("文字列");
の様な使い方で間違ってないと思うので、get_text_encoding
の方が違っているのでしょうか?get_text_encodingの
返りをplugin_interface::japanese_encodingとしたり
kCFStringEncodingMacJapaneseとしてみたりしてもダメっぽいです。

それからもう一つ、
preference_interface::set_text_file_encodingを使う方法も
エクスポートプラグインの何処のタイミングでセットすれば
出力するファイルの内容を指定した文字コードで
出力出来るのかが分からないのです。set_text_file_encoding
しても直後には設定が出力内容に反映してない様なのです。

何れかの方法でShift JISで簡単に出力出来れば取りあえずは
良いのですが、最終的にはShift JIS以外の文字コードを
使いたいので、shade_interface::encodeが上手く動いてくれると
助かります。
投稿数: 4
投稿日時: 2004-06-25 07:57
Re: エクスポートプラグインの文字コード
Shade6はRev20とRev20aでplugin_exporter_interface->get_file_spec_obsolete()の
動作が違っていたと思います。
Rev20 (35091)では必ずUTF8で返ってきて
Rev20a(36090)では指定された文字コードで返ってきたと思います。
なのでRev20aに関してはそのまま文字列を獲得すればOKで、
REV20の場合はUTF8からSJISへの変換をしてあげればいいはずです。
以下はファイル名を獲得する関数のサンプルです。
utf8_to_sjisという関数は独自関数でUTF8からSJISの変換をしています。


void GetFilename(char *filename,plugin_exporter_interface *ifc){
    compointer<scene_interface> scene(ifc->get_scene_interface());
    int shade_ver=scene->get_version();
#if USHADE_VER<=5
    //R5以前
    strcpy(filename,ifc->get_file_spec());
#else
    //Shade6以後
    if(shade_ver>=36090){
    //治っているバージョン
        strcpy(filename,ifc->get_file_spec_obsolete());
    }else{
    //治ってないバージョン
        UNISJIS uni;
        char *tmp;
        int num;
        //UTF8からSJISへコンバート
        tmp=uni.utf8_to_sjis(ifc->get_file_spec_obsolete(),&num);
        strcpy(filename,tmp);
        FREE(tmp);
    }
#endif
}


…質問ってこういう意味とは違いますか?
投稿数: 11
投稿日時: 2004-06-25 02:19
エクスポートプラグインの文字コード
久々にエクスポート系のプラグインを作っているのですが、
文字コードで上手く行かない部分があるので、教えて頂けないでしょうか?

出力する文字コードなのですが、
preference->set_text_file_encoding(4);
と言う様にしてレガシーに変更してしまえば、
Shift JISで出力出来るのですが、このセットする
タイミングが分かりません。create_interfaceや他の
場所でセットしても一度目のエクスポート時には
思った様な挙動に成らず、二度目以降には上手く行きます。
set_text_file_encodingをどこへ記述すれば
エクスポート系のプラグインの場合、瞬時に出力に影響する
形で使えるのでしょうか?

それから任意の文字コードで出力したい場合、おそらくは
shade_interfaceのencodeを使うべきだと思うのですが、
何故か日本語を含む文字列を渡すと何も帰ってきません。
何か使い方のサンプルの様なものが有ると助かるのですが・・・。

使用しているSDKはShade 6 Plugin SDK REV20です。
ビルドにはXcodeを使っています。

よろしくお願いします。
スレッド表示 | 古いものから 投稿するには登録が必要です 前のスレッド | 次のスレッド | トップ

最近の投稿

フォーラム スレッド 返信 閲覧 最終投稿
Free Talk DNAの2重らせんの水素結合部位の作成 0 11860 2016-08-01 21:37 Benthos
Free Talk パート内の名前を一括返還 2 14380 2016-03-07 12:21 画像投稿機
Dev Forum イームズシェルチェアーの作成 2 14261 2015-11-25 14:44 CR7
Free Talk MOVファイルについて 17 35453 2014-12-29 17:14 momokuma
Dev Forum 2種類の液体アニメーションを作る方法 0 14343 2014-11-13 10:42 mejapan
Free Talk 面取りについて 0 13482 2014-11-08 15:18 MoonChild
Free Talk 丸太を結ぶ縄の作成について 1 19673 2014-09-18 22:33 kenslab
Free Talk パーティクルフィジックスのメタパーティクルについて 0 13933 2014-09-03 20:40 penta
Free Talk データの保存に関して 2 13810 2014-08-18 01:24 sierra
Free Talk Shade 3D ver14での、ポリゴンメッシュへの変換以上終了 1 14215 2014-04-23 12:04 MASA_