blog

Tutoriel AutoLISP : variable système et COND conditionnel

Dans le dernier tutoriel AutoLISP, nous avons essayé de placer un bloc et de modifier la valeur de l’attribut. Nous utilisons également un SI conditionnel. L’utilisation du bloc AutoCAD dans AutoLISP est un grand avantage. Nous pouvons utiliser notre contenu réutilisable pour rendre la programmation AutLISP moins complexe, et nous pouvons maintenir notre norme de dessin dans AutoCAD. Cette fois, nous allons essayer d’utiliser un autre conditionnel, en utilisant COND. Nous aborderons également les variables système d’AutoCAD, l’une des choses les plus importantes dans AutoLISP.

Le programme que nous allons créer dans ce didacticiel AutoLISP tracera une ligne de grille et placera automatiquement l’étiquette à la fin de la ligne.

Avant de commencer, vous devez d’abord télécharger ce fichier. Le fichier zip contient 4 fichiers AutoCAD DWG, chaque fichier est une étiquette de grille pour chaque direction. Nous utiliserons COND conditionnel pour choisir le bloc AutoCAD que nous devons utiliser. Ce didacticiel AutoLISP nécessite que vous compreniez ce que nous avons fait précédemment. Donc, si vous ne l’avez pas lu ou si vous souhaitez vous rafraîchir la mémoire, lisez le didacticiel AutoLISP ici. Ou si vous êtes complètement nouveau sur AutoLISP, suivez le didacticiel depuis le début ici.

étiquette_grille

Utilisation de COND conditionnel

COND est un peu différent avec IF. Lorsque vous utilisez IF, vous pouvez indiquer à AutoCAD de faire A lorsque la condition est remplie. Ou bien, faites B. COND ne fera les choses que lorsque la condition est remplie.

La base de l’utilisation de COND est :

