Comment obtenir une vue en degrés dans la rédaction Revit
Question
Je veux être en mesure de refléter tous les éléments en vue de dessin selon le milieu de l'étendue de la valeur x du dessin. xMidpoint
dans l'exemple ci-dessous est ce que je suis en train de faire.
Je Revit 2012 disponible.
int xMidpoint;
Plane plane = new Plane(new XYZ(1,0,0), new XYZ(xMidpoint,0,0));
ElementTransformUtils.MirrorElements(document, idsOfElementsToMirror, plane);
La solution
Après avoir parcouru l'API Revit pendant un certain temps je suis venu avec le code ci-dessous pour trouver le milieu. Il utilise les extensions de chaque élément de délimitation pour trouver les valeurs x maximum et minimum dans le dessin.
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;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow