Aller au contenu

Lister les blocs


barbichette

Messages recommandés

Bonjour,

Lors de la présentation d'Autocad 2006, mon installateur m'avait montré un truc sympas, mais pas moyen de rmettre la main dessus.

 

On a prit un plan de fondation par puits

Les puits étaient des blocs

 

il a ensuite inséré un tableau ou quelquechose dans le genre et en 2 clics (ou 3) il a créé un tableau avec pour le plan, chaque bluc utilisé, et le nombre de fois où il apparait dans le dessin....

 

C'est possible ?

***********************

Rien ne sert de courrir, il faut partir à point.

Lien vers le commentaire
Partager sur d’autres sites

Y a-t-il moyen que dans le tableau AutoCAD, le bloc lui même soit inséré dans une colonne symbole par exemple, afin d'avoir la représentation de l'élément en face du nom ?

 

Un cauchemar de programmeur avec les points de base décalés et les échelles à gérer. Mais il existe peut-être un lisp ?!

 

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

ICI

Télécharger LV1.11 de patrick_35. Mais ne fonctionne pas avec les blocs dynamiques. Du coup j'utilise la solution dite plus haut avec les attributs

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Lien vers le commentaire
Partager sur d’autres sites

ya pas besoin de calculer le point de base, car on peux manuellement insérer un bloc dans un tableau et le centrer bouton droit sur une cellule d'un tableau "insérer un bloc...":

 

http://xs307.xs.to/xs307/06414/bloctab.jpg

 

 

 

 

C'est dommage que 'l'extraction d'attribut ne sorte pas un tableau avec les blocs insérés dans une cellule.

 

Je vais tester le lisp...

Formateur Autocad - Revit - Sketchup - Photoshop

Lien vers le commentaire
Partager sur d’autres sites

Autant pour moi. Mais je ne sais pas si c'est lispable. Et je ne crois pas du tout que le lisp de Patrick_35 (que je connais bien; le lisp, pas Patrick,... quoique) fasse le boulot).

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

En attendant, faite gaffe avec l'extraction. Si vos bloc non pas la même echelle en X,Y,Z, il ne va pas tous les prendre (pour des paramétrique au moins, les autres, je ne sais pas)

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Lien vers le commentaire
Partager sur d’autres sites

Un lisp pour faire un tableau de tous les blocs présents et non purgés dans le dessin, avec une colonne contenant le bloc :

 

(defun c:tabloblo(/)
 (setq libloc nil liidbloc nil)
 (vlax-for i(vla-get-Blocks(vla-get-activedocument (vlax-get-acad-object)))
   (if(/=(substr (vla-get-name i)1 1)"*")
     (setq libloc(append libloc(list(vla-get-name i)))
    liidbloc(append liidbloc(list(vla-get-ObjectID i))))))
 (setq ptins (getpoint "\nPoint d'insertion: "))
 (vl-load-com)
 (setq tableVL (vla-addtable(vla-get-modelspace(vla-get-activedocument (vlax-get-acad-object)))
	  (vlax-3d-point ptins) (length libloc)
	  2
	  20
	  200
	  )
)  
 (setq cont -1)
 (repeat(vla-get-Rows tableVL)
   (vla-settext tableVL(setq cont(1+ cont))0 (nth cont libloc))
   (vla-SetBlockTableRecordId tableVL cont 1  (nth cont liidbloc) :vlax-true)
   (vla-setcellalignment    tableVL cont 0    5   )
   (vla-setcellalignment    tableVL cont 1    5    )
   )
 (princ)
 )

 

