我正在尝试使用 放置细节组件PromptForFamilyInstancePlacement
,但无法正确定义FamilySymbol
.
我发现的示例显示了如何使用 a FilteredElementCollector
,但我正在尝试FamilySymbol
按名称定义。
您是否已经将 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);
试试这个代码(需要 System.Linq)和 .NET4
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>();
}
即使在 Revit 2017 中,它们都可以工作。(在第二个解决方案中,else if 行需要 a==
而不是=
.)
在第二个解决方案中,我使用它来确保我有正确的姓氏和家族符号名称:
foreach (FamilySymbol familySymbol in familyCollector)
{
if (familySymbol.Name == "Put your Family Name here" && familySymbol.Family.Name == "Put your Family Symbol Name here")
familySymbolToFind = familySymbol;
}