Aller au contenu

selection des blocs contenant un bloc specifique


Messages recommandés

Posté(e)

Bonjour,

 

je voudrais un peut d'aide mon but est de sélectionner tous les blocs contenant le bloc nomme "grille" à l’intérieur.

 

Pouvez vous m'aider car la je sèche.

 

merci d'avance

Posté(e)

Bonjour et bienvenue,

A tester, mais en passant par la commande filter tu dois pouvoir arriver à quelque chose.

Tu définis un "nom du bloc" à rechercher avec comme critère *grille*.

 

Mais bon, je viens de tester vite fais, et ça ne marche apparemment pas si il y a des attributs :blink:

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Posté(e)

Bonjour et merci,

 

En fait je voudrais creer un set de selection avec ssget comprenant uniquement les blocs ( ayant different nom) contenant un autre bloc s'appelant "grille" pour ensuite les extraire de mon plan.

Posté(e)

Hello

 

Allons voir (et admirer) un Dieu US du Lisp/VLisp !

 

Certaines de CES Routines pourraient t'aider !?

 

 

**** BlockCount ****

http://www.lee-mac.com/nestedblockcounter.html

 

La routine BlockCount defile dans l'Ecran texte (et/ou dans un fichier TXT/CSV)

le decompte de Blocs y compris les Blocs imbriques !

 

Donc tu verras combien de Blocs GRILLE sont utilises au 1er niveau et aussi au niveau N ...

 

 

**** ExtractNestedBlock **** (Convert Nested Block to Primary Block)

http://www.lee-mac.com/extractnestedblock.html

 

 

**** Count ***

http://www.lee-mac.com/blockcounter.html

 

RAPPEL : Cette routine sort un joli tableau quantitatif des Blocs "simples"

donc au 1er niveau seulement ... Aucun traitement des Blocs imbriques !

 

 

LA SANTE, Bonnes Fetes, Bye, lecrabe (En mode "je retrouve encore les Bons Vieux LSP")

Autodesk Expert Elite Team

Posté(e)

Hello

 

Cette routine de notre Maitre Francais Gilles du Lisp/VLisp

affiche sur l'ecran texte l'arborescence de TOUS les Blocs du Dessin ...

 

SYMPA pour retrouver des Blocs imbriques parfois PROFOND !!

 

ScanBlocks de Gilles - Exemple de resultat >>>

Commande: SCANBLOCKS

 

_"GRILLE"

 

_"C+Grille"

|_"GRILLE"

 

_"Ellipse_2_Niveaux"

|_"C+Grille"

|_"GRILLE"

 

Bye, lecrabe

 

(defun c:ScanBlocks (/ foo efName name def)
 (vl-load-com)
 (defun foo (pref blk)
   (vlax-for o	blk
     (if
(and
  (= (vla-get-ObjectName o) "AcDbBlockReference")
  (setq	name (vla-get-Name o)
	efName (vlax-get o
		       (if (vlax-property-available-p o 'EffectiveName)
			 'EffectiveName
			 'Name
		       )
	     )
  )
  (setq def (vla-item *blocks* efName))
  (= (vla-get-IsXref def) :vlax-false)
)
 (progn
   (princ (strcat "\n"
		  pref
		  "\""
		  name
		  "\""
		  (if (/= name efName)
		    (strcat "(" efName ")")
		    ""
		  )
	  )
   )
   (foo (strcat "  " pref) def)
 )
 ""
     )
   )
 )
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)))
 (vlax-for b *blocks*
   (if	(and (= (vla-get-IsXref B) :vlax-false)
     (= (vla-get-IsLayout B) :vlax-false)
)
     (progn
(princ (strcat "\n\n_\"" (vla-get-Name B) "\""))
(foo "  |_" B)
     )
   )
 )
 (textscr)
 (princ)
)

Autodesk Expert Elite Team

Posté(e)

Ok je suis désolée de pas avoir prévenus mais comme je l'ai dit sur mon premier poste je cherche à comprendre comment faire, sur le forum d' Autodesk on parle anglais du coup j'ai décidé de poster sur un forum Français pour avoir des explications plus claires.

 

Mais bon si personne ne veut m'aider je continuerai à chercher par moi même ce que j'ai fait jusqu'à présent.

 

Sur ce Joyeux Noël et merci pour l'accueil

Posté(e)

