Aller au contenu

liste de sélection


Messages recommandés

Invité samuelM
Posté(e)

Bonjour,

 

voir ce sujet pour lire la suite http://www.cadxp.com/modules.php?op=modload&name=XForum&file=viewthread&tid=33322#pid142615

Petit résumé: ce programme permet de sélectionner un objet 3d, le nommer puis extraire ses sections dans une feuille exel.

 

je recherche maintenant à pouvoir exécuter le programme sur l'ensemble d'une sélection, soit plusieurs objets en même temps.

 

pour sélectionner plusieurs objets, j'ai réussi avec "ssget" mais après je ne sais pas comment faire pour que cette sélection soit une liste dans laquelle se trouve tous les objets sur lesquels le coeur du programme doit s'exécuter.

 

Pouvez vous me renseigner svp.

 

 

 

 

[Edité le 16/6/2011 par samuelM]

Posté(e)

Salut,

 

 

On accède aux entités d'un jeu de sélection avec la fonction ssname (voir l'aide pour cette fonction).

 

ssname requiert 2 arguments : le jeu de sélection et l'index de l'entité (base = 0). Il faut donc incrémenter ou décrémenter cet index pour obtenir toutes les entités.

 

 

Exemples pour obtenir une liste (lst) des entités contenues dans un jeu de sélection (ss).

 

 

On initialise l'index (n) à 0 et on boucle tant qu'il y a des entités :

 

(setq n 0)

(while (setq ent (ssname ss n))

 (setq	n   (1+ n)

lst (cons ent lst)

 )

)

 

 

On peut aussi initialiser n à la longueur du jeu de sélection (avec sslength) et boucler en décrémentant tant que n est supérieur ou égal à 0 :

 

(setq n (sslength ss))

(while (<= 0 (setq n (1- n)))

 (setq lst (cons (ssname ss n) lst))

)

 

 

Ce qui peut s'écrire aussi, de manière plus concise, avec repeat :

 

(repeat	(setq n (sslength ss))

 (setq lst (cons (ssname ss (setq n (1- n))) lst))

)

 

 

Ou encore plus concis (mais l'exécution est plus lente) en utilisant la fonction ssnamex :

 

(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Invité samuelM
Posté(e)

Bonjour,

 

Merci pour ces renseignements.

je viens de lire quelque chose sur "ssname" et qui me dit qu'avec "ssget" ( ce que j'ai fais pour le jeu de sélection), les sous-entités comme les sommets de polylignes ne seront pas retournées, il faut donc utilisér Entnext pour accéder aux sous entités.

 

voila ma première ligne pour la sélection :

 

 (setq ent (ssget))

 

Dans ce que tu m'as donné précédemment , le jeu de sélection (ss) donc si je comprends bien il faut que je remplace le "ent" que j'ai déjà par "ss" avant "ssget"?

 

ps: je suis conscient que c'est relativement compliqué pour moi mais c'est est dernier programme que je dois faire.

 

[Edité le 15/6/2011 par samuelM]

Invité samuelM
Posté(e)

est ce que quelqu'un peut me renseigner sur l'erreur [surligneur] lentityp nil[/surligneur] ?

 

là je suis vraiment bloqué je ne comprends plus rien :(

Posté(e)

Je le répète, il me semble que tu mets la barre trop haut.

Tu veux faire un programme relativement complexe sans avoir les bases...

Commence par de petites applications simples et finalise les tout seul en résolvant toi même les erreurs, c'est comme ça qu'on apprend. L'éditeur Visual LISP et l'aide aux développeurs sont tes amis.

 

lentityp nil veut dire qu'une fonction attend une entité (type ENAME) comme argument et que c'est nil qui lui est passé (tu peux localiser l'erreur avec la méthode donnée dans le sujet en lien ci-dessus).

 

Pour programmer en LISP, il faut bien comprendre ce que retourne chaque fonction :

ssget retourne un jeu de sélection (type PICKSET) ou nil

ssname retourne un nom d'entité (type ENAME) ou nil

entnext retourne le nom d'entité de l'entité suivant celle qui lui est passée en argument ou de la 'sous-entité' dans le cas d'entités complexes (références de bloc avec attributs, définition de bloc, polylignes 2d 'anciennes' ou 3d ou maillages).

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Invité samuelM
Posté(e)

merci de ton aide et tes conseils, mais rassure toi c'est mon dernier programme. je termine vendredi.

 

je me débrouille pour le finir seul avec l'aide paragraphe infinis.

 

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é