Les types de ligne

Les types de ligne et leur échelle de représentation et donc la visualisation des tiretés est un sujet récurrent dans les questions posées sur les différents forums.
Je vais tenter des explications précises avec des exemples en espérant traiter exhaustivement le sujet.
Dans un premier temps je tiens à dire que je ne parle pas des types avec annotativité.

Les définitions de l'apparence de types de lignes sont définies dans des fichiers avec l'extension LIN.
Ce sont des fichiers au format ASCII éditables par le NotePad ou tout autre éditeur de texte.
Il est possible d'ajouter des définitions aux fichiers de base AutoCAD (acasiso.lin et acad.lin) mais il est aussi possible de créer un fichier à part, l'essentiel étant qu'il soit au format texte et avec l'extension LIN.
Il est déconseillé d'utiliser le traitement de texte Word qui ajoute souvent des caractères servant à la mise en page.
Le NotePad fourni en natif avec Windows est parfait pour ces créations/éditions des fichiers LIN.

 

Les variables qui gèrent le sujet
des types de ligne

MEASUREMENT
La première chose à prendre en compte est la variable MEASUREMENT.
Cette variable est enregistrée dans le dessin, ce qui signifie que d'un dessin à l'autre elle peut prendre deux valeurs différentes.
Elle a été créée par AutoDesk pour différencier les unités de base, à savoir les pouces pour les anglo-saxons et le système décimal pour les autres.
Cette variable ne supporte que deux valeurs, 0 ou 1.

Si MEASUREMENT vaut 0 c'est le système anglo-saxon qui sera utilisé et c'est le fichier acad.lin qui est pris en compte.
Si MEASUREMENT vaut 1 c'est le système décimal qui sera utilisé et c'est le fichier acadiso.lin qui est pris en compte.

ECHELTP ou LTSCALE
Ces deux variables gèrent la même chose : l'échelle générale d'apparence du type de ligne, elle accepte tout nombre entier ou réel strictement supérieur à 0 (zéro).
Elle est un coefficient multiplicateur pour tout ce qui sera expliqué plus tard dans la page.

CELTSCALE
Cette variable définit le facteur d'échelle du type de ligne des entités dessinées.
L'action de cette variable n'est pas rétroactive c'est à dire que ce qui a été dessiné avant la modification de la valeur de CELTSCALE n'est pas pris en compte pas la nouvelle valeur.
Je parle plus tard dans la page de ce facteur d'échelle qui peut aussi être un souci dans l'apparence des types de lignes

PSLTSCALE
Cette variable gère l'affichage des types de ligne dans les fenêtres de l'espace papier, effet comme on le verra plus tard les types de lignes sont définis en "unités de dessin" donc suivant l'échelle de zoom de la FMULT l'apparence diffère, et c'est là que PSLTCALE entre en jeu.
Cette variable est enregistrée dans le dessin donc des comportements différents peuvent apparaître d'un fichier à l'autre, les deux valeurs possibles sont 0 et 1.

Si PSLTCALE est à 0 : c'est la variable LTSCALE(ECHLTP) qui prend le dessus et les longueurs des tirets dépendent toujours des unités de dessin de l'espace objet
Si PSLTCALE est à 1 : ce sont les unités de dessin de l'espace papier qui prennent le dessus pour définir les longueurs de tirets, donc si deux fenêtres FMULT sont présentes dans le même présentation avec des valeurs de ZoomXP différentes, la représentation des types de lignes est identique dans les deux fenêtres.

Dans l'image suivante on constate l'effet de PSLTSCALE quand elle est à 1.
Une ligne unique est dessinée en espace objet avec le type de ligne CACHE, en espace papier trois FMULT sont mitoyennes et dans chaune un zoom xp différent est défini; le résultat visuel est que quelle que soit l'échelle de zoom, l'aspect du type de ligne est identique et fait toujours deux millimètres (rouge) pour un espace d'un millimètre si le tracé s'effectue à l'échelle 1 bien sûr.

image de PSLTSCALE  1
PSLTCALE à 1

Et maintenant la même vue mais avec PSLTSCALE à 0 (inactif) où on constate un désordre dans l'apparence du type de ligne qui ne tient plus compte de la valeur de ZoomXP.

le fichier de définition

