Beruflich Dokumente
Kultur Dokumente
guide de rfrence
Programmer AutoCAD
avec DIESEL, AutoLISP, DLC et VBA
Chapitre 2
Le langage DIESEL
Principe
Le langage DIESEL (Direct Interpretively Evaluated String Expression Language) permet dune part de modifier la ligne dtat dAutoCAD, laide de la variable systme MODEMACRO. Dautre part, dans les options de menu, on peut le substituer AutoLISP et sen servir comme langage de macro-commandes. Les expressions DIESEL reconnaissent les chanes et gnrent des rsultats.
Fig.2.1
96
Programmer AutoCAD
MODEMACRO est une variable de chane dutilisateur. Elle peut tre affecte nimporte quelle valeur de chane. La longueur maximale de la chane est de 4095 caractres. Il est possible de dfinir MODEMACRO laide de la commande MODIFVAR ou en entrant MODEMACRO linvite de la ligne de commande. En modifiant la valeur de MODEMACRO, vous pourrez utiliser diffrents formats de ligne dtat. En revanche, le nombre maximal de caractres que vous pourrez alors entrer est de 255. Si vous dfinissez MODEMACRO sur une chane vide en entrant un point (.), AutoCAD affiche la ligne dtat standard. La variable MODEMACRO la plus simple (et la moins utile) correspond du texte constant. Par exemple, pour afficher un nom de socit sur la ligne dtat, on peut entrer :
Commande : modemacro
Entrez une nouvelle valeur pour MODEMACRO ou . pour aucune (Enter new value for MODEMACRO, or . for none () <""> : EYROLLES Le texte EYROLLES apparat prsent dans la barre dtat (fig.2.2).
Fig.2.2
Cette valeur de MODEMACRO affiche toujours le mme texte ; la ligne dtat nindique pas les modifications internes apportes dans AutoCAD. Elle ne change pas tant que lon ne modifie pas MODEMACRO. Pour que cette ligne indique ltat actuel dun lment dAutoCAD, il convient dinsrer des expressions de type macro-commandes en utilisant le langage DIESEL. Ces expressions ont le format suivant :
$(fonction, arg1, arg2, ...)
Dans cette expression, fonction est le nom de la fonction DIESEL (semblable au nom dune fonction AutoLISP) et arg1, arg2, etc., sont des arguments de cette fonction, interprts suivant la dfinition de la fonction. Contrairement AutoLISP, les
2. Le langage DIESEL
97
expressions de macro DIESEL nacceptent quun seul type de donnes : des chanes de caractres. Les macros qui permettent de traiter des chiffres expriment ces derniers sous la forme de chanes de caractres et oprent les conversions ncessaires. En particulier, la fonction DIESEL $(getvar) rcupre la valeur de nimporte quelle variable systme et affiche les informations utiles sur la ligne dtat. Lutilisation de cette fonction permet dafficher par exemple le nom du style de texte courant tel quil est dfini dans TEXTSTYLE et ce dernier est mis jour chaque modification. Lexpression MODEMACRO scrit comme suit :
Commande : modemacro
Entrez une nouvelle valeur pour MODEMACRO, ou . pour aucune (Enter new value for MODEMACRO, or . for none) : $(getvar, textstyle) Cela donne laffichage du style gauche de lcran (fig.2.3). Pour rendre le message plus comprhensible, il suffit dajouter un texte avant la valeur affiche. Par exemple (fig.2.4) : Entrez une nouvelle valeur pour MODEMACRO, ou . pour aucune (Enter new value for MODEMACRO, or . for none) : Style :$(getvar, textstyle) Comme autre exemple, on peut demander laffichage sur la ligne dtat, de la distance entre deux points, lors de lutilisation de la commande DISTANCE. Dans ce cas, lexpression MODEMACRO scrit comme suit (fig.2.5) :
Commande : modemacro
Fig.2.3
Fig.2.4
Entrez une nouvelle valeur pour MODEMACRO, ou . pour aucune (Enter new value for MODEMACRO, or . for none) <""> : Distance : $(getvar, distance) Les expressions peuvent tre imbriques et tre aussi complexes que vous le dsirez. Lexemple qui suit permet par exemple dafficher le temps pass dans AutoCAD en minutes (fig.2.6) :
Dure :$(FIX,$(*,60,$(*,24,$(GETVAR,TDUSRTIMER))))
98
Programmer AutoCAD
La variable systme TDUSRTIMER donne la valeur en jours. Il faut donc faire une conversion en minutes : Lexpression devient : 0.0855362 jours x 24 : 2.052869 heures 2.052869 heures x 60 = 123.17216 minutes Valeur entire de 123.17216 = 123 minutes Un autre exemple permet dafficher sur la ligne dtat la valeur et langle (en degrs) de la grille daccrochage. Cet exemple contient des expressions imbriques qui permettent de convertir en degrs langle daccrochage (exprim en radians) et tronquent la valeur sous forme de nombre entier.
Fig.2.5
Commande : modemacro
Nouvelle valeur de MODEMACRO, ou . pour aucune <""> : Snap : $(getvar, snapunit) $(fix,$(*,$(getvar,snapang),$(/,180,3.14159)))
Fig.2.6
Vous pouvez galement afficher les valeurs dans les modes dunits linaires et dangle courants.
Commande : modemacro
DIESEL copie ses entres directement dans les sorties jusqu ce quil atteigne le signe de dollar ($) ou une chane entre guillemets. Vous pouvez utiliser les chanes entre guillemets pour empcher que certaines squences de caractres (qui autrement
2. Le langage DIESEL
99
seraient considres comme des fonctions du langage DIESEL) soient values. Vous pouvez inclure des guillemets dans des chanes entre guillemets en entrant des guillemets adjacents. Dans lexemple ci-dessous, le calque courant est paramtr sur PRESENTATION et MODEMACRO, sur la chane.
Commande : modemacro
Nouvelle valeur pour MODEMACRO, ou un point (.pour aucune <""> : "$(getvar,clayer)= """$(getvar,clayer)""" La ligne dtat affiche le texte suivant :
$(getvar,clayer)="PRESENTATION"
Remarque
Il est aussi possible dutiliser le langage DIESEL dans certaines fonctions AutoCAD, comme RTEXT, par exemple. Il sagit dune fonction issue des Express tools.
Fig.2.8
100
Programmer AutoCAD
Enregistrez cette routine AutoLISP dans un fichier appel mode.lsp. Lorsque vous chargez puis excutez la routine, des informations apparaissent sur la ligne dtat. Le fichier exemple acad.lsp suivant utilise la fonction S : :STARTUP pour attribuer la variable MODEMACRO une chane dfinie par le fichier AutoLISP mode.lsp.
(defun S::STARTUP() (load "mode") (princ) )
Cette fonction active automatiquement louverture dAutoCAD la fonction Modemacro et son paramtrage.
2. Le langage DIESEL
101
Ainsi, dans lexemple qui suit, le menu droulant Variables systme affiche la valeur de certaines variables dAutoCAD (fig.2.9).
***POPxx [&Variables systme] [$(eval, Nom du dessin : $(getvar,dwgname))] [$(eval, Style du texte: $(getvar,textstyle))] [$(eval, Echelle type de ligne: $(getvar,ltscale))]
Fig.2.9
La fonction DIESEL eval permet dafficher le rsultat dune valuation. Dans lexemple qui suit, on va effectuer un zoom qui correspond aux limites dfinies par la commande LIMITS :
[ZOOM LIMITES]^c^c_zoom ;_w ;$M=$(getvar,limmin) ;$M=$(getvar,limmax)
_w : loption window limmin : variable qui contient les coordonnes de la limite infrieure gauche limmax : variable qui contient les coordonnes de la limite suprieure droite
Lexemple suivant illustre une procdure de numrotation automatique :
[NUM-AUTO]*^c^c_text ;_m ;\ ; ;$M=(getvar,USERI1) ;_setvar ;USERI1 ;+ $(+,1,$(getvar,USERI1))
_m : loption de justification middle \ : arrt pour permettre lutilisateur de pointer la position du texte $M : fonction Diesel USERI1 : une variable utilisateur + : fonction addition pour ajouter la valeur 1 la variable USERI1
102
Programmer AutoCAD
(soustraction)
* (multiplication)
/ (division)
Renvoie le rsultat de la division des nombres val1 par val2, ..., val9.
$(/, val1 [, val2, ..., val9])
= (gal )
Si les nombres val1 et val2 sont gaux, la chane renvoie 1 ; sinon, elle renvoie 0.
$(=, val1, val2)
Ex :
$(=,5,5) renvoi 1 $(=,5,4.9) renvoi 0
< (infrieur )
Si le nombre val1 est infrieur val2, la chane renvoie 1 ; sinon, elle renvoie 0.
$(< , val1,val2)
2. Le langage DIESEL
103
> (suprieur )
Si le nombre val1 est suprieur val2, la chane renvoie 1 ; sinon, elle renvoie 0.
$(>, val1, val2)
!= (diffrent de)
Si les nombres val1 et val2 ne sont pas gaux, la chane renvoie 1 ; sinon, elle renvoie 0.
$(!=, val1, val2)
Si le nombre val1 est infrieur ou gal val2, la chane renvoie 1 ; sinon, elle renvoie 0.
$(<=, val1, val2)
Si le nombre val1 est suprieur ou gal val2, la chane renvoie 1 ; sinon, elle renvoie 0.
$(>=, val1, val2)
and
Renvoie le rsultat dune opration logique AND applique sur les entiers val1 val9.
$(and, val1 [, val2,..., val9])
angtos
Si mode et prcision sont omis, les valeurs courantes choisies par la commande UNITES sont utilises.
104
Programmer AutoCAD
Valeurs des units angulaires Valeur Mode 0 1 2 3 4 Format de chane Degrs Degrs/minutes/secondes Gradients Radians Godsie
edtime
Edite la date (calendrier julien) dAutoCAD renvoye par heure (obtenue par exemple partir de $(getvar, date) pour limage dsigne par largument image). Largument image est compos dexpressions de format qui sont remplaces par des reprsentations spcifiques de la date et de lheure. Les caractres qui ne peuvent pas tre interprts comme des expressions de format sont copis tels quels dans le rsultat de $(edtime). Les expressions de format sont dfinies comme indiqu dans le tableau ci-aprs. Supposons que nous soyons le samedi 5 septembre 1999 4 :53 :17.506.
Expressions de format edtime Format D JJ JJJ JJJJ M MO MOI MOIS AA AAAA Sortie 5 05 Sam Samedi 9 09 Sep Septembre 99 1999 Format H HH MM SS MSEC AM/PM am/pm A/P a/p Sortie 4 04 53 17 506 AM am A a
2. Le langage DIESEL
105
Lexemple ci-aprs reprend la date et lheure mentionnes dans le tableau prcdent. Notez que la virgule doit tre mise entre les guillemets, car elle est interprte comme un sparateur darguments.
$(edtime, $(getvar,date),DDD"," JJ MOI AAAA - H:MMam/pm)
Si largument heure est gal 0, la date et lheure qui sappliquent sont celles de lexcution de la macro la plus droite. Cela vite une perte de temps due de nombreux appels de $(getvar, date) et garantit que les chanes composes de plusieurs macros $(edtime) utilisent la mme heure.
eq
Si les nombres val1 et val2 ne sont pas gaux, la chane renvoie 1 ; sinon, elle renvoie 0.
$(eq, val1, val2)
Lexpression ci-aprs recherche le nom du calque courant. Si le nom correspond la valeur mmorise dans la variable systme USERS1, elle renvoie 1. Supposons que la chane PART12 soit enregistre dans USERS1 et que le nom du calque courant soit identique.
$(eq, $(getvar,users1),$(getvar,clayer)) renvoie 1
eval
fix
Tronque la valeur relle val en supprimant sa partie fractionnaire afin dobtenir un nombre entier.
$(fix, val)
106
Programmer AutoCAD
getenv
if
Si expr est diffrent de 0, cette chane interprte et renvoie valeur_si_vrai. Sinon, elle interprte et renvoie valeur_si_faux. Remarquez que la branche non choisie par expr nest pas value. Ex :
$(if,$(=,7,7),vrai) renvoi vrai
index
Cette fonction suppose que largument chane contient une ou plusieurs valeurs dlimites par le caractre de sparation des arguments de macro, savoir la virgule. Largument slection choisit la valeur extraire, le premier lment tant de rang 0. En gnral, cette fonction sert extraire les coordonnes X, Y ou Z partir du point renvoy par $(getvar).
linelen
Renvoie la longueur, exprime en nombre de caractres, de la ligne dtat la plus longue pouvant tre affiche.
$(linelen)
On peut utiliser ces paramtres pour modifier le format de la ligne dtat, selon la capacit daffichage. Cela est utile uniquement pour configurer la ligne dtat MODEMACRO.
2. Le langage DIESEL
107
Lespace attribu MODEMACRO sur la ligne dtat est actuellement fix 240 caractres. Ainsi, la fonction $(linelen) renvoie toujours 240 caractres.
nth
Si slection est gal 0, nth renvoie arg0, et ainsi de suite. Notez la diffrence entre $(nth) et $(index) ; $(nth) renvoie lun des arguments dune srie la fonction, tandis que $(index) extrait une valeur dune chane dlimite par des virgules et transmise sous forme dargument unique. Les arguments non slectionns par slection ne sont pas interprts.
or
Renvoie le rsultat dune opration logique or applique sur les entiers val1 val9.
$(or, val1 [, val2,..., val9])
rtos
Renvoie la valeur relle avec le format et le degr de prcision que vous avez dfinis.
$(rtos, valeur [, mode, prcision])
Edite la valeur sous la forme dun nombre rel, dans le format dfini par mode et prcision. Si mode et prcision sont omis, les valeurs courantes slectionnes par la commande UNITES sont utilises.
strlen
substr
Renvoie la sous-chane de chane, en commenant au caractre dbut, sur toute la longueur spcifie.
$(substr, chane, dbut [, longueur])
Dans une chane, les caractres sont numrots partir de 1. Si largument longueur est omis, cette expression renvoie tout ce qui reste de la chane.
108
Programmer AutoCAD
upper
xor
Renvoie le rsultat dune opration logique XOR applique sur les entiers val1 val9.
$(xor, val1 [, val2,..., val9])
$ ? : erreur de syntaxe $ ?(func, ??) : argument de la fonction incorrecte $(func) ?? : fonction inconnue $(++) : chane de sortie trop longue