[Résolu][Draw] Customshape : obtenir les points de la ligne

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 !
Avatar de l’utilisateur
ddorange
Membre hOOnoraire
Membre hOOnoraire
Messages : 121
Inscription : 23 déc. 2015 18:49
Localisation : Annecy

[Résolu][Draw] Customshape : obtenir les points de la ligne

Message par ddorange »

Bonjour à tous,

Lorsqu'on insère une forme depuis la barre d'outils "Dessin" de Draw on obtient un objet dont la propriété Shapetype est "com.sun.star.drawing.CustomShape".
Sauf erreur de ma part, aucune propriété ou méthode de cet objet ne donne accès à un objet type "Polygon" qui contient les coordonnées des points de la ligne extérieure de la forme.

En sélectionnant la forme avec la souris, le menu contextuel contient une commande qui permet de convertir la forme en Polygone. Le Shapetype de cet objet est "com.sun.star.drawing.PolyPolygonShape" et nous avons accès à une structure "Polygon" qui contient les coordonnées des points.

Je me dis donc que je pourrais récupérer ces coordonnées si je savais faire la conversion par macro.

D'où ma question : est-ce possible ? si non avez vous une idée pour que je puisse récupérer les coordonnées des points de la ligne extérieure de la forme Customshape ?

Merci d'avance.
Dernière modification par ddorange le 29 avr. 2021 06:25, modifié 1 fois.
LibreOffice 24.2 et OpenOffice 4.1.15 sous Ubuntu 23.10, Windows 7, Windows 10, MacOs Sonoma
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Draw] Obtenir les points de la ligne d'un Customshape

Message par zeguedon »

Bonsoir,

En utilisant le dispatcher et la commande : .uno:ChangePolygon

Code : Tout sélectionner

Sub Main
actionName = ".uno:ChangePolygon"
oDoc = Thiscomponent
oCC = oDoc.CurrentController
oUtilUrl = CreateUnoStruct("com.sun.star.util.URL")
oUtilUrl.Complete = actionName
servUrlTrans = CreateUnoService("com.sun.star.util.URLTransformer")
servUrlTrans.parseStrict(oUtilUrl)
action = oCC.queryDispatch(oUtilUrl, "_self", 0)
action.dispatch(oUtilUrl, Array())
obj = oDoc.CurrentSelection.GetByIndex(0)
xray obj
End Sub
Il faut que la forme soit sélectionnée avant d’exécuter le code :)
Polygon.png
@+
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Avatar de l’utilisateur
ddorange
Membre hOOnoraire
Membre hOOnoraire
Messages : 121
Inscription : 23 déc. 2015 18:49
Localisation : Annecy

Re: [Draw] Obtenir les points de la ligne d'un Customshape

Message par ddorange »

Bonjour,

Merci zeguedon, cela fonctionne parfaitement.

Avec l'accord des modérateurs, j'attends 1 ou 2 jours, pour le cas où quelqu'un proposerait une solution sans utiliser le dispatcher, avant de marquer le fil résolu.

Bien cordialement.
LibreOffice 24.2 et OpenOffice 4.1.15 sous Ubuntu 23.10, Windows 7, Windows 10, MacOs Sonoma
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Draw] Obtenir les points de la ligne d'un Customshape

Message par Dude »

Salut,

Où est le document sur lequel on doit s'appuyer ?
ddorange a écrit :cet objet est "com.sun.star.drawing.PolyPolygonShape" et nous avons accès à une structure "Polygon" qui contient les coordonnées des points.
La création de cette forme est décrite dans le Wiki : https://wiki.openoffice.org/wiki/FR/Doc ... f_Drawings
Avatar de l’utilisateur
ddorange
Membre hOOnoraire
Membre hOOnoraire
Messages : 121
Inscription : 23 déc. 2015 18:49
Localisation : Annecy

Re: [Draw] Obtenir les points de la ligne d'un Customshape

Message par ddorange »

Bonjour,

Pas la peine que je fournisse un document, c'est facile d'insérer un dessin avec la barre d'outils dessin.
Je sais créer une forme PolyPolygonShape. Ce n'est pas ma question.

Je souhaite pouvoir transformer un CustomShape qui n'a pas la propriété Polygon en un Polypolygonshape qui lui la possède.
La solution de zeguedon convient tout à fait à ceci près qu'elle utilise le dispatcher, nécessite de sélectionner l'objet à transformer ce qui n'est pas tout à fait transparent pour l'utilisateur qui voit de façon furtive l'objet être sélectionné.

Raison pour laquelle, je n'ai pas encore mis le fil en résolu, pour le cas où quelqu'un saurait faire sans dispatcher.
LibreOffice 24.2 et OpenOffice 4.1.15 sous Ubuntu 23.10, Windows 7, Windows 10, MacOs Sonoma
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Draw] Obtenir les points de la ligne d'un Customshape

Message par Dude »

ddorange a écrit :Pas la peine que je fournisse un document,
Si tu le dis... :roll:

Bon courage.
Avatar de l’utilisateur
ddorange
Membre hOOnoraire
Membre hOOnoraire
Messages : 121
Inscription : 23 déc. 2015 18:49
Localisation : Annecy

Re: [Draw] Obtenir les points de la ligne d'un Customshape

Message par ddorange »

Voici un
Essai_CustomShape.odg
document avec un CustomShape et la macro de zeguedon.

Son exécution transforme le CustomShape en PolypolygonShape.

La question est : peut-on obtenir le même résultat sans utiliser le dispatcher ?
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 24.2 et OpenOffice 4.1.15 sous Ubuntu 23.10, Windows 7, Windows 10, MacOs Sonoma
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25181
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Draw] Obtenir les points de la ligne d'un Customshape

Message par Dude »

Pas d'API pour accéder à ce service.
ddorange a écrit :ce qui n'est pas tout à fait transparent pour l'utilisateur qui voit de façon furtive l'objet être sélectionné
Avec la méthode (un)lockControllers, tu peux masquer cela :

Code : Tout sélectionner

Sub ConvertEnPolygone
	actionName = ".uno:ChangePolygon"
	oDoc = Thiscomponent
	oDoc.LockControllers
	oPage = oDoc.DrawPages(0)
	oForme = oPage.getByIndex(0)
	oCC = oDoc.CurrentController
	oCC.select(oForme)
	oUtilUrl = CreateUnoStruct("com.sun.star.util.URL")
	oUtilUrl.Complete = actionName
	servUrlTrans = CreateUnoService("com.sun.star.util.URLTransformer")
	servUrlTrans.parseStrict(oUtilUrl)
	action = oCC.queryDispatch(oUtilUrl, "_self", 0)
	action.dispatch(oUtilUrl, Array())
	oCC.select(oCC)
	oDoc.UnlockControllers
End sub
Avatar de l’utilisateur
ddorange
Membre hOOnoraire
Membre hOOnoraire
Messages : 121
Inscription : 23 déc. 2015 18:49
Localisation : Annecy

Re: [Draw] Obtenir les points de la ligne d'un Customshape

Message par ddorange »

Bonjour,
Merci Dude pour ce complément intéressant.
J'attends encore 2 jours avant de marquer le fil résolu pour le cas où quelqu'un proposerait une solution sans dispatcher.
Cordialement.
LibreOffice 24.2 et OpenOffice 4.1.15 sous Ubuntu 23.10, Windows 7, Windows 10, MacOs Sonoma