2011-09-08 4 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をしばらく閲覧した後、私は中間点を見つけるために以下のコードを思いついた。各要素のバウンディングエクステントを使用して、図面内の最大値と最小値を検索します。

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; 
関連する問題