【问题标题】:Revit, Using Python, Can't get the Family "Type Names" for a Family, Just the IDRevit,使用 Python,无法获取族的族“类型名称”,只有 ID
【发布时间】:2020-10-21 23:33:18
【问题描述】:

我已经尝试了几个小时来尝试自己解决这个问题,以便我可以学习。我能够从 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


    【解决方案1】:

    我自己回答了。工作几个小时,然后最后发布一个问题。再看一遍,就在那里!!!

    这是以后任何人都在摸索我所做的事情的代码:

    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
    

    【讨论】:

      【解决方案2】:

      感谢您的解决方案。在其中,您从 SYMBOL_NAME_PARAM 内置参数中检索符号名称。这是完全有效的。读取符号名称的一种更简单、更直接的方法是简单地查询Element.Name propertyElement 是所有 Revit 数据库常驻对象的父类,包括 FamilySymbol

      【讨论】:

      • 杰里米,感谢您提供的信息。我以为我试过了,但我可能搞砸了。我会回去试一试。感谢您的建议和您所有可用的资源 - 这是一个很大的帮助!
      【解决方案3】:

      Element.Name 由于多级继承将不起作用。请尝试以下方法:

      name = Element.Name.GetValue(familysymbol)
      

      【讨论】:

        猜你喜欢
        • 2019-11-28
        • 2021-02-21
        • 2020-08-29
        • 1970-01-01
        • 2020-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-03
        相关资源
        最近更新 更多