lancer TABLOBLO (attention si vous avez bcp de blocs, ca n'est pas rapide, sauvegardez vos dessins).

 

Drôlement sympa de m'avoir donné l'idée.

 

Si vous trouvez le code sympa, je peux l'améliorer un peu et le publier dans les routines.

 

[Edité le 12/10/2006 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Salut

Si, le lisp le fait. Il est même capable depuis un tableau contenant tout les blocs possible (déjà sauvegardé physiquement sur le disque) de créer un tableau qui ne contient que ceux qui sont dans le dessin. En bref, de créer une légende spécifique du dessin depuis une légende type

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Ah bon ?!!

Changement de version ?

 

Alors je viens de suer sangs et eaux pour rien ?! :cool:

 

N'empêche que je ne suis pas mécontent, j'en revais, je n'en avais pas eu le temps alors qu'avec cette fonctionnalité du tableau qu'à montré Pieroka (que je ne soupçonnais même pas faute d'utiliser souvent la 2006), je m'y suis mis tout seul, comme un grand. En peu de temps finalement, au lieu de fabriquer un tableau avec des lignes, des textes et tout le tintouin.

 

[Edité le 12/10/2006 par Tramber]

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Non, pas de changement de version, sauf que le mien peut fonctionner avec la 2000 ;)

Mais, ce n'est pas perdu, tu as acquis uu peu plus de connaissances et làn tu as pris de l'avance sur moi car ne ne connait pas encore les tables VL

Et une question, histoire de te taquiner un peu. Si le point d'insertion du bloc se trouve n'importe où, dans ton tableau il se retrouve où ?

 

@+

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

Lien vers le commentaire
Partager sur d’autres sites

