• Aucun résultat trouvé

CHAPITRE 3 : IMPOSER DES CONTRAINTES GRAPHIQUES POUR UNE MEILLEURE QUALITÉ DES

3.2 CONTRÔLE ET VALIDATION DES PRESTATIONS

3.2.3 Contrôle de structure graphique des plans

3.2.3.2 Outil de contrôle LISP

i. Présentation du langage de programmation

Tout d’abord, LISP, acronyme de « LISt Processing » (traitement de liste) est un langage de programmation puissant disposant d’un certain nombre de « dialectes » parmi lesquels nous retrouvons AutoLISP. Cette interface permet d’établir un lien avec les fonctionnalités d’AutoCAD ; elle fait partie intégrante de ce logiciel, dans le sens où l’exécution d’un programme LISP nécessite l’obtention d’une licence AutoCAD. Inventé par John McCarthy en 1958, le programme LISP (langage dit « fonctionnel ») est constitué d’appels de fonctions. En informatique, une fonction est une suite de commandes générant un résultat dépendant de paramètres définis préalablement par l’utilisateur. AutoLISP fournit de nombreuses fonctions utilisables. Cette programmation étant volumineuse, seuls deux exemples seront présentés dans cette partie afin de visualiser globalement le principe de fonctionnement du programme [30].

ii. Étude de programmes

Les fichiers objets du contrôle sont les plans topographiques et de récolement du domaine public de la ville. Chaque jour, de nouvelles planches topographiques sont mises à jour par le secteur Topographie. Ces documents doivent suivre la nomenclature imposée dans l’actuelle charte graphique (Cf. 3.1.2). Toutefois, les anciennes planches présentent des définitions de bloc non conformes à cette charte. Le contrôleur LISP est décomposé en plusieurs programmes :

· Mise en cohérence avec la charte graphique : ce programme permet de redéfinir l’ensemble des blocs présents dans le dessin selon la nomenclature de la charte graphique ;

· Contrôle de la structure des plans : ce programme contrôle un certain nombre d’éléments :

o Bloc : Il vérifie que chaque bloc est classé dans son calque de destination, avec la bonne couleur ;

o Élément linéaire : Il vérifie que chaque polyligne présente la bonne couleur, avec le bon type de ligne ;

o Élément textuel : Il vérifie que chaque texte présente la bonne couleur, avec la bonne hauteur et le bon style de texte.

· Création d’un rapport erreur : ce programme récapitule les différents éléments non conformes à la charte graphique.

À présent, prenons l’exemple d’une suite de fonctions permettant de dupliquer les blocs présents dans le dessin vers un autre calque. Ce script est une étape du programme relative à la mise en cohérence du dessin avec la charte graphique.

[30]

Annexe n°8 : Extrait du programme LISP

(defun c: duplicate_bloc ()

(command "-calque" "0_temp" "co" "6" "0_temp" "") (command "_-layer" "0_temp" "" "")

(setq OBJ (ssget "x" (list

(cons 0 "INSERT") ) )

calquecourant (getvar "clayer") )

(repeat (sslength OBJ) (setq ent (ssname OBJ n) n (+ 1 n)

)

(command "_copy" ent "" '(0 0 0) '(0 0 0) )

(command "_chprop" (entlast) "" "_la" calquecourant "")))

À présent, analysons les différentes fonctions du script précédent :

FONCTIONS COMMENTAIRES

(defun [fonction] …)

Ex : (defun c: duplicate_bloc () …)

La fonction « defun » définit une fonction.

En ajoutant l’élément « c: », la fonction est définie comme une commande AutoCAD qu'il sera possible d’exécuter depuis la ligne de commande en tapant « duplicate_bloc ».

(command [arguments] …)

Ex : (command "-calque" "0_temp" "co" "6" "0_temp" "")

La fonction « command » appelle depuis une expression LISP les commandes natives d'AutoCAD.

