revit-apirevitrevitpythonshellpyrevit

Revit API - Remove family completely from Revit project


I'm running into a problem trying to remove a family from a project. I'm able to delete the family types but it seems like the family is still loaded in the project. Is there a way to remove it completely?

so far, i've looked at these sources:

1) https://adndevblog.typepad.com/aec/2012/07/supported-workflow-for-unloading-a-family-using-the-revit-api.html

2) https://adndevblog.typepad.com/aec/2012/07/supported-workflow-for-unloading-a-family-using-the-revit-api.html

here's my code:

FilteredElementCollector colTitleBlocks = new FilteredElementCollector(doc)
                .OfClass(typeof(FamilySymbol))
                .OfCategory(BuiltInCategory.OST_TitleBlocks);


using (Transaction tx6 = new Transaction(doc))
{
    tx6.Start("load custom titleblock that you just made");


    Element family2Unload = null;
    foreach (FamilySymbol xfamily in colTitleBlocks )
        {

        if (xfamily.FamilyName == "E1 30 x 42 Horizontal")
             {

             family2Unload = doc.GetElement(xfamily.Id) as Element;

             }
        }
   doc.Delete(family2Unload.Id);

   tx6.Commit();
}

enter image description here


Solution

  • Families

    FamilyInstance => a placed instance of a family

    FamilySymbol => a family type with 0-m instances

    Family => A family with with n types 0-m instances

    Example : FamilyDelete.pushbutton

    Here is one of my script from pyRevitMEP to delete families :

    """
    Copyright (c) 2017 Cyril Waechter
    Python scripts for Autodesk Revit
    This file is part of pypevitmep repository at https://github.com/CyrilWaechter/pypevitmep
    pypevitmep is an extension for pyRevit. It contain free set of scripts for Autodesk Revit:
    you can redistribute it and/or modify it under the terms of the GNU General Public License
    version 3, as published by the Free Software Foundation.
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
    See this link for a copy of the GNU General Public License protecting this package.
    https://github.com/CyrilWaechter/pypevitmep/blob/master/LICENSE
    """
    import rpw
    doc = rpw.revit.doc
    uidoc = rpw.revit.uidoc
    
    from Autodesk.Revit.DB import Transaction, FamilySymbol
    
    __doc__ = "Delete selected families from project"
    __title__ = "Family delete"
    __author__ = "Cyril Waechter"
    __context__ = "Selection"
    
    
    with rpw.db.Transaction("Delete families from project"):
        # Find families of selected object and delete it
        for id in uidoc.Selection.GetElementIds():
            el = doc.GetElement(id)
            family_id = el.Symbol.Family.Id
            doc.Delete(family_id)
    

    You have the same one for family types : FamilyTypeDelete.pushbutton