Patrick_35 Posté(e) le 13 mai 2005 Posté(e) le 13 mai 2005 Bonjour à tousComment faire une sélection que pour des attributs (lisp ou vlisp) comme avec la commande _-attedit Ce qui suit fonctionne pour ne sélectionner que des blocs(vl-load-com) (setq sel (vla-get-selectionsets (vla-get-activedocument (vlax-get-acad-object)))) (if new_sel (vla-clear new_sel) (setq new_sel (vla-add sel "Patrick")) ) (setq filter_code (vlax-make-safearray vlax-vbinteger '(0 . 0))) (setq filter_value (vlax-make-safearray vlax-vbvariant '(0 . 0))) (vlax-safearray-fill filter_code '(0)) (vlax-safearray-fill filter_value '("INSERT")) (vla-selectOnScreen new_sel filter_code filter_value) (princ (strcat "\nIl y a " (itoa (vla-get-count new_sel)) " éléments")) (princ) Mais, dès que j'applique le filtre que pour des attributs(vlax-safearray-fill filter_value '("ATTRIB"))Que nenni :mad:Comment faire ?Merci d'avance @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 13 mai 2005 Posté(e) le 13 mai 2005 Salut, Je sais pas exactement ce que tu veux faire, mais il me semble que tu devras filter tes entités "INSERT" comme tu l'as fait PUIS parcourir ceux-ci par une boucle jusqu'a l'entité "SEQEND" et quand l'entité est une "ATTRIB", accéder aux code DXF pour éventuelles modifcations. C'est un peu comme ci tu voulais sélectionner qu'un segment de polyligne de type "VERTEX", ce n'est pas possible, tu est obligé de parcourir l'entité en passant par l'entête (entupd) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 13 mai 2005 Auteur Posté(e) le 13 mai 2005 SalutJ'y ai bien pensé, mais je ce que je veux faire, c'est la même sélection qu'avec la commande _-attedit. Que les attributs sans les blocs. Il est aussi possible de les déplacer par les grips, donc il y a sûrement une possibilité de le faire. C'est d'ailleurs pour ça que je suis parti dans une sélection en vlisp @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Serge Posté(e) le 13 mai 2005 Posté(e) le 13 mai 2005 Patrick_35, Je trouve un peu compliqué de passer par du vla pour la sélection. Néanmoins, le problème réel que tu as à rencontrer est d'afficher la boite de dialogue plutôt que l'ancienne commande -attedit sur la ligne de commande. Pour ce faire, il y a l'instrucyion (initdia). Remplace les ... par des espaces. (defun c:mattedit (../ filtre i mode n ss....)....(initget "Tout Sélection")....(setq mode (getkword "\nExtraction de blocs avec attributs [Tout/Sélection] : "))....(setq filtre (list (cons 0 "insert") (cons 66 1)))....(if (= "Sélection" mode)........(setq ss (ssget filtre))........(setq ss (ssget "_x" filtre))....)....(setq i 0 n (if ss (sslength ss) 0))....(while (< i n)........(initdia)........(command "._attedit" (ssname ss i))........(setq i (1+ i))....)....(cond........((= n 0) (princ "\nAucun bloc avec attribut sélectionné."))........((= n 1) (princ "\nUn bloc avec attribut sélectionné."))........(t (princ (strcat (itoa n) " blocs avec attribut sélectionnés.")))....)....(princ)) Serge, le gars de la campagne
Tramber Posté(e) le 15 mai 2005 Posté(e) le 15 mai 2005 Que les attributs sans les blocs. Il est aussi possible de les déplacer par les grips, donc il y a sûrement une possibilité de le faire. C'est d'ailleurs pour ça que je suis parti dans une sélection en vlisp@+ Le déplacement, c'est la commande STRETCH, en définitive et je suis sur que lorsque tu lances -attedit, Autocad selectionne ton bloc entier et ne fait le "highlight" que sur l'attrib. Aussi je ne comprends pas ton but Mais je pense à ton problème, il y a un code DXF "attributs suivent", je m'étonne que tu ne le connaisse pas (je ne sais pas le vérifier, j'ai que LT ici sous la main, je te laisse chercher si ca t'interessais et que tu ne le connaissais pas).Cependant il s'applique au BLOCK et non à l'INSERT, of course, d'ou un peu de code en plus pour compléter ton filtrage. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 16 mai 2005 Auteur Posté(e) le 16 mai 2005 Merci à tous pour vos réponses, mais je vois que je me suis mal fait comprendreMon but est de faire un lisp pour faire un incrément sur des attributs. Le problème est que je ne veux pas rester sur un bloc défini avec un nombre d'attributs défini. Ce que je recherche, c’est de sélectionner un attribut à l’écran comme on peut le faire pour un texte.La sélection peut se faire par exemple du bloc 1 sur son deuxième attribut, puis du bloc 4 sur son cinquième, du bloc 45 sur le premier et sur le troisième, etc, etc... Je trouve un peu compliqué de passer par du vla pour la sélectionJe suis bien d’accord, mais je ne pense pas que ce soit possible en autolisp il y a un code DXF "attributs suivent"C’est le code dxf 66 @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bonuscad Posté(e) le 16 mai 2005 Posté(e) le 16 mai 2005 Patrick_35 Est ce que la fonction (nentsel) ne serait pas le plus simple pour faire ce que tu désire? ((lambda ( / ent_att dxf_att) (while (null (setq ent_att (nentsel "\nChoix d'un attribut: ")))) (redraw (car ent_att) 3) (setq dxf_att (entget (car ent_att))) (cond ((eq (cdr (assoc 0 dxf_att)) "ATTRIB") (princ "\nL'attribut a pour valeur = ") (princ (cdr (assoc 1 dxf_att))) ) (T (princ "\nN'est pas un attribut") ) ) (getkword "\nTapez une touche pour continuer") (redraw (car ent_att) 4) (princ) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 16 mai 2005 Auteur Posté(e) le 16 mai 2005 nentsel, voilà une fonction qui me convient parfaitement et dont je ne me suis jamais servi. Merci beaucoup Bonus. Il me reste plus qu’à l’incorporer dans une boucle pour une sélection multiple.(Il va falloir un de ces jours que je regarde de nouveau toutes les fonctions autolisp) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tramber Posté(e) le 16 mai 2005 Posté(e) le 16 mai 2005 Il y a aussi NENTSELP, pour rejouer la selection avec un point ;) Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Patrick_35 Posté(e) le 16 mai 2005 Auteur Posté(e) le 16 mai 2005 Merci Tramber, j'ai vu quelle existait, mais quand j'avais à l'époque, regardé l'aide, avec leur histoire de matrices, j'avoue que j'ai tout simplement laissé tomber. Comme quoi avec le temps... @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Tramber Posté(e) le 16 mai 2005 Posté(e) le 16 mai 2005 Moi aussi, j'avais laissé tombé. Voir la page "Entity Context and Coordinate Transform Data"dans l'aide Vlisp pour tous ceux que ca intéresse. C'est finalement assez facile Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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