using Autodesk.Revit.DB; using FWindSoft.Revit.FamilyManager; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FWindSoft.Revit { public static class FamilyExtension { #region 查找族相关信息 /// /// 查找family的所有族类型 /// /// /// public static List GetFamilySymbols(this Family family) { var fsIds = family.GetFamilySymbolIds(); var refDoc = family.Document; return fsIds.Select(id => refDoc.GetElement(id)).OfType().ToList(); } /// /// 查找family的第一个可用Symbol /// /// /// public static FamilySymbol GetFamilySymbol(this Family family) { return family.GetFamilySymbol(strTypeName: null); } /// /// 查找指定名称familySymbol,没有找到则返回null /// /// /// /// public static FamilySymbol GetFamilySymbol(this Family family, string strTypeName) { FamilySymbol familySymbol = null; var symbolList = family.GetFamilySymbols(); if (string.IsNullOrWhiteSpace(strTypeName)) { familySymbol = symbolList.FirstOrDefault(); } else { familySymbol = symbolList.FirstOrDefault(fs => fs.Name == strTypeName); } familySymbol.ActivateT(); return familySymbol; } /// /// 查找指定条件的FamilySymbol,没有找到则返回Null /// /// /// /// public static FamilySymbol GetFamilySymbol(this Family family, Dictionary parameterValues) { var symbols = family.GetFamilySymbols(); FamilySymbol fsResult = null; foreach (var fs in symbols) { bool valueEqual = true; foreach (var parameterValue in parameterValues) { var parameter = fs.GetParameter(parameterValue.Key); if (parameter == null) continue; valueEqual = ParameterUtil.EqualValue(parameter, parameterValue.Value); if (!valueEqual) { break; } } if (valueEqual) { fsResult = fs; break; } } fsResult.ActivateT(); return fsResult; } #endregion /// /// 获取指定类型参数的Symbol,如条件果没有条件指定的类型,则创建满足条件的类型 /// /// /// /// /// public static FamilySymbol GetAndCopySymbol(this Family family, Dictionary parameterValues, ref string symbolName) { var familySymbol = family.GetFamilySymbol(symbolName); if (familySymbol == null) { familySymbol = family.GetFamilySymbol(parameterValues); if (familySymbol == null) { familySymbol = family.GetFamilySymbol()?.CopyFamilySymbol(symbolName, parameterValues); } } if(familySymbol!=null) { symbolName = familySymbol.Name; } familySymbol.ActivateT(); return familySymbol; } } }