Tracer une droite

Le
Papyjac
Bonjour,

1. Pour tracer une droite, j'utilise la méthode Addline

Syntaxe de l'aide
expression.AddLine(XDébut, YDébut, XFin, YFin)

2. Ensuite j'explore les propriérés de mon résultat et j'utilise les
propriétés de SHAPE : Top, Left, Height, Width
3. Je calcule Bottom = Top+Height ; right = left+Width

4. Je compare mes données de traçage initial et les données de l'exploration
: il y a des différences

5. Si je retrace ma droite avec les données de l'exploration je n'obtiens
pas le même résultat visuel

Le problème est le suivant :
On ne sait pas si la droite est orientée / ou orientée
Par exemple, je peux tracer une droite avec X1>X2 => cas d'une droite
orientée /
Mais par l'exploration Left = X2 < Right = X1 => du coup ma droite sera
orientée si je la retrace

A ce stade je n'utilise pas les rotations

Comment peut-on connaitre la position de la droite dans la forme ?

Papyjac
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Circé
Le #19965301
Bonjour,

J'ai du mal à bien saisir ton problème...

Je parle d'un cas concret :

AddLine(100, 100, 500, 500)
Cela signifie que la droite part à égale distance du haut et du bord
gauche et descend de 400 en bas et à droite
En effet 500 étant > 100 : la droite s'éloigne du bord gauche et
500 > 100 => la droite s'éloigne du haut
donc elle descend

AddLine(100, 100, 50, 50)
Cela signifie toujours que la droite part à égale distance du haut et
du bord, mais cette fois monte en haut et à gauche.

Si maintenant on prend :
AddLine(100, 100, 500, 50)
Dans ce cas la droite va monter vers la droite car
500 > 100 => la droite s'éloigne du bord gauche et donc va vers la
droite
50 < 100 => la droite se rapproche du haut et donc monte

Et inversement :
AddLine(100, 100, 50, 500)
la droite va descendre vers la gauche

On voit bien dans mes 4 exemples : c'est toujours le même point de
départ et on peut obtenir 4 orientations différentes.

Ce qui est bien ennuyeux, c'est que manuellement, on met des
centimètres, et par macro on doit mettre des points. A priori, il me
semble qu'il n'y a pas de conversion possible comme dans Word par
exemple avec la méthode PointsToCentimeters.

Circé
http://faqword.com
http://rdoff.canalblog.com/ le blog des Recalés d'Office!


Papyjac a pensé très fort :
Bonjour,

1. Pour tracer une droite, j'utilise la méthode Addline

Syntaxe de l'aide
expression.AddLine(XDébut, YDébut, XFin, YFin)

2. Ensuite j'explore les propriérés de mon résultat et j'utilise les
propriétés de SHAPE : Top, Left, Height, Width
3. Je calcule Bottom = Top+Height ; right = left+Width

4. Je compare mes données de traçage initial et les données de l'exploration
: il y a des différences

5. Si je retrace ma droite avec les données de l'exploration je n'obtiens pas
le même résultat visuel

Le problème est le suivant :
On ne sait pas si la droite est orientée / ou orientée
Par exemple, je peux tracer une droite avec X1>X2 => cas d'une droite
orientée /
Mais par l'exploration Left = X2 < Right = X1 => du coup ma droite sera
orientée si je la retrace

A ce stade je n'utilise pas les rotations

Comment peut-on connaitre la position de la droite dans la forme ?

Papyjac


Geo
Le #19966161
Bonjour


Ce qui est bien ennuyeux, c'est que manuellement, on met des centimètres,



J'ai l'impression que le souci de Jacques va plus loin.
Quand on dessine une droite : d'accord il n'y a pas de problème, on
sait ce qu'on fait.
Mais si on analyse le contenu d'une diapo, on y retrouve des shapes.
Certes on sait d'après le type que cette forme est une droite, mais les
coordonnées sont celles d'un rectangle (la position d'un coin et la
longueur et la largeur).
La droite va en diagonale d'un coin à un autre, mais quelle diagonale ?
Et si la droite se termine par une flèche, où se situe la flèche,
auquel des 4 coins ?
Je pensais qu'on pourrait s'appuyer sur les poignées (adjustments) pour
cela, mais la forme à 0 Ajustements.


[Réponse faite sur le forum public PowerPoint :
news://msnews. microsoft.com/microsoft.public.fr.PowerPoint ]



--
A+
Circé
Le #19966851
Bonsoir Geo,

Aaaah oui ! j'ai compris maintenant !! :D Quelquefois il me faut du
temps ! ;)

Effectivement une ligne en diagonale est assimilée à la diagonale d'un
rectangle et les mesures données sont toujours celles qui font
référence à l'angle supérieur gauche, même si la diagonale est /.

