azop Posté(e) le 10 janvier 2012 Posté(e) le 10 janvier 2012 Bonjour, j'ai un bloc qui contient plusieurs attributs.avec la fonction "entget" j'arrive à récupéré une seule valeur de mes attributs en plus de toute une liste qui ne m’intéresse pas, y aurait-il une fonction qui me pemettrait de récupéré toutes les valeurs de tout les attributs ? (je pense que les vla... peuvent m'aider, mais je ne trouve pas de documentation à ce sujet)
VDH-Bruno Posté(e) le 10 janvier 2012 Posté(e) le 10 janvier 2012 Salut, y aurait-il une fonction qui me pemettrait de récupéré toutes les valeurs de tout les attributs ? Oui comme ceci et sans vla(mapcar 'cdr (GetAttribs (car (entsel)))) Je t’invite à consulter ce post tu y trouveras notamment le code de la fonction GetAttribs pour faire tourner l’exemple.. A+ Apprendre => Prendre => Rendre
VDH-Bruno Posté(e) le 11 janvier 2012 Posté(e) le 11 janvier 2012 Re, (je pense que les vla... peuvent m'aider, mais je ne trouve pas de documentation à ce sujet) Pour les codes en vla-, mes propositions :Dans ce cas la méthode la plus direct, avec vlax-invoke(vl-load-com) ((lambda (/ obj) (if (vlax-method-applicable-p (setq obj (vlax-ename->vla-object (car (entsel)))) 'GetAttributes) (mapcar 'vla-get-TextString (vlax-invoke obj 'GetAttributes)) ) )) Sinon avec vlax-invoke-method((lambda (/ obj) (if (vlax-method-applicable-p (setq obj (vlax-ename->vla-object (car (entsel)))) 'GetAttributes) (mapcar 'vla-get-TextString (vlax-safearray->list (vlax-variant-value (vlax-invoke-method obj 'GetAttributes)))) ) )) Ou alors avec vla-method((lambda (/ obj) (if (vlax-method-applicable-p (setq obj (vlax-ename->vla-object (car (entsel)))) 'GetAttributes) (mapcar 'vla-get-TextString (vlax-safearray->list (vlax-variant-value (vla-GetAttributes obj )))) ) )) Pour les fichiers d’aide sur ActiveX, en faisant une rapide recherche sur le forum tu devrais rapidement trouver ton bonheur. A+ Apprendre => Prendre => Rendre
Patrick_35 Posté(e) le 12 janvier 2012 Posté(e) le 12 janvier 2012 (vlax-method-applicable-p (setq obj (vlax-ename->vla-object (car (entsel)))) 'GetAttributes)Salut Pas besoin de tester si la fonction existe, elle a toujours été présenteEt une précision(mapcar 'vla-get-TextString (vlax-invoke obj 'GetAttributes))Fonctionne aussi avec des blocs sans attributs avec comme résultat nil (logique) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
VDH-Bruno Posté(e) le 12 janvier 2012 Posté(e) le 12 janvier 2012 Salut Patrick_35, Fonctionne aussi avec des blocs sans attributs avec comme résultat nil (logique)Oui, mais pas sur une ligne, un cercle etc.., en fait dans ce cas je me suis servi de vlax-method-applicable-p comme d’un filtre de sélection pour la fonction entsel. Mais merci pour l’observation cela aurait pu… Car je ne suis pas complétement à l’aise avec l'Automation ActiveX, je m’exerce donc un peu sur le forum dans l’espoir que d’autres Lispeurs (plus aguerri) comme toi me reprennent en cas d’errements. A+ et merci,(Ps: Comme je te l'ai déjà dit, j'aime bien lorsque l'on ajoute son grain de sel, ça fait avancer..) Apprendre => Prendre => Rendre
Patrick_35 Posté(e) le 12 janvier 2012 Posté(e) le 12 janvier 2012 Oui, mais pas sur une ligne, un cercle etc.., en fait dans ce cas je me suis servi de vlax-method-applicable-p comme d’un filtre de sélection pour la fonction entsel.Ah oui, tu as raison, je n'y avais pas songé Mais cela me parait tellement logique par rapport à la demande de ne traiter que les blocs. Mais merci pour l’observation cela aurait pu… Car je ne suis pas complétement à l’aise avec l'Automation ActiveX, je m’exerce donc un peu sur le forum dans l’espoir que d’autres Lispeurs (plus aguerri) comme toi me reprennent en cas d’errements.Cela va venir.C'est juste une logique à comprendre.A la limite, le lisp est plus complexe à saisir que le visual.Intégrer les mapcar, apply, les codes dxf et j'en passe n'est pas une chose aisé pour un débutant. (Ps: Comme je te l'ai déjà dit, j'aime bien lorsque l'on ajoute son grain de sel, ça fait avancer..)Je te rejoins complètement B) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
VDH-Bruno Posté(e) le 12 janvier 2012 Posté(e) le 12 janvier 2012 (modifié) Re, (Ps: Comme je te l'ai déjà dit, j'aime bien lorsque l'on ajoute son grain de sel, ça fait avancer..)La preuve que cela fait avancer, car si j’avais été cohérent avec moi-même, j’aurais dû en toute logique tester, s’il y a un objet de sélectionné.. ((lambda (/ obj res) (while (not (if (and (setq obj (car (entsel))) (vlax-method-applicable-p (setq obj (vlax-ename->vla-object obj)) 'GetAttributes ) ) (setq res (mapcar 'vla-get-TextString (vlax-invoke obj 'GetAttributes) ) ) ) ) (prompt "Sélection non valable... ") ) res ) ) A+ Edit : code corrigé oubli sur la valeur en retour.. Modifié le 12 janvier 2012 par VDH-Bruno Apprendre => Prendre => Rendre
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