Hello

 

Je pense que à aucun moment, j'ai été impoli !

 

Je t'ai simplement indiqué qu'il serait sympa de signaler le Multi-Post !!

 

Tu remarqueras que j'ai passé du temps à retrouver des routines LSP qui pourraient t'aider !!!

 

Bye, lecrabe

Autodesk Expert Elite Team

Posté(e)

Cool...

Ne pas oublier... On est sur un forum. Et les mots ne remplacerons jamais l’intonation de la voie dans une conversation, alors il faut savoir lire entre les lignes.

 

Et sinon joyeuses fêtes à tout le monde. Profitez bien.

http://www.bazincourt.fr/wp-content/uploads/2015/01/COTILLON_1-272x300.png

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Posté(e)

Je n'ai en aucun cas dis que tu as été impoli. Comme dis LA Lozère pas d'intonation sur le forum.

Je suis vraiment sincère en vous remerciant de votre accueil et je comprends très bien pour le multi post.

Je me suis beaucoup débrouiller seul et j'ai apprécié votre aide. En tout cas encore merci et Bon Noël

Posté(e)

Hello

 

OK MERCI !

 

Je suis le fil sur le Forum French AutoCAD Autodesk ...

 

J ai vu que Moshe-A te prépare une routine de compétition = SUPER

 

Joyeux Noel à TOUS et LA SANTÉ

Bye, lecrabe

Autodesk Expert Elite Team

  • 3 semaines après...
Posté(e)

Salut

 

Comme c'est la nouvelle année, voici une fonction qui sélectionne le/les blocs, même imbriqués.

L'idée est de parcourir la table des blocs, de regarder dans chaque bloc si tu as un bloc recherché imbriqué --> Oui, je le mémorise et je relance la recherche pour voir si le bloc trouvé n'est pas lui-même imbriqué dans un autre bloc.

Voici la fonction et si tu as des questions, n'hésite pas.

(defun rech(bl / doc ent js lst obj old sel tab nombl)
 (defun nombl(bl)
   (if (vlax-property-available-p bl 'effectivename)
     (strcase (vla-get-effectivename bl))
     (strcase (vla-get-name bl))
   )
 )

 (setq doc (vla-get-activedocument (vlax-get-acad-object))
bl (mapcar 'strcase bl)
old bl
js (ssadd)
 )
 (while bl
   (setq lst nil)
   (vlax-for obj (vla-get-blocks doc)
     (and (eq (vla-get-islayout obj) :vlax-false)
   (eq (vla-get-isxref obj) :vlax-false)
   (not (wcmatch (vla-get-name obj) "*|*"))
(vlax-for ent obj
  (and (eq (vla-get-objectname ent) "AcDbBlockReference")
       (vl-position (nombl ent) bl)
       (not (vl-position (nombl obj) lst))
    (setq lst (cons (nombl obj) lst)
	  tab (cons (vla-get-name obj) tab)
    )
  )
)
     )
   )
   (setq bl lst)
 )
 (setq tab (append tab old))
 (and (ssget "_x" (list (cons 0 "insert") (cons 2 (strcat (apply 'strcat (mapcar '(lambda(x)(strcat x ",")) tab)) "`*U*"))))
   (progn
     (vlax-for obj (setq sel (vla-get-activeselectionset doc))
(and (vl-position (nombl obj) tab)
  (ssadd (vlax-vla-object->ename obj) js)
)
     )
     (vla-delete sel)
     (sssetfirst nil js)
   )
 )
 js
)

 

Pour lancer la fonction. Tu peux indiquer une liste de blocs.

La sélection est effectuée dans Autocad et tu as comme message de retour, la sélection.

Par exemple

(rech '("grille"))

 

@+

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)

Hello

 

Cette routine de notre Maitre Francais Gilles du Lisp/VLisp

affiche sur l'ecran texte l'arborescence de TOUS les Blocs du Dessin ...

 

SYMPA pour retrouver des Blocs imbriques parfois PROFOND !!

 

ScanBlocks de Gilles - Exemple de resultat >>>

Commande: SCANBLOCKS

 

_"GRILLE"

 

_"C+Grille"

|_"GRILLE"

 

_"Ellipse_2_Niveaux"

|_"C+Grille"

|_"GRILLE"

<<<

 

Bye, lecrabe

 

(defun c:ScanBlocks (/ foo efName name def)
 (vl-load-com)
 (defun foo (pref blk)
   (vlax-for o	blk
     (if
(and
 	(= (vla-get-ObjectName o) "AcDbBlockReference")
 	(setq	name (vla-get-Name o)
	efName (vlax-get o
                  (if (vlax-property-available-p o 'EffectiveName)
             'EffectiveName
             'Name
                  )
        	)
 	)
 	(setq def (vla-item *blocks* efName))
 	(= (vla-get-IsXref def) :vlax-false)
)
	(progn
  	(princ (strcat "\n"
 			pref
 			"\""
 			name
 			"\""
 			(if (/= name efName)
   			(strcat "(" efName ")")
   			""
 			)
 		)
  	)
  	(foo (strcat "  " pref) def)
	)
	""
     )
   )
 )
 (or *acad* (setq *acad* (vlax-get-acad-object)))
 (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*)))
 (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*)))
 (vlax-for b *blocks*
   (if	(and (= (vla-get-IsXref B) :vlax-false)
		(= (vla-get-IsLayout B) :vlax-false)
)
     (progn
(princ (strcat "\n\n_\"" (vla-get-Name B) "\""))
(foo "  |_" B)
     )
   )
 )
 (textscr)
 (princ)
)

 

 

