Aller au contenu

LISP Quantitatif blocs dynamiques + visibilités


Axel2407---

Messages recommandés

Bonjour à tous !

J'ai découvert le merveilleux LISP "LISTBLOCK", me permettant d'afficher dans un tableau le nom, le nombre, et le symbole, c'est super !

Mais il me manque quelque chose d'essentiel, car je souhaiterai afficher également le nom de la visibilité de mon bloc dynamique dans une 4e colonne.

J'utilise un même bloc avec des dizaines de visibilités et je souhaiterai les quantifier indépendamment. 

Merci à vous et bonne fin de journée 🙂 

 

Lien vers le commentaire
Partager sur d’autres sites

Coucou,
As-tu essayé de regarder la commande QUANTITE (ou NOMBRE) ? Elle est dispo depuis la version 2022 d'AutoCAD.
Autrement, s'il te faut passer par le langage LISP, regarde du côté des fonctions de LeeMac qui sont parfaite pour la gestion des propriétés dynamiques des blocs : http://www.lee-mac.com/dynamicblockfunctions.html

Bisous,
Luna

Lien vers le commentaire
Partager sur d’autres sites

Il y a 2 heures, Axel2407--- a dit :

Bonjour à tous !

J'ai découvert le merveilleux LISP "LISTBLOCK", me permettant d'afficher dans un tableau le nom, le nombre, et le symbole, c'est super !

Mais il me manque quelque chose d'essentiel, car je souhaiterai afficher également le nom de la visibilité de mon bloc dynamique dans une 4e colonne.

J'utilise un même bloc avec des dizaines de visibilités et je souhaiterai les quantifier indépendamment. 

Merci à vous et bonne fin de journée 🙂 

 

Essaye ça:

(defun c:ListBlock (/ ss name value block blocks insPt table row)
  (vl-load-com)
  (or *acdoc*
      (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
  )
  (or *blocks*
      (setq *blocks* (vla-get-Blocks *acdoc*))
  )

  ;; Select blocks
  (prompt "\nSelect blocks to list or <All>")
  (or (setq ss (ssget '((0 . "INSERT"))))
      (setq ss (ssget "_X" '((0 . "INSERT")))
      )
  )
  (if ss
    (progn

      ;; Build a list of dotted pairs (blockName . numberOfReferences) from the selection set
      (vlax-for	x (setq ss (vla-get-ActiveSelectionSet *acdoc*))
	(if (not (vlax-property-available-p x 'Path))
	  (setq
	    name
	     (cons
	       (vla-get-EffectiveName x)
	       (if
		 (vl-some
		   '(lambda (p)
		      (and
			(vla-get-AllowedValues p)
			(= (type (setq value (vlax-get p 'Value))) 'STR)
		      )
		    )
		   (vlax-invoke x 'GetDynamicBlockProperties)
		 )
		  value
		  ""
	       )
	     )
	     blocks
	    (if	(setq block (assoc name blocks))
	      (subst (cons name (1+ (cdr block))) block blocks)
	      (cons (cons name 1) blocks)
	    )
	  )
	)
      )
      (vla-delete ss)

      ;; Prompt for insertion point
      (initget 1)
      (setq insPt (trans (getpoint "\nInsertion point: ") 1 0))

      ;; Create the table
      (setq table (vla-addtable
		    (vla-get-modelspace *acdoc*)
		    (vlax-3d-point insPt)
		    (+ 2 (length blocks))
					; number of rows (including title and header)
		    4			; number of colums
		    20			; cell height
		    80			; row width
		  )
      )
      (vla-put-VertCellMargin table 4.0)
      (vla-put-TitleSuppressed table :vlax-false)
      (vla-put-HeaderSuppressed table :vlax-false)

      ;; Fill the titel and the header
					;;(vla-setText table 0 0 "Blocks")
					;;(vla-setText table 1 0 "Name")
					;;(vla-setText table 1 1 "Count")
					;;(vla-setText table 1 2 "Symbol") 

      ;; Textes version Francaise
      (vla-setText table 0 0 "Quantitatif des Blocs")
      (vla-setText table 1 0 "Nom")
      (vla-setText table 1 1 "Nombre")
      (vla-setText table 1 2 "Visibilité")
      (vla-setText table 1 3 "Symbole")

;;;;; Hauteur des Textes dans la Table = 5.0 ;;;;; 
      (vla-SetTextHeight table 7 5.0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; 

      ;; fill the following rows from the list contents
      (setq row 2)
      (foreach item blocks
	(vla-settext table row 0 (caar item)) ; block name
	(vla-settext table row 1 (cdr item)) ; references count
	(vla-settext table row 2 (cdar item))
	(vla-SetBlockTableRecordId	; block symbol
	  table
	  row
	  3
	  (vla-get-ObjectId (vla-Item *blocks* (caar item)))
	  :vlax-true
	)
	(setq row (1+ row))
      )
    )
  )
  (princ)
)

 

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à tous,

Encore merci pour votre aide, mais j'ai un soucis d'affichage dans le tableau avec un bloc

Parfois il affiche 1 dans la colonne visibilité. Cela arrive avec un bloc ayant plus de 70 configurations donc je pense que le problème vient de se bloc

Autre question, j'aimerai obtenir la longueur de ce bloc dans le tableau, est ce que c'est possible d'ajouter une nouvelle colonne ?

Un énorme merci à vous

Lien vers le commentaire
Partager sur d’autres sites

Bonjour @Axel2407---

Rien à voir avec le sujet, mais quand je lis "70 configurations" je pense qu'on n'est pas dans la meilleure utilisation des blocs dynamiques et que le dessin est, de ce fait, surchargé inutilement.

Amicalement

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é