Skip to the content.

Des expressions pour étiquetage forcé… et animé

english version - sommaire

N’arrivant pas à étiqueter (en mode incurvé) un linéaire sur toute sa longueur, et avant que cela soit possible nativement, voilà une expression qui va permettre d’étiqueter quelque-soit le rayon de courbure et répéter le texte à l’infini.

alt text

Le principe :

En paramètres de la fonction : le texte à étiqueter, l’identifiant de la couche (pour des raisons techniques).

Reste à régler la taille, l’espacement…

alt text

# Exemples :

# un texte statique
charloop( 'ABCDE...', @layer_id)

# ou un champ de votre couche
charloop( "toponyme"||' ', @layer_id)

Comment ça marche ?

Le moteur d’étiquetage de QGis parcoure la ligne pour placer chaque élément graphique à intervalle régulier et par chance, sollicite l’expression à chaque emplacement, l’expression se contente alors de distribuer un à un les caractères.

Elle gère les éventuels soucis d’ordre (le moteur de rendu passe d’une entité à l’autre, d’une couche à l’autre et complique les choses).

Un dictionnaire (python) stocke l’indice du caractère couramment affiché, pour chaque entité.

alt text

Les expressions

Dans le dossier de votre profil, sous python/expressions, placez ce script (ou passez par l’interface “éditeur de fonctions” et copiez le contenu dans votre nouveau script) :

Version animée

alt text

Les fonctions animated_charloop(), charloop_shift (pour un décalage fin des caractères), combinées avec l’utilisation du ‘contrôleur temporel’, et c’est le texte qui s’écoule !

alt text

Marche à suivre

animated_charloop('ABCDE', @layerid, @frame_number, @total_frame_count)

ou @frame_number est une variable native (l’indice de l’étape courante du contrôleur temporel) et @total_frame_count le nombre d’étapes total (variable native ou à définir dans les propriétés du projet en version < 3.40)

Mais cela produit une animation trop saccadée (la fonction décale simplement le texte d’un caractère).

On affine alors le positionnement par une expression sur le paramètre “décalage le long de la ligne” :

charloop_shift('ABCDE', @typo_gap, @frame_number, @total_frame_count)

ou @typo_gap correspond à la valeur de l’intervalle choisi pour votre ligne de symbole (variable à définir ou à remplacer par une valeur numérique)

fonctions annexes

pb / difficultés

case when line_direction_we()
	then ($geometry)
	else reverse($geometry)
end

Les fichiers

Le script à placer dans le dossier de votre profil, sous python/expressions

Un projet exemple et ses couches :