如何让撤销栏显示Dynamo的具体操作内容

来源:九哥BIMer

今天来简单聊聊关于撤销这个事,我们在建模过程中,经常会遇到操作失误的时候,这里经常会用到撤销这个命令,当然也有撤销很多步的时候。同样的,Dynamo 操作后,我们也可能会需要撤销操作,但是,如果你仔细观察,就会发现,撤销栏里显示的 Dynamo 操作很模糊,并不能具体显示 Dynamo 做了什么。

如下图:

如何让撤销栏显示Dynamo的具体操作内容-BIMBANK

第一行是我们的正常显示,而第二行,则显示的 “Dynamo-**“等一些东西,并没有很明确的显示 Dynamo 的操作,那么我们能否让其显示呢,答案是很定的。

我们先来看一段代码,取消墙体两端连接:

​import sys
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
 
clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import *
 
clr.AddReference("Revitservices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
 

doc = DocumentManager.Instance.CurrentDBDocument

walls_list = FilteredElementCollector(doc).WhereElementIsNotElementType().OfCategory(BuiltInCategory.OST_Walls).ToElements()

TransactionManager.Instance.EnsureInTransaction(doc)
 
for i in walls_list:
    elem = UnwrapElement(i)
    WallUtils.DisallowWallJoinAtEnd(elem, 0)
    WallUtils.DisallowWallJoinAtEnd(elem, 1)
 
TransactionManager.Instance.TransactionTaskDone()
OUT = walls_list

上面这段代码,看着没啥大问题,都是按照常规的写法来了。可以看出,我们这里用的是 Dynamo 提供的 TransactionManager 方法,它处理来自 Dynamo 应用程序内部对 Revit 文档数据库所做的更改。

而显示撤销具体内容这里,实际上需要用到 Revit API 里 Transaction 下的部分方法。

接下来我们再来看看 Revit API 提供的 Transaction 方法:

如何让撤销栏显示Dynamo的具体操作内容-BIMBANK

如上图,Revit API 提供的 Start 方法有两种,其中一种,就包含返回的信息:

如何让撤销栏显示Dynamo的具体操作内容-BIMBANK

那么,我们直接调用 Revit API 的 Transaction 方法,就能解决返回信息的问题,在 Start(“这里是返回的信息”)方法内填写即可。

调整后的代码如下:

import sys
import clr

clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB import FilteredElementCollector, BuiltInCategory, Transaction
 
clr.AddReference("Revitservices")
import RevitServices
from RevitServices.Persistence import DocumentManager

doc = DocumentManager.Instance.CurrentDBDocument

t = Transaction(doc,"取消墙体两端连接")
t.Start()

walls_list = FilteredElementCollector(doc).WhereElementIsNotElementType().OfCategory(BuiltInCategory.OST_Walls).ToElements()

for i in walls_list: 
    Autodesk.Revit.DB.WallUtils.DisallowWallJoinAtEnd(i, 0)
    Autodesk.Revit.DB.WallUtils.DisallowWallJoinAtEnd(i, 1)
 
t.Commit()

OUT = walls_list

然后我们再次运行程序,就可以在 Revit 撤销栏,看到我们填写的 Dynamo 操作内容了。然后我们再次运行程序,就可以在 Revit 撤销栏,看到我们填写的 Dynamo 操作内容了。

好了,今天的分享就到这里,小伙伴们快去自己尝试吧~

扫描二维码关注BIMBANK官方微信,及时获取最专业的BIM资讯:

发表评论

坐等沙发
相关文章
【敬邀】8月21日-22日,第八届工程建设行业互联网大会中亿丰数字专场
【敬邀】8月21日-22日,第八届工程建设…
大数据能为建筑能源管理做些什么?
大数据能为建筑能源管理做些什么?
承认吧,BIM就是一场骗局!
承认吧,BIM就是一场骗局!
成都市住建局:BIM费用单独计列,大于5000平或高于24米的公共工业建筑设计和审查阶段全市范围内应用BIM技术
成都市住建局:BIM费用单独计列,大于50…
深圳市住建局-基于BIM系统设计审查、施工许可和竣工验收线试运行!
深圳市住建局-基于BIM系统设计审查、施…
技术 BIM专项应用之医院类项目管线施工
技术 BIM专项应用之医院类项目管线施工