点击名字关注BIM的乐趣,并记得加★哦~
Dynamo案例百解累积更新(2024.01)介绍~
Dynamo PythonScript代码速查手册-By九哥
Rhino.Inside.Revit学习笔记(2023.01)更新
在售的Dynamo教程,有兴趣小伙伴,可以加我微信,进行购买哦~
Hello大家好!我是九哥~
今天继续给大家分享一些短平快的小教程,是来自群里面的问题。
问题007:从链接模型复制图元,如何忽略重复类型提示?
最近群里小伙伴提到问题,出现这个提示是因为链接模型和当前模型,存在同名的图元,询问你是否替换。
首先,我是使用的是ElementTransformUtils.CopyElements这个函数,截图如下:
这里有个CopyPasteOptions 的选项,可以看到,这里说是用来控制复制的选项,猜测就是来处理这个的:
然后我们继续查看他的方法:
发现有IDuplicateTypeNamesHandler这个事件接口。
看介绍,就是来处理遇到重复类型时候用的,而由于在调用copy函数时传参时直接默认构造了CopyPasteOptions类,所以我猜测此时revit不确定该如何处理,于是给出弹窗提示。
那么接下来就好办了,我们自己创建一个CopyPasteOptions类,然后给它一个处理方式就行了。
#忽略存在相同构件的提示class CustomCopyHandler(IDuplicateTypeNamesHandler): def OnDuplicateTypeNamesFound(self, args): return DuplicateTypeAction.UseDestinationTypes
options = CopyPasteOptions()options.SetDuplicateTypeNamesHandler(CustomCopyHandler())
完整程序截图和代码如下:
完整代码如下:
import clrimport Systemfrom System import EventHandler
clr.AddReference('RevitServices')from RevitServices.Persistence import DocumentManagerfrom RevitServices.Transactions import TransactionManagerdoc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference('RevitAPI')from Autodesk.Revit.DB import *
clr.AddReference("RevitAPIUI")from Autodesk.Revit.UI import *from Autodesk.Revit.UI.Events import *
from System.Collections.Generic import List
clr.AddReference('RevitNodes')import Revitclr.ImportExtensions(Revit.Elements)
def singleton(x): if hasattr(x,'__iter__'): return x[0] else : return x
def tolist(x): if hasattr(x,'__iter__'): return x else : return [x]
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocumentuiapp = uidoc.Application
linkInst = UnwrapElement(singleton(IN[0]) )elements = UnwrapElement(tolist(IN[1]) )
linkDoc = linkInst.GetLinkDocument()tf1 = linkInst.GetTotalTransform()eId = List[ElementId]()for e in elements: try:id1 = e.Id except: continue eId.Add(id1)
#忽略存在相同构件的提示class CustomCopyHandler(IDuplicateTypeNamesHandler): def OnDuplicateTypeNamesFound(self, args): return DuplicateTypeAction.UseDestinationTypes
options = CopyPasteOptions()options.SetDuplicateTypeNamesHandler(CustomCopyHandler())
TransactionManager.Instance.EnsureInTransaction(doc)copy = ElementTransformUtils.CopyElements(linkDoc, eId, doc, tf1, options)
TransactionManager.Instance.TransactionTaskDone()
OUT = [doc.GetElement(i).ToDSType(False) for i in copy]
好了,今天的分享就到这里了,有需要的小伙伴快去试试吧~
早期文章整理目录:
『Dynamo教程目录整理2023.01』BIM的乐趣By九哥
Revit文件版本查看小工具by九哥
Dynamo3.0.0已来,未来可期~
Dynamo添加UI不可编辑参数
Dynamo设置明细表字段格式——保留小数位数
【Rhino.Inside】CAD文字转换为Revit注释文字
【案例百解】Dynamo按分区索引切分视图
Dynamo创建立面标高标注【注释系列教程】
Dynamo创建族实例尺寸标注【注释系列教程】
Dynamo创建三维视图标记【注释系列教程】
Dynamo:Revit听我号令~~炸!!!
Dynamo批量删除Revit视图样板『案例百解』