首页
学习
活动
专区
圈层
工具
发布

Dynamo从链接模型复制图元,并忽略重复类型提示

点击名字关注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视图样板『案例百解』

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OPQELsr6AiH5I6EXPa-hVY9A0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。
领券