123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125 |
- 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 查找族相关信息
- /// <summary>
- /// 查找family的所有族类型
- /// </summary>
- /// <param name="family"></param>
- /// <returns></returns>
- public static List<FamilySymbol> GetFamilySymbols(this Family family)
- {
- var fsIds = family.GetFamilySymbolIds();
- var refDoc = family.Document;
- return fsIds.Select(id => refDoc.GetElement(id)).OfType<FamilySymbol>().ToList();
- }
- /// <summary>
- /// 查找family的第一个可用Symbol
- /// </summary>
- /// <param name="family"></param>
- /// <returns></returns>
- public static FamilySymbol GetFamilySymbol(this Family family)
- {
- return family.GetFamilySymbol(strTypeName: null);
- }
- /// <summary>
- /// 查找指定名称familySymbol,没有找到则返回null
- /// </summary>
- /// <param name="family"></param>
- /// <param name="strTypeName"></param>
- /// <returns></returns>
- 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;
- }
- /// <summary>
- /// 查找指定条件的FamilySymbol,没有找到则返回Null
- /// </summary>
- /// <param name="family"></param>
- /// <param name="parameterValues"></param>
- /// <returns></returns>
- public static FamilySymbol GetFamilySymbol(this Family family, Dictionary<string, string> 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
- /// <summary>
- /// 获取指定类型参数的Symbol,如条件果没有条件指定的类型,则创建满足条件的类型
- /// </summary>
- /// <param name="family"></param>
- /// <param name="parameterValues"></param>
- /// <param name="symbolName"></param>
- /// <returns></returns>
- public static FamilySymbol GetAndCopySymbol(this Family family,
- Dictionary<string, string> 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;
- }
-
- }
- }
|