Peu pas :( , je suis sur 2000 ou 2005

C'est bien le premier lisp complet que je vois de Tramber :D

Et il est possible d'y associer un texte avec un bloc, histoire de lui donner une désignation ?

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

Lien vers le commentaire
Partager sur d’autres sites

C'est bien le premier lisp complet que je vois de Tramber :D

 

Alors ca, c'est du mauvais esprit :cool:

 

J'ai trop développé de bibliothèques et de routines interdépendantes pour faire profiter de mes codes. Quand ca va vite et que j'ai le temps, je publie, mais seulement sans routines dépendantes.

 

Merci (Gile), je t'invite vivement à en faire une bombe ! Moi pas avoir le temps ni l'énergie (cf la remarque de Patrick_35) :o

 

C'est une formidable base pour créer des nomenclatures. Mais il pose un problème : faut se pencher un peu de temps dessus pour faire un tableau à nx2 colonnes, qui serait tellement plus présentable quand on a énormément de blocs ! Ou nx3 colonnes pour avoir aussi le nb de blocs insérés.

 

Faudrait p'têt qu'on bascule dans le forum lisp ? :yltype:

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

Suite à la suggestion de Tramber, le même avec des colonnes un peu plus étroites et une troisième colonne pour le nombre de blocs insérés.

 

(defun c:tabloblo (/ libloc liidbloc ss liref ptins tableVL cont)
 (vl-load-com)
 (vlax-for i (vla-get-Blocks
	(vla-get-activedocument (vlax-get-acad-object))
      )
   (if	(/= (substr (vla-get-name i) 1 1) "*")
     (setq libloc   (append libloc (list (vla-get-name i)))
    liidbloc (append liidbloc (list (vla-get-ObjectID i)))
     )
   )
 )
 (setq ss (ssget "_X" '((0 . "INSERT"))))
 (if ss
   (setq liref
   (mapcar '(lambda (x)
	      (setq x (vlax-ename->vla-object x))
	      (if (vlax-property-available-p x 'EffectiveName)
		(vla-get-EffectiveName x)
		(vla-get-Name x)
	      )
	    )
	   (mapcar 'cadr (ssnamex ss))
   )
   )
   (setq liref '())
 )
 (initget 1)
 (setq ptins (trans (getpoint "\nPoint d'insertion: ") 1 0))
 (setq	tableVL	(vla-addtable
	  (vla-get-modelspace
	    (vla-get-activedocument (vlax-get-acad-object))
	  )
	  (vlax-3d-point ptins)
	  (length libloc)
	  3
	  20
	  100
	)
 )
 (vla-put-TitleSuppressed tableVL :vlax-true)
 (setq cont -1)
 (repeat (vla-get-Rows tableVL)
   (vla-settext
     tableVL
     (setq cont (1+ cont))
     0
     (nth cont libloc)
   )
   (vla-settext
     tableVL
     cont
     1
     (length (vl-remove-if-not
	'(lambda (n) (= n (nth cont libloc)))
	liref
      )
     )
   )
   (vla-SetBlockTableRecordId
     tableVL
     cont
     2
     (nth cont liidbloc)
     :vlax-true
   )
   (vla-setcellalignment tableVL cont 0 5)
   (vla-setcellalignment tableVL cont 1 5)
 )
 (princ)
) 

[Edité le 17/10/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

:D Génial

Apparemment, sa marche même avec les blocs dynamiques

:D :D RE-GENIAL

Et il compte trés bien, même avec le "probleme" que j'ai cité plus haut

 

Vous allez dire que je fait mon rabat joie, mais est il possible de faire une selection? ;)

 

A qui doi-je envoyer les fleurs?ou une bouteille? :cool:

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Lien vers le commentaire
Partager sur d’autres sites

La bouteille à Tramber et les fleurs à madame Tramber, je ne fais qu'adapter (et apprendre).

 

Voici un premier jet avec possibilité de faire une sélection ou de lister toute la collection en faisant ENTER ou clic droit.

 

En l'état, seuls sont comptés les blocs sélectionnés. Si tu veux que soient comptés tous les blocs insérés dont un exemplaire a été sélectionné, c'est un peu plus compliqué à cause des blocs dynamiques qui changent de nom quand ils ont été modifiés, mais faisable.

 

Tiens moi/nous au courant.

 

(defun c:tabloblo (/ libloc liidbloc sst ssu liref ptins tableVL cont)
 (prompt "\nSélectionnez les blocs à lister ou < Tous >")
 (setq ssu (ssget '((0 . "INSERT"))))
 (setq sst  (ssget "_X" '((0 . "INSERT"))))
 (if sst
   (setq liref
   (mapcar '(lambda (x)
	      (setq x (vlax-ename->vla-object x))
	      (if (vlax-property-available-p x 'EffectiveName)
		(vla-get-EffectiveName x)
		(vla-get-Name x)
	      )
	    )
	   (vl-remove-if 'listp (mapcar 'cadr (ssnamex sst)))
   )
   )
   (setq liref '())
 )
 (if ssu
   (setq libloc   (remove_doubles
	     (mapcar
	       '(lambda	(x)
		  (setq x (vlax-ename->vla-object x))
		  (if (vlax-property-available-p x 'EffectiveName)
		    (vla-get-EffectiveName x)
		    (vla-get-Name x)
		  )
		)
	       (vl-remove-if 'listp (mapcar 'cadr (ssnamex ssu)))
	     )
	   )
  liidbloc (mapcar
	     '(lambda (x)
		(vla-get-ObjectID
		  (vla-item
		    (vla-get-Blocks
		      (vla-get-activedocument
			(vlax-get-acad-object)
		      )
		    )
		    x
		  )
		)
	      )
	     libloc
	   )
  liref (vl-remove-if-not '(lambda (n) (member n libloc)) liref)
   )
   (vlax-for i	(vla-get-Blocks
	  (vla-get-activedocument (vlax-get-acad-object))
	)
     (if (and (/= (substr (vla-get-name i) 1 1) "*")
       (= :vlax-false (vla-get-IsXref i))
  )
(setq libloc   (append libloc (list (vla-get-name i)))
      liidbloc (append liidbloc (list (vla-get-ObjectID i)))
)
     )
   )
 )
 (setq ptins (getpoint "\nPoint d'insertion: "))
 (vl-load-com)
 (setq	tableVL	(vla-addtable
	  (vla-get-modelspace
	    (vla-get-activedocument (vlax-get-acad-object))
	  )
	  (vlax-3d-point ptins)
	  (length libloc)
	  3
	  20
	  100
	)
 )
 (vla-put-TitleSuppressed tableVL :vlax-true)
 (setq cont -1)
 (repeat (vla-get-Rows tableVL)
   (vla-settext
     tableVL
     (setq cont (1+ cont))
     0
     (nth cont libloc)
   )
   (vla-settext
     tableVL
     cont
     1
     (length (vl-remove-if-not
	'(lambda (n) (= n (nth cont libloc)))
	liref
      )
     )
   )
   (vla-SetBlockTableRecordId
     tableVL
     cont
     2
     (nth cont liidbloc)
     :vlax-true
   )
   (vla-setcellalignment tableVL cont 0 5)
   (vla-setcellalignment tableVL cont 1 5)
 )
 (princ)
)

;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste

(defun REMOVE_DOUBLES (lst)
 (cond
   ((atom lst) lst)
   (T
    (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst)))
   )
 )
)

[Edité le 13/10/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Une autre version, qui compte toutes les réferences insérées pour chaque référence sélectionnée.

Les xrefs sont écartées (je modifie la version précédente pour écarter aussi les xrefs).

 

(defun c:tabloblo (/ libloc liidbloc ss col liref ptins tableVL cont)
 (vl-load-com)
 (prompt "\nSélectionnez les blocs à lister ou < Tous >")
 (if (not (setq ss (ssget '((0 . "INSERT")))))
   (setq ss  (ssget "_X" '((0 . "INSERT")))
  col T
   )
 )
 (if ss
   (setq liref
   (mapcar '(lambda (x)
	      (setq x (vlax-ename->vla-object x))
	      (if (vlax-property-available-p x 'EffectiveName)
		(vla-get-EffectiveName x)
		(vla-get-Name x)
	      )
	    )
	   (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
   )
   )
   (setq liref '())
 )
 (if col
   (vlax-for i	(vla-get-Blocks
	  (vla-get-activedocument (vlax-get-acad-object))
	)
     (if (and (/= (substr (vla-get-name i) 1 1) "*")
       (= :vlax-false (vla-get-IsXref i))
  )
(setq libloc   (append libloc (list (vla-get-name i)))
      liidbloc (append liidbloc (list (vla-get-ObjectID i)))
)
     )
   )
   (setq libloc   (remove_doubles liref)
  liidbloc (mapcar
	     '(lambda (x)
		(vla-get-ObjectID
		  (vla-item
		    (vla-get-Blocks
		      (vla-get-activedocument
			(vlax-get-acad-object)
		      )
		    )
		    x
		  )
		)
	      )
	     libloc
	   )
   )
 )
 (initget 1)
 (setq ptins (trans (getpoint "\nPoint d'insertion: ") 1 0))
 (setq	tableVL	(vla-addtable
	  (vla-get-modelspace
	    (vla-get-activedocument (vlax-get-acad-object))
	  )
	  (vlax-3d-point ptins)
	  (length libloc)
	  3
	  20
	  100
	)
 )
 (vla-put-TitleSuppressed tableVL :vlax-true)
 (setq cont -1)
 (repeat (vla-get-Rows tableVL)
   (vla-settext
     tableVL
     (setq cont (1+ cont))
     0
     (nth cont libloc)
   )
   (vla-settext
     tableVL
     cont
     1
     (length (vl-remove-if-not
	'(lambda (n) (= n (nth cont libloc)))
	liref
      )
     )
   )
   (vla-SetBlockTableRecordId
     tableVL
     cont
     2
     (nth cont liidbloc)
     :vlax-true
   )
   (vla-setcellalignment tableVL cont 0 5)
   (vla-setcellalignment tableVL cont 1 5)
 )
 (princ)
)

;;; REMOVE_DOUBLES - Suprime tous les doublons d'une liste

(defun REMOVE_DOUBLES (lst)
 (cond
   ((atom lst) lst)
   (T
    (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst)))
   )
 )
) 

[Edité le 17/10/2006 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

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é