2011-09-08 2 views
1

도면의 x 값 범위 중점에 따라 제도 뷰의 모든 요소를 ​​대칭 복사 할 수 있어야합니다. 아래 예에서 xMidpoint이 내가 얻으려고하는 것입니다.Revit의 제도 뷰에서 범위를 얻는 방법

저는 Revit 2012를 사용할 수 있습니다.

int xMidpoint; 
Plane plane = new Plane(new XYZ(1,0,0), new XYZ(xMidpoint,0,0)); 
ElementTransformUtils.MirrorElements(document, idsOfElementsToMirror, plane); 

답변

1

잠시 동안 Revit API를 탐색 한 후 중간 점을 찾기 위해 아래 코드를 작성했습니다. 도면의 최대 및 최소 x 값을 찾기 위해 각 요소의 경계 범위를 사용합니다.

FilteredElementCollector allElementsInView = new FilteredElementCollector(document, document.ActiveView.Id); 
IList elementsInView = (IList)allElementsInView.ToElements(); 

List<ElementId> idsOfElementsToMirror = new List<ElementId>(); 

double drawingMaxX = double.MinValue; 
double drawingMinX = double.MaxValue; 

foreach (Element element in elementsInView) 
{ 
    if (element.Category == null) 
    continue; 

    if (ElementTransformUtils.CanMirrorElement(document, element.Id) == false) 
    continue; 

    BoundingBoxXYZ elementBoundingBox = element.get_BoundingBox(document.ActiveView.Id); 

    if(elementBoundingBox == null) 
    continue; 

    if (elementBoundingBox.Max.X > drawingMaxX) 
    drawingMaxX = elementBoundingBox.Max.X; 

    if (elementBoundingBox.Min.X < drawingMinX) 
    drawingMinX = elementBoundingBox.Min.X; 

    idsOfElementsToMirror.Add(element.Id); 
} 

double xMidpoint = ((drawingMaxX - drawingMinX)/2.0) + drawingMinX;