Как я могу программно позиционировать хвост выноски в PowerPoint 2007?

Я смотрю на 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

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

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


person Ryan Abbott    schedule 01.12.2009    source источник


Ответы (3)


Думаю, я вычислил формулу:

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
person Ryan Abbott    schedule 02.12.2009

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

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

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

Так как же вычислить x=xb и y=yb? Перейдите в документацию Ecma и посмотрите, как читать формулы в DrawingML - Framework Reference Material -> Drawing ML - Main -> Shape Definitions and Attributes -> gd (Shape Guide) и вычислите направляющие формы в gdLst (который принимает значение настроек по умолчанию или измененных настроек). В этом случае вам нужно будет рассчитать все / большинство направляющих, чтобы получить значения для xb и yb.

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

person Todd Main    schedule 02.12.2009

в файле 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> и _8 _._ 9_ Содержит формулы формы, а <pathLst> говорит, как рисовать форму.
Я написал небольшую программу, которая переводит в javascript все формулы в файле presetShapeDefinitions.xml.
Чтобы перейти на страницу веб-сайта программы, щелкните здесь. < br> Эта программа помогла мне создать плагин PPTXjs, который конвертирует файлы PPTX в HTML.
Надеюсь на это помогает.

person tady meshesha    schedule 26.10.2017
comment
Здесь нет ответа, только ссылки на ответы в другом месте с некоторым окружающим текстом. Это не считается ответом на переполнение стека. Если вы размещаете ссылку на ответы в другом месте, вам следует скопировать соответствующие части или обобщить содержимое этих ссылок в своем ответе. - person TT.; 26.10.2017