[Draw] Modifier la taille et la position d'une ligne de cote

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
Groslapin
Fraîchement OOthentifié
Messages : 6
Inscription : 09 mai 2010 01:44
Localisation : France

[Draw] Modifier la taille et la position d'une ligne de cote

Message par Groslapin »

Dans un document DRAW, j'ai dessiné une ligne de cote que je sélectionne ensuite avec la souris.
Pour modifier rapidement la taille de cette cote, je souhaite utiliser une macro qui va lire et modifier les valeurs de la longueur et de la hauteur récupérées et saisies dans une fenêtre de dialogue :

Sélection de la forme avec la souris et lancement de la macro :

Code : Tout sélectionner

 Dim MForme as Object
 MForme = ThisComponent.CurrentSelection(0)
Récup de la longueur dans la variable L1C1 :

Code : Tout sélectionner

 Dim L1C1 as Integer    
 L1C1 = MForme.Transformation.Line1.Column1
Récup de la hauteur dans la variable L2C2 :

Code : Tout sélectionner

 Dim L2C2 as Integer    
 L2C2 = MForme.Transformation.Line2.Column2
Ecriture des variables dans la fenêtre de dialogue où j'ai créé 2 champs numériques :

Code : Tout sélectionner

 oDialog.GetControl("Num_L1C1").Value = L1C1
 oDialog.GetControl("Num_L2C2").Value = L2C2
Puis, je modifie manuellement les valeurs affichées dans chaque champ numérique.

Ensuite, je ne sais pas comment écrire la macro pour modifier la cote ?

Je ne peux pas utiliser une ligne genre "SetPosition()" :

Code : Tout sélectionner

 MPosition as New com.sun.star.awt.Point
 MPosition.X = 5000    ' 50 mm
 MPosition.Y = 6000     '60 mm
 MForme.setPosition(MPosition)
que j'utilise pour déplacer la cote sans la modifier.

Après de nombreuses recherches sur le forum, je pensais utiliser :

Code : Tout sélectionner

 MTaille as New com.sun.star.drawing.HomogenMatrixLine3
 MTaille.Transformation.Line1.Column1 = 7000  'Longueur 70mm
 MTaille.Transformation.Line2.Column2 = 2000  'Hauteur 20mm
 MTaille. ???
Et là je n'arrive pas à trouver la suite pour appliquer la modification à la cote....

Peut-être faudrait-il utiliser le "Dispatcher" mais là aussi je suis bloqué car je début avec OOoBasic et la cotation sous Draw est très peu documentée. De plus, l'enregistrement de Macros sous Draw n'est pas possible. J'ai donc ramé pas mal pour me lancer.

Quelqu'un peut-il me donner un coup de main ?
Dernière modification par Groslapin le 09 mai 2010 21:43, modifié 2 fois.
GrosLapin
Open Office 3.2.1
Windows XP Home SP3
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] Modifier la taille et la position d'une ligne de

Message par Dude »

Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
Groslapin
Fraîchement OOthentifié
Messages : 6
Inscription : 09 mai 2010 01:44
Localisation : France

Re: [Draw] Modifier taille et position d'une ligne de cote

Message par Groslapin »

Bonsoir Dude,

Merci pour ces 3 liens. J'avais déjà jeté un œil sur 2 d'entre eux et d'autres encore qui m'ont permis d'écrire le début de ma macro. Pour le dernier lien, j'utiliserai une partie du code pour gérer un futur changement d'échelle.

J'ai trouvé de nombreux exemples basés sur le modèle "Create..." :

Code : Tout sélectionner

Function CreateSize(ByVal x As Long,ByVal y As Long) As com.sun.star.awt.Size
Dim oSize
oSize = createUnoStruct( "com.sun.star.awt.Size" )
oSize.Width = x : oSize.Height = y
CreateSize = oSize
End Function
Ou le modèle "Set..." :

Code : Tout sélectionner

Sub Maj_Taille
'Mise à jour de la taille de la forme
       TailleL = MForme.size.width +100
       TailleH = MForme.size.Height +100
	MTaille.width = TailleL
	MTaille.height = TailleH
	MForme.setSize(MTaille)
End Sub
Est-ce qu'il existe des fonctions "SetTransformation()" ou "CreateTransformation" ?
Comment et où puis-je trouver leur syntaxe ou un modèle de macro ?

J'ai trouvé également ce modèle, mais je ne comprend pas comment l'adapter !
A priori, ce n'est pas du langage Basic mais plutôt du Java ?

Code : Tout sélectionner

