0

我正在尝试使用 放置细节组件PromptForFamilyInstancePlacement,但无法正确定义FamilySymbol.

我发现的示例显示了如何使用 a FilteredElementCollector,但我正在尝试FamilySymbol按名称定义。

4

3 回答 3

0

您是否已经将 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);
于 2012-01-27T20:39:26.803 回答
0

试试这个代码(需要 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>();
    }
于 2012-09-26T04:07:37.390 回答
-1

即使在 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;
}
于 2017-11-30T15:44:51.280 回答