Jetons un œil sur acadiso.lin, en voici un extrait ouvert avec le NotePad, l'exemple chosi est la définition du type de ligne CACHE.
Comme dans bien des fichiers de codes si la ligne de texte commence par ;; tout ce qui suit est considéré comme un commentaire et n'est donc pas pris en compte par le logiciel, ça permet de mettre des indications pour expliquer à celui qui lira un jour ce fichier.

La définition se présente sur deux lignes de texte comme ceci :

*CACHE,Caché __ __ __ __ __ __ __ __ __ __ __ __ __ _
A, 6.35, -3.175

La première ligne commence par un astérisque et contient dans un premier champ le NOM du type de ligne puis un deuxième champ qui sert d'aide-mémoire de l'apparence du type de ligne, c'est ce qui va apparaître dans le fichier de chargement des types de lignes.
Chaque champ est séparé du suivant par une virgule.
Ce texte qui ne peut comporter plus de 47 caractères utilise des caractères ascii, underscore, point,… pour symboliser l'apparence du type de ligne.
Si cette description n'existe pas (elle est facultative) il n'est pas obligatoire de mettre une virgule après le nom du type de ligne.

Au sujet de cette case de dialogue il faut noter que les noms des types de ligne apparaissent par ordre alphabétique et non dans leur ordre d'apparition dans le fichier LIN.
Le sachant, si vous créez un type de ligne dans ce fichier de base "acadiso.lin" ou si vous ajouter une définition à un fichier existant  vous ne serez pas surpris si vous vous souvenez de cette indication.

La deuxième ligne de texte est la définition à proprement parler, elle contient des champs qui gèrent différentes choses, ces champs aussi devront être séparés par une virgule.

Le A qui commence la ligne est obligatoire, il représente un champ Alignement et je vous en parle plus loin dans la page, pour l'instant mémorisez qu'il est obligatoire.

Le premier champ numérique qui suit, 6.35 en l'occurrence, signifie que la "plume virtuelle" est posée et va tracer un trait de 6.35 unités dessin.
Le deuxième champ numérique, -3.175 sert à définir un "vide", le fait que ce nombre soit négatif signifie "plume levée"

Donc pour récapituler ce type de ligne CACHE est représenté pas un trait de 6.35, un vide de 3.175, un trait de 6.35, un vide de 3.175, un trait de 6.35, un vide de 3.175 etc.

Ce type de ligne simpliste est utile pour la compréhension de la gestion des échelles.

La notion de trait et de vide n'est qu'une vue de l'esprit, l'entité prenant ce type reste une entité à part entière et on ne peut pas s'accrocher sur une extrémité de "trait" de cette entité utilisant ce type de ligne qui n'a et n'aura toujours que DEUX extrémités.

Donc si LTSCALE(ECHLTP) est à 1 en Espace Objet le type de ligne CACHE est représenté par son échelle réelle si tant est que le facteur d'échelle de l'entité soit lui aussi à 1.

On peut vérifier ou modifier ce facteur d'échelle du type de ligne affecté à une entité dans la case des propriétés :Ce facteur multiplie la valeur de LTSCALE donc pour l'apprentissage mettre toutes ces valeurs par défaut à 1.

On remarque que bien que ce soit le fichiers soit de type ISO, la définition reste basée sur une relation mètre/pouces (sauf pour les types contenant ISO dans leur nom).
Si on regarde le fichier acad.lin on constate que le type CACHE est défini ainsi :

*CACHE,Caché __ __ __ __ __ __ __ __ __ __ __ __ __ __
A,.25,-.125

Dans ce fichier acad.lin on constate que les traits et espaces prennent des valeurs de demi-pouce et de quart de pouce, la transcription pour "acadiso.lin" n'est qu'une conversion des unités avec un facteur de 25 environ dans un sens pour un facteur de 0.4 dans l'autre sens.
Le vrai rapport pouce/millimètre étant de 2.54 mm pour un pouce le facteur réel est de 0.3937 mais les décimales n'ont pas été prises en compte dans cette transcription.

