Metasequoia BBS

| 新規投稿 | 通常表示 | ツリー表示 |
状態
タグ
キーワード
[4304] マテリアルを完全に削除できないバグ - mqsdk411 / tamachan
対応済み [不具合報告] 返信
SDK: mqsdk411(C++)
Metaseq: 4.1.1 (64bit)

マテリアルを1つ残らず削除することができません。削除してもマテリアルパネルにマテリアル1つ残った状態になり、そのマテリアルを開いた瞬間にクラッシュします。

サンプルコード(メタセコの初期状態から下のコード実行で再現可能):
      int numMat = doc->GetMaterialCount();
      for(int i=0;i<numMat;i++)
      {
        if(doc->GetMaterial(i))doc->DeleteMaterial(i);
      }
#ifdef _DEBUG
      numMat = doc->GetMaterialCount();
      for(int i=0;i<numMat;i++)
      {
        ATLTRACE(_T("DEBUG(Material-%d): 0x%08X\n"), i, doc->GetMaterial(i));
      }
#endif

上のコード(_DEBUG)のTRACE結果:

続きを表示...
2014-03-03 03:08

途中の5件のメッセージを表示

[4312] Re: Re: Re: Re: Re: Re: マテリアルを完全に削除できないバグ - mqsdk411 / 管理者
ImportGoZ()内の最後にあるMQ_RefreshView(NULL)の呼び出しをコメントアウトしてください。
これは本体に制御が戻る前に描画が行われると更新フラグが消えてしまう実装になっているためです。
まずい実装なので今後改善する可能性もありますが、RedrawAllScene()で再描画の予約がされているため、どのみちここではMQ_RefreshViewは不要かと。

また、Compact()を呼び出すまではインデックスの切り詰めは行われず、
DeleteMaterial()ではNULLに置き換わるだけなので、当該コードでは無限ループとなります。
2014-03-03 18:57
タイトル
お名前
レス通知メールアドレス レスがつくとこのアドレスにメールが通知されます。メールアドレスは投稿後に表示されることはありません。
タグ プリセットから指定するか、コンマ区切りで任意のタグを複数入力できます。
メッセージ

現在ファイル添付機能は一時的に利用できません。