LISP insertion de bloc sur AUTOCAD
JP
-
Yoda -
Yoda -
Bonjour,
J'ai un problème avec mon programme LISP pour insérer mes blocs. (Je suis parti d'un programme exemple)
Pour commencer j'ai créé 4 blocs sur autocad qui vont par deux (je suis obligé)
les deux premiers bloc sont cadre1 (ce bloc ne contient pas d'attribut) le bloc qui va avec s'appel Nom1 (il contient des attributs, T, Y, El, R, N, NB, D, L, PE, PS )
les deux autre blocs sont cadre2 (ce bloc ne contient pas d'attribut) le bloc qui va avec s'appel Nom2 (il contient des attributs, Y, R, NB, D, L,)
Il y a des bug, le premier sur la condition le deuxième sur le renseignement des attributs
Si quelqu'un pourrai m'aider, ça serai gentil merci
(PS ça fait un bon moment que je n'ai pas refais de lisp si on pourrait me dire la commande à taper pour lancer le programme dans autoLisp car je ne m'en souvient plus )
(defun c:Nom ()
(setvar "cmdecho"0)
(setq P1 (Getpoint "\Donner le point d'insertion de la nomenclature:"))
(setq N (getstring "\nTaper 1 pour Nom1, taper 2 pour2."))
(if (= N 1)
((Setq Y (getstring "\nDonner le:"))
(Setq R (getstring "\nDonner le numéro:"))
(Setq NB (getstring "\nDonner le nombre:"))
(Setq D (getstring "\nDonner la distance:"))
(Setq L (getstring "\nDonner la largeur:"))
(command "inserer" "Cadre1" p1 1 1 0 "")
(command "inserer" "Nom1" p1 1 1 0 (strcat "Y" (rtos Y 2 2)) (strcat "R" (rtos R 2 2))(strcat "NB " (rtos NB 2 2))(strcat "D" (rtos D 2 2))(strcat "L" (rtos L 2 2"")
)
((Setq Y (getstring "\nDonner le nom:"))
(Setq N (getstring "\nDonner la quantité:"))
(Setq R (getstring "\nDonner le numéro:"))
(Setq NB (getstring "\nDonner le nombre:"))
(Setq D (getstring "\nDonner le distance:"))
(Setq L (getstring "\nDonner la largeur:"))
(command "inserer" "Cadre2" p1 1 1 0 "")
(command "inserer" "Nom2" p1 1 1 0 (strcat "Y" (rtos Y 2 2))(strcat "T" (rtos Y 2 2))(strcat "N" (rtos N 2 2)) (strcat "R" (rtos R 2 2))(strcat "NB" (rtos NB 2 2))(strcat "D" (rtos D 2 2))(strcat "L" (rtos L 2 2)) "")
)
)
)
J'ai un problème avec mon programme LISP pour insérer mes blocs. (Je suis parti d'un programme exemple)
Pour commencer j'ai créé 4 blocs sur autocad qui vont par deux (je suis obligé)
les deux premiers bloc sont cadre1 (ce bloc ne contient pas d'attribut) le bloc qui va avec s'appel Nom1 (il contient des attributs, T, Y, El, R, N, NB, D, L, PE, PS )
les deux autre blocs sont cadre2 (ce bloc ne contient pas d'attribut) le bloc qui va avec s'appel Nom2 (il contient des attributs, Y, R, NB, D, L,)
Il y a des bug, le premier sur la condition le deuxième sur le renseignement des attributs
Si quelqu'un pourrai m'aider, ça serai gentil merci
(PS ça fait un bon moment que je n'ai pas refais de lisp si on pourrait me dire la commande à taper pour lancer le programme dans autoLisp car je ne m'en souvient plus )
(defun c:Nom ()
(setvar "cmdecho"0)
(setq P1 (Getpoint "\Donner le point d'insertion de la nomenclature:"))
(setq N (getstring "\nTaper 1 pour Nom1, taper 2 pour2."))
(if (= N 1)
((Setq Y (getstring "\nDonner le:"))
(Setq R (getstring "\nDonner le numéro:"))
(Setq NB (getstring "\nDonner le nombre:"))
(Setq D (getstring "\nDonner la distance:"))
(Setq L (getstring "\nDonner la largeur:"))
(command "inserer" "Cadre1" p1 1 1 0 "")
(command "inserer" "Nom1" p1 1 1 0 (strcat "Y" (rtos Y 2 2)) (strcat "R" (rtos R 2 2))(strcat "NB " (rtos NB 2 2))(strcat "D" (rtos D 2 2))(strcat "L" (rtos L 2 2"")
)
((Setq Y (getstring "\nDonner le nom:"))
(Setq N (getstring "\nDonner la quantité:"))
(Setq R (getstring "\nDonner le numéro:"))
(Setq NB (getstring "\nDonner le nombre:"))
(Setq D (getstring "\nDonner le distance:"))
(Setq L (getstring "\nDonner la largeur:"))
(command "inserer" "Cadre2" p1 1 1 0 "")
(command "inserer" "Nom2" p1 1 1 0 (strcat "Y" (rtos Y 2 2))(strcat "T" (rtos Y 2 2))(strcat "N" (rtos N 2 2)) (strcat "R" (rtos R 2 2))(strcat "NB" (rtos NB 2 2))(strcat "D" (rtos D 2 2))(strcat "L" (rtos L 2 2)) "")
)
)
)
A voir également:
- Inserer un bloc sur autocad
- Insérer une vidéo sur powerpoint - Guide
- Insérer signature word - Guide
- Ancienne version autocad gratuite - Télécharger - CAO-DAO
- Insérer liste déroulante excel - Guide
- Comment insérer des points de suite sur word - Guide
1 réponse
Bonjour,
Voila ton Lisp corrigé. Pour l'executer, il faut dabord le charger.
Pendant la phase de mise au point, va dans le menu Outils/Autolisp/charger une application...
Si ça s'est bien passé, tapes sur la ligne de commande le nom de ta fonction (ici Nom sans le "c:")
Si tu fais des modifs, il faudra recharger le lisp à chaque fois.
Voila ton Lisp corrigé. Pour l'executer, il faut dabord le charger.
Pendant la phase de mise au point, va dans le menu Outils/Autolisp/charger une application...
Si ça s'est bien passé, tapes sur la ligne de commande le nom de ta fonction (ici Nom sans le "c:")
Si tu fais des modifs, il faudra recharger le lisp à chaque fois.
(defun c:Nom () (setvar "cmdecho" 0) (setq P1 (Getpoint "\nDonner le point d'insertion de la nomenclature:")) (setq N (getstring "\nTaper 1 pour Nom1, taper 2 pour2.")) (if (= N "1") (progn (Setq Y (getstring "\nDonner le Nom:")) (Setq R (getstring "\nDonner le numéro:")) (Setq NB (getstring "\nDonner le nombre:")) (Setq D (getstring "\nDonner la distance:")) (Setq L (getstring "\nDonner la largeur:")) (command "-inserer" "Cadre1" p1 1 1 0 "") (command "-inserer" "Nom1" p1 1 1 0 (strcat "Y " (rtos Y 2 2)) (strcat "R " (rtos R 2 2)) (strcat "NB " (rtos NB 2 2)) (strcat "D " (rtos D 2 2)) (strcat "L " (rtos L 2 2)) " ");command );progn (progn (Setq Y (getstring "\nDonner le nom:")) (Setq N (getstring "\nDonner la quantité:")) (Setq R (getstring "\nDonner le numéro:")) (Setq NB (getstring "\nDonner le nombre:")) (Setq D (getstring "\nDonner le distance:")) (Setq L (getstring "\nDonner la largeur:")) (command "-inserer" "Cadre2" p1 1 1 0 "") (command "-inserer" "Nom2" p1 1 1 0 (strcat "Y " (rtos Y 2 2)) (strcat "T " (rtos Y 2 2)) (strcat "N " (rtos N 2 2)) (strcat "R " (rtos R 2 2)) (strcat "NB " (rtos NB 2 2)) (strcat "D " (rtos D 2 2)) (strcat "L " (rtos L 2 2)) " ");command );progn );if );defun
ça m'insère aussi les blocs Nom1 et Nom2
mais ça ne me remplis pas mes attributs
(Setq Y (getstring "\nDonner le Nom:")) ; tu demande à saisir un string
et ensuite
(strcat "Y " (rtos Y 2 2)); tu demande de convertir un réèl en string, or Y est un déja un string.
Tu dois changer tous les getstring par des getreal, sauf le tout premier ( le N ).
Dis moi si c'est mieux.
Merci encor
j'ai simplifier l'exemple avec moins d'attribut pour comprendre
Le problème que j'avais est qu'après avoir renseigné ce que l'on me demandait dans le programme, la boite de dialogue des attribut des blocs'affichait, alors qu'il ne le faudrait pas.
(defun c:Nom ()
(setvar "cmdecho" 0)
(setq P1 (Getpoint "\nDonner le point d'insertion de la nomenclature:"))
(setq N (getstring "\nTaper 1 pour Nom1, taper 2 pour2."))
(if (= N "1")
(progn
(Setq A (getstring "\nDonner A :")) ;Avec A une chaine de caractère et non un nombre
(Setq B (getstring "\nDonner B:"))
(command "-inserer" "Cadre1" p1 1 1 0 "")
(command "-inserer" "Nom1" p1 1 1 0
(A 2 2) ; rempli l'attribut A avec la donner de A
(B 2 2) ;rempli l'attribut B avec la donner de B
" ");command
);progn
(progn
(Setq E (getstring "\nDonner E:"))
(C (= E))
(D ( = E))
(command "-inserer" "Cadre2" p1 1 1 0 "")
(command "-inserer" "Nom2" p1 1 1 0
( C 2 2) ; rempli l'attribut C avec la donner de E
( D 2 2) ; rempli l'attribut D avec la donner de E
" ");command
);progn
);if
);defun