ATTENTION : on pourrait croire que pour bien voir les types de lignes il suffit de mettre LTSCALE à 1 mais comme AutoCAD a modifié les unités dans le fichier LIN et que par ailleurs ils ont instauré une variable MEASUREMENT il se trouve que ces deux variables s'annulent dans les faits et qu'un facteur de LTSCALE de 0.4 est correct en espace objet dans bien des cas car avec cette valeur on obtient un LTSACLE à 1 avec des valeurs en pouces.
Pour voir des tiretés avec le type de ligne CACHE et LTSCALE à 1 il faut une ligne a minima de 9.53 unités de dessin pour que le type de ligne apparaisse.
Toutes les lignes plus courtes que 9.53 seront en type CACHE mais apparaîtront comme des lignes continues bien qu'elles soient en CACHE dans les propriétés.
Par exemple , une sélection par type de ligne prendra bel et bien en compte cette ligne (trop courte pour que le logiciel arrive à représenter les tirets) mais elle est bien reconnue comme étant en CACHE dans sa définition logicielle.

Par ailleurs AutoCAD prévoit que toutes les entités commencent et se terminent par un par un tiret, pour pouvoir s'accrocher en mode "extrémité", c'est le A en début de ligne qui est responsable, ce A est obligatoire et incontournable.
Donc le logiciel va rallonger le premier et le dernier tiret (aux deux extrémités) en ajustant le motif pour qu'aux deux extrémités il y ait a minima une demi-valeur de tiret.
Pour les arcs c'est idem, pour les cercles (sans début ni fin par définition géométrique) c'est plus flou et je suis à l'écoute de vos précisions le cas échéant.

Voici un exemple significatif de six lignes parallèles de type CACHE de différentes longueurs et on constate qu'AutoCAD ajuste bel et bien le motif pour que le début et la fin soient en traits pleins.
Même si c'est parfaitement compréhensible au sens "accrochage objet" c'est très déroutant pour l'œil et source de multiples interrogations des utilisateurs.  

Cette image représente les six lignes qui partent de la même ordonnée mais qui ont des longueurs différentes. On constate que le premier et le dernier tiret sont ajustés par la logiciel pour qu'il y ait a minima une demi-valeur de tiret visible.


Cet ajustement ne se fait que sur les extrémités des entités, dans le cas d'une polyligne avec de multiples sommets, les sommets de passage ne sont pas traités par cet ajustement et il est possible, suivant la longueur des segments de se trouver dans un cas où un sommet n'est pas représenté.
Pour régler ce souci d'affichage il faudra désactiver la génération du type de ligne sur cette polyligne.

L'image suivante présente les deux cas de figure, les flèches bleues sont les extrémités et les flèches rouges les points de passage.
En haut génération du type de ligne activée donc certains sommets invisibles.
En bas génération du type de ligne désactivée donc tous les sommets visibles.

C'est fini pour un type "simple", voire simplissime car il est possible de définir jusqu'à douze longueurs de tiret par type de ligne, il faudra vérifier toutefois que cette ligne ne dépasse pas quatre-vingt caractères.

 

Type de ligne composé


GrandTrait,Espace,PetitTrait,Espace,PetitTrait,Espace,GrandTrait

Fantome est l'exemple utilisé:
*FANTOME,Fantôme ______  __  __  ______  __  __  ______
A, 31.75, -6.35, 6.35, -6.35, 6.35, -6.35

On commence par A comme vu précédemment, puis un trait de 31.75, un vide de 6.35, un trait de 6.35, un vide de 6.35, un trait de 6.35 et on finit par vide de 6.35.

Pour les types composés il reste à parler des lignes comprenant des points, comme TIRETPT

*TIRETPT,Tiret point __ . __ . __ . __ . __ . __ . __ . __
A, 12.7, -6.35, 0, -6.35

C'est la valeur 0 (zéro) dans le quatrième champ qui indique sur ce sera un point qui sera dessiné en place d'un tiret.
Un trait plein de 12.7, un vide de 6.35, un point (valeur 0), et un vide de 6.35.

On est OK pour les lignes comprenant des tirets ? tout le monde suit ?

Types de lignes qui contiennent
des caractères textuels

Les descripteurs de motif de type de ligne comportant des caractères incorporés sont similaires à ceux des types de ligne simples sauf pour le "texte" qui sera géré dans un champ entre crochets droits [. . . . ]

L'exemple de l'image ci-dessus sera défini comme suit :

