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;
}
}
}