Revit API размещает подробный компонент, используя PromptForFamilyInstancePlacement - PullRequest
0 голосов
/ 02 августа 2011

Я пытаюсь разместить компонент детализации, используя PromptForFamilyInstancePlacement, но у меня возникают проблемы с определением FamilySymbol.

Примеры, которые я нашел, показывают, как это сделать, используя FilteredElementCollector, но я пытаюсь определить FamilySymbol по имени.

Ответы [ 3 ]

0 голосов
/ 26 сентября 2012

Попробуйте этот код (требуется 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>();
    }
0 голосов
/ 30 ноября 2017

Они оба работают, даже в Revit 2017. (Во втором решении, если в строке else требуется == вместо =.)

Во втором решении я использовал это дляубедитесь, что у меня была правильная фамилия и фамилия:

foreach (FamilySymbol familySymbol in familyCollector)
{
  if (familySymbol.Name == "Put your Family Name here" && familySymbol.Family.Name == "Put your Family Symbol Name here")
                        familySymbolToFind = familySymbol;
}
0 голосов
/ 28 января 2012

Вы уже загрузили семейный документ в проект, в котором вы работаете?Если нет, то вы можете загрузить семью в проект, используя 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);
...