2013-05-28 3 views
0

저는 Revit에서 프로그래밍 할 때 새로운 개념입니다. 나는 현재 문이나 창문 형태의 요소 목록을 그림에서 얻고 있습니다. 제가하고 싶은 것은 이것들을 오프닝으로 캐스팅하는 것입니다 그러나 오토 데스크로 캐스팅하려고하면 에러가납니다 .Revit.DB.Opening. 다음은
코드 :Revit 요소를 Revit.DB.Opening으로 캐스팅하는 방법

  // filter for current design option 
     var designOptionFilter = S2E.Revit.Tools.Library.Cache.DesignOptionFilter; 

     List<Element> elements = collector.WherePasses(designOptionFilter).ToElements().ToList();   

     var list = new List<Autodesk.Revit.DB.Opening>(); 

     foreach (var element in elements) { 

      var opening = (Opening)element; 
      if (opening.Host.Id == wallId) { 
       list.Add(opening); 
      } 
     } 

     return list; 

호스트의 ID가 I가 워킹하고 벽에 일치하는 경우는 내가 테스트입니다 볼 수 있듯이. 적어도 그것이 내가하고 싶은 것입니다. 내가 찾고있는 것은 요소를 Opening으로 캐스팅하는 것입니다.

감사합니다, 리치

답변

1

문이 FamilyInstance이고 Opening이 아니라고 가정 할 때, 나는 문 FamilyInstance를 개방형으로 캐스팅하는 방법을 확신하지 못합니다.

그러나 HostInstance에는 Host 매개 변수가 있으므로 벽 ID에 대해 확인하면 캐스팅이 필요하지 않습니다.

0

그것은 필터는 당신이 가지고있는 캐스트가 작동 여부를 선택하는 내용에 따라 달라집니다. 정확한 오류에 대한 세부 정보를 제공하지 않으므로 정확성이 떨어지는 것은 어렵습니다.

또한 한 곳에서 (Opening)을 캐스트로 사용했지만 목록을 만들 때 전체 형식 이름 "Autodesk.Revit.DB.Opening"을 사용합니다. 당신이 정말로 그럴 필요가 있다면 아마도 오프닝은 당신이 생각했던 오프닝이 아닙니다.

element.Cast()를 사용하여 캐스트를 수행 할 수도 있습니다.

은 마찬가지로 당신은 필터에 의해 반환되는 모든 요소는 오직 다음 같은 일을 달성하기 위해

collector.WherePasses(designOptionFilter).Cast<Opening>() 

를 사용할 수있는 유형 열기 될려고하고 있다는 것을 알고있는 경우.

+0

답장을 보내 주셔서 감사 드리며, 실제로 "오프닝"이 내가 찾고있는 오프닝이라는 것을 확인했습니다. 그리고 저는 여러분이 제공 한 예제와 같은 오프닝으로 캐스팅하려고했지만 동일한 오류가 발생했습니다. 또한 내가 얻는 오류는 "패밀리 인스턴스를 유형 열기의 객체로 캐스팅 할 수 없습니다."입니다. –

관련 문제