如何让撤销栏显示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资讯:

发表评论

坐等沙发
相关文章
欧特克重磅推出行业数字生态加速计划 全力打造开放互联的生态系统
欧特克重磅推出行业数字生态加速计划 全…
实用干货!超详细施工BIM场地布置
实用干货!超详细施工BIM场地布置
BIM一张图:帮你化解BIM应用推广的所有迷茫!
BIM一张图:帮你化解BIM应用推广的所有…
依托CIM平台打造数字孪生城市!上海住建委部署2021年工作安排
依托CIM平台打造数字孪生城市!上海住建…
2025年达到30%装配式,湖南常宁市政府发文推进装配式建筑发展
2025年达到30%装配式,湖南常宁市政府发…
BIM技术在结构设计中的应用探索
BIM技术在结构设计中的应用探索