Aller au contenu

[résolu] _3dpoly crée a partir de lsite de points


Messages recommandés

Posté(e)

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]

Posté(e)

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

 

./__\.
(.°=°.)
Posté(e)

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

Posté(e)
(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

 

./__\.
(.°=°.)
Posté(e)

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

Posté(e)

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

Posté(e)

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité