COMMAND

Lancer une commande AutoCAD

 

Lorsqu'on débute en AutoLISP il est courant de se servir de cette fonction qui lance une commande AutoCAD comme en ligne de commande, c'est pratique car ça se raproche de l'interface de dessin à laquelle on est habitués.

Syntaxe : ( command "nom_de_la_commande" ... )

Les arguments de la fonction ( command ) sont le nom de la commande et les options nécessaires à sa finalisation.
Une chaîne vide "" (deux guillemets successifs) correspond à la touche ENTER
Le mot "pause" mis en argument interrompt le programme pour revenir dans l'interface graphique afin de permettre à l'utilisateur d'opérer une saisie, valeur au clavier ou pointage d'un point.
( command ) utilisée sans arguments équivaut à un appui sur la touche Échap.
Lorsque l'argument requis pour la fonction ( command ) est un nombre, il peut être exprimé indifféremment sous la forme d'un entier (integer), d'un réel (real) ou d'une chaîne de caractères (string), à vérifier car certaines commandes différencient les entiers et les réels.


Si la fonction ( command ) est pratique et facile d'utilisation il va tout de même falloir faire attention à donner en argument le nom de la commande en langage international, qui est l'anglais en l'occurrence logiciel américain oblige.
Voir la fonction ( getcname ) qui vous permettra de trouver l'équivalent du nom que vous utiliseriez en français, cette précaution permettra à vos programmes de fonctionner sur toutes les machines car d'une version à l'autre il peut y avoir des traductions différentes et donc des commandes non reconnues.
Les plus anciens se souviennent que ce qui est appelé "calque" aujourd'hui était connu sous le vocable de "plan" dans les premières versions d'AutoCAD, par contre en anglais c'était déjà "layer" et ça n'a jamais changé depuis l'origine du logiciel.
Une dernière chose pour les commandes en anglais, il faut précéder le nom de la commande par un "underscore" et ce symbole fait comprendre au logiciel qu'on lui parle en anglais.


Pour les commandes ayant une version "ligne de commande" et une version "boite de dialogue", c'est la version "ligne de commande" qui est utilisée par défaut.
Pour forcer l'ouverture de la boite de dialogue :
il faut faire précéder la fonction : ( initdia ) à l'appel de ( command )


Par exemple avec la commande LIGNE :
la ligne de code : ( command "_line" '(0 0 0) pause "" )
va lancer la commande LIGNE, créer une ligne depuis le point d'origine du SCU '(0 0 0) et attendre que l'utilisateur pointe un point à l'écran pour revenir en AutoLISP puis lire l'argument suivant, "", qui équivaut à la touche ENTER, donc la commande se termine et une ligne est créée puis le programme va continuer sur les lignes de code suivantes.


Il est possible de passer des arguments précédemment enregistrés dans des variables :
( setq p1 ( getpoint "\nPoint de départ\n" ))
( setq p2 ( getpoint  p1 "\nPoint d'arrivée\n" ))
( command "LIGNE" p1 p2 "" )

Ces lignes de code vont demander de saisir un point (p1) puis un autre (p2) et lancer la commande "LIGNE" qui partira du point p1 pour se terminer au point p2


Il est tout à fait possible de lancer plusieurs commandes à la suite :
( command "_line" '(0 0 0) '(10 5 0) "" "_circle" '(5.0 2.5 0) 2)

Ce qui va lancer la commande "LIGNE" puis la commande "CERCLE" avec un seul appel de ( command ), vous avez noté l'appel de "_line" au lieu de "ligne".


Pour dessiner des lignes consécutives il va falloir créer une boucle avec la fonction
( while ) qui va rester dans l'interface graphique TANT QUE (while) l'utilisateur clique des points :

( command "_line" )
( while ( > ( getvar 'cmdactive ) 0 ) ( command pause ))

Ces lignes de code vont lancer la commande LIGNE et, tant que l'utilisateur cliquera des points, les relier par des lignes, on termine en appuyant sur la touche ENTER ou ECHAP.


Pour les entités avec des sommets multiples, les polylignes par exemple, il est possible de lire une liste de points à l'intérieur d'un appel à ( command ) :

Définition de la liste des points :
( setq list-pts ( list '(0 0 0) '(2 2 0) '(1 5 0) '(10 20 0)))

Lancement de la commande polyligne :
( command "_pline" )
   ( foreach p list-pts
      ( command p )
   ) ; fin de foreach
( command "" )


Il est TRÈS IMPORTANT de noter que lors de l'appel à ( command ) les accrochages (extrémité, intersection...) ne sont pas désactivés et peuvent interférer sur le résultat du programme
En rajoutant un argument "_non" on se dédouane de ce souci et on est certain que les entités n'iront pas "s'accrocher" sur des sommets pré-existants en parasitant le résultat du programme.
( command "_line" "_non" '(0 0) "_non" '(20 10) "" )


Pour ne jamais être embêté avec des commandes éventuellement redéfinies par l'utilisateur (car on peut redéfinir des commandes dans AutoCAD) il est conseillé en plus du tiret bas (underscore) de rajouter un point devant le nom de la commande, le sens d'apparition undercore point ou point underscore est indifférent.

( command "_.line" p1 p2 "" )

Cette ligne de code va vous garantir que sur toutes les machines la ligne sera tracée, et ce même si l'utilisateur a redéfini la commande "ligne".

 


Haut de page

retour au menu CRÉATION


8 décembre 2017