pingoo666 Posté(e) le 24 février 2006 Posté(e) le 24 février 2006 Bonjour, je suis en train de fair un petit lisp pour pouvoir créer une polyligne 3D en fonctin d'une lste de point. mais j'ai un problème : je epux créer d'autres entités mais pas de polylignes 3d... sachant que list_pt_tmp et list_pt2d_tmp sont des listes de coordonnées : (command "_3dpoly") (while (< inc taille_list_pt) (setq pointz (car list_pt_tmp)) (setq pointxy (car list_pt2d_tmp)) (setq x (list (car pointxy))) (setq y (list (cadr pointxy))) (setq z (list (caddr pointz))) (setq pt (append x y z)) (command pt) (setq list_pt_tmp (cdr list_pt_tmp)) (setq list_pt2d_tmp (cdr list_pt2d_tmp)) (setq inc (+ 1 inc)) (command "") ne marche pas par contre : (while (< inc taille_list_pt) (setq pointz (car list_pt_tmp)) (setq pointxy (car list_pt2d_tmp)) (setq x (list (car pointxy))) (setq y (list (cadr pointxy))) (setq z (list (caddr pointz))) (setq pt (append x y z)) (command "_point" pt) (setq list_pt_tmp (cdr list_pt_tmp)) (setq list_pt2d_tmp (cdr list_pt2d_tmp)) (setq inc (+ 1 inc)) lui marche parfaitement... je ne comprend pas pourquoi :( merci d'avance de votre aide [Edité le 25/2/2006 par pingoo666]
Tramber Posté(e) le 24 février 2006 Posté(e) le 24 février 2006 Je te donne mon avis : Fais plutot une boucle qui construit une liste de point avec (setq lispts(append listpts(list (list x y z)))) puis envois :(command "_3dpoly" (foreach p listpts (command p)) (command) ) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 24 février 2006 Posté(e) le 24 février 2006 Salut, Je pense comme Tramber, sans vouloir t'imposer mon style, il me semble préférable de traiter d'abord la liste de points : si j'ai bien compris, tu récupères les coordonnées x et y à partir d'une liste (list_pt2d_tmp) et le z à partir d'une autre (list_pt_tmp).Tu peux faire la liste des sommets de la façon suivante : (setq pts (mapcar '(lambda (p1 p2) (list (car p1) (cadr p1) (caddr p2))) list_pt2d_tmp list_pt_tmp ) ) Et ensuite créer la polyligne directement à partir de la nouvelle liste (si elle existe) : (if pts (progn (command "_3dpoly") (mapcar 'command pts) (command "") ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Tramber Posté(e) le 24 février 2006 Posté(e) le 24 février 2006 (mapcar 'command pts) Joli ! Quel esthète ce Gile ;) mapcar est peut-être la fonction du vieil Autolisp que j'ai comprise et apprise le plus tardivement. Elle fait pourtant de divins miracles. Je précise, comme on est dans le forum débutant.Pingoo, tu aurais pu aussi nous dire ce que te renvoie la console.Je me demande si tu vois que ton (while n'est pas fermé avant le (command "") [Edité le 24/2/2006 par Tramber] Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
(gile) Posté(e) le 24 février 2006 Posté(e) le 24 février 2006 Pour Pingoo, Difficile de dire si l'erreur provenait du manque de la paranthèse pour fermer le (while ... ou de la définition des variables inc ou taille_list_pt, étant donné que tu ne donnes qu'un extrait de ton code. En tout cas, comme çà, çà marche : [color=#CC0000](setq taille_list_pt (length list_pt2d_tmp)) (setq inc 0)[/color] (command "_3dpoly") (while ( (setq pointz (car list_pt_tmp)) (setq pointxy (car list_pt2d_tmp)) (setq x (list (car pointxy))) (setq y (list (cadr pointxy))) (setq z (list (caddr pointz))) (setq pt (append x y z)) (command pt) (setq list_pt_tmp (cdr list_pt_tmp)) (setq list_pt2d_tmp (cdr list_pt2d_tmp)) (setq inc (+ 1 inc)) [color=#CC0000])[/color] (command "") pour Tramber, je suis, en effet, assez sensible au "style" et je crois que si le LISP me plait tant c'est en partie à cause de çà. Certaines expressions sont d'une "pureté" qui m'émeut vraiment. Je dois avouer que je n'ai pas trouvé tout seul (mapcar 'command pts), mais que je l'ai lue quelque part, dans la FAQ AutoLISP sûrement, c'est une véritable "bible" pour ce genre d'effets de style. [Edité le 25/2/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pingoo666 Posté(e) le 25 février 2006 Auteur Posté(e) le 25 février 2006 Tout d'abord merci pour vos réponses.... bon je suis une buse c'était bien la prenthèse fermante qui était positionnée au mauvais endroit. Encore merci !
(gile) Posté(e) le 25 février 2006 Posté(e) le 25 février 2006 Salut Pingoo, Je me permet de te recommander d'utiliser l'éditeur VisualLisp pour créer tes LISP, c'est un outil puissant, ne serait-ce que pour l'appariement des paranthèses. Par exemple, un double clic devant une paranthèse ouvrante (ou derrière une fermente) sélectionne tout le code jusqu'à la paranthèse fermante (ou ouvrante) correspondante. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
pingoo666 Posté(e) le 26 février 2006 Auteur Posté(e) le 26 février 2006 merci du conseil :) mais j'ai une trs mauvase habitude : utiliser le bloc note pour coder... Sinon j'aime beaucoup le fonction mapcar que je viens de découvrir... J'essayerai de m'enreservir à l'occasion
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