適切な利用方法とは言えないかもしれないけれども、Entityを一時的に追加しコマンドの入力補助を行うようなものを作って見ました。その時に出会った不可思議な現象に関するメモです。

流れとしては

  1. 入力補助エンティティの追加・表示
  2. ユーザ入力
  3. 入力補助エンティティの削除

 となります。 

まず、1番目の入力補助エンティティの追加・表示ですが、

            BlockTable tTable = (BlockTable)aTransaction.GetObject(aDatabase.BlockTableId, OpenMode.ForRead);
            BlockTableRecord tEntities = (BlockTableRecord)aTransaction.GetObject(tTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
            tEntities.AppendEntity(aNewEntity);
            aTransaction.AddNewlyCreatedDBObject(aNewEntity, true);

このような一般的なEntityの追加だと思われます。しかし、この方法ではコマンド終了時にのみ描画が反映されます。従って、入力補助としては使えません。(Transaction#Commit()を行ってもNG)

これを回避する為には、追加後に対象レイヤーにRegenをする必要があります。

そして、3番目の入力補助エンティティの削除ですが、

            tEntities.Erase();

と一般的にしそうですが、当然ダメです。削除に対象レイヤーのRegenが必要になります。
削除後にRegenを行うと見た目上消えず、コマンド終了後に消えると言う謎の現象が発生します。

・・・いまいち理解ができませんOrz

カテゴリー: 技術情報