#1 Thu 05 April 2001 22:31
- Christophe Barbier
- Invité
placement de texte en MapBasic
Bonjour,
Je voudrais savoir si quelqu'un a compris quelque-chose au placement de texte en MapBasic.
En fait, des que je modifie le MinX, MinY d'un objet texte, le resultat n'est quasiment jamais bon.
J'ai presque toujours un decalage avec la coordonnee voulue.
De plus, il semble impossible de modifier directement le Centroid d'un texte.
En indiquant les modifications suivantes:
Alter Object objtext Geography OBJ_GEO_MINX, x_anchor
Alter Object objtext Geography OBJ_GEO_MINY, y_anchor
Alter Object objtext Geography OBJ_GEO_TEXTANGLE, newangle
Merci pour tout renseignement
Christophe Barbier
#2 Thu 05 April 2001 22:33
- Jacques Paris
- Invité
Re: placement de texte en MapBasic
Christophe,
Le point d’ancrage d’un objet texte est le coin superieur gauche du
rectangle definissant le texte. Donc la position d’un texte est obtenue par
MinX, MaxY; cela pourrait expliquer les decalages que vous avez observes.
Voici un exemple d’un texte objet sur une couche « projetee » :
« debut » X et Y (obtenu par double clic sur l’objet) 310 038.66 5 068
878.23 (c’est le point d’ancrage)
centroide (CentroidX et CentroidY) 312 992.52 5 068 262.84
minimum X et Y (objectgeography(objet, 1) et (…, 2) 310 038.66 5 067
647.45
maximum X et Y (objectgeography(objet, 3) et (…, 4) 315 946.39 5 068
878.23
On peut voir que sur un objet texte, le centroide est le centre de gravite
du rectangle qui le definit. Ces donnees sont « vraies » pour un angle de 0
degre. Avec un angle 0 les choses se corsent. J’ai ajoute un angle de 30
degres a mon exemple. Le point d’ancrage (= « debut ») reste le meme, mais
les x,y mini maxi changent. En fait, le X mini est maintenu.
minimum X et Y (objectgeography(objet, 1) et (…, 2) 310 038.66 5 067
812.35
maximum X et Y (objectgeography(objet, 3) et (…, 4) 315 770.30 5 071
832.09
C’est le rectangle dans lequel vient s’inscrire le rectangle-texte lui-meme
avec les dimensions qu’il a pour un angle de 0 degre.
Le centroide d’une region est le seul qui peut etre specifie explicitement
en MapBasic et cela au moment de sa creation meme (« Create region …
Center… »). Toute modification doit etre faite inter-activement sur l’ecran
(faire afficher les centroides de la couche [controleur de pile, affichage],
selectionner l’objet, se mettre en mode « reshape », selectionner le
centroide et le deplacer). Pour tous les autres types d’objet, le centroide
est « calcule » par MI; il resulte de l’objet, il n’existe pas en soi, il ne
peut donc etre modifie.
La position (ou l’angle) d’un objet texte peut etre modifiee comme vous l’
avez indique mais il ne faut pas oublier que l’operation n’est pas complete
apres un simple alter. Il faut aussi mettre la table a jour. Voici un petit
script pour la fenetre MapBasic. Selectionner un objet, remplacer
nouveau_xmini par une valeur.
dim ob as object
ob selection.obj
alter object ob geography 1, nouveau_xmini
update selection set obj=ob
Remarquez que alter object .. geography « travaille » sur une dimension a la
fois. Dans le cas d’un objet texte, l’objet entier est « deplace » par
chacun des alter ..1 (minX) ou 4 (maxY) ce qui correspond au point d’
ancrage, sans que sa « taille » soit alteree, mais un changement avec 3
(maxX) ou 2 (minY) va en changer la taille car le point d’ancrage est
conserve.
Tres utile dans une mise-en-page en particulier. Cela permet de faire des
alignements a gauche (xmin) et meme des espacements verticaux egaux
(ymax=Y_de depart – (n_de_ligne – 1) * espacement_vertical). Mais pour les
alignements a gauche, il faut calculer le X du point d’ancrage comme etant
le X de reference moins la longueur du texte (xmax-xmin); il faut alors d’
abord creer et inserer l’objet texte dans la couche (ou la mise en page)
pour pouvoir « lire » cette longueur, puis le « deplacer » en position.
Jacques