Bonjour à toutes et à tous,
Avant d'exposer mon problème, je tiens à préciser que je suis débutant dans le monde du lisp et que le fichier joint n'est surement pas conforme à la façon de faire. Je l'ai construit au fur et à mesure que je trouvais les informations sur le net. Je vous remercie par avance si vous avez des conseils ou des remarques qui me permettront de m'améliorer.
Le but du LISP est de pouvoir insérer une présentation depuis un gabarit va un initget getkword puis de basculer sur la présentation créée. A la suite de ça un 2e initget getkword se lance pour choisir un groupe d'état de calque à sélectionner, une fois le choix fait un 3e getkword est lancé pour sélectionner un des états de calque du groupe afin de l'appliquer à la présentation.
Mon problème est que les conditions affectées au getkword ne se lancent pas après avoir choisit l'état de calque à appliquer à la présentation. Ou alors il n'est appliquer que la 1er condition peu importe le choix (je ne sais plus dans quel contexte j'ai essayer de placer des conditions un peu partout)
Je vous remercie par avance pour votre aide.
Résolu ! Accéder à la solution.
Résolu par _gile. Accéder à la solution.
Salut,
En regardant ton code, je vois une erreur dans l'expression :
(command
"zoom" "et"
"zoom" "f"
(while (> (getvar "cmdactive") 0)
(command pause))
);_ command
qu'il faut écrire:
(command "zoom" "et" "zoom" "f")
(while (> (getvar "cmdactive") 0)
(command pause)
) ;_ while
Il y a aussi des doubles parenthèses dans les expressions :
((layerstate-restore "Test 1" (acet-currentviewport-ename) 5))
À part ça je te conseillerais :
J'ai essayé de ré-écrire ton code, mais je ne l'ai pas testé.
(defun C:LMAN (/ a b c) ;_ déclaration des variables locales
(initget 1 "A4H A4V A3H A3V A2H A2V A1 A0")
(setq a (getkword "\nChoix du format de présentation : [A4H/A4V/A3H/A3V/A2H/A2V/A1/A0]: "))
(command "_layout" "g" "C:\\ProgramData\\Autodesk\\******************************.dwt" a "ctab" a "_.mspace" "cvport" "2")
(command "zoom" "et" "zoom" "f")
(while (> (getvar "cmdactive") 0)
(command pause)
) ;_ while
(initget 1 "EXISTANT ARCHITECTURE TECHNIQUE")
(setq b getkword "\nChoix de l'état de calque EXISTANT : [EXISTANT/ARCHITECTURE/TECHNIQUE]: " )
(cond
((= b "EXISTANT")
(initget "BATIMENT TEST1 TEST2")
(setq c (getkword "\nChoix de l'état de calque à appliquer [BATIMENT/TEST1/TEST2]: "))
(cond
((= c "BATIMENT")
(layerstate-restore "E1000_Batiment existant" (acet-currentviewport-ename) 5)
)
((= c "TEST1")
(layerstate-restore "Test 1" (acet-currentviewport-ename) 5)
)
((= c "TEST2")
(layerstate-restore "Test 2" (acet-currentviewport-ename) 5)
)
) ;_ cond
)
((= b "ARCHITECTURE")
(initget "AMENAGEMENT TEST1 TEST2")
(setq c (getkword "\nChoix de l'état de calque à appliquer [AMENAGEMENT/TEST1/TEST2]: "))
(cond
((= c "AMENAGEMENT") (layerstate-restore "A2000_Amenagement projet" (acet-currentviewport-ename) 5)
)
((= c "TEST1")
(layerstate-restore "Test 1" (acet-currentviewport-ename) 5)
)
((= c "TEST2")
(layerstate-restore"Test 2"(acet-currentviewport-ename) 5)
)
) ;_ cond
)
((= b "TECHNIQUE")
(initget "AMENAGEMENT TEST1 TEST2")
(getkword "\nChoix de l'état de calque à appliquer [CFO-HAUT/TEST1/TEST2]: ")
)
(cond
((= c "CFO-HAUT")
(layerstate-restore "T2000_CFO haut projet" (acet-currentviewport-ename) 5)
)
((= c "TEST1")
(layerstate-restore "Test 1" (acet-currentviewport-ename) 5)
)
((= c "TEST2")
(layerstate-restore "Test 2" (acet-currentviewport-ename) 5)
)
) ;_ cond
) ;_ cond
(command "regen" "._pspace")
(princ)
) ;_ defun
Bonjour Mr.CHANTEAU,
Merci pour vos réponses.
Je vais trouver de quoi me familiariser avec VLIDE.
Concernant les doubles parenthèses des expressions
((layerstate-restore "Test 1" (acet-currentviewport-ename) 5))
Je l'ai mises car sans elles, ça m'affichais un message d'erreur, je ne sais plus si c'était pour la syntaxe ou pour des arguments car j'ai fais des essais dans tous les sens.
Concernant le lisp il y a le message erreur de syntaxe lors du chargement, je vais essayer de trouver le problème.
Pour ceux qui en ont besoin le LISP est en PJ
Dans le code les ******** sont à remplacer par le chemin de votre fichier dwt.
Tous les noms GROUPE1/2/3 , les lettres A/B/C et les NOM_ETAT_DE_CALQUE sont à remplacer par ce que vous souhaitez afficher et le nom de vos états de calque.
Encore merci pour votre aide Mr.CHANTEAU
Bonjour @Romain.R
Je me permets une petite auto-promo (voir ma signature)
J'ai souhaité faire ce site pour les francophones qui veulent débuter en programmation pour AutoCAD
Mon conseil, sans doute ringard, est de ne pas mettre la barre trop haut pour débuter.
Amicalement
Didier Aveline
Bonjour,
Vous avez raison de partager votre site LIEN , il est déjà dans mes onglets web. J'ai également le document PDF de Mr.CHANTEAU "Introduction à Autolisp".
Je suis d'accord avec vous, qu'il faut commencer avec de bonnes bases et par étapes, ce que je vais reprendre depuis le début.
Je met en place actuellement un nouveau gabarit pour mon entreprise et par manque de temps je me focalisais sur les problèmes que je rencontrais.
Merci d'avoir accordé du temps à mon problème.
Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.