2017-05-11 1 views
-1

몇 년 전, "Copy To Level"또는 "Current View로 복사"에 사용하기 위해 요소 목록을 현재 선택으로 변환하는 방법을 모색하고있었습니다. .했다 REVIT의 필터에 내장이전 해결책 더 이상 작동하지 않음

솔루션과 같이 "구조 프레임 (대들보)"여러 가족 이름/유형, 단지를 사용자가 선택할 수있는 '스마트 필터'에서 - 프로그램 :

SelElementSet SelSet = uiDoc.Selection.Elements; 
SelSet.Add(Element1); 
SelSet.Remove(Element2); 

문제가 더 이상 Revit 2016 (+)에서 작동하지 않는 것 같습니다. 이제이 줄을 사용하여 코드를 실행하면 프로그램 종료 오류가 발생합니다 :

"Revit에서 System.MissingMethodException이 발생했습니다 : Autodesk.Revit.UI.Selection.SelElementSet Autodesk.Revit.UI.Selection.Selection.get_Elements();" ("SelElementSet SelSet = uiDoc.Selection.Elements "호출 .get_Elements)

내 프로그램의 시작 (수 오전)

Selection All_Guys = uiDoc.Selection; 

이에서 I 등은 IList 또는 목록에 모든 것을 변환 할 수 있습니다를 사용하여 현재 선택을 얻기 위해, 사용에 따라 트리 노드를 사용하여 특정 카테고리/패밀리 이름/패밀리 유형을 제거합니다. 하지만이 모든 다시 현재 선택 (잘하면 필터링과 일치하지 않는 요소에 대해 SelSet.Remove (Element2) 사용) 및 모든 SelElementSet 사용할 때까지 변환 할 수 있어야합니다, 프로그램 종료 오류 위의 얻을 .

2014 년 9 월에 나는 비슷한 질문을했습니다. 이 사이트에는 강력한 중재자가있어 이미 답변 한 질문을 표시하는 것이 가려워하는 것으로 알고 있습니다.이 질문은 "이전 답변은 더 이상 작동하지 않습니다"라는 범주 아래 있습니다. 질문을 더주의 깊게 읽고 힘이 있기 때문에 질문을 던지지 마십시오.

답변

1

SelElementSet이 Revit 2015 이상에서 제거되어 다음 (유형) 구조로 대체 되었기 때문에 이것이 발견되었습니다. 내 예제에서는 선택을 취소하고, 지정된 요소를 추가 할 수 있지만 나는 또한 가질 수있다 .... elementids.Remove (One_Element를) 요소의 또 다른 컬렉션 :

if (SmartCopyLoad.ResetSelection) 
{ 
    ICollection<ElementId> elementIds = uiDoc.Selection.GetElementIds(); 
    elementIds.Clear(); 
    foreach (Element One_Element in SmartCopy.MatchingElements) { elementIds.Add(One_Element.Id); } 
    uiDoc.Selection.SetElementIds(elementIds); 

    return Autodesk.Revit.UI.Result.Succeeded; 
} 

이의 결과가 지정된 요소로 컬렉션 (허용하는 데 사용되는 SelElementSet).

문제의 주요 부분은 이전 참조를 사용하고 있다는 점에 유의하십시오. 내 세월이 지난 코드는 여전히 SelElementSet을 허용하지만 RevitAPI를 2014에서 참조했지만 Revit2016에서는 작동하지 않습니다. 다른 사람들에게 경고하는 단어 : 구형 소프트웨어에서 실행되는 프로그램에 필요한 경우에만 이전 참조를 사용하십시오. 우리는 2015 년 이후 만 사용하고 있으므로 새로운 참조를 사용할 수 있습니다.

관련 문제