Как получить точное положение / координаты разъемов PowerPoint, используя Open XML? - PullRequest
1 голос
/ 09 января 2020

Как узнать точное положение разъемов в PowerPoint? Я хотел бы понять, пересекаются ли мои разъемы (любого типа: изогнутые, коленные, прямые). У меня есть все формы и их положения, но я не знаю, как проверить, когда указанный соединитель пересекает (перекрывает) форму или другой соединитель.

Вот мой пример. У меня такая ситуация (пример слайда создан в Aspose, но нет разницы в конце, я сталкиваюсь с той же проблемой)

enter image description here

Как вы можете видите - красный изогнутый соединитель перекрывает «Пересеченную фигуру», и я пытаюсь определить такую ​​ситуацию, чтобы немного ее отрегулировать, например, чтобы переместить пересеченную форму влево или переместить фигуру 2 вправо.

В Aspose - у соединителя есть только координаты рамки Соединителя, но я понятия не имею, где нарисована фактическая красная линия. Я получил официальное подтверждение от Aspose, что они не предоставляют такую ​​функциональность и не планируют. Вот почему я проверял Open XML SDK, поскольку он является нативным и должен обеспечивать максимальный доступ всем участникам презентации. На данный момент проблема в том, что документация для SDK довольно скудная, вот как я заканчиваю вопрос здесь.

Вот пример кода, который я пытаюсь завершить:

using (PresentationDocument ppt = PresentationDocument.Open(docName, true))
            {
                PresentationPart part = ppt.PresentationPart;
                OpenXmlElementList slideIds = part.Presentation.SlideIdList.ChildElements;
                string relId = (slideIds[0] as SlideId).RelationshipId;

                SlidePart slide = (SlidePart)part.GetPartById(relId);

                if (slide != null)
                {
                    // Get the shape tree that contains the shape to change.
                    ShapeTree tree = slide.Slide.CommonSlideData.ShapeTree;

                    var connector = tree.GetFirstChild<ConnectionShape>();
                    var intersectedShape = tree.ChildElements.First(x => x.InnerText == "intersected shape") as Shape;

                    if (intersectedShape != null && connector != null)
                    {
                        //here I'd like to check if they are overlapping and then e.g. to shift intersectedShape a bit to the left
                    }
                }
            }

В сам разъем XML Я вижу только информацию об идентификаторах (фигурах, к которым он подключен) и Idx (который является стороной / конечной точкой фигуры, к которой он подключен).

Возможно ли это вообще что я пытаюсь сделать?

...