Infinicad Posté(e) le 30 mars 2017 Posté(e) le 30 mars 2017 Bonjour à tous Ceci est mon premier vrai lispIl s'agit de créer une polyligne selon les points cliqués et d'en modifier les extrémités.Mon probleme ets que lorsque je le déroule morceau par morceau dans visuallisp il semble fonctionner.Mais quand je le lance comme commande il me donne :"élément incorrect dans la liste d'arguments: 219.161"Je ne sais pas comment retrouver l'erreur, je suis vraiment débutant dans Visual..voici le lisp en question ;;; modifie les coordonées d'un point(liste de coordonées) (defun modcoor (L x y) (cons (+ (car L) X) (cons (+ (cadr L) y) '(0)) ) ) ;;;defini la position d'un point (L1) par rapport au premier point d'une liste de points(L2) (defun pos (L1 L2 / sens) (if (> (car L1) (car (car L2))) (if (> (cadr L1) (car (cadr L2))) (setq sens "1") (setq sens "2") ) (if (> (cadr L1) (car (cadr L2))) (setq sens "3") (setq sens "4") ) ) ) (defun polsig (/ lstpt ptd ptf ) (setq lstpt nil) (setq ptd nil) (setq ptf nil) (setq ptd (getpoint "\1er point")) (initget 1 "1 2") (setq fild (getkword "1er fil ou 2e fil?(1 or 2)") ) (while (and (or pt1 (setq pt1 (getpoint "Enter the first point: ")) ) (setq pt2 (getpoint "enter the next point <eXit>: ")) ) (setq lstpt (cons pt2 lstpt)) ) (initget 1 "1 2") (setq fila (getkword "1er fil ou 2e fil?(1 or 2)")) (setq ptf (car lstpt)) (setq lstpt (cdr lstpt)) (setq sens (pos ptf lstpt)) (setq ptf;;;if car lstpt nill (if (= fila "1") (if (or (= sens "1") (= sens "2")) (setq ptf (modcoor ptf 0.5 0)) (setq ptf (modcoor ptf -0.5 0)) ) (if (= sens "1") ( (setq ptf (cons (modcoor ptf 0.2 0.5) (list (modcoor ptf 1 1))) ) (setq lstpt (cons (modcoor (car lstpt) 0 1) (cdr lstpt))) ) (if (= sens "2") ( (setq ptf (cons (modcoor ptf 5 5) (list (modcoor ptf 5 5)))) (setq lstpt (cons (modcoor (car lstpt) 5 5) (cdr lstpt))) ) (if (= sens "3") ( (setq ptf (cons (modcoor ptf 10 10) (list (modcoor ptf 10 10))) ) (setq lstpt (cons (modcoor (car lstpt) 5 5) (cdr lstpt))) ) (if (= sens "4") ( (setq ptf (cons (modcoor ptf 20 20) (list (modcoor ptf 20 20)) ) ) (setq lstpt (cons (modcoor (car lstpt) 20 20) (cdr lstpt)) ) ) (nil) ) ) ) ) ) ) (setq lstpt (reverse lstpt)) (setq sens (pos ptd lstpt)) (setq ptd (if (= fild "1") (if (or (= sens "1") (= sens "2")) (setq ptd (modcoor ptd 0.5 0)) (setq ptd (modcoor ptd -0.5 0)) ) (if (= sens "1") ( (setq ptd (cons (modcoor ptd 0.2 0.5) (list (modcoor ptd 1 1))) ) (setq lstpt (cons (modcoor (car lstpt) 0 1) (cdr lstpt))) ) (if (= sens "2") ( (setq ptd (cons (modcoor ptd 5 5) (list (modcoor ptd 5 5)))) (setq lstpt (cons (modcoor (car lstpt) 5 5) (cdr lstpt))) ) (if (= sens "3") ( (setq ptd (cons (modcoor ptd 10 10) (list (modcoor ptd 10 10))) ) (setq lstpt (cons (modcoor (car lstpt) 5 5) (cdr lstpt))) ) (if (= sens "4") ( (setq ptd (cons (modcoor ptd 20 20) (list (modcoor ptd 20 20)) ) ) (setq lstpt (cons (modcoor (car lstpt) 20 20) (cdr lstpt)) ) ) (nil) ) ) ) ) ) ) (setq lstpt (append ptf lstpt)) (setq lstpt (append ptd (reverse lstpt))) (setq lstpt (mapcar '(lambda (x) (cons 10 x)) lstpt)) (setq lstpt (append (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") (cons 8 "0") '(100 . "AcDbPolyline") (cons 90 (length lstpt)) '(70 . 0) ) lstpt) ) (entmake lstpt) )Je sais qu'il beaucoup d'amélioration à faire(des fonction à créer etc..)Mais je voudrais surtout comprendre l'écart entre Visual qui me donne quelque chose et la commande qui fait une erreur. Merci à vous
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant