LISP erreur d'argument

Fermé
Boc - 5 juil. 2012 à 19:35
 Yoda - 6 juil. 2012 à 14:28
Bonjour

J'ai crée un programme permettant d'imprimer les pages d'un carnet en A4 que l'on fait sur AutoCAD.
Dans mon programme j'ai deux possibilité d'impression, soit j'imprime tout le carnet, soit j'ai le choix des page du carnet.
Quant je demande à tout imprimer tout va bien.
Quant je choisis les pages à imprimer, les page s'imprime bien mais j'ai un messade d'erreur qui arrive et je ne trouve pas d'ou ça vient.

erreur: type d'argument incorrect: numberp: nil

Merci de m'aider.

PS:
Voici le programme.

(defun c:ImpA4()

; Choix des deux point de la fenêtre de traçage
(setq p0 (list 0.000 0.0000 0.000000 ))
(setq p1 (list 200 -500.000 0.000000 ))
(setq ecart 50) ; écart entre les page
(setq larg 200); largeur d'une page

; Choix de l'impression soit tout le carnet soit on choisi les pages
(setq Imp (getstring "\nQuel type d'impression, taper P pour choisir des pages ou T pour tout le carnet:"))
(if (= Imp "T")
; cas ou on imprime tout
(progn
(setq pge (getreal "\n Donner le nombre de page:")); on resneigne le nombre de page du carnet
(setq Rsgnmt (fix pge))
(progn
(repeat Rsgnmt ; on crée une boucle ou l'on va répéter autant de foi le prgramme qu'il y a de page
(progn
; commande pour le traçage
(command "-traceur" "Oui" "Objet" "HP LaserJet" "A4" "Millimètres" "Portrait" "Oui" "Fenêtre" p0 p1 "Plein format" "Centre" "Oui" "BA-1-100e.ctb" "Oui" "A" "N" "N" "O")
(setq p0 (polar p0 0(+ ecart larg)))
(setq p1 (polar p1 0 (+ ecart larg)))
)
)
)
)
(progn
; CREATION DE LA BOUCLE EN FONCTION DES PAGE CHOISI.
(terpri)(setq rep "F"); on saute une ligne
(while (= rep "F")
(prompt "\nATTENTION pour la page de garde taper 0")
(setq page (getreal "\nDonner le n° de la page ([espace] pour FIN): "))
(setq npage (fix page))
(command pt)
(if (= page nil)
(setq rep "X")
(progn
(setq p0 (list -0.005 0.0005 0.000000 ))
(setq p1 (list 388.005 -568.000 0.000000 ))
(setq p0 (polar p0 0 (* (+ ecart larg) npage )))
(setq p1 (polar p1 0 (* (+ ecart larg) npage )))
(command "-traceur" "Oui" "Objet" "HP LaserJet" "A4" "Millimètres" "Portrait" "Non" "Fenêtre" p0 p1 "Plein format" "Centre" "Oui" "BA-1-100e.ctb" "Oui" "A" "N" "N" "O")

1 réponse

Bonjour,

Ton lisp est incomplet.
A tout hazard, cette ligne ne me dit rien:
(command pt)

La commande pt doit être définie avant l'appel, sinon ça plante.
(defun c:pt()
...
...
)
L'appel se fait comme ça:
(command "pt")

;)
0
j'ai rectifier mon programme mais j'ai toujour la même erreur.

(defun c:ImpA4()
(setq p0 (list 0.00 0.000 0.000 ))
(setq p1 (list 100 200.000 0.000))
(setq CHOIXIMP (getstring "\nTaper P pour imprimer en PDF :"))
(if ( = CHOIXIMP "P")
(progn
(setq IMPRIMANTE "PDFCreator")
)
(progn
(setq IMPRIMANTE "HP LaserJet ")
)
)
(setq ecart 50)
(setq larg 100)
;(setq alfa (* pi -1))

(setq Imp (getstring "\nQuel type d'impression, taper P pour choisir des pages ou T pour tout le carnet:"))
(Cond
((= Imp "T")
(progn
(setq pge (getreal "\n Donner le nombre de page:"))
(setq Rsgnmt (fix pge))
(progn
(repeat Rsgnmt ; on crée une boucle ou l'on va répéter autant de foi le prgramme qu'il y a de page
(progn
(command "-traceur" "Oui" "Objet" IMPRIMANTE "A4" "Millimètres" "Portrait" "Oui" "Fenêtre" p0 p1 "Plein format" "Centre" "Oui" "1.ctb" "Oui" "A" "N" "N" "O")
(setq p0 (polar p0 0(+ ecart larg)))
(setq p1 (polar p1 0 (+ ecart larg)))
)
)
)
)
)
((= Imp "P")
(progn
; CREATION DE LA BOUCLE EN FONCTION DES PAGE CHOISI.
(prompt "\nATTENTION pour la page de garde taper 0")
(terpri)
(setq page 0)
(setq npage (fix page))
(while page
(setq page (getreal "\nDonner le n° de la page ([espace] pour FIN): "))
(setq npage (fix page))
(setq p0 (list -0.005 0.0005 0.000000 ))
(setq p1 (list 388.005 -568.000 0.000000 ))
(setq p0 (polar p0 0 (* (+ ecart larg) npage )))
(setq p1 (polar p1 0 (* (+ ecart larg) npage )))
(command "-traceur" "Oui" "Objet" IMPRIMANTE "A4" "Millimètres" "Portrait" "Oui" "Fenêtre" p0 p1 "Plein format" "Centre" "Oui" "1.ctb" "Oui" "A" "N" "N" "O")


); fin while

); fin progn
)
( T (prompt "\nVous n'avez pas renségnier le type d'impression"))
); fin cond
);fin defun
0
Voilà les modifs pour que ça marche

(setq page 0) 
(setq npage (fix page)) 
(while page
   (setq page (getreal "\nDonner le n° de la page ([espace] pour FIN): "))
   (if  (/= page nil)
   (progn
   (setq npage (fix page)) 
   (setq p0 (list -0.005 0.0005 0.000000 )) 
   (setq p1 (list 388.005 -568.000 0.000000 )) 
   (setq p0 (polar p0 0 (* (+ ecart larg) npage ))) 
   (setq p1 (polar p1 0 (* (+ ecart larg) npage ))) 
   (command "-traceur" "Oui" "Objet" IMPRIMANTE "A4" "Millimètres" "Portrait" "Oui" "Fenêtre" p0 ;p1 "Plein format" "Centre" "Oui" "1.ctb" "Oui" "A" "N" "N" "O") 
   ))
); fin while 


A+
0