你好,这里是BIM的乐趣
本篇文章先开个头,开始我们的Rhino.Inside.Revit之旅,看看如何在Grasshopper中玩转Revit,那么接下来就进入今天的主题,批量删除Revit项目参数。
这个程序很简单,分两步,第一步,获取所有项目参数,第二步,删除参数。删除是有现成节点的,那么我们只需要通过GhPython Script节点,写一些代码,获取所有的项目参数即可。
双击GhPython Script节点,进入代码编辑界面,为了方便,我这里设置了代码模板,方便调用各种库,代码模板如下:
import clr
clr.AddReference('System.Core')
clr.AddReference('RhinoInside.Revit')
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
from System import Enum, Action
import rhinoscriptsyntax as rs
import Rhino
import RhinoInside
import Grasshopper
from Grasshopper.Kernel import GH_RuntimeMessageLevel as RML
from RhinoInside.Revit import Revit, Convert
# 还可以添加扩展方法
# 这允许在Revit对象上调用.ToXXX()转换器方法
clr.ImportExtensions(Convert.Geometry)
from Autodesk.Revit import DB
from Autodesk.Revit.DB import Transaction
# 访问Revit数据库作为主体
REVIT_VERSION = Revit.ActiveUIApplication.Application.VersionNumber
# 访问活动文档对象
doc = Revit.ActiveDBDocument
# 一些实用方法
def show_warning(msg):
ghenv.Component.AddRuntimeMessage(RML.Warning, msg)
def show_error(msg):
ghenv.Component.AddRuntimeMessage(RML.Error, msg)
def show_remark(msg):
ghenv.Component.AddRuntimeMessage(RML.Remark, msg)
doc = Revit.ActiveDBDocument
uidoc = Revit.ActiveUIDocument
app = doc.Application
# 在这里编写代码
#Transaction
t = Transaction(doc, 'cadlinktype')
t.Start()
t.Commit()
在Tools菜单下,有Set Template Code...命令,写好模板代码,点击即可:
接下来看看如果获取项目中的项目参数,在Document下,有个ParameterBindings属性,是获取参数和类型的映射关系:
点进去我们能看出,要找的就是这个,自定义的参数映射:
那么我们只要迭代所有的自定义参数即可,就是要找的所有项目参数,那么完整代码如下:
import clr
import System
clr.AddReference('System.Core')
clr.AddReference('RhinoInside.Revit')
clr.AddReference('RevitAPI')
clr.AddReference('RevitAPIUI')
from System import Enum, Action
import rhinoscriptsyntax as rs
import Rhino
import RhinoInside
import Grasshopper
from Grasshopper.Kernel import GH_RuntimeMessageLevel as RML
from RhinoInside.Revit import Revit, Convert
# 还可以添加扩展方法
# 这允许在Revit对象上调用.ToXXX()转换器方法
clr.ImportExtensions(Convert.Geometry)
from Autodesk.Revit import DB
import Autodesk
from Autodesk.Revit.DB import Transaction
# 访问Revit数据库作为主体
REVIT_VERSION = Revit.ActiveUIApplication.Application.VersionNumber
# 访问活动文档对象
doc = Revit.ActiveDBDocument
# 一些实用方法
def show_warning(msg):
ghenv.Component.AddRuntimeMessage(RML.Warning, msg)
def show_error(msg):
ghenv.Component.AddRuntimeMessage(RML.Error, msg)
def show_remark(msg):
ghenv.Component.AddRuntimeMessage(RML.Remark, msg)
#doc = Revit.ActiveDBDocument
#uidoc = Revit.ActiveUIDocument
#app = doc.Application
# 在这里编写代码
if inputdoc == None:
doc = Revit.ActiveDBDocument
elif inputdoc.GetType().ToString() == "Autodesk.Revit.DB.RevitLinkInstance":
doc = inputdoc.GetLinkDocument()
elif inputdoc.GetType().ToString() == "Autodesk.Revit.DB.Document":
doc = inputdoc
else: doc = None
names = []
elems = []
iterator = doc.ParameterBindings.ForwardIterator()
while iterator.MoveNext():
names.append(iterator.Key.Name)
elem = doc.GetElement(iterator.Key.Id)
elems.append(elem)
print(names,elems)
代码完成后,根据代码的输入和输出,设置输入和输出端口的参数名称,如下图:
然后直接将获得的项目参数,连入Delete Element节点,即可完成删除,当然你也可以根据索引,获取自己想要删除的,截图如下:
当然了,你可以用Human UI节点包,创建一个UI,勾选自己要删除的参数,这里就不详细介绍了,简单截个图:
好了,今天的分享就到这里,小伙伴们快去自己尝试吧~
本公众号还有其他Dynamo案例教程:
联系客服