A priori Ppt se fiche de la manière dont a été tracée la ligne, le
point de départ sera toujours considéré comme étant l'angle supérieur
gauche.

Donc pour trouver la correspondance d'une ligne il suffit de faire
des additions (hauteur puis largeur), mais pour une ligne /, je
comprends que ce soit plus... délicat ! En dehors d'une solution de
tracé avec un flip (vertical), je n'ai pas d'autres idées...

Circé
http://faqword.fr


Il se trouve que Geo a formulé :
Bonjour


Ce qui est bien ennuyeux, c'est que manuellement, on met des centimètres,



J'ai l'impression que le souci de Jacques va plus loin.
Quand on dessine une droite : d'accord il n'y a pas de problème, on sait ce
qu'on fait.
Mais si on analyse le contenu d'une diapo, on y retrouve des shapes. Certes
on sait d'après le type que cette forme est une droite, mais les coordonnées
sont celles d'un rectangle (la position d'un coin et la longueur et la
largeur).
La droite va en diagonale d'un coin à un autre, mais quelle diagonale ? Et si
la droite se termine par une flèche, où se situe la flèche, auquel des 4
coins ?
Je pensais qu'on pourrait s'appuyer sur les poignées (adjustments) pour cela,
mais la forme à 0 Ajustements.


[Réponse faite sur le forum public PowerPoint :
news://msnews. microsoft.com/microsoft.public.fr.PowerPoint ]




Papyjac
Le #19967071
Bonjour Circé et Géo,

Oui le flip va bien inverser l'orientation, mais je ne sais pas quand je
dois l'appliquer : de fois oui, des fois non

Oui, à vous deux vous avez bien compris mon problème... un peu bête : car
j'essai de retracer automatiquement un dessin que j'ai fait manuellemenent
=> Et j'ai bien ce problème pour les lignes

Je suis sur une autre piste ou je tracerai toujours la droite à
l'horizontale et puis j'appliquerai une rotation : Il faut que je calcule
préalable la longueur de cette droite (formule tangente + pytagore). J'y
arrive
Ensuite quand j'explore mes objets, il faut effectuer une rotation inverse,
avant de prendre les propriétés Top, Left, Height, Width
Après quand je retracerai la droite l'appliquerai la rotation après le
tracer

Bon courage à moi... mais cela va me faire progresser sur la gestion des
rotations

Papyjac

PS : Papyjac se lance dans le cubisme



"Circé" news:%
Bonsoir Geo,

Aaaah oui ! j'ai compris maintenant !! :D Quelquefois il me faut du temps
! ;)

Effectivement une ligne en diagonale est assimilée à la diagonale d'un
rectangle et les mesures données sont toujours celles qui font référence à
l'angle supérieur gauche, même si la diagonale est /.

A priori Ppt se fiche de la manière dont a été tracée la ligne, le point
de départ sera toujours considéré comme étant l'angle supérieur gauche.

Donc pour trouver la correspondance d'une ligne il suffit de faire des
additions (hauteur puis largeur), mais pour une ligne /, je comprends que
ce soit plus... délicat ! En dehors d'une solution de tracé avec un flip
(vertical), je n'ai pas d'autres idées...

Circé
http://faqword.fr


Il se trouve que Geo a formulé :
Bonjour


Ce qui est bien ennuyeux, c'est que manuellement, on met des
centimètres,



J'ai l'impression que le souci de Jacques va plus loin.
Quand on dessine une droite : d'accord il n'y a pas de problème, on sait
ce qu'on fait.
Mais si on analyse le contenu d'une diapo, on y retrouve des shapes.
Certes on sait d'après le type que cette forme est une droite, mais les
coordonnées sont celles d'un rectangle (la position d'un coin et la
longueur et la largeur).
La droite va en diagonale d'un coin à un autre, mais quelle diagonale ?
Et si la droite se termine par une flèche, où se situe la flèche, auquel
des 4 coins ?
Je pensais qu'on pourrait s'appuyer sur les poignées (adjustments) pour
cela, mais la forme à 0 Ajustements.


