Tester si un bloc existe
et s'il n'existe pas...
le créer
Il est courant d'insérer des blocs, avec ou sans attributs, et pour ne pas créer des erreurs pendant le déroulement du programme il faut tout d'abord tester si le bloc existe et s'il n'existe pas le créer, toujours par le truchement de notre cher AutoLISP.
Contrôle de l'existence du bloc :
La fonction utilisée est (tblsearch), c'est une fonction qui "scanne" les tables d'AutoCAD, il faut lui donner le nom de la table en argument, comme c'est expliqué sur la page de (tblsearch)
On va créer un simple fonction qui renverra quelque chose ou pas, et de ce fait on pourra dans le corps du programme faire appel à cette fonction, et suivant le résultat insérer le bloc si on l'a trouvé, le créer dans le cas contraire puis l'insérer.
La sous-fonction :Et maintenant le test pour voir si elle fonctionne, notez bien que ce n'est pas tout à fait ce qui sera utilisé dans le futur programme, c'est juste pour voir si elle fonctionne.
Si le nom du bloc donné en argument est trouvé dans le dessin vous devez voir ce qui est à gauche, sinon c'est le message de droite qui s'affichera.
C'est OK ? on continue ?
Admettons que le bloc n'existe par, je vous ai dit qu'on allait le créer, allez on y va ...
Je ne vais pas utiliser la fonction (command) mais plutôt la fonction (entmake) qui est plus programmatiquement correcte du moins à mes yeux.
La sous-fonction qui va créer le bloc (que j'ai nommé "zaza") est celle-ci :Ce bloc "zaza" (là j'ai vraiment fait un effort de nom !) se compose de deux cercles concentriques, un de rayon 1.0 et un autre de rayon 1.50, et le point d'insertion est le centre des cercles, que j'ai mis au point (0 0 0) pour que lors de l'insertion on appelle ces cercles par leurs centres, pour info c'est le code 40 qui gère ces valeurs de rayon dans le cas des cercles.
Ça donne ça :C'est OK ? on continue ?
Il est maintenant temps de créer la fonction principale, qui va tester l'existence de ce bloc "zaza" (OK on a déjà parlé du nom !) et s'il existe on l'insère, là je vais prendre la fonction (command) et s'il n'existe pas en tant que définition de bloc dans le fichier dessin en cours, le créer, puis l'insérer.
voici le programme complet avec ses sous-fonctions :
Vous avez noté, j'espère, que la présence des cases d'alerte est complètement superflue et inutile dans un "vrai" programme, leur raison d'être là est pour vérifier le fonctionnement des sous-fonctions.
À votre disposition via CONTACT pour explications supplémentaires le cas échéant, à bientôt ...
Allez ! je mets le code en texte copiable, je suis vraiment un gentil garçon ...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | (defun bloc-exist? (blo) (tblsearch "block" blo) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun make-bloc-zaza () (entmake '((0 . "BLOCK") (2 . "zaza") (70 . 2) (10 0.0 0.0 0.0))) (entmake (list (cons 0 "CIRCLE") (cons 6 "BYLAYER") (cons 8 "0") (cons 10 (list 0.0 0.0 0.0)) (cons 40 1.0) ) ) (entmake (list (cons 0 "CIRCLE") (cons 6 "BYLAYER") (cons 8 "0") (cons 10 (list 0.0 0.0 0.0)) (cons 40 1.5) ) ) (entmake '((0 . "ENDBLK"))) ) (setq pins (getpoint "\nPoint d'insertion ?\n")) (if (bloc-exist? "zaza") (progn (command "_insert" "zaza" pins "1" "1" "") (alert "le bloc existait") ) (progn (make-bloc-zaza) (command "_insert" "zaza" pins "1" "1" "") (alert "le bloc n'existait pas mais a été créé !") ) ) |
Haut de page
Retour aux exercices BLOCS
22 juin 2018