Bonjour,
Je viens demander vos lumières, mes connaissances étant limitées
.
J'ai fais ce programme aussi peu intuitif qu'il peut être.
Il fonctionne bien sur mon poste, étant bloqué en valeur après "z" j'ai pu mettre des caractère spéciaux.
defun c:printpv5p4()
(setq a (getpoint "\nCoin Inférieur Gauche:"))
(setq b (mapcar '+ a '(210.0 297.0 0.0)))
(setq c (mapcar '+ a '(210.0 0.0 0.0)))
(setq d (mapcar '+ a '(420.0 297.0 0.0)))
(setq e (mapcar '+ a '(420.0 0.0 0.0)))
(setq f (mapcar '+ a '(630.0 297.0 0.0)))
(setq g (mapcar '+ a '(0.0 297.0 0.0)))
(setq h (mapcar '+ a '(210.0 594.0 0.0)))
(setq i (mapcar '+ a '(420.0 594.0 0.0)))
(setq j (mapcar '+ a '(630.0 594.0 0.0)))
(setq k (mapcar '+ a '(0.0 594.0 0.0)))
(setq l (mapcar '+ a '(210.0 891.0 0.0)))
(setq m (mapcar '+ a '(420.0 891.0 0.0)))
(setq n (mapcar '+ a '(630.0 891.0 0.0)))
(setq o (mapcar '+ a '(0.0 891.0 0.0)))
(setq p (mapcar '+ a '(210.0 1188.0 0.0)))
(setq q (mapcar '+ a '(420.0 1188.0 0.0)))
(setq r (mapcar '+ a '(630.0 1188.0 0.0)))
(setq s (mapcar '+ a '(0.0 1188.0 0.0)))
(setq t (mapcar '+ a '(210.0 1485.0 0.0)))
(setq u (mapcar '+ a '(420.0 1485.0 0.0)))
(setq v (mapcar '+ a '(630.0 1485.0 0.0)))
(setq w (mapcar '+ a '(840.0 1485.0 0.0)))
(setq x (mapcar '+ a '(840.0 1188.0 0.0)))
(setq y (mapcar '+ a '(840.0 891.0 0.0)))
(setq z (mapcar '+ a '(840.0 594.0 0.0)))
(setq ß (mapcar '+ a '(840.0 297.0 0.0)))
(setq µ (mapcar '+ a '(630.0 0.0 0.0)))
(command "_-plot" "Oui" "" "PDFCreator" "A4" "Millimètres" "Portrait" "Non" "Fenêtre" s t "1=1" "Centre" "Oui" "Couleur.ctb" "Oui" "Non" "Non" "Non" "Non" "Non" "Oui")
(princ)
...
(command "_-plot" "Oui" "" "PDFCreator" "A4" "Millimètres" "Portrait" "Non" "Fenêtre" µ ß "1=1" "Centre" "Oui" "Couleur.ctb" "Oui" "Non" "Non" "Non" "Non" "Non" "Oui")
(princ)
)
Seulement, je suis sur la version 2021 et quand je veut le mettre sur le poste d'un collègue qui est en version 2020, problème car les caractère spéciaux ne sont pas pris en compte et du coup la dernière impression "µ ß" ne se lance pas.
Auriez-vous une solution pour rendre ce programme plus intuitif au niveau des valeurs "setq" a, b, c, ... ou comment faire prendre en compte les caractère spéciaux par défaut dans autocad ?
Merci
Le titre du sujet a été modifié par un modérateur pour faciliter la recherche. Titre original:
Modification LISP impression
Résolu ! Accéder à la solution.
Résolu par Luna1. Accéder à la solution.
Salut,
Éviter les caractères spéciaux dans les noms de variables (comme de calques, de blocs, etc.) est une règle de base.
Pour les symboles AutoLISP (variables ou nom de fonction) se limiter à une succession de caractères alphabétique[a-z], numériques [0-9] et, éventuellement le souligné (underscore _) me semble une bonne pratique.
Ce sachant, c'est à toi de choisir des noms de variables plus explicites.
(setq coin_inferieur_gauche (getpoint "\nCoin Inférieur Gauche:")))
(setq coin_superieur_droit_A4_portrait (mapcar '+ coin_inferieur_gauche '(210.0 297.0 0.0)))
...
ou
(setq infGauche (getpoint "\nCoin Inférieur Gauche:")))
(setq supDroitA4P (mapcar '+ infGauche '(210.0 297.0 0.0)))
...
ou n'importe quoi d'autre...
Par contre, il est important de prendre l'habitude de déclarer localement les variables :
(defun c:printpv5p4 (/ infGauche supDroitA4P ...) ...)
Coucou @romainbrugniaud,
Dans un premier temps sache que les noms de variables tels que 'A3_Portrait' sont tout aussi valide que 'a' (ne pas écrire les apostrophes ' évidemment). Tu n'es absolument pas limité à un seul caractère pour le nom de tes variables. Cela te permet non seulement d'avoir droit à plus de 26 variables mais surtout d'avoir des noms de variables plus clairs et compréhensibles à la fois pour toi que pour les autres. Il faut également savoir qu'il n'y a aucune différences entre les majuscules et les minuscules donc la variable 'a' et 'A' sont équivalentes.
Je ne peux que te conseiller également de déclarer tes variables localement pour t'éviter tout problème. Pour se faire il suffit d'écrire dans les première parenthèses à la suite du (defun) le nom de toutes la variables que tu as déclaré avec (setq) dans ton programme. En réutilisant le nom de tes variables actuelles, voici ta ligne de code concernée :
(defun c:printpv5p4 ()
et voici à quoi elle ressemble un fois tes variables déclarées localement :
(defun c:printpv5p4 (/ a b c d e f g h i j k l m n o p q r s t u v w x y z ß µ)
Dans le cas où tu utilises des chaînes de caractères un peu plus complexes, par exemple 'A3_Portrait' à la place de 'a' tu aurais donc ceci :
(defun c:printpv5p4 (/ A3_Portrait b c d e f g h i j k l m n o p q r s t u v w x y z ß µ)
Ensuite, il faut éviter à tout prix d'utiliser des caractères spéciaux tels que les lettres non issues de l'alphabet latin (lettres grecques, accents, etc...) car selon l'encodage du fichier LISP et l'interprétation d'encodage d'AutoCAD, cela peut poser un soucis (ASCII / Unicode). En effet la variable LISPSYS à fait son apparition en 2021 (impactant de ce fait les AutoCAD 2020 et antérieurs) permettant de définir l'IDE (IDE Visual LISP d'AutoCAD - VLIDE - ou Visual Studio Code - VSC -) affecté à AutoCAD pour la lecture/édition d'un fichier LISP ainsi que l'encodage utilisé.
En espérant que cela puisse t'aider. Et bonne continuation dans l'apprentissage du langage LISP 🙂
Si jamais voici des liens pour mieux te former sur ce langage :
- https://www.da-code.fr/ (de @-didier-)
- https://programmation.developpez.com/tutoriels/autolisp/introduction-autolisp/ (de @_gile)
Bisous,
Luna
Merci pour vos réponses 🙂
Effectivement, ne pas être limité à un seul caractère m'a rendu la tâche beaucoup plus facile.
Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.