LISP insertion de bloc sur AUTOCAD

Fermé
JP - 7 avril 2012 à 10:47
 Yoda - 10 avril 2012 à 12:44
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)) "")
)
)
)




A voir également:

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.

(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
0
Merci je vais essayer ça je te tiens au courant
0
ça marche pas tout a fait, ça m'insère bien les bloc nommé Cadre1 et Cadre2
ça m'insère aussi les blocs Nom1 et Nom2
mais ça ne me remplis pas mes attributs
0
Je viens de m'appercevoir d'une chose.

(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.
0
J'ai trouvais l'erreur j'ai glisser une parenthèse de trop
Merci encor
0
ça ne marche toujours pas.

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
0