Invité samuelM Posté(e) le 14 juin 2011 Posté(e) le 14 juin 2011 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]
(gile) Posté(e) le 14 juin 2011 Posté(e) le 14 juin 2011 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) le 15 juin 2011 Posté(e) le 15 juin 2011 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) le 15 juin 2011 Posté(e) le 15 juin 2011 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 :(
(gile) Posté(e) le 15 juin 2011 Posté(e) le 15 juin 2011 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 nilssname retourne un nom d'entité (type ENAME) ou nilentnext 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) le 15 juin 2011 Posté(e) le 15 juin 2011 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.
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