Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous

Comment 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

Salut

J'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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

 

 

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

 

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

Merci à tous pour vos réponses, mais je vois que je me suis mal fait comprendre

Mon 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élection

Je 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Il y a aussi NENTSELP, pour rejouer la selection avec un point ;)

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

 

./__\.
(.°=°.)

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é