*LigneB,---- B --- B ---- B ----
A,.5,-.2,["B",STANDARD,S=0.2,X=-0.1,Y=-.1],-.2

La première ligne de texte ne varie pas par rapport aux lignes avec tirets.
La deuxième ligne commence par le sempiternel A comme vu précédemment, les premiers champs numériques ont les mêmes actions à savoir dans le cas présent : un trait de 0.50 puis un vide de 0.20 puis on ouvre des crochets pour gérer le caractère textuel et pour finir il y a un vide de 0.20

Entre les crochets droits :
Entre les guillemets c'est le "texte" qui va apparaitre, ensuite vient le NOM du style de texte utilisé pour tracer ce texte.
"STANDARD" existant par défaut dans tous les nouveaux dessins on est certain de voir le type de ligne, toutefois si on utilise un style particulier celui-ci doit obligatoirement exister dans le dessin qui appelle ce type de ligne sinon vous recevrez ce genre d'alerte :



Le S=0.20 est pour signifier une hauteur de caractère de 0.20 unité dessin environ car avec les textes mesurer la hauteur n'est pas vraiment simple.
Par contre si le style utilisé est défini avec un facteur de largeur ou une valeur d'inclinaison, aucune de ces deux valeurs ne sera prise en compte dans l'affichage des caractères dans les types de ligne.
Pas de lettre comprimée, pas de lettre en italique sauf si la police est elle-même en italique même sans valeur d'inclinaison.

Si le style de texte exprimé dans la définition existe dans le dessin et si ce style est défini avec une hauteur, le S sert de coefficient multiplicateur de cette hauteur prédéfinie, si le style n'a pas de hauteur le S est utilisé comme hauteur de texte dans le style de la ligne.

Dans l'exemple plus haut le X=-0.1 signifie que texte est décalé de moins 0.10 en X et le Y = -1.0 signifie que le texte est décalé en dessous la ligne (négatif) de 0.10.
Comme la hauteur est de 0.20 (voir S) le texte est centré verticalement sur la ligne.