Salut le décapode,

 

Je viens d'essayer ce Lisp qui est bien mais il me trouve un bloc imbriqué qui n'existe pas dans un bloc.

 

_"Bur_160x120-60_G"

|_"Siège_Travail"

|_"Cais_bas"

 

Le bloc Cais_bas existe bien dans la base des blocs mais il n'est pas imbriqué dans le bloc Bur_160x120_G.

A quoi est-ce dû?

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

une bonne purge?

 

 

Salut x_all,

 

J'avais déjà purger le dessin mais tu m'as mis la puce à l'oreille.

 

Lorsque j'insère le bloc Cais_bas, pas de problème, il est bien là.

 

Lorsqu'on regarde le bloc Bur_160x120-60_G, on ne voit que le plan de travail et le bloc imbriqué Siège_Travail.

Du fait que dans le dessin, il n'y que le bloc Bur_160x120-60_G en un seul exemplaire, je me suis demandé, après avoir lu ta réponse, pourquoi, après avoir purgé mon dessin, le bloc Cais_bas était toujours dans la base de blocs du dessin.

 

Je suis donc aller dans l'éditeur de bloc en allant voir dans le bloc Bur_160x120-60_G et j'ai lancé la commande de sélection rapide en choisissant comme type d'objet, Référence de bloc puis comme propriété, le nom. Je suis donc allé cherché dans la valeur, Cais_bas et AutoCAD a bien sélectionné le bloc en question mais ô surprise, je ne vois rien. Même pas un grip bleu ou quoi que ce soit. je fais un zoom étendu et toujours rien. Tous les calques sont actifs et libérés.

 

Je lance la commande inserer pour insérer le bloc Cais_bas et je le vois bien au bout de mon réticule. Je l'insère quand même.

Je relance la sélection rapide avec les même critères que plus haut et AutoCAD me sélectionne 2 blocs Cais_bas. Je ne vois toujours pas le premier alors que le second est en surbrillance. Les deux blocs ont bien les échelles X, Y et Z à 1.

 

Bref, quoiqu'il en soit, je les efface puis je re-teste le lisp SCANBLOCKS et tout est normal, il n'y a plus ce bloc Cais_bas en tant que bloc imbriqué.

Ce qui est bizarre, c'est que le bloc Cais_bas était complètement invisible blink.gif

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Salut

 

En lisp, il est possible de rendre un bloc invisible.

Par exemple

(defun c:test(/ ent)
 (setq ent (vlax-ename->vla-object (car (entsel))))
 (vla-put-visible ent :vlax-false)
 (princ "\nLe bloc est maintenant invisible.")
 (getstring "\nAppuyez sur entrée pour continuer...")
 (vla-put-visible ent :vlax-true)
 (princ "\nLe bloc est maintenant visible.")
 (princ)
)

 

@+

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 JAV aussi qui purge des trucs zarbi... il eût pu t'aider...

 

J'avais bien évidemment passer le dessin au JAV et au Batchpurge de Gile.

 

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Hello Patrick

 

1) MERCI pour ton petit programme demonstratif !

 

