Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

#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

 

Pied de page des forums

Powered by FluxBB