PromptForFamilyInstancePlacement
을 사용하여 상세 구성 요소를 배치하려고하지만 FamilySymbol
을 올바르게 정의하는 데 문제가 있습니다.Revit API PromptForFamilyInstancePlacement를 사용하여 상세 구성 요소를 배치하는 중
예제 나는 FilteredElementCollector
을 사용하는 방법을 보여 주지만, FamilySymbol
을 이름으로 정의하려고합니다.
PromptForFamilyInstancePlacement
을 사용하여 상세 구성 요소를 배치하려고하지만 FamilySymbol
을 올바르게 정의하는 데 문제가 있습니다.Revit API PromptForFamilyInstancePlacement를 사용하여 상세 구성 요소를 배치하는 중
예제 나는 FilteredElementCollector
을 사용하는 방법을 보여 주지만, FamilySymbol
을 이름으로 정의하려고합니다.
작업중인 프로젝트에 패밀리 문서를 이미로드 했습니까? 그렇지 않다면 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>();
}
그들은 (두 번째 해결 방법은 else if line이 =
대신 ==
이 필요합니다.)
두 번째 해결 방법에서는 필자가 올바른 가족 이름과 가족을 사용했는지 확인하기 위해이 방법을 사용했습니다. 기호 이름 :
foreach (FamilySymbol familySymbol in familyCollector)
{
if (familySymbol.Name == "Put your Family Name here" && familySymbol.Family.Name == "Put your Family Symbol Name here")
familySymbolToFind = familySymbol;
}