En PowerPoint 2007, ¿cómo puedo posicionar la cola de una llamada mediante programación?
-
11-09-2019 - |
Pregunta
Estoy mirando el DrawingML de un archivo de PowerPoint 2007 y esto es lo que tiene para las coordenadas y la geometría del objeto 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>
Lo que tengo problemas es la fórmula para decirle que coloque la cola en una coordenada particular en la diapositiva.Intenté esto para calcularlo, pero no funciona correctamente.
//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
Pero el valor geométrico no es la distancia entre los dos puntos.
¿Alguien sabe cuál es la fórmula para calcular esto?
Solución
Creo que he descubierto la fórmula:
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
Otros consejos
Esto puede ser una buena manera rápida de hacer esto si los ajustes están disponibles - Yo no lo he probado. Sin embargo, si entiendo lo que estás pidiendo, es cómo obtener la X / Y del punto de la cola del wedgeRectCallout en un lugar determinado en la pantalla, incluyendo el caso en el que se ajusta el tamaño / ubicación de la cola. Asumo que tiene un tamaño predefinido del wedgeRectCallout.
El valor que desea necesita ser calculada a partir de presetShapeDefinitions.xml (encontrarla con las descargas de Ecma). El valor que se desea es aquí en el elemento wedgeRectCallout:
<lnTo>
<pt x="xb" y="yb" />
</lnTo>
Entonces, ¿Cómo se calcula x=xb
y y=yb
? Ir a los documentos de Ecma y ver cómo leer en fórmulas
DrawinML - Marco Material de referencia -> Dibujo ML - Principal -> Definiciones forma y Atributos -> gd (forma de Guía) y calcular las guías de forma en gdLst
(que toma el valor de defecto o ajustes modificados). En este caso, tendrá que calcular todos / la mayoría de guías para asegurarse de obtener los valores para xb y yb.
Quiero saber si de que tenga algún problema o tiene más preguntas sobre este tema.
en el archivo presetShapeDefinitions.xml, que define los parámetros y fórmulas necesarios para dibujar las formas. Si observa la forma "wedgeRectCallout", verá varias etiquetas como: <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" />
y <pathLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main">
.
Las etiquetas importantes necesarias para entender cómo dibujar la forma son: <gdLst>
y <pathLst>
.<gdLst>
Contiene las fórmulas de la forma, y <pathLst>
dice cómo dibujar la forma.
Escribí un pequeño programa que traduce a javascript todas las fórmulas en el archivo presetShapeDefinitions.xml.
Para ir a la página web del programa, haga clic aquí.
Este programa me ayudó a construir el PPTXjs Complemento que convierte archivos PPTX a HTML.
Espero que esto ayude.