Revit_TransactionMode

由于Revit API对于Revit事务没有默认值,****用户必须显式地指定标签值****。用户在实现IExternalCommand接口时必须指定执行命令所使用的TransactionMode属性。

[Autodesk.Revit. Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Automatic)]

①TransactionMode.Automatic:
Revit会在调用外部命令之前自动创建一个Transaction,并且该Transaction会在外面命令结朿时提交或者回滚。如果外部命令执行成功,则提交Transaction;如果有异常,则回滚。在该模式下,外部命令不能再创建自己的Transaction,但是可以创建 SubTransactions。

②TransactionMode.Manual:
此模式表示Revit不会自动创建一个Transaction。如果用户需要修改Revit摸型,则需要自行创建Transaction,并且自行管理这个Transaction提交还是回滚。

③TransactionMode.ReadOnly:
在该模式下,外部命令不能有任何的Transaction,否则在创建Transaction或者修改 Revit文档都会抛出异常。

    [TransactionAttribute(TransactionMode.Manual)]
    [RegenerationAttribute(RegenerationOption.Manual)]

nOption.Manual)]




***\*上述三种TransactionMode都只在活动文档范围内有效\****。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Revit二次开发中实现自动保存功能的代码示例: ``` namespace RevitAutosave { [Transaction(TransactionMode.Manual)] [Regeneration(RegenerationOption.Manual)] class Autosave : IExternalApplication { string oldDateTime = null; // 上一次保存时间 public Result OnStartup(UIControlledApplication application) { // 设置定时器,每隔10分钟执行一次保存操作 Timer timer = new Timer(new TimerCallback(AutosaveCallback), null, 0, 10 * 60 * 1000); return Result.Succeeded; } public Result OnShutdown(UIControlledApplication application) { return Result.Succeeded; } // 定时器回调函数 private void AutosaveCallback(object state) { // 获取当前文档 Document doc = Autodesk.Revit.ApplicationServices.Application.ActiveUIDocument.Document; // 获取当前时间 string currentDateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); // 与上一次保存时间比较,如果时间间隔大于10分钟,则执行保存操作 if (oldDateTime == null || (DateTime.Parse(currentDateTime) - DateTime.Parse(oldDateTime)).TotalMinutes >= 10) { // 执行保存操作 doc.Save(); // 更新上一次保存时间 oldDateTime = currentDateTime; } } } } ``` 以上代码实现了在Revit二次开发中自动保存的功能,每隔10分钟自动执行保存操作。在OnStartup方法中设置定时器,定时器回调函数AutosaveCallback中获取当前时间并与上一次保存时间比较,如果时间间隔大于10分钟则执行保存操作,并更新上一次保存时间。需要注意的是,定时器回调函数中的代码应该是线程安全的,以避免出现多线程问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值