Как получить экстенты в чертежном виде в Revit - PullRequest
1 голос
/ 09 сентября 2011

Я хочу иметь возможность зеркально отразить все элементы в чертежном виде в соответствии со средней точкой экстентов значения х чертежа. xMidpoint в приведенном ниже примере я пытаюсь получить.

У меня есть Revit 2012.

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

1 Ответ

1 голос
/ 12 сентября 2011

После просмотра 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;
...