В PowerPoint 2007 как программно расположить хвост выноски? - PullRequest
2 голосов
/ 02 декабря 2009

Я смотрю на DrawingML файла PowerPoint 2007, и вот что он имеет для координат и геометрии объекта Callout:

<p:spPr>
    <a:xfrm>
        <a:off x="2819400" y="5181600"/> // X,Y Position of Callout Box
        <a:ext cx="609600" cy="457200"/> // Width,Height of Callout Box
    </a:xfrm>
    <a:prstGeom prst="wedgeRectCallout">
        <a:avLst>
            <a:gd name="adj1" fmla="val 257853"/> // X Position Of Tail
            <a:gd name="adj2" fmla="val -532360"/> // Y Position of Tail
        </a:avLst>
    </a:prstGeom>
    <a:solidFill>
        <a:schemeClr val="accent1">
            <a:alpha val="50000"/>
        </a:schemeClr>
    </a:solidFill>
</p:spPr>

У меня проблемы с формулой, указывающей на то, что хвост должен располагаться по определенной координате на слайде. Я пытался это вычислить, но он не работает правильно.

//This gives me the distance between the Coordinate and the Center of the Callout.
DistanceX = Coordinate.X - (Callout.X + Callout.X_Ext)/2
DistanceY = Coordinate.Y - (Callout.Y + Callout.Y_Ext)/2

Но геометрическое значение не является расстоянием между двумя точками.

Кто-нибудь знает, какова формула для расчета этого?

Ответы [ 3 ]

1 голос
/ 02 декабря 2009

Это может быть хорошим быстрым способом сделать это, если настройки доступны - я не проверял это. Тем не менее, если я понимаю, о чем вы спрашиваете, это как получить х / у хвостовой точки wedgeRectCallout в определенном месте на экране, включая случай, когда размер / местоположение хвоста корректируется. Я предполагаю, что у вас есть предопределенный размер wedgeRectCallout.

Требуемое значение должно быть рассчитано из presetShapeDefinitions.xml (найдите его при загрузке Ecma). Требуемое значение находится здесь в элементе wedgeRectCallout:

<lnTo>
<pt x="xb" y="yb" />
</lnTo>

Итак, как вы рассчитываете x=xb и y=yb? Перейдите к документации Ecma и узнайте, как читать формулы в DrawingML - Справочный материал по структуре -> Чертеж ML - Основной -> Определения и атрибуты фигуры -> gd (Руководство по фигурам) и вычисление направляющих фигур в gdLst (которое принимает значение по умолчанию или измененные корректировки) , В этом случае вам необходимо рассчитать все / большинство направляющих, чтобы убедиться, что вы получите значения для xb и yb.

Дайте мне знать, если у вас возникнут какие-либо проблемы или у вас есть дополнительные вопросы по этому вопросу.

1 голос
/ 02 декабря 2009

Мне кажется, я понял формулу:

DistanceX = Coordinate.X - (Callout.X + (Callout.X_Ext/2))
DistanceY = Coordinate.Y - (Callout.Y + (Callout.Y_Ext/2))

TailX = (DistanceX/Callout.X_Ext) * 100000
TailY = (DistanceY/Callout.Y_Ext) * 100000
0 голосов
/ 26 октября 2017

в файле presetShapeDefinitions.xml, который определяет параметры и формулы, необходимые для рисования фигур. Если вы посмотрите на форму "wedgeRectCallout", вы увидите количество тегов, таких как: <avLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main">, <gdLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main">, <ahLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main">, <cxnLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main">, <rect l="l" t="t" r="r" b="b" xmlns="http://schemas.openxmlformats.org/drawingml/2006/main" /> и <pathLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main">.
Важные теги, необходимые для понимания, как рисовать фигуру: <gdLst> и <pathLst>. <gdLst> Содержит формулы фигуры, а <pathLst> говорит, как рисовать фигуру.
Я написал небольшую программу, которая переводит в javascript все формулы в файле presetShapeDefinitions.xml.
На странице программы сайта нажмите здесь .
Эта программа помогла мне создать плагин PPTXjs , который конвертирует файлы PPTX в HTML.
Надеюсь, это поможет.

...