Revit, используя Python, не может получить семейство "Имена типов" для семьи, просто идентификатор - PullRequest
0 голосов
/ 04 мая 2020

Я часами пытался решить это сам, чтобы я мог учиться. Я могу вывести нужное семейство из Revit (называемое familyToUpdate) и перечислить типы семейства (символа), но не могу получить само имя типа только их идентификаторы. Я хочу сравнить фактическое имя типа с текстовым параметром, который я назвал (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

Ответы [ 2 ]

0 голосов
/ 05 мая 2020

Спасибо за решение. В нем вы извлекаете имя символа из встроенного параметра SYMBOL_NAME_PARAM. Это совершенно верно. Более простой и прямой способ прочитать имя символа - просто запросить свойство Element.Name . Element является родительским классом всех резидентных объектов базы данных Revit, включая FamilySymbol.

0 голосов
/ 04 мая 2020

Ответил сам. Работайте над этим часами, затем НАКОНЕЦ отправьте вопрос. Взгляните еще раз, и вот оно!

Вот код для любого другого в будущем, перебирающего то, что я сделал:

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
...