2014-05-24 4 views
1

그래서 Revit API를 사용하여보기에서 입력 문자열 목록을 분리하려고합니다. 지금까지이 작업을 수행했지만 뷰에서 모든 요소를 ​​가져 와서 입력 ID에서 생성 된 요소를 제거하는 집합을 만들려고 노력하고 있습니다. 나는 분리하고 싶은 것들을 제외한 모든 요소들로 끝나기 위해 이것을하고있다.Revit API 컬렉션을 파이썬에서 작성하십시오.

dataEnteringNode = IN0 
view = IN0 
str_ids = IN1 
doc = __doc__ 
collector = FilteredElementCollector(doc, view.Id) 

for i in str_ids: 
    int_id = int(i) 
    id = ElementId(int_id) 
    element = doc.GetElement(id) 
    element_set = ElementSet() 
    element_set.Insert(element) 

elements_to_hide = collector.WhereElementIsNotElementType().Excluding(element_set).ToElements() 

#Assign your output to the OUT variable 
OUT = elements_to_hide 

이 오류를 해결하는 데 큰 도움을 주시면 감사하겠습니다. 나는 그 "예상 된 ICollection [ElementId], set"을 얻고 있습니다. 내가 문제를 추측하고 제외 필터에 내가 제외 할 수있는 ID의 컬렉션을 만들 필요가 있지만 내가 어떻게 몰라. 미리 감사드립니다. 미리 도움을 주셔서 감사합니다!

+0

라인이 오류의 원인? 그리고'element_set'은 내부가 아닌 루프 밖에서 선언되어야한다고 생각합니다. –

답변

3

코드가 작동하지 않는 이유는 Revit API의 ElementSetICollection<T> 인터페이스 (단지 IEnumerable<T>)를 구현하지 않기 때문입니다. 따라서 코드를 작동 시키려면 세트에서 ICollection<T> 오브젝트를 만들어야합니다. 이 같은

시도 뭔가 :

# ... 
from System.Collections.Generic import List 
element_collection = List[ElementId](element_set) 
elements_to_hide = collector.WhereElementIsNotElementType().Excluding(element_collection).ToElements()