OVH Cloud OVH Cloud

Zoom sur objet

3 réponses
Avatar
garnote
Bonsoir tout le monde,

Voici deux macros permettant de faire des Zoom
sur une sélection d'un objet quelconque.
J'associe, par exemple, la touche de raccourci «G»
pour le Zoom avant et «R» pour le Zoom arrière.
Je maintiens «Ctrl» et «Majuscule» enfoncés et je tape
comme un fou sur «G» ou sur «R».
Il me semble que le centre de l'objet devrait rester fixe,
mais voilà, j'observe à la longue, de petits déplacements
du centre. Ce n'est pas grave, mais j'aimerais bien comprendre
la source de ces petites imprécisions de calcul ?

;-)

Serge


Sub ZoomAvant()
'Associez une touche de raccourci
'Sélectionnez un objet quelconque
Dim H As Double, W As Double
Dim L As Double, T As Double
Set s = Selection
FZ = 1.1
H = s.Height
W = s.Width
L = s.Left
T = s.Top
With s
.Height = FZ * H
.Width = FZ * W
.Left = L - (.Width - W) / 2
.Top = T - (.Height - H) / 2
End With
End Sub

Sub ZoomArrière()
'Associez une touche de raccourci
'Sélectionnez un objet quelconque
Dim H As Double, W As Double
Dim L As Double, T As Double
Set s = Selection
FZ = 0.9
H = s.Height
W = s.Width
L = s.Left
T = s.Top
With s
.Height = FZ * H
.Width = FZ * W
.Left = L - (.Width - W) / 2
.Top = T - (.Height - H) / 2
End With
End Sub

3 réponses

Avatar
Nicolas B.
Salut garnote,

Les propriétés Height, Wigth, Left et Top sont toutes arrondies au 1/4
d'unité. En dézommant, tu perds donc de la précision avec les arrondis que
tu ne retrouve pas en revenant en arrière.
Pour être plus précis, il semble que les propriétés sont arrondies à
l'inférieur car l'objet se déplace vers le haut et la gauche.

En plus du déplacement de l'objet, les lignes
.Left = L - (.Width - W) / 2
.Top = T - (.Height - H) / 2
entraînent une déformation de l'objet : il s'aplatit dans le sens de son
côté le plus court, là où les arrondis entraînent le plus d'imprécisions.


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


garnote wrote:
Bonsoir tout le monde,

Voici deux macros permettant de faire des Zoom
sur une sélection d'un objet quelconque.
J'associe, par exemple, la touche de raccourci «G»
pour le Zoom avant et «R» pour le Zoom arrière.
Je maintiens «Ctrl» et «Majuscule» enfoncés et je tape
comme un fou sur «G» ou sur «R».
Il me semble que le centre de l'objet devrait rester fixe,
mais voilà, j'observe à la longue, de petits déplacements
du centre. Ce n'est pas grave, mais j'aimerais bien comprendre
la source de ces petites imprécisions de calcul ?

;-)

Serge


Sub ZoomAvant()
'Associez une touche de raccourci
'Sélectionnez un objet quelconque
Dim H As Double, W As Double
Dim L As Double, T As Double
Set s = Selection
FZ = 1.1
H = s.Height
W = s.Width
L = s.Left
T = s.Top
With s
.Height = FZ * H
.Width = FZ * W
.Left = L - (.Width - W) / 2
.Top = T - (.Height - H) / 2
End With
End Sub

Sub ZoomArrière()
'Associez une touche de raccourci
'Sélectionnez un objet quelconque
Dim H As Double, W As Double
Dim L As Double, T As Double
Set s = Selection
FZ = 0.9
H = s.Height
W = s.Width
L = s.Left
T = s.Top
With s
.Height = FZ * H
.Width = FZ * W
.Left = L - (.Width - W) / 2
.Top = T - (.Height - H) / 2
End With
End Sub


Avatar
garnote
Salut Nicolas,

