来源:九哥BIMer
今天来简单聊聊关于撤销这个事,我们在建模过程中,经常会遇到操作失误的时候,这里经常会用到撤销这个命令,当然也有撤销很多步的时候。同样的,Dynamo 操作后,我们也可能会需要撤销操作,但是,如果你仔细观察,就会发现,撤销栏里显示的 Dynamo 操作很模糊,并不能具体显示 Dynamo 做了什么。
如下图:
第一行是我们的正常显示,而第二行,则显示的 “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 方法:
如上图,Revit API 提供的 Start 方法有两种,其中一种,就包含返回的信息:
那么,我们直接调用 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 操作内容了。
好了,今天的分享就到这里,小伙伴们快去自己尝试吧~