2009-12-01 5 views
2

Je regarde la DrawingML d'un fichier PowerPoint 2007 et voici ce qu'il a pour les coordonnées de l'objet Callout et la géométrie:Dans PowerPoint 2007, comment puis-je positionner une queue de légende par programmation?

<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> 

Ce que je vais avoir des problèmes avec la formule pour dire à lieu la queue à une coordonnée particulière sur la diapositive. J'ai essayé ceci pour le calculer, mais cela ne fonctionne pas correctement.

//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 

Mais, la valeur géométrique n'est pas la distance entre les deux points.

Quelqu'un sait quelle est la formule pour calculer cela?

Répondre

1

Je pense avoir compris la formule:

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 
1

Cela peut être un bon moyen rapide de le faire si les ajustements sont disponibles - je ne l'ai pas testé. Cependant, si je comprends ce que vous demandez, c'est comment obtenir le point de queue de wedgeRectCallout à un endroit particulier à l'écran, y compris le cas où la taille/l'emplacement de la queue est ajusté. Je suppose que vous avez une taille prédéfinie du wedgeRectCallout.

La valeur que vous voulez doit être calculée à partir de presetShapeDefinitions.xml (trouvez-la avec les téléchargements Ecma). La valeur que vous voulez est ici dans l'élément wedgeRectCallout:

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

Alors comment calculer x=xb et y=yb? Aller dans les docs Ecma et voir comment lire les formules en DrawingML - Framework Référence Material -> Dessin ML - Main -> Shape Définitions et attributs -> gd (Shape Guide) et calculer les guides de forme en gdLst (qui prend la valeur des ajustements par défaut ou modifiés). Dans ce cas, vous devrez calculer tous/la plupart des guides pour vous assurer d'obtenir les valeurs pour xb et yb. Faites-moi savoir si vous rencontrez des problèmes ou si vous avez d'autres questions à ce sujet.

0

dans le fichier presetShapeDefinitions.xml, qui définit les parametrs et les formules nécessaires pour dessiner les formes, si youe regard sur la forme « wedgeRectCallout » vous verrez nombre de balises comme: <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" /> et <pathLst xmlns="http://schemas.openxmlformats.org/drawingml/2006/main"> .
Les balises importantes nécessaires pour comprendre comment dessiner la forme sont: <gdLst> et <pathLst>. <gdLst> Contient les formules de la forme et <pathLst> indique comment dessiner la forme.
J'ai écrit un petit programme qui traduit en javascript toutes les formules dans le fichier presetShapeDefinitions.xml.
Sur la page Web du programme, cliquez sur here.
Ce programme m'a aidé à construire le plugin PPTXjs qui convertit les fichiers PPTX en HTML.
Espérons que cela aide.

+0

Il n'y a pas de réponse ici, juste des liens vers des réponses ailleurs avec du texte environnant. Ceci n'est pas considéré comme une réponse sur Stack Overflow. Si vous publiez un lien vers des réponses ailleurs, vous devez copier les parties pertinentes ou résumer le contenu de ces liens dans votre réponse. –

+0

Ceci ne fournit pas de réponse à la question.Une fois que vous avez suffisamment [réputation] (https://stackoverflow.com/help/whats-reputation) vous pourrez [commenter n'importe quel article] (https://stackoverflow.com/help/privileges/comment); Au lieu de cela, [fournissez des réponses qui ne nécessitent pas de précisions de la part du demandeur] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- je-fais-à la place). - [De l'examen] (/ review/low-quality-posts/17748550) – TheIncorrigible1

Questions connexes