Revit API使用PromptForFamilyInstancePlacement放置细节组件
本文关键字:细节 组件 PromptForFamilyInstancePlacement API 使用 Revit | 更新日期: 2023-09-27 18:04:11
我试图使用PromptForFamilyInstancePlacement
放置一个细节组件,但我有困难正确定义FamilySymbol
。
我发现的例子显示了如何使用FilteredElementCollector
来实现这一点,但我正试图通过名称定义FamilySymbol
。
试试这段代码(需要System.Linq)和。net
FamilySymbol symbol = GetElements<FamilySymbol>(commandData.Application.ActiveUIDocument.Document)
.Where(item => item.Name == "NameYouWant")
.First();
commandData.Application.ActiveUIDocument.PromptForFamilyInstancePlacement(symbol);
/// <summary>
/// Get the collection of elements of the specified type.
/// <para>The specified type must derive from Element, or you can use Element but you get everything :)</para>
/// </summary>
/// <typeparam name="T">The type of element to get</typeparam>
/// <returns>The list of elements of the specified type</returns>
public IEnumerable<T> GetElements<T>(Document document) where T : Element
{
FilteredElementCollector collector = new FilteredElementCollector(document);
collector.OfClass(typeof(T));
return collector.Cast<T>();
}
您已经将Family文档加载到您正在处理的项目中了吗?如果没有,那么您可以使用Document.LoadFamilySymbol
或Document.LoadFamily
将家族加载到项目中。否则,要找到您正在寻找的家族符号,您可以使用类似于下面代码的东西:
UIApplication application = commandData.Application;
UIDocument uiDocument = application.ActiveUIDocument;
Document document = application.ActiveUIDocument.Document;
FilteredElementCollector familyCollector = new FilteredElementCollector(document);
familyCollector.OfClass(typeof(FamilySymbol));
FamilySymbol familySymbolToFind = null;
foreach (FamilySymbol familySymbol in familyCollector)
{
//To search by FamilySymbol name
if (familySymbol.Name == "[Name of FamilySymbol to find]")
familySymbolToFind = familySymbol;
//To search by Family name
else if (familySymbol.Family.Name = "[Name of Family to find]")
familySymbolToFind = familySymbol;
}
uiDocument.PromptForFamilyInstancePlacement(familySymbolToFind);
他们都工作,即使在Revit 2017。(在第二个解决方案中,else if行需要==
而不是=
。)
在第二个解决方案中,我使用这个来确保我有正确的家族名称和家族符号名称:
foreach (FamilySymbol familySymbol in familyCollector)
{
if (familySymbol.Name == "Put your Family Name here" && familySymbol.Family.Name == "Put your Family Symbol Name here")
familySymbolToFind = familySymbol;
}