Metasequoia BBS

| New message | Normal | Tree |
Status
Tag
Keyword
[4304] マテリアルを完全に削除できないバグ - mqsdk411 / tamachan
Done [Bug report] Response
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結果:

Show more...
2014-03-03 03:08

Show the middle 5 messages.

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

また、Compact()を呼び出すまではインデックスの切り詰めは行われず、
DeleteMaterial()ではNULLに置き換わるだけなので、当該コードでは無限ループとなります。
2014-03-03 18:57
Title
Name
Mail address for renponse notification A mail will be sent when the response is written. This address will be not shown after you post.
Tag Please select from a preset or input arbitrary comma-delimited tags.
Message

Now file attachment is not available temporarily.