Revit Python Shell:如何获取项目中没有实例'Pipe Types'族的类型名称?



最终目标是将我想要的PipeType(Plex Wire(的ElementId传递给Pipe.Create,但我不知道如何在没有要检查的Pipe实例的项目中选择正确的PipeType ElementId。

在一个测试项目中,我使用传输项目标准来引入我要使用的管道类型,并手动创建了一些管道实例来检查...

>>> import Autodesk.Revit as R
>>> types=R.DB.FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_PipeCurves).WhereElementIsElementType().ToElements()
>>> elems=R.DB.FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_PipeCurves).WhereElementIsNotElementType().ToElements()
>>> for i in elems: print(i.Name)
...
Default
Default
Default
Plex Wire
>>> for i in types: print(i.Name)
... 
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
AttributeError: Name

。但正如我所提到的,我希望能够从一个包含所需 PipeType(来自项目模板(但没有预先存在的 Pipe 实例的项目使用 Pipe.Create。

谢谢

我让杰里米的"交易技巧"起作用了(见下文(。感谢对我的代码的任何批评,谢谢!

import Autodesk.Revit as R
pipeTypeNames={}
def GetPipeTypeNames():
types=R.DB.FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_PipeCurves).WhereElementIsElementType().ToElements()
pipingSystemTypes=R.DB.FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_PipingSystem).ToElements()
levels=R.DB.FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_Levels).WhereElementIsNotElementType().ToElements()
pipeDoc=doc
pipeSystem=pipingSystemTypes[0].Id
pipeLevel=levels[0].Id
points=[]
transaction=R.DB.Transaction(doc,'Get Pipe Type Names')
transaction.Start()
for t in range(len(types)):
pipeType=types[t].Id
points.append((R.DB.XYZ(0,t,0),R.DB.XYZ(10,t,0)))
R.DB.Plumbing.Pipe.Create(pipeDoc,pipeSystem,pipeType,pipeLevel,points[t][0],points[t][1])
pipeElems=R.DB.FilteredElementCollector(doc).OfCategory(BuiltInCategory.OST_PipeCurves).WhereElementIsNotElementType().ToElements()
for p in pipeElems:
pipeTypeNames[p.Name]=p.PipeType
transaction.RollBack()
GetPipeTypeNames()

使用 Revit 2015 中引入的ElementTypeFamilyName特性。

在此之前,最简单的选择是使用临时事务技巧:打开一个事务,插入一个虚拟实例,获取所需的名称,然后回滚事务。

最新更新