PCF and Assemblies
In a prior post, we showed how to output pipe fabrication parts to a PCF file. If you are using Assemblies in Revit to generate assembly views, and want to output a PCF of that assembly, you will find that you need to make some enhancements to the PCF output macro.
To do so, we will use a helper function (GetElementIdsInAssembly) to get the element IDs inside any selected assemblies.
Modify the original ExportSelectionToPCF function as shown below, and add the helper function (copy and paste from below).
After making these changes, you should be able to select a single assembly instance, and generate the required PCF output.
The Code
public void ExportSelectionToPCF() { // get the selected element ids List<ElementId> elementIdsToPCF = new List<ElementId>(); List<ElementId> selectedElementIds = this.ActiveUIDocument.Selection.GetElementIds().ToList(); elementIdsToPCF.AddRange(selectedElementIds); // add the element ids that are in assemblies List<ElementId> selectedAssemblySubElementIds = GetElementIdsInAssembly( selectedElementIds, this.ActiveUIDocument.Document); elementIdsToPCF.AddRange(selectedAssemblySubElementIds); // output the PCF Autodesk.Revit.DB.Fabrication.FabricationUtils.ExportToPCF( this.ActiveUIDocument.Document, elementIdsToPCF, "C:\\temp\\somefile.pcf"); } // Get the element ids in the selected assemblies public List<ElementId> GetElementIdsInAssembly( List<ElementId> selectedElementIds, Document theDocument) { List<ElementId> lstElemIds = new List<ElementId>(); foreach (ElementId id in selectedElementIds) { AssemblyInstance assemblyInst = theDocument.GetElement(id) as AssemblyInstance; if (assemblyInst == null) continue; lstElemIds.AddRange(assemblyInst.GetMemberIds()); } return lstElemIds; }
See Part 1: Exporting PCF Files from Revit 2018 to learn how to create a PCF file from Revit.
UPDATE: See how to export each assembly to a separate PCF file in this blog post