On se souviendra que le texte sera centré sur la ligne si le Y vaut la moitié de S ce qui fera un décalage vertical de la moitié de la hauteur.
Toutefois si vous utilisez des caractères en lettres minuscules (pas la taille des lettres je parle de l'opposition à majuscules) il est possible que le décalage ne soit pas visuellement correct car avec les textes la hauteur est calculée sur l'enveloppe la plus grande.

Rotation et orientation des caractères

Il reste trois champs non expliqués dans les exemples qui vont affecter l'apparence
Le U, le R et le A

Le champ U (qui signifie Upper)

*LigneB,---- B --- B ---- B ----
A,.5,-.2,["O",STANDARD,U=0,S=0.2,X=-0.1,Y=-0.1],-.2

La présence de ce U va servir à rendre le texte lisible quel que soit l'angle de la ligne, une ligne avec un U présentera les lettres pour être lisibles dans le bons sens de lecture.
Il est à noter qu'il suffit de supprimer le champ U pour perdre cet avantage, il ne faut pas changer la valeur 0 (zéro), c'est la simple présence du champ U qui est prise ne compte pas sa valeur, du moins c'est ce que j'ai compris à la suite de mes tests.

Le champ R (qui signifie Rotation)

A,.5,-.2,["B",STANDARD,U=0,R=0,S=0.2,X=-0.0,Y=-.1],-.2

Le 0 dans le champ R fait que le caractère est dans le sens de la ligne, une valeur de 90 va lui faire subir un rotation de 90 degrés

A,.5,-.2,["B",STANDARD,U=0,R=90,S=0.2,X=-0.0,Y=-.1],-.2

Ce qui donne :

Et là on s'aperçoit que la lettre n'est plus vraiment centrée et que ce n'est pas très joli, donc on va jouer avec les espaces avant après comme ceci :
A,.5,-.1,["B",STANDARD,U=0,R=90,S=0.2,X=-0.0,Y=-.1],-.3
Le premier passe à -0.10 et le dernier passe à -0.30 ce qui ne change pas la valeur totale d'espace mais déplace le caractère et ça donne ça :

Et ça change tout !, non ?

pour ce champ ROTATION j'ai trouvé des indications sur internet qui disent qu'il est possible de rajouter les lettres d, r, ou g pour signifier radian, degré ou grade mais malgré tous mes essais je n'ai jamais réussi à insérer ces lettres dans le champ sans recevoir de message d'erreur, et seule les valeurs en degrés semblent prises en compte, sans relation avec les unités angulaires définies dans le dessin.
Je reste à disposition par le formulaire CONTACT pour corriger mes dires si on me prouve le contraire de ce que j'affirme.

Le champ A (qui signifie Angle)

Reprenons notre exemple de ligne avec des B:
A,.5,-.1,["B",STANDARD,A=90.0,S=0.2,X=-0.0,Y=-.1],-.3
Cette fois-ci j'ai mis champ A et une valeur de 90.
Ce champ va obliger les lettres du type de ligne à subir un angle par rapport à l'axe des X et non plus par rapport à la ligne comme le champ R, visuellement ça donne ça :

Attention à l'alignement des lettres qui devient très compliqué à définir mais aussi au fait que c'est le SCG qui sert de référence, tout dessin de ligne dans un SCU particulier verra ses caractères dessinés avec un angle de la valeur du champ A par rapport à l'axe X du SCG.
Ce champ est assez inusité et on comprend pourquoi mais ça ne doit pas m'empêcher de vous en parler pour être précis sur le sujet.

Des Symboles dans le type de ligne

Là où les types de lignes avec des caractères deviennent très intéressants, c'est lorsqu'on qu'un style de texte précisé dans un type de ligne avec caractères utilise une police WebDings .
Pour mémoire il faut que le style existe dans le dessin pour que le type de ligne fonctionne.

Je définis un style nommé "special" comme police j'opte pour : WebDings et je choisis le caractère "b" qui dans cette police a l'apparence d'une bicyclette de profil car mon idée est de faire un type de ligne qui va mettre en valeur un axe de piste cyclable.

Le type de ligne est défini ainsi :
A,0.5,-.1,["b",special,S=0.2,X=-0.02,Y=-0.07],-0.3

Et le rendu est celui-ci :Avouez que ça a de la gueule, non ?

Ce lien va vous mener sur une page où j'ai fait un tableau des correspondances entre les caractères alphabétiques et les symboles des polices spéciales disponibles dans la liste des polices pour styles de texte.

Les types de ligne utilisant les formes

Les entités "forme" ne sont pas très utilisées, ce sont des entités entre l'image et le bloc,

La forme est un fichier externe comme le bloc peut l'être et comme les blocs il sont composés de différentes entités qui une fois transformés en "forme" deviennent un objet unique pouvant être insérée dans le dessin avec un point d'insertion, un facteur d'échelle uniforme et une valeur de rotation, j'ai parlé de l'image car il y a aussi une notion de résolution.
Comme un bloc on peut redéfinir l'apparence de la forme et toutes les formes précédemment insérées se mettent à jour dans le dessin.
J'ai parlé des images pour expliquer les formes car il y a une notion de résolution mais aussi de "cliché" de la forme, elle n'est pas au format image pour autant.
La forme est enregistrée dans un fichier avec l'extension SHP

Exemple de type de ligne utilisant une forme :

J'ai dessiné un peu n'importe quoi car c'est juste pour montrer les possibilités, chacun est capable de trouver l'utilité dans son domaine d'activité pour dessiner des caniveaux, des glissières de sécurités, des chemins de câbles ou que sais-je encore…

Création de la forme :

Dessiner (à l'échelle 1) des entités pour restituer le dessin représentant la future forme à utiliser :

Commande MKSHAPE (expresstools)

Une case de dialogue s'ouvre pour demander le nom du fichier à créer pour la "forme" (l'extension SHP se met automatiquement) répondre par exemple Type1

En ligne de commande :

  1. il est demandé le nom de la forme, répondre à nouveau Type1
  2. il est demandé la résolution, répondre 128 qui correspond à la plupart des cas, libre à vous de faire des essais à différentes résolutions pour optimiser apparence/efficacité.
  3. Il est demandé un point d'insertion, c'est depuis ce point (comme les blocs) que la forme va s'attacher plus tard quand on va l'insérer dans le dessin. Dans notre exemple choisir le point extrémité gauche de la ligne de gauche.
  4. Et pour finir il est demandé de choisir les entités, choisir par fenêtre/capture ou entité par entité l'ordre n'ayant pas d'importance.

Arrivé à ce stade la ligne de commande vous renseigne sur la compilation du fichier forme

Tout de suite il faut insérer la "forme" dans le dessin par la commande _SHAPE.
On répond aux messages de la case de dialogue qui situe le fichier forme,
on répond aussi le nom de la forme et on l'insère à l'endroit où on a défini le point d'insertion tout à l'heure,
on valide à vide pour les échelles et rotation et si c'est bien fait la forme se superpose avec le dessin qui nous a servi à la créer.
Ne pas effacer ce dessin qui est sous la forme qu'on vient d'insérer car on va en avoir besoin pour utiliser les accrochages objet bientôt.

En zoomant sur cette forme superposant des entités dessin vous allez vous rendre compte de légères différences et c'est là qu'intervient la notion de résolution, surtout lorsque vous utiliserez des entités arc ou cercle, il faudra monter la résolution, faites vos tests...

Fabrication du type de ligne :
Pour faire simple on va utiliser la commande MKLTYPE des ExpressTools pour créer notre nouveau type de ligne.
Je n'en ai pas encore parlé car je parlais "théorie", maintenant que vous savez on peut s'aider avec les outils existants.
Cette commande va créer un fichier LIN avec les objets choisis,

  1. Il est demandé un nom de fichier (l'extension LIN s'ajoute automatiquement).
  2. Il est demandé le NOM du type de ligne, on répond ce qu'on veut mais significatif, je choisis LEHX (comme ligne-Hexagone).
  3. Il est demandé une ligne de texte de description, ça on peut ignorer en validant à vide.
  4. Il est demandé le point de départ de la définition, on choisit le point extrémité gauche de la ligne de gauche.
  5. Il est demandé le point final de la définition, on choisit le point extrémité droite de la ligne de droite.
  6. Il est demandé de choisir les objets et là il faut bien choisir la forme, n'oublions pas que la forme est superposée aux entités la créant dans notre cas, une fois que la forme est choisie valider et un message en ligne de commande nous dit que le type de ligne est créé et chargé dans le dessin.

On peut d'ores et déjà vérifier le fonctionnement en dessinant une ligne et en lui attribuant le type qu'on vient de définir.

La case de dialogue de création de fichier LIN présente un souci.
Lorsque vous donnez le nom d'un fichier LIN qui existe déjà, une case d'alerte s'ouvre en vous disant "le fichier existe déjà" et il est demandé de confirmer "Voulez-vous le remplacer ?" c'est quelque peu trompeur car si vous répondez OUI, le fichier ne sera pas remplacé pour autant mais il sera complété de votre nouvelle définition qui se mettra à la suite des définitions trouvées dans ce fichier, comme ça vous pouvez n'utiliser qu'un fichier de type de ligne au lieu d'un fichier par type.

Définition de la ligne avec forme :

Allons voir la définition du type de ligne créé à l'instant en ouvrant (NotePad) le fichier LIN et on voit :
*LHEX,
A,.000012,[FORMELHEX,LHEX,y=.881678,s=1,r=324],-1.213525

On connaît maintenant la signification des champs numériques, remarquez que la logiciel a encore transformé en pouces les longueurs de tirets que vous avez dessinées en unité dessin
c'est entre les crochets que ça se passe, le premier champ est le NOM de la forme utilisée, le deuxième champ est le nom du fichier(shp) dans lequel est la forme.

Les six champs permettant l'orientation et les décalages sont
R=  pour une rotation relative à la ligne
A=  pour une rotation absolue
U= pour une rotation droite
S=  pour une mise à l'échelle
X=  pour un décalage  à droite ou à gauche si négatif
Y = pour un décalage au-dessus ou au-dessous si négatif

ces valeurs s'utilisent comme dans le cas des types de ligne contenant des caractères textuels, d'ailleurs ils sont aussi entre crochets droits [....] et c'est donc le même fonctionnement.

Voilà, c'est terminé pour l'instant, je pense avoir fait le tour du sujet, tenez-moi au courant par le formulaire de contact si je manque de clarté ou si je me suis trompé quelque part malgré mes multiples contrôles.