'XPropertySet xPropSet = (XPropertySet)UnoRuntime.queryInterface( XPropertySet.class, xShape );
 // take the current tranformation matrix
 HomogenMatrix3 aHomogenMatrix3 = (HomogenMatrix3)xPropSet.getPropertyValue("Transformation");
 java.awt.geom.AffineTransform aOriginalMatrix = new java.awt.geom.AffineTransform(aHomogenMatrix3.Line1.Column1, aHomogenMatrix3.Line2.Column1,
     aHomogenMatrix3.Line1.Column2, aHomogenMatrix3.Line2.Column2,
     aHomogenMatrix3.Line1.Column3, aHomogenMatrix3.Line2.Column3 );
 // rotate the object by 15 degrees
 AffineTransform aNewMatrix1 = new AffineTransform();
 aNewMatrix1.setToRotation(Math.toRadians(15));
 aNewMatrix1.concatenate(aOriginalMatrix);
 // and translate the object by 2cm on the x-axis
 AffineTransform aNewMatrix2 = new AffineTransform();
 aNewMatrix2.setToTranslation(2000, 0);
 aNewMatrix2.concatenate(aNewMatrix1);
 double aFlatMatrix[] = new double[6];aNewMatrix2.getMatrix(aFlatMatrix);
 // convert the flatMatrix to our HomogenMatrix3 structure
 aHomogenMatrix3.Line1.Column1 = aFlatMatrix[0];
 aHomogenMatrix3.Line2.Column1 = aFlatMatrix[1];
 aHomogenMatrix3.Line1.Column2 = aFlatMatrix[2];
 aHomogenMatrix3.Line2.Column2 = aFlatMatrix[3];
 aHomogenMatrix3.Line1.Column3 = aFlatMatrix[4];
 aHomogenMatrix3.Line2.Column3 = aFlatMatrix[5];
 xPropSet.setPropertyValue("Transformation", aHomogenMatrix3);
Merci d'avance pour votre aide.
Dernière modification par Groslapin le 11 mai 2010 19:03, modifié 2 fois.
GrosLapin
Open Office 3.2.1
Windows XP Home SP3
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] Modifier taille et position d'une ligne de cote

Message par Dude »

Groslapin a écrit :Comment et où puis-je trouver leur syntaxe ou un modèle de macro ?
Utilise l'outil XRay pour t'aider.

Enfin, on rappelle (encore) que fournir du code c'est bien mais l'accompagner d'un fichier permet d'éviter aux bénévoles d'avoir à recréer quelque chose qui au final pourrait ne pas convenir.

:!:
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
Avatar de l’utilisateur
Groslapin
Fraîchement OOthentifié
Messages : 6
Inscription : 09 mai 2010 01:44
Localisation : France

Re: [Draw] Modifier taille et position d'une ligne de cote

Message par Groslapin »

Bonsoir à tous,

Comme le dit Dude, un bon exemple vaut mieux qu'un long discourt, voici la V1 de mon utilitaire.
Je vous laisse faire quelques tests et prendre connaissance du code. :fou:

Pour résumer le fond de mon problème, je me suis rendu compte en faisant mes tests que sur des petites cotes (inférieures à 2cm), l'information de taille (dans Size L ou Size H) était erronée lorsque les flèches de cotation changeaient de sens ( <------> qui devient >------<). :marto:
A contrario, les valeurs trouvées dans "Transformation.LineX.ColumnX" étaient toujours correctes. :super:

C'est donc pour cela que je souhaite utiliser "Transformation..." et non plus "Size..." pour modifier la taille des lignes de cotes. Mais je sèche sur l'écriture du code depuis plusieurs semaines. :tesfou:

Aller je file dormir un peu en espérant que vous aller pouvoir me trouver le bout de solution qu'il me manque. :bravo:

Bonne nuit à tous....
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
GrosLapin
Open Office 3.2.1
Windows XP Home SP3
Avatar de l’utilisateur
Groslapin
Fraîchement OOthentifié
Messages : 6
Inscription : 09 mai 2010 01:44
Localisation : France

Re: [Draw] Modifier taille et position d'une ligne de cote

Message par Groslapin »

Bonsoir à tous,

J'ai encore avancé et presque trouvé la solution à mon problème de côtes en utilisant le code fourni sur ce post http://user.services.openoffice.org/en/ ... 45&t=27400. C'est le seul que j'ai trouvé sur le sujet...

cette fois la modification de la longueur d'une côte inférieure à 2 cm est correcte sur l'axe X (longueur) mais je n'arrive pas à faire fonctionner le code sur l'axe Y (Hauteur). Je ne vois pas ce qui cloche ? :tesfou:

Pour que vous puissiez tester, j'ai mis le fichier en pièce jointe.

Je continue à chercher mais j'attends toujours votre petit coup de main... :wink:

Merci d'avance.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
GrosLapin
Open Office 3.2.1
Windows XP Home SP3
Avatar de l’utilisateur
Groslapin
Fraîchement OOthentifié
Messages : 6
Inscription : 09 mai 2010 01:44
Localisation : France

Re: [Draw] Modifier taille et position d'une ligne de cote

Message par Groslapin »

Salut ! Après quelques mois, me revoilà enfin ! :bravo:

Pour ceux qui ont suivi un peu mon histoire, les versions se sont enchainées avec quelques améliorations basiques.

Je vous propose de tester la V3.3 de mon utilitaire. Bien évidement, il traine toujours quelques bugs.
C'est pas encore le top, mais c'est assez précis et plutôt pratique pour réaliser rapidement la cotation technique d'un produit.

Merci d'avance aux testeurs de me laisser un petit mot pour me dire ce que vous en pensez. :super:

Par contre, si l'un des administrateurs du forum à du nouveau sur le sujet (utilisation avancée de la cotation avec Basic), je suis toujours preneur.
Jusqu'à présent, vous ne m'avez pas beaucoup aidé... :D
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
GrosLapin
Open Office 3.2.1
Windows XP Home SP3