RevitAPI的使用过程中,我们会碰到各种各样的异常(Exception),我想在这里收集一些常见的Exception,并探讨一下它们的原因以及处理办法。
ModificationOutsideTransactionException
首先我们看看这个异常ModificationOutsideTransactionException,对初入RevitAPI门的工程师们,这个无疑是第一盆冷水。
例如我们只调用这么一段代码,执行的时候就会出现这个异常:
RevitDoc.ProjectInformation.Author = "Aaron Lu";
原因是对Revit模型进行修改的时候,需要放到一个事务Transaction里面,例如:
Transaction transaction = new Transaction(doc, "Change author of project");
transaction.Start();
try
{
RevitDoc.ProjectInformation.Author = "Aaron Lu"; //put here
transaction.Commit();
}
catch (Exception ex)
{
transaction.RollBack();
}
这么做的好处是,我们的操作会出现在Revit的Undo/Redo列表里面,也就是说我们可以在界面上撤销或者重做该操作。
Autodesk.Revit.Exceptions.InvalidOperationException: The document is currently modifiable! Close the transaction before calling EditFamily
我们不能把Document.EditFamily()方法的调用包含在Transaction里面,因为EditFamily方法本身在里面起了一个Transaction了,所以正确的方式应该是把EditFamily的调用放在Transaction外面,否则就会有这个异常抛出。