X
返回顶部
当前位置: 首页> BIM资讯> Dynamo论坛

Dynamo,EmlementId的数据类型的参数怎么修改。

发布:Timing 浏览:3875人 分享
发布于:2018-11-01 18:17
比如说组类型名称,阶段化,等此类参数在Dynamo中读取出来的数据类型是ElementId,想要修改的时候,总是输入的参数格式不匹配。想要写一个程序进行修改,调用REVIT API中的,Element.ChangeTypeId()函数,写的如下代码总是报错,请大神帮忙看看,是怎么回事。
import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

clr.AddReference("RevitAPIUI")
from Autodesk.Revit.UI import TaskDialog

clr.AddReference("RevitAPI")
import Autodesk
from Autodesk.Revit.DB.Events import *
from Autodesk.Revit.DB import *
from math import *

clr.AddReference("RevitNodes")
import Revit
clr.ImportExtensions(Revit.Elements)
clr.ImportExtensions(Revit.GeometryConversion)

clr.AddReference("RevitServices")
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

#自定义函数
#def ...

#全局变量
DOC = DocumentManager.Instance.CurrentDBDocument
UIAPP = DocumentManager.Instance.CurrentUIApplication
UIDOC = UIAPP.ActiveUIDocument
BOPTIONS = Autodesk.Revit.DB.SpatialElementBoundaryOptions()
VER = DOC.Application.VersionName.replace("Autodesk Revit ", "")
LOC = DOC.Application.Language == Autodesk.Revit.ApplicationServices.LanguageType.Chinese_Simplified

#输入变量

#核心程序

#主体代码
object = UnwrapElement(IN[0])
type = UnwrapElement(IN[1])

def ChangeType(object):
TransactionManager.Instance.EnsureInTransaction(DOC)
if isinstance(object,Element):
obj.ChangeTypeId(type.Id)
r = object
else:
r = []
for e in object:
if isinstance(e,Element):
e.ChangeTypeId(type.Id)
r.append(e)
else:
r.append(ChangeType(e))
TransactionManager.Instance.TransactionTaskDone()
return r

OUT = ChangeType(object)

BIM技术是未来的趋势,学习、了解掌握更多BIM前言技术是大势所趋,欢迎更多BIMer加入BIM中文网大家庭(http://www.wanbim.com),一起共同探讨学习BIM技术,了解BIM应用!