2016-10-07 3 views
0

내가 선택한 벽을 통해 전달하는 참조 평면의 개수와 그 이름을 찾을 필요가있다. 특정 문서에 대한 모든 참조 평면을 가져올 수 있지만 특정 벽에 대해이 작업을 수행하는 방법은 무엇입니까?선택한 벽을 통과하는 참조 평면 수를 찾는 방법.

당신의 도움을 주시면 감사하겠습니다! 감사합니다. .

답변

0

필요에 따라 ElementIntersectFilter이 작동하지 않는 경우 벽 및 참조 평면의 형상을 추출하여 직접 작업해야합니다.

사용할 수 있습니다 벽 고체와 참조 평면을 교차하지만, 내가 제대로 질문을 이해한다면, 작동 간단한 대답이있다. 참조 평면 객체를 무한 기하학 평면으로 처리하는 대신 참조 평면의 녹색 선이 교차하는 벽만 원한다고 가정합니다. 아래 스크린 샷에서 체크 표시를 찾으려고하지만 빨간색 X는 표시하지 않는 것으로 가정합니다. revit screenshot 저는 또한 당신이 이것을 계획 연습으로보고 있으며, 참조 평면의 수직 범위를 구체적으로 설정하지 않았다고 가정합니다 (이것은 대부분의 사람들이 Revit을 사용하는 방법을 토대로 한 것입니다). 다음 함수는 단일 벽과 ref 평면 목록을 입력으로 받아 들였습니다 (이미 모든 ref 평면의 컬렉션을 가지고 있다고 말했을 때), 벽과 교차하는 ref 평면 목록을 반환합니다.

public static List<ReferencePlane> getRefPlanesIntersectingWall(Wall wal, List<ReferencePlane> refPlanesIn) 
    { 
     //simplify this to a 2D problem, using the location curve of the wall 

     List<ReferencePlane> refPlanesOut = new List<ReferencePlane>(); 
     LocationCurve wallLocation = wal.Location as LocationCurve; 
     Curve wallCurve = wallLocation.Curve; 
     Double wallZ = wallLocation.Curve.GetEndPoint(0).Z; 

     foreach (ReferencePlane rp in refPlanesIn) 
     { 
      XYZ startPt = new XYZ(rp.BubbleEnd.X, rp.BubbleEnd.Y, wallZ); 
      XYZ endPt = new XYZ(rp.FreeEnd.X, rp.FreeEnd.Y, wallZ); 
      Line rpLine = Line.CreateBound(startPt, endPt); 
      SetComparisonResult test = wallCurve.Intersect(rpLine); 

      if (test == SetComparisonResult.Overlap || 
       test == SetComparisonResult.Subset || 
       test == SetComparisonResult.Superset || 
       test == SetComparisonResult.Equal ) 
      { 
       refPlanesOut.Add(rp); 
      } 
     } 
     return refPlanesOut; 
    } 
+0

고맙습니다 @ 0w3n. 그것은 완벽하게 잘 작동했습니다. – Robert

1

내가 시도하여 시작할 것 내장 ElementIntersectFilter. 문서는 좋은 예 "referencePlane"와 "FamilyInstance"를 대체하고 그것을 할 수 있습니다. 그래도 문제가 해결되지 않으면

http://www.revitapidocs.com/2017/19276b94-fa39-64bb-bfb8-c16967c83485.htm

, 당신은 벽의 고체를 추출하고 참조 평면과 교차해야합니다.

+0

나를 위해 위의 din't 작동합니다. 벽의 단단한 부분을 추출하려고 시도하고 참조 평면과 교차하려고했습니다. 여기에 행운은 없습니다. – Robert

관련 문제