此异常表示在未在事务中的情况下尝试修改Revit的文档或模型。
Autodesk.Revit.Exceptions.ModificationOutsideTransactionException: Modification outside transaction.
在 Autodesk.Revit.DB.Document.GetElement(ElementId id)
在 YourCodeNamespace.YourMethod() in YourCodeFile.cs:line XX
Revit的文档或模型是被锁定的,只有在事务中才能进行修改。如果在没有启动事务的情况下尝试进行修改,就会引发此异常。这是为了保证数据的一致性和完整性。
确保在修改文档或模型之前,已在事务内开始进行操作。这可以通过以下代码示例实现:
// 开始事务
using (Transaction t = new Transaction(doc, "Transaction Name"))
{
t.Start();
// 进行修改操作
// ...
// 提交事务
t.Commit();
}
如果您正在使用外部应用程序程序集开发Revit插件,则必须在调用API之前将当前上下文切换为事务上下文。这可以通过以下代码示例实现:
// 获取当前文档
Document doc = commandData.Application.ActiveUIDocument.Document;
// 切换到事务上下文
using (TransactionGroup tg = new TransactionGroup(doc))
{
tg.Start("Transaction Group Name");
using (Transaction t = new Transaction(doc))
{
t.Start("Transaction Name");
// 进行修改操作
// ...
// 提交事务
t.Commit();
}
// 结束事务组
tg.Assimilate();
}
以下示例演示如何在事务中修改Revit元素:
// 获取当前文档
Document doc = commandData.Application.ActiveUIDocument.Document;
// 获取元素ID
ElementId elementId = new ElementId(123);
// 切换到事务上下文
using (TransactionGroup tg = new TransactionGroup(doc))
{
tg.Start("Transaction Group Name");
using (Transaction t = new Transaction(doc))
{
t.Start("Transaction Name");
// 获取元素对象
Element element = doc.GetElement(elementId);
// 判断元素对象是否为空
if (element != null)
{
// 修改元素对象
element.Name = "New Name";
// 提交事务
t.Commit();
}
}
// 结束事务组
tg.Assimilate();
}