public static void PaintByMaterial(UIDocument uidoc, Param par) { Document doc = uidoc.Document; if (doc.IsFamilyDocument) { Selection sel = uidoc.Selection; ISelectionFilter selectionFilter = new GFSelectionFilter(); Reference ChangedObject = sel.PickObject(ObjectType.Element, selectionFilter); GenericForm gf = doc.GetElement(ChangedObject.ElementId) as GenericForm; using (Transaction t = new Transaction(doc, "Paint Faces")) { t.Start(); FamilyManager fmgr = doc.FamilyManager; FamilyParameter p; if (doc.FamilyManager.get_Parameter(par.Guid) == null) { ExternalDefinition def = par.CreateDefinition(doc) as ExternalDefinition; p = doc.FamilyManager.AddParameter(def, BuiltInParameterGroup.PG_IFC, par.Instance); } else { p = doc.FamilyManager.get_Parameter(par.Guid); } Options geoOptions = new Options(); geoOptions.DetailLevel = ViewDetailLevel.Fine; GeometryElement geoEle = gf.get_Geometry(geoOptions); IEnumerator <GeometryObject> geoObjIt = geoEle.GetEnumerator(); while (geoObjIt.MoveNext()) { Solid solid = geoObjIt.Current as Solid; if (solid != null) { foreach (Face f in solid.Faces) { doc.Paint(gf.Id, f, p); } } } t.Commit(); } } }