我已经尝试了几个小时,试图自己解决这个问题,以便我可以学习。 我能够从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
自己回答了。 工作了几个小时,然后终于发了一个问题。 再一看,果然有了!!!!!!!!。
这是我的代码,以后还有人在摸索我的方法。
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
谢谢你的解决方案 在里面,你是在从 SYMBOL_NAME_PARAM
内置参数。这是完全有效的。一个更简单、更直接的读取符号名的方法是简单地查询一下 Element.Name属性. Element
是所有Revit数据库常驻对象的父类,包括 FamilySymbol
.