(cond

((condition a) (choses à faire lorsque la condition a est remplie)

((condition b) (choses à faire lorsque la condition b est remplie)

((condition c) (choses à faire lorsque la condition c est remplie)

A lire :  Articles vedettes sur les billets CAD en 2012

etc…

)

Voyons ce que nous pouvons faire avec COND dans notre cas.

(cond
((ET (= pt1x pt2x) (> pt1y pt2y)) (setq gridblockname « vgridbottom »)) ; changer le nom du bloc lorsque la condition est remplie
((ET (= pt1x pt2x) (< pt1y pt2y)) (setq gridblockname "vgridtop"))

((ET (> pt1x pt2x) (= pt1y pt2y)) (setq gridblockname « hgridleft »))
)

Tout d’abord, nous définissons le nom du bloc sur HGRIDRIGHT. Nous utiliserons ce bloc lorsque nous traçons une ligne de quadrillage vers la droite. Mais lorsque nous le dessinons vers le bas, nous devons utiliser le bloc VGRIDBOTTOM.

Lorsque nous dessinons une grille vers le bas, deux conditions sont remplies :

  • X1 et X2 sont identiques.
  • Y2 est plus grand que Y1.
  • X1, Y1 est le premier point choisi et X2, Y2 est le 2ème point choisi par l’utilisateur. Nous définissons les trois conditions dans notre programme. Pour la bonne direction, nous n’avons pas à le définir car nous l’avons déjà défini comme nom de bloc par défaut.

    Modification de la variable système AutoCAD

    Une autre chose que nous devons faire est de modifier temporairement une variable système AutoCAD. Nous pouvons le faire dans AutoLISP en utilisant SETVAR. Nous voulons créer la grille horizontale ou verticale. Pour y parvenir, nous devons tracer une ligne avec le mode ortho activé.

    Ce comportement est contrôlé par la variable système ORTHOMODE. Nous devons le changer en 1 pour activer le mode ortho. Mais avant de la modifier, il est judicieux de restaurer la variable système une fois le programme terminé. Nous ne voulons pas que le programme modifie notre comportement AutoCAD et nous devons changer d’option à chaque fois que nous utilisons le programme.

    A lire :  Nouveautés d'AutoCAD 2013 : modification d'objets

    Nous devons d’abord enregistrer le mode ortho actuel dans une variable temporaire. Nous pouvons obtenir la variable système et l’enregistrer dans la variable utilisateur dans AutoLISP en utilisant GETVAR.

    (setq CurrentOrthomode (getvar « orthomode »))
    (setvar « orthomode » 1)

    La première ligne obtiendra la variable système et l’enregistrera dans la variable CurrentOrthomode. OK, si vous pensez que le nom de la variable est ridiculement long, vous pouvez choisir votre propre nom 🙂

    La deuxième ligne, nous définissons la variable système ORTHOMODE sur 1.

    Une fois notre programme AutoLISP terminé, nous pouvons restaurer la variable système à sa valeur d’origine.

    (setvar « orthomode » CurrentOrthomode)

    Le programme complet AutoLISP

    Maintenant, nous avons tout ce dont nous avons besoin. Le programme AutoLISP s’exécutera comme ceci :

  • Il vérifiera l’échelle du dessin. Référez-vous au tutoriel précédent pour voir comment cela fonctionne.
  • Cela enregistrera l’orthomode actuel et changera l’orthomode en 1.
  • Il demandera à l’utilisateur de placer deux points pour la grille.
  • Il vérifiera ce qu’il doit utiliser.
  • Il tracera une ligne de quadrillage et insèrera le bloc.
  • Il restaurera l’orthomode.
  • Le code AutoLISP complet est le suivant :
    (defun c:cngrid (/pt1)
    (si (= cnglobalscale nil)
    (c:cnannoscale)
    ) ; fin si

    (setq CurrentOrthomode (getvar « orthomode »))
    (setvar « orthomode » 1)
    (setq pt1 (getpoint « 
    Choisissez le point de départ de la grille : « ))
    (setq pt2 (getpoint pt1 « nPick Grid Last Point: « ))
    (setq pt1x (voiture pt1))(setq pt1y (cadr pt1))
    (setq pt2x (voiture pt2))(setq pt2y (cadr pt2))
    (setq gridblockname « hgridright ») ;définir le nom de la grille par défaut
    (cond
    ((AND (= pt1x pt2x) (> pt1y pt2y)) (setq gridblockname « vgridbottom »)) ; changer le nom de la grille lorsque la condition est remplie
    ((AND (= pt1x pt2x) (< pt1y pt2y)) (setq gridblockname "vgridtop")) ((AND (> pt1x pt2x) (= pt1y pt2y)) (setq gridblockname « hgridleft »))
    )

    A lire :  Personnalisation d'AutoCAD : 5 articles pour en savoir plus sur CUI

    (setq gridnumber (getstring « 
    Entrez le numéro de grille : « ))
    (commande « _ligne » pt1 pt2 «  »)
    (commande « _-insert » gridblockname pt2 cnglobalscale cnglobalscale 0 gridnumber)
    (setvar « orthomode » CurrentOrthomode)
    (principal)
    )

    (defun c:cnannoscale () ; c’est une autre fonction définie pour permettre à l’utilisateur de changer d’échelle plus tard
    (setq cnglobalscale (getreal « 
    Définir l’échelle globale pour l’annotation CN <1/1> : « ))
    (if (= cnglobalscale nil) ; ceci vérifiera si l’utilisateur choisit la valeur par défaut
    (setq cnglobalscale 1)
    ) ; fin si
    )

    Trappe d’erreur

    Pour terminer ce programme AutoLISP, c’est une bonne chose que vous créiez une trappe d’erreur. Nous modifions une variable système AutoCAD : ORTHOMODE. Nous le remettons à sa valeur d’origine. Le problème est que lorsqu’une erreur se produit et que le programme se termine prématurément, la variable système n’est pas restaurée. La variable ne sera pas restaurée lorsque vous appuyez sur la touche esc !

    C’est ce qui se passe dans ce problème de sélection et la boîte de dialogue manquante. De nombreux problèmes peuvent survenir si vous ne définissez pas la détection d’erreurs dans un programme AutoLISP !

    Vous pouvez le lire dans AfraLISP sur le piégeage des erreurs ici.

    .

    Bouton retour en haut de la page