[Réponse faite sur le forum public PowerPoint :
news://msnews. microsoft.com/microsoft.public.fr.PowerPoint ]









Geo
Le #19969531
Bonjour

Oui, à vous deux vous avez bien compris mon problème... un peu bête : car j'essai de
retracer automatiquement un dessin que j'ai fait manuellemenent => Et j'ai bien ce
problème pour les lignes



Je ne trouve pas que ce soit bête du tout, et la réponse est dans vos
deux derniers messages.
Voici une macro qui trace deux lignes sur la première diapo qui doit
être vide, et fait un flip sur l'une d'elle.
La propriété HorizontalFlip donne cette indication.
En combinant HorizontalFlip et VerticalFlip on détermine sur quelle
diagonale est la droite et son sens.
Foin de cubisme, il va falloir travailler la combinatoire.
Bon courage

Option Explicit
Sub testflip()
Dim Forme1 As Shape
Dim Forme2 As Shape
Dim Diapo As Slide
Dim MaLigne As LineFormat
Set Diapo = ActivePresentation.Slides(1)
Set MaLigne = Diapo.Shapes.AddLine(BeginX:, BeginY:, _
EndX:%0, EndY:%0).Line
With MaLigne
.ForeColor.RGB = RGB(255, 0, 0)
.BeginArrowheadLength = msoArrowheadShort
.BeginArrowheadStyle = msoArrowheadOval
.BeginArrowheadWidth = msoArrowheadNarrow
.EndArrowheadLength = msoArrowheadLong
.EndArrowheadStyle = msoArrowheadTriangle
.EndArrowheadWidth = msoArrowheadWide
End With
Set MaLigne = Diapo.Shapes.AddLine(BeginX:, BeginY:, _
EndX:%0, EndY:%0).Line
With MaLigne
.ForeColor.RGB = RGB(0, 50, 200)
.BeginArrowheadLength = msoArrowheadShort
.BeginArrowheadStyle = msoArrowheadOval
.BeginArrowheadWidth = msoArrowheadNarrow
.EndArrowheadLength = msoArrowheadLong
.EndArrowheadStyle = msoArrowheadTriangle
.EndArrowheadWidth = msoArrowheadWide
End With
Set Forme1 = Diapo.Shapes(1)
Forme1.Flip msoFlipHorizontal
Set Forme2 = Diapo.Shapes(2)
Debug.Print Forme1.HorizontalFlip, Forme2.HorizontalFlip

End Sub

--
A+
Papyjac
Le #19971531
Bonjour Geo

A voilà une piste qu'elle est bonne !
Effectivement il me faudra du courage

Il me reste à statuer sur l'usage ou non des rotations, piste sur laquelle
j'étais. Je crois raisonable de ne pas mélanger les 2 en même temps : flip
et rotation

Je flippe en rotant à cette idée

Merci à toi

Papyjac



"Geo" news:
Bonjour

Oui, à vous deux vous avez bien compris mon problème... un peu bête : car
j'essai de retracer automatiquement un dessin que j'ai fait
manuellemenent => Et j'ai bien ce problème pour les lignes



Je ne trouve pas que ce soit bête du tout, et la réponse est dans vos deux
derniers messages.
Voici une macro qui trace deux lignes sur la première diapo qui doit être
vide, et fait un flip sur l'une d'elle.
La propriété HorizontalFlip donne cette indication.
En combinant HorizontalFlip et VerticalFlip on détermine sur quelle
diagonale est la droite et son sens.
Foin de cubisme, il va falloir travailler la combinatoire.
Bon courage

Option Explicit
Sub testflip()
Dim Forme1 As Shape
Dim Forme2 As Shape
Dim Diapo As Slide
Dim MaLigne As LineFormat
Set Diapo = ActivePresentation.Slides(1)
Set MaLigne = Diapo.Shapes.AddLine(BeginX:, BeginY:, _
EndX:%0, EndY:%0).Line
With MaLigne
.ForeColor.RGB = RGB(255, 0, 0)
.BeginArrowheadLength = msoArrowheadShort
.BeginArrowheadStyle = msoArrowheadOval
.BeginArrowheadWidth = msoArrowheadNarrow
.EndArrowheadLength = msoArrowheadLong
.EndArrowheadStyle = msoArrowheadTriangle
.EndArrowheadWidth = msoArrowheadWide
End With
Set MaLigne = Diapo.Shapes.AddLine(BeginX:, BeginY:, _
EndX:%0, EndY:%0).Line
With MaLigne
.ForeColor.RGB = RGB(0, 50, 200)
.BeginArrowheadLength = msoArrowheadShort
.BeginArrowheadStyle = msoArrowheadOval
.BeginArrowheadWidth = msoArrowheadNarrow
.EndArrowheadLength = msoArrowheadLong
.EndArrowheadStyle = msoArrowheadTriangle
.EndArrowheadWidth = msoArrowheadWide
End With
Set Forme1 = Diapo.Shapes(1)
Forme1.Flip msoFlipHorizontal
Set Forme2 = Diapo.Shapes(2)
Debug.Print Forme1.HorizontalFlip, Forme2.HorizontalFlip

End Sub

--
A+





Publicité
Poster une réponse
Anonyme