Building Coder(Revit 二次开发) - 临时事务的使用技巧

原文链接: Temporary Transaction Trick Touchup

Jeremy
我在 temporary transaction trick 中提到了多种利用临时事务实现特定应用的方法。不过 Autodesk 的 Revit API 中事务部分的专家  Arno?t L?bel 对此提出了忠告:这些方法并不能保证在所有情况下都适用。

Arnost
首先在获取被修改的几何对象之前,至少必须显示调用 Document.Regenerate();然而即使这样也不能保证你拿到的是正确的结果。很多时候只有在提交事务之后,Revit 才能保证所有的修改都被正确地应用到模型中了。

为了撤销已经被提交的事务,程序必须将该事务包含在一个事务组(Transaction Group)中。然后在提交事务之后,通过回滚事务组来撤销已经提交的事务。具体步骤如下:
1. 启动一个事务组
2. 启动一个事务
3. 修改文档
4. 提交事务
5. 获取被修改的几何对象
6. 回滚事务组

所以针对临时事务的使用,正确的做法应该是:只在两个事务之间读取几何对象,或者至少在调用 Document.Regenerate() 之后读取几何对象。

译者注:根据我的经验,这个规则适用于所有对文档的修改。我曾经实现过的一个应用是复制指定楼层的所有模型到其它楼层。我选择了看似最直接的方法:阵列。但是由于涉及到 Assembly 模型,而 Assembly 是不支持阵列的。所以我只有将 Assembly 拆分或者将其包含在一个 Group 中。因为具体应用的关系,我只能选择拆分 Assembly,然后再阵列。但是测试发现这些动作无法放在一个事务中完成,必须使用多个事务。我认为原因是涉及到 Assembly 的拆分,导致 Revit 只能在事务被提交之后才能正确地重算整个文档模型。 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值