Aller au contenu

lisp pour compter la répition des block


Messages recommandés

Posté(e)

bonjour

je ss entrain de fair un métré electrique et cmme les élément sont en forme de block(interrupteur...) j'utilise la commande suivante pour avoir le nombre de répitition de chaque block. (sslength (ssget '((2 . "XY")))), XY etant le nom de block

pb= j ai bp de blocks ainsi je dois refair cette opération a chaque fois

j aimerai bien ci quelqu'1 pourrai me filer un lisp pour avoir les quantité de tous les block

 

merci à tous et toutes

Posté(e)

Hello

 

Si tu as les routines Bonus/Express installées sur ton AutoCAD,

tu peux aussi taper au clavier BCOUNT

 

Le Decapode

 

 

[Edité le 12/6/2008 par lecrabe]

Autodesk Expert Elite Team

Posté(e)

 

Hello Gilles

 

A propos de ta superbe routine TABLOBLO qui génère un tableau AutoCAD (version 2005 ou plus) avec le nom du bloc, le nombre d'occurences et le bloc lui-même en 3eme colonne

 

Il est un peu dommage que le bloc remplisse à 100% la 3eme colonne

 

Comment faire pour qu'il remplisse à 80-90% seulement la 3eme colonne ?

Ce sera plus joli ...

 

Je sais sélectionner l'intégralité des 2 premières colonnes pour augmenter la taille globale de tous les textes

 

Mais comment faire la même chose pour la 3eme colonne ?

 

Je suis peut etre un peu fatigué !

 

Le Decapode

 

Autodesk Expert Elite Team

Posté(e)

 

ReHello Gilles

 

2eme amélioration proposée :

- Générer une ligne de titre

- Générer une ligne de titre de colonne

et après seulement le tableau actuel ...

 

Je sais que l'on peut ajouter après 2 rangées au dessus !

mais bon ...

 

Le Decapode (un peu exigeant)

 

Autodesk Expert Elite Team

Posté(e)

Salut,

 

Je tiens tout d'abord à rappeler que ce LISP est de Tramber, je n'avais fait que quelques améliorations.

 

J'ai ajouté une rangée pour le titre et une pour les titres de colonnes, chacun peut modifier leurs contenus en modifiant le code (voir commentaire en regard des lignes concernées).

J'ai aussi modifié les marges verticales pour réduire la taille de l'image du bloc sans perdre le bénéfice de l'AutoScale, chacun peut aussi modifier la taille des cellules et des marges (voir commentaire en regard des lignes concernées).

 

;; TABLOBLO (Tramber)
;; Crée un tableau qui liste les blocs insérés (sélectionnés ou toute la collection)

(defun c:tabloblo
      (/ libloc liidbloc ss col liref ptins tableVL cont row)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
 )
 (prompt "\nSélectionnez les blocs à lister ou ")
 (or (setq ss (ssget '((0 . "INSERT"))))
     (setq ss	(ssget "_X" '((0 . "INSERT")))
    col	T
     )
 )
 (if ss
   (progn
     (vlax-for	x
	(setq
	  ss (vla-get-ActiveSelectionSet *acdoc*)
	)
(setq liref
       (cons
	 (if (vlax-property-available-p x 'EffectiveName)
	   (vla-get-EffectiveName x)
	   (vla-get-Name x)
	 )
	 liref
       )
)
     )
     (vla-delete ss)
   )
 )
 (if col
   (vlax-for i	(vla-get-Blocks *acdoc*)
     (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 *acdoc*)
		    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)
	  (+ 2 (length libloc))
	  3
	  [surligneur]20[/surligneur]			[surligneur]; Hauteur cellule[/surligneur]
	  [surligneur]80[/surligneur]			[surligneur]; Largeur cellule[/surligneur]
	)
 )
 (vla-put-VertCellMargin tableVL [surligneur]4.0[/surligneur])	[surligneur]; Marge verticale[/surligneur]
 (vla-put-TitleSuppressed tableVL :vlax-false)
 (vla-put-HeaderSuppressed tableVL :vlax-false)
 (vla-setText tableVL 0 0 [surligneur]"Blocs"[/surligneur])	[surligneur]; Titre[/surligneur]
 (vla-setText tableVL 1 0 [surligneur]"Nom"[/surligneur])	[surligneur]; Titre colonne 1[/surligneur]
 (vla-setText tableVL 1 1 [surligneur]"Nombre"[/surligneur])	[surligneur]; Titre colonne 2[/surligneur]
 (vla-setText tableVL 1 2 [surligneur]"Symbole"[/surligneur])	[surligneur]; Titre colonne 3[/surligneur]
 (setq	cont -1
row 1
 )
 (repeat (- (vla-get-Rows tableVL) 2)
   (vla-settext
     tableVL
     (setq row (1+ row))
     0
     (nth (setq cont (1+ cont)) libloc)
   )
   (vla-settext
     tableVL
     row
     1
     (length (vl-remove-if-not
	'(lambda (n) (= n (nth cont libloc)))
	liref
      )
     )
   )
   (vla-SetBlockTableRecordId
     tableVL
     row
     2
     (nth cont liidbloc)
     :vlax-true
   )
   (vla-setcellalignment tableVL row 0 5)
   (vla-setcellalignment tableVL row 1 5)
 )
 (princ)
)

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

(defun REMOVE_DOUBLES (lst)
 (if lst
   (cons (car lst) (REMOVE_DOUBLES (vl-remove (car lst) lst)))
 )
) 

 

[Edité le 15/6/2008 par (gile)]

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

Posté(e)

En l'état, le LISP fonctionne avec le style de tableau courant.

Tu peux donc définir un style de tableau avec le style de texte désiré et le rendre courant.

Si tu veux forcer le style de texte dans ce tableau, tu peux ajouter la ligne suivante:

(vla-setTextStyle tableVL row "Nom_Du_Style_De_Texte")

après les lignes :

(vla-setcellalignment tableVL row 0 5)

(vla-setcellalignment tableVL row 1 5)

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

Posté(e)

bonjour gile et merci

g une question et si on veut exporter ce tableau en gardant les symbole des blocks pour qu'il soit lisible sous excel on fait comment?

parecke la quand j exporte ça desparait je c ke c naturel mais y a t il une moyen

merci

  • 6 mois aprè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 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é