[Résolu][Calc]Modification axe de rotation d'une forme

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Choupinet
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 02 juin 2020 14:16

[Résolu][Calc]Modification axe de rotation d'une forme

Message par Choupinet »

Bonjour,

Pour faire pivoter une droite, j'utilise le code ci-joint:

Code : Tout sélectionner

FormeLigne = monDocument.createInstance("com.sun.star.drawing.LineShape")


Point.x = 19500
Point.y = 5590
FormeLigne.Position = Point

Size.Width = 0
Size.Height = 6000
FormeLigne.Size = Size
FormeLigne.Name = "Haut"
FormeLigne.LineColor = RGB(255, 0, 0)  			'Rouge
MaPage.add(FormeLigne)

wait 3000

FormeLigne.RotateAngle=FormeLigne.RotateAngle-9000
La rotation se fait par rapport au milieu de la droite.
Comment peut-on changer le point de rotation pour faire pivoter cette droite à partir d'une extrémité?

Merci.

Cordialement

A.M
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Choupinet le 05 déc. 2024 04:24, modifié 1 fois.
Libre office 6.4 sous windows 10
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25976
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Modification axe de rotation

Message par Dude »

Salut,
Choupinet a écrit : 03 déc. 2024 05:54 changer le point de rotation pour faire pivoter cette droite à partir d'une extrémité?
Tu dupliques ta forme et tu en fais la rotation souhaitée.
Tu prends XRay et tu analyses les deux objets pour voir quelle est la propriété concernée.
Tad
Membre OOrganisé
Membre OOrganisé
Messages : 52
Inscription : 07 déc. 2022 08:42

Re: [Calc]Modification axe de rotation

Message par Tad »

Si tu connais la longueur de la droite (et son équation), une solution qui devrait fonctionner consiste à :
- faire pivoter ta droite comme actuellement
- déterminer par le calcul la position des extrémités
- déplacer la droite pivotée pour que l'extrémité qui t'intéresse retrouve sa position initiale comme si la droite avait pivotée autour de celle-ci

C'est un peu de math, mais pas difficile.
LibreOffice 7.6 sous W10
Choupinet
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 02 juin 2020 14:16

Re: [Calc]Modification axe de rotation

Message par Choupinet »

Bonjour,

Merci à Tad pour sa proposition.
Concernant la proposition de Dude, j'ai trouvé 4 propriétés qui semblent avoir changé:

HoriOrientPosition qui passe de 19500 à 16500
RotateAgle qui passe de -9000 à 18000
VertOrienntPosition qui passe de 5590 à 8590
ZOrder qui passe de 4 à 5

La propriété RotateAgle définit sans doute la position de la figure après rotation (Horizontal)
La propriété ZOrder ne m'inspire rien.

Pour une rotation à partir du bas de la figure, il faudrait que, après rotation, la propriété HoriOrientPosition soit égale à 11590
et que la propriété VertOrientPosition reste égale à 19500.

Le constat étant fait, comment procéder à ces ajustements....


Cordialement
A.M
Libre office 6.4 sous windows 10
Tad
Membre OOrganisé
Membre OOrganisé
Messages : 52
Inscription : 07 déc. 2022 08:42

Re: [Calc]Modification axe de rotation

Message par Tad »

La propriété Z-Order : c'est ce que tu modifies quand tu utilises les entrées du menu contextuel "Positionner" puis "Envoyer devant / Envoyer derrière / etc"

RotateAngle c'est l'angle, en degrés et en centièmes

Les propriétés Hori / Vert : https://api.libreoffice.org/docs/idl/re ... Shape.html

Tu auras remarqué que la deuxième valeur de HoriOrientPosition semble correspondre à (1ère valeur - longueur_de__la_droite / 2).
Et pareil pour VertOrientPosition (ce qui reflète bien ta rotation à 90° ← si toutes tes rotations sont à cet angle, le calcul devient très simple ;) )
Choupinet a écrit : 04 déc. 2024 05:41 Pour une rotation à partir du bas de la figure, il faudrait que, après rotation, la propriété HoriOrientPosition soit égale à 11590
et que la propriété VertOrientPosition reste égale à 19500.
tu n'aurais pas interverti tes valeurs ?
Si c'est "juste" une rotation à 90°, peut-être un truc comme ce pseudo-code à adapter :

Code : Tout sélectionner

X = HoriOrientPosition
Y = VertOrientPosition
{ici tes manip de rotation}
HoriOrientPosition = X 
VertOrientPosition = Y + longueur_de_droite
LibreOffice 7.6 sous W10
Choupinet
Membre OOrganisé
Membre OOrganisé
Messages : 71
Inscription : 02 juin 2020 14:16

Re: [Calc]Modification axe de rotation

Message par Choupinet »

Bonjour,

Je vous remercie de votre réponse.
Votre méthode fonctionne parfaitement pour une rotation de 90 degrés.
Pour une rotation quelconque, il faudra utiliser la table des sinus pour recalculer tous les paramètres.
C'est faisable.

Voici le code fonctionnel:

Code : Tout sélectionner

Point.x = 19500
Point.y = 5590
FormeLigne.Position = Point

Size.Width = 0
Size.Height = 6000
FormeLigne.Size = Size
FormeLigne.Name = "Haut"
FormeLigne.LineColor = RGB(255, 0, 0)  			'Rouge
MaPage.add(FormeLigne)




wait 3000

FormeLigne.RotateAngle=FormeLigne.RotateAngle-9000



Point.x = 19500
Point.y = 11590
FormeLigne.Position = Point

Size.Width = 6000
Size.Height = 6000
FormeLigne.Size = Size
FormeLigne.Name = "Haut"
FormeLigne.LineColor = RGB(255, 0, 0)  			'Rouge
MaPage.add(FormeLigne)
 

Cordialement.
A.M
Libre office 6.4 sous windows 10
Tad
Membre OOrganisé
Membre OOrganisé
Messages : 52
Inscription : 07 déc. 2022 08:42

Re: [Résolu][Calc]Modification axe de rotation

Message par Tad »

Pour les transformations par rotation,peut-être se pencher sur la notion de coordonnées polaires qui vous simplifierait la tâche (ou pas ;) ).
LibreOffice 7.6 sous W10