2) Ci-apres une routine ALLVISI de Gilles que j'aime bien !

Surtout quand il y a des objets invisibles par programmation ...

 

LA SANTE, Bonne Annee, Bye, lecrabe

 

;; Par GC - Rendre TOUS les objets / entites visibles
;; Flag d Invisibilite d AutoCAD = 60
;; Chargement par          :   APPLOAD
;; Commande au clavier  :   ALLVISI

(vl-load-com)

(defun c:ALLVISI ()

(vlax-for blk (vla-get-Blocks
      (vla-get-ActiveDocument
	(vlax-get-acad-object)
      )
    )
 (vlax-for obj blk
   (if	(vlax-property-available-p obj 'Visible)
     (vla-put-Visible obj :vlax-true)
   )
 )
)

)

Autodesk Expert Elite Team

Posté(e)

Salut

 

En lisp, il est possible de rendre un bloc invisible.

Par exemple

(defun c:test(/ ent)
 (setq ent (vlax-ename->vla-object (car (entsel))))
 (vla-put-visible ent :vlax-false)
 (princ "\nLe bloc est maintenant invisible.")
 (getstring "\nAppuyez sur entrée pour continuer...")
 (vla-put-visible ent :vlax-true)
 (princ "\nLe bloc est maintenant visible.")
 (princ)
)

 

@+

 

 

 

Salut Patrick_35,

 

 

En fait, ce Lisp ne fonctionne qu'en sélectionnant un bloc déjà visible.

Or, dans mon cas, celui-ci est invisible. Je ne peux donc pas le sélectionner.

 

 

Hello Patrick

 

1) MERCI pour ton petit programme demonstratif !

 

2) Ci-apres une routine ALLVISI de Gilles que j'aime bien !

Surtout quand il y a des objets invisibles par programmation ...

 

LA SANTE, Bonne Annee, Bye, lecrabe

 

;; Par GC - Rendre TOUS les objets / entites visibles
;; Flag d Invisibilite d AutoCAD = 60
;; Chargement par          :   APPLOAD
;; Commande au clavier  :   ALLVISI

(vl-load-com)

(defun c:ALLVISI ()

(vlax-for blk (vla-get-Blocks
     	(vla-get-ActiveDocument
	(vlax-get-acad-object)
     	)
   	)
 (vlax-for obj blk
   (if	(vlax-property-available-p obj 'Visible)
     (vla-put-Visible obj :vlax-true)
   )
 )
)

)

 

 

Salut le décapode,

 

Nickel, ce Lisp !

 

Je vois enfin ce putain de bloc invisible et j'ai enfin compris pourquoi ce phénomène se produisait.A la base, le bloc Bur_160x120-60_G était un bloc dynamique avec un paramètre de visibilité.

Une visibilité avec caisson et une visibilité sans caisson.

 

A un moment donné, je ne sais plus quand, exactement, le paramètre de visibilité a été supprimer lorsque le bloc était en visibilité sans caisson.

Le bloc n'était donc plus dynamique. Toutefois, il y a avait toujours la référence de bloc Cais_bas en tant que bloc imbriqué.

 

En conclusion:

 

Lorsqu'on décide de supprimer un paramètre de visibilité, dans un bloc dynamique, il faut prendre soins d'effacer, aussi, ce qui est sensé ne pas se voir.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Salut Patrick_35,

 

 

En fait, ce lisp ne fonctionne qu'en sélectionnant un bloc déjà visible.

Oui, c'est pour montrer d'où vient le problème.

On peut très bien voir des objets invisible dans le dessin sans que cela dépendent des calques.

 

@+

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)

J'ai expliqué en vidéo ce qui s'est passé.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Hello Steven

 

Tu as osé "douter" d'une Routine de Gilles !?

 

Ta punition sera :

- 10 Notre Pere

- 10 Je vous salue Marie

 

Bye, lecrabe

Autodesk Expert Elite Team

Posté(e)

Hello Steven

 

Tu as osé "douter" d'une Routine de Gilles !?

 

Ta punition sera :

- 10 Notre Pere

- 10 Je vous salue Marie

 

Bye, lecrabe

 

En aucun cas, je n'ai douté du Lisp de Gilles. C'est ce qui m'a justement fait comprendre d'où venait le souci et je l'ai tout simplement expliqué wink.gif

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

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é