I’m trying to change the name of the type of an item (e.g. a pipe fitting)
I can change the name but not the type…
Does anyone have any ideas?
import clr
clr.AddReference('RevitAPI')
clr.AddReference('RevitServices')
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
from Autodesk.Revit.DB import FilteredElementCollector, FamilyInstance, BuiltInCategory, FamilySymbol
# Accéder au document actuel de Revit
doc = DocumentManager.Instance.CurrentDBDocument
# Fonction pour nettoyer les noms
def clean_name(name):
if "_V" in name:
name = name[:name.rfind('_V')]
return name.strip() # Supprimer les espaces superflus
# Liste des noms en entrée
family_names = IN[0] # Liste des noms (str)
# Créer un collecteur pour tous les "Accessoires de canalisation"
collector = FilteredElementCollector(doc) \
.OfCategory(BuiltInCategory.OST_PipeAccessory) \
.OfClass(FamilyInstance)
# Créer un dictionnaire pour vérifier les noms existants des accessoires de canalisation
existing_family_names = {}
for inst in collector:
try:
family_name = inst.Symbol.Family.Name
if family_name not in existing_family_names:
existing_family_names[family_name] = inst.Symbol.Family
except Exception:
continue
# Comparaison flexible des noms (avant le premier "_")
cleaned_family_names = {clean_name(name): name for name in existing_family_names.keys()}
# Lancer la transaction pour effectuer les modifications dans Revit
TransactionManager.Instance.EnsureInTransaction(doc)
# Liste des familles et types à modifier
modified_families = []
modified_types = []
# Liste pour les noms non trouvés
non_found_names = []
# Parcourir chaque nom, vérifier l'existence et nettoyer si possible
for family_name in family_names:
cleaned_input_name = clean_name(family_name)
if cleaned_input_name in cleaned_family_names:
# Trouver la famille correspondante dans le projet
family_symbol = existing_family_names[cleaned_family_names[cleaned_input_name]]
# Modifier le nom de la famille
try:
# Modifier le nom du FamilySymbol (type de famille)
original_type_name = family_symbol.Name # Sauvegarde du nom original
family_symbol.Name = cleaned_input_name
modified_types.append((original_type_name, cleaned_input_name)) # Enregistrer le changement de type
# Modifier le nom de la famille (nom de la famille de base)
family_symbol.Family.Name = cleaned_input_name # Modifier le nom de la famille
modified_families.append(family_symbol.Family.Name)
except Exception as e:
# Si le nom ne peut pas être modifié, gérer l'exception
print(f"Erreur lors de la modification du nom de {family_symbol.Name}: {str(e)}")
else:
# Si le nom n'est pas trouvé, l'ajouter à la liste des non trouvés
non_found_names.append(family_name)
# Fin de la transaction
TransactionManager.Instance.TransactionTaskDone()
# Sortie : noms de familles et types modifiés, et noms non trouvés
OUT = (modified_families, modified_types, non_found_names)