Merci pour l'information.
Mission impossible, peut-être ?
M'est avis que c'est possible de garder tout ça
centré et sans déformations !
À moins qu'il faille procéder autrement.

;-)

Serge




"Nicolas B." a écrit dans le message de
news:
Salut garnote,

Les propriétés Height, Wigth, Left et Top sont toutes arrondies au 1/4
d'unité. En dézommant, tu perds donc de la précision avec les arrondis que
tu ne retrouve pas en revenant en arrière.
Pour être plus précis, il semble que les propriétés sont arrondies à
l'inférieur car l'objet se déplace vers le haut et la gauche.

En plus du déplacement de l'objet, les lignes
.Left = L - (.Width - W) / 2
.Top = T - (.Height - H) / 2
entraînent une déformation de l'objet : il s'aplatit dans le sens de son
côté le plus court, là où les arrondis entraînent le plus d'imprécisions.


A+
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


garnote wrote:
Bonsoir tout le monde,

Voici deux macros permettant de faire des Zoom
sur une sélection d'un objet quelconque.
J'associe, par exemple, la touche de raccourci «G»
pour le Zoom avant et «R» pour le Zoom arrière.
Je maintiens «Ctrl» et «Majuscule» enfoncés et je tape
comme un fou sur «G» ou sur «R».
Il me semble que le centre de l'objet devrait rester fixe,
mais voilà, j'observe à la longue, de petits déplacements
du centre. Ce n'est pas grave, mais j'aimerais bien comprendre
la source de ces petites imprécisions de calcul ?

;-)

Serge


Sub ZoomAvant()
'Associez une touche de raccourci
'Sélectionnez un objet quelconque
Dim H As Double, W As Double
Dim L As Double, T As Double
Set s = Selection
FZ = 1.1
H = s.Height
W = s.Width
L = s.Left
T = s.Top
With s
.Height = FZ * H
.Width = FZ * W
.Left = L - (.Width - W) / 2
.Top = T - (.Height - H) / 2
End With
End Sub

Sub ZoomArrière()
'Associez une touche de raccourci
'Sélectionnez un objet quelconque
Dim H As Double, W As Double
Dim L As Double, T As Double
Set s = Selection
FZ = 0.9
H = s.Height
W = s.Width
L = s.Left
T = s.Top
With s
.Height = FZ * H
.Width = FZ * W
.Left = L - (.Width - W) / 2
.Top = T - (.Height - H) / 2
End With
End Sub






Avatar
Nicolas B.
M'est avis que c'est possible de garder tout ça
centré et sans déformations !


Je vois deux solutions :

La première effectue toutes les opérations de zoom dans une variable
(définie en dehors de la macro) sans arrondir puis affecte à la propriété la
valeur de cette variable. Exemple (juste les grandes lignes) pour Weight :

Dim WeightVal as double
sub Zoom()
WeightVal=FZ*WeightVal
s.Weight=WeightVal
end sub

Idem pour Dezoom.
Le seul problème est d'affecter la valeur de départ à WeightVal
(WeightVal=s.weight) avant d'effectuer toute opération de zoom.

Autre solution pour contourner ce problème : ne stocker dans une variable
WeightDiff que la différence entre la valeur réelle et la valeur utilisée
(celle arrondie). Lorsque la différence est supérieure à 0,25 on peut alors
faire apparaître les résultats sur la valeur de la propriété. Cette solution
est plus difficile à mettre en ouvre, mais elle lève le problème de la
valeur initiale à donner à WeightDiff, puisqu'elle est forcément égale à 0.


Voilà pour le moment.
Je cherche encore d'autres solutions éventuelles...
--
Nicolas B.

Adresse @adresse.bidon.com invalide,
E-mail : www.cerbermail.com/?gAAILfkPsC


garnote wrote:
Salut Nicolas,

Merci pour l'information.
Mission impossible, peut-être ?
M'est avis que c'est possible de garder tout ça
centré et sans déformations !
À moins qu'il faille procéder autrement.

;-)

Serge