Revit,使用Python,无法获得家族的 "类型名称",只有ID。

问题描述 投票:0回答:2

我已经尝试了几个小时,试图自己解决这个问题,以便我可以学习。 我能够从Revit中得到我想要的家族(称为familyToUpdate),并列出家族(符号)类型,但我不能得到类型名称本身,只能得到它们的ID。 我想把实际的类型名称与我调用的文本参数(typeToDelete)进行比较,这样我就可以只删除我知道没有被使用的类型。 我经历了许多例子,但始终无法让它们工作。

这是我迄今为止的代码。

import Autodesk.Revit.DB as DB
from Autodesk.Revit.DB import *

uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document
app = doc.Application

familyToUpdate = "MyFamily"
typeToDelete = "MyFamilyType"

print "Family Name = " + familyToUpdate
print "Type To Delete = " + typeToDelete

#Delete Family Type
Elements = FilteredElementCollector(doc).OfClass(Family).ToElements()

for m in Elements:
    try:
        if m.Name.startswith((familyToUpdate)):
            symbols = list(m.GetFamilySymbolIds())
            for i in symbols:
                print "Family Type Id =  " + str(i)
                famsymbol = doc.GetElement(i)
                print "famsymbol = " + str(famsymbol)
                #symbolName = famsymbol.Family.Name
                #print symbolName
                #if symbolName == typeToDelete:
                #    print "I found the type name"

    except:
        pass
python revit
2个回答
0
投票

自己回答了。 工作了几个小时,然后终于发了一个问题。 再一看,果然有了!!!!!!!!。

这是我的代码,以后还有人在摸索我的方法。

import Autodesk.Revit.DB as DB
from Autodesk.Revit.DB import *

uidoc = __revit__.ActiveUIDocument
doc = __revit__.ActiveUIDocument.Document
app = doc.Application

familyToUpdate = "VA Titleblock Consultant Logo (PIN07)"
typeToDelete = "VA Titleblock Consultant Logo (PIN07) (Hagerman)"

print "Family Name = " + familyToUpdate
print "Type To Delete = " + typeToDelete + "\n\n"

#Delete Family Type
Elements = FilteredElementCollector(doc).OfClass(Family).ToElements()

for m in Elements:
    try:
        if m.Name.startswith((familyToUpdate)):
            symbols = list(m.GetFamilySymbolIds())
            for i in symbols:
                #print "Family Type Id =  " + str(i)
                famsymbol = doc.GetElement(i)
                #print "Symbol ID = " + str(famsymbol)
                symbolName = famsymbol.get_Parameter(BuiltInParameter.SYMBOL_NAME_PARAM).AsString()
                print "SymbolName = " + symbolName

    except:
        pass

0
投票

谢谢你的解决方案 在里面,你是在从 SYMBOL_NAME_PARAM 内置参数。这是完全有效的。一个更简单、更直接的读取符号名的方法是简单地查询一下 Element.Name属性. Element 是所有Revit数据库常驻对象的父类,包括 FamilySymbol.

© www.soinside.com 2019 - 2024. All rights reserved.