Les arguments en entrée sont le nom de la commande suivi des options nécessaires à son exécution. Dans l’exemple précédent, la commande permet de créer un calque « 0_temp » avec comme argument sa couleur (couleur 6 : jaune).

(setq symbole expression…)

Ex : (setq OBJ (…))

La fonction « setq » définit des variables en affectant une expression à un symbole.

(ssget [arguments] …)

Ex : (ssget "x" (list (cons 0 "INSERT"))

Un jeu de sélection est un objet AutoCAD qui contient des entités graphiques.

La fonction « ssget » sélectionne plusieurs entités en une seule fois. L’exemple ci-contre

permet de sélectionner l’ensemble des blocs dans le dessin.

TABLEAU 6 : LISTE DES FONCTIONS UTILES A L'ELABORATION DU SCRIPT LISP

Par ailleurs, étudions un second programme : le LISP interrogeant le dessin AutoCAD en lui demandant si un élément ponctuel est représenté sur le plan. Ce script est une étape du programme relatif au contrôle de structuration des plans.

(if (setq OBJ (ssget "x" '((0 . "INSERT")(2 . "fleche_bat")(-4 . "<NOT")(8 . "BATS")(-4 . "NOT>")))) (progn

(command "-calque" "n" "0_Blocs_mauvais_calque" "co" "2" "0_Blocs_mauvais_calque" "tl" "Continuous" "0_Blocs_mauvais_calque" "")

(command "chprop" OBJ "" "ca" "0_Blocs_mauvais_calque" "co" "2" "")))

De même que précédemment, analysons les fonctions du script ci-dessus :

FONCTIONS COMMENTAIRES

(if cond progn)

La fonction « if » est une fonction conditionnelle établissant des structures décisionnelles. Cette fonction n’accepte qu’une seule expression. Toutefois, il est possible de regrouper plusieurs expressions à l’aide de la fonction « progn ». Elle évalue séquentiellement les expressions qu'elle contient et retourne le résultat de la dernière.

ILLUSTRATION 20 : SCRIPT LISP PERMETTANT DE DUPLIQUER LES BLOCS D'UN DESSIN

Ex : (ssget "x" '((0. "INSERT") (2. "fleche_bat") (-4. "<NOT") (8. "BATS") (-4. "NOT>"))

Les filtres de sélection sont des listes d’association utilisant des codes de groupe DXF : 0 (type

d'entité), 8 (calque), 2 (nom du bloc).

Les filtres peuvent aussi contenir des groupes logiques imbriqués de la manière suivante :

· "<AND" un ou plusieurs opérandes "AND>"

· "<OR" un ou plusieurs opérandes "OR>"

· "<NOT" un opérande "NOT>"

L’expression ci-contre permet de sélectionner les blocs « fleche_bat » non inclus dans le calque « BATS » du dessin.

TABLEAU 7 : LISTE DES FONCTIONS UTILES À L’ÉLABORATION DU SCRIPT LISP

Les fichiers LISP sont ensuite chargés dans AutoCAD à partir de la commande

« APPLOAD ». Ils peuvent également être chargés au démarrage du logiciel ou à l’ouverture du

dessin lorsqu’ils sont amenés à être utilisés régulièrement. Suite à l’exécution du processus, un rapport erreur est généré. Les différentes erreurs sont récapitulées automatiquement dans ce fichier. Enfin, il convient à l’opérateur de modifier les éléments problématiques afin de respecter les dispositions prévues dans la charte graphique. La notice d’explication de cette procédure est annexée [31].

iii. Avantages / Inconvénients

AVANTAGES INCONVENIENTS

Programmation relativement facile et intuitive Processus semi-automatisé : l’intervention de l’opérateur reste indispensable

Rapidité d’exécution des commandes Longueur du script Lien direct avec le logiciel AutoCAD (aucun besoin de

télécharger des modules complémentaires)

Mauvaise visualisation des erreurs dans le programme pour les modifier