Revit二次開發,無限選點操作如何讓已經發生的作業保持完成

Revit二次開發,無限選點操作後,當按下Esc鍵取消無限循環時,如何讓已經發生的作業保持完成?

這其實是Revit的事務接受問題,只要想辦法確保當按下Esc鍵時,讓他提交事務即可。

我們知道,在執行IExternalCommand的指令過程中,如果你按下Esc鍵的話,正常情況下會產生下面的提示框:

Revit二次開發,無限選點操作如何讓已經發生的作業保持完成


該提示框的意思是說,用戶取消了選點操作。

當Revit彈出這個對話框的時候 ,已經發生的操作,由於事務終止的原因,將全部還原。

產生這個對話框的原因,是因為發生了以下的異常:

Revit二次開發,無限選點操作如何讓已經發生的作業保持完成

但有時候,我們在項目的實際運用中,由於不知道用戶到底要選幾個點,當然強制用戶使用確定的選點數量也是可以的。但我們希望更好的處理這一需求,即用戶可以無限選點,每次選點,都執行用戶希望的操作,最後當用戶不想選了後,按下Esc鍵,就可以取消無限選點,結束選點操作,同時用戶當然希望結束的時候 ,已經執行的操作能夠生效保留下來。

默認情況下,Revit在用戶按Esc鍵的時候 ,將回滾事務,取消之前用戶的所有選點操作。這就麻煩了。

下面提供一種方式,變相的允許在用戶按下Esc鍵之後,以前發生的操作保持生效,他的原理是變相的處理OperationCanceledException異常,如下所示:

<code>try
{
    this.Run();

    tran.Commit();
}
catch (Autodesk.Revit.Exceptions.OperationCanceledException ex)
{
    if (Runtime.IsCommitIfOperationCanceledException)
    {
        tran.Commit();
        Runtime.IsCommitIfOperationCanceledException = false;
        return Result.Succeeded;
    }

    message = ex.Message;

    return Result.Failed;
}
catch (Exception)
{
    tran.RollBack();

    return Result.Failed;
}
finally
{
    tran.Dispose();
}/<code>

處理Autodesk.Revit.Exceptions.OperationCanceledException異常,回滾標記即可。


源碼下載:

https://download.csdn.net/download/mazhiyuan1981/12882047


分享到:


相關文章: