

  * 現在、複数の図面を更新する機能を開発しています。
  * 図面をまたぐので`CommandFlags.Session`を指定しています。

更新した情報を戻せないように`UNDO`履歴をクリアしようとしているのですが、`CommandFlags.Session`の機能では、`Document.Editor.Command`も`acedCmd`も正常に動作しないようです。

そこで、`Document.SendStringToExecute`に引数`"UNDO C N UNDO A
"`を指定して、`UNDO`を無効にして、再度有効にすることで`UNDO`履歴をクリアしています。

しかし、このやり方では、`CMDECHO`をオフにしてもコマンドラインに処理内容が表示されます。  
また、コマンドラインの履歴に`UNDO`が残っています。

以下の2点に対応する方法を教えていただけないでしょうか。

  1. コマンドラインに処理内容を表示しないようにする方法
  2. コマンドラインの履歴に`UNDO`が残らないようにする方法  
(`CommandFlags.NoHistory`と同様の効果が得られる方法)

`SendStringToExecute`以外の方法でもかまいませんので、ご教授の程よろしくお願いします。


CC BY-SA 4.0
2018-11-19T06:36:01.687
50436
2020-07-24T05:02:50.340
2018-11-19T12:46:36.757
3068
31055
question
ijcad
AUTOCAD/IJCAD UNDO履歴のクリア


AutoCADでは以下の方法によるコマンド呼び出して、CMDECHOがオフの状態であればコマンドラインにUNDOコマンドの履歴が残りません。

[code]

    [CommandMethod("TESTCMD", CommandFlags.Session)]
    public void TestCommand()
    {
        UndoClear();
    }
    
    private static async void UndoClear()
    {
        var docs = Application.DocumentManager;
        var doc = docs.MdiActiveDocument;
        var ed = doc.Editor;
        try
        {
            await docs.ExecuteInCommandContextAsync(
              async (obj) => { await ed.CommandAsync("Undo", "C", "N", "UNDO", "A"); },
              null
            );
        }
        catch { }
    }
    
[/code]

IJCADでは ExecuteInCommandContextAsync が実装されていないので、COMとLISPを使用してUNDOコマンドを呼び出します。

[code]

    [CommandMethod("TESTCMD", CommandFlags.Session)]
    public void TestCommand(){
        var acadDoc = ((dynamic)Application.AcadApplication).ActiveDocument;
        acadDoc.SendCommand("(command \"UNDO\" \"C\" \"N\" \"UNDO\" \"A\")\n");
    }
    
[/code]

ただしこの方法ではコマンドラインに、(command "UNDO" "C" "N" "UNDO" "A")とnilが残ってしまいます。


CC BY-SA 4.0
2018-11-20T02:59:58.707
50452
2018-11-20T02:59:58.707
50436
answer