Aller au contenu

Quantifier les blocs et inclure le résultat dans un tableau


Messages recommandés

Posté(e)

Bonjour à tous,

je voudrais pouvoir quantifier les blocs, grâce à un lisp comme « cnt-blk » de (gile) par exemple ou la fonction AutoCAD « eattext », et que les résultat s’inscrivent dans un tableau déjà exis-tant dans mon dessin qui est en fait une légende avec un colonne supplémentaire pour les quantités.

Donc il faudrait que les résultats s’inscrivent sur la ligne correspondante au bloc dans la co-lonne quantités.

De plus il faudrait que la colonne quantité puisse éventuellement se mettre à jour si on ajoute, on modifie ou on supprime un bloc dans le dessin.

Voilà j’ai tout expliqué je rajoute une petite image pour expliquer mes propos.

IMAGE

Merci d’avance à toutes les bonnes volontés (meme une solution partielle est la bienvenue...). :yltype:

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

La petite image dans les tableaux ....

ah c'est joli.

 

Par ici, un beau travail collectif.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Une adaptation du lien donné par Tramber

 

Possibilité de lister les blocs contenus dans d'un objet (cercle/ellipse/polyligne) ou les blocs sélectionné ou tous les blocs de la collection du dessin.

 

La mise à jour automatique du tableau en cas d'ajout ou de suppression de blocs suppose une utilisation des réacteurs qui dépasse mes très maigres connaissances de ce sujet.

 

(defun c:tabloc (/ kw libloc liidbloc ss col liref ptins tableVL cont)
 (vl-load-com)
 (initget "Collection Objet Sélection")
 (setq kw (getkword "\nChoisir une option [Collection/Objet/Sélection] : "))
 (cond
   ((= kw "Objet")
    (if
      (setq
 obj
  (car
    (entsel "\nSélectionnez l'objet délimitant la sélection: ")
  )
      )
(if (member (cdr (assoc 0 (entget obj)))
	    '("CIRCLE" "ELLIPSE" "LWPOLYLINE")
    )
  (setq ss (SelByObj obj "WP" '((0 . "INSERT"))))
  (princ "\nEntité non valide.")
)
(princ "\nAucune entité sélectionnée.")
    )
   )
   ((= kw "Collection")
     (setq ss	(ssget "_X" '((0 . "INSERT")))
    col	T
     )
   )
   (T (setq ss (ssget '((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)
	      )
	    )
	   (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) 2)
	  3
	  20
	  100
	)
 )
 (vla-put-TitleSuppressed tableVL :vlax-false)
 (vla-setText tableVL 0 0 "LEGENDE/QUANTITATIF")
 (mapcar '(lambda (x)
 (vla-setText tableVL 1 (car x) (cdr x)))
  '((0 . "SYMBOLE") (1 . "DESIGNATION") (2 . "QUANTITE"))
  )
 (setq cont 0)  
 (repeat (vla-get-Rows tableVL)
   (vla-SetBlockTableRecordId
     tableVL
     (1+ (setq cont (1+ cont)))
     0
     (nth (1- cont) liidbloc)
     :vlax-true
   )
   (vla-settext
     tableVL
     (1+ cont)
     1
     (nth (1- cont) libloc)
   )
   (vla-settext
     tableVL
     (1+ cont)
     2
     (length (vl-remove-if-not
	'(lambda (n) (= n (nth (1- cont) libloc)))
	liref
      )
     )
   )
   (vla-setcellalignment tableVL (1+ cont) 1 5)
   (vla-setcellalignment tableVL (1+ cont) 2 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)))
 )
)

;;; SelByObj -Gilles Chanteau- 06/10/06
;;; Crée un jeu de sélection avec tous les objets contenus ou 
;;; capturés, dans la vue courante, par l'objet sélectionné
;;; (cercle, ellipse, polyligne fermée).
;;; Arguments :
;;; - un nom d'entité (ename) 
;;; - un mode de sélection (Cp ou Wp)
;;; - un filtre de sélection ou nil

(defun SelByObj	(ent opt fltr / obj dist n lst prec dist p_lst)
 (vl-load-com)
 (setq obj (vlax-ename->vla-object ent))
 (cond
   ((member (cdr (assoc 0 (entget ent))) '("CIRCLE" "ELLIPSE"))
    (setq dist	(/ (vlax-curve-getDistAtParam
	     obj
	     (vlax-curve-getEndParam obj)
	   )
	   50
	)
   n	0
    )
    (repeat 50
      (setq
 lst
  (cons
    (trans
      (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n))))
      0
      1
    )
    lst
  )
      )
    )
   )
   (T
    (setq p_lst (vl-remove-if-not
	   '(lambda (x)
	      (or (= (car x) 10)
		  (= (car x) 42)
	      )
	    )
	   (entget ent)
	 )
    )
    (while p_lst
      (setq
 lst (append
       lst
       (list (trans (append (cdr (assoc 10 p_lst))
			    (list (cdr (assoc 38 (entget ent))))
		    )
		    ent
		    1
	     )
       )
     )
      )
      (if (/= 0 (cdadr p_lst))
 (progn
   (setq prec (1+ (fix (* 50 (abs (cdadr p_lst)))))
	 dist (/ (- (if	(cdaddr p_lst)
		      (vlax-curve-getDistAtPoint
			obj
			(trans (cdaddr p_lst) ent 0)
		      )
		      (vlax-curve-getDistAtParam
			obj
			(vlax-curve-getEndParam obj)
		      )
		    )
		    (vlax-curve-getDistAtPoint
		      obj
		      (trans (cdar p_lst) ent 0)
		    )
		 )
		 prec
	      )
	 n    0
   )
   (repeat (1- prec)
     (setq
       lst (append
	     lst
	     (list
	       (trans
		 (vlax-curve-getPointAtDist
		   obj
		   (+ (vlax-curve-getDistAtPoint
			obj
			(trans (cdar p_lst) ent 0)
		      )
		      (* dist (setq n (1+ n)))
		   )
		 )
		 0
		 1
	       )
	     )
	   )
     )
   )
 )
      )
      (setq p_lst (cddr p_lst))
    )
   )
 )
 (ssget (strcat "_" opt) lst fltr)
) 

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

Posté(e)

M-A-G-N-I-F-I-Q-U-E

http://img152.imageshack.us/img152/5231/c227dj9.gif

Merci!!!!

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Posté(e)

Merci beaucoup Tramber et (gile) c’est du beau bouleau !

Comme le dit si bien jalna c’est M-A-G-N-I-F-I-Q-U-E ! :D :D :D

Mais voilà si je peux me permettre, en fait ce que je voudrais obtenir c’est seulement la colonne quantité dans une légende déjà existante dans mon dessin.

En fait j’ai déjà crée mon tableau dans le dessin avec :

- la colonne des symboles (avec les symboles à l’échelle qui m’intéresse)

- la colonne des désignations (avec les renseignements remplis de façon manuelle puisque différents suivant le chantier)

- la colonne des références (les références catalogues donnés par les marques)

[surligneur] - et la fameuse colonne des quantités que je voudrais se voir remplir (et se mettre à jour...) automatiquement.[/surligneur]

Les noms réels des blocs ne m’intéressent pas (au contraire ils polluent plutôt le tableau).

Il faudrait juste extraire du fichier le nombre d’occurrences de chaque bloc contenu dans la légende et l’intégrer dans la colonne QUANTITÉS de cette légende.

Est-ce que c’est seulement possible ? :(

Merci d’avance.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Hello

 

Pour salvanorigatore

Essaie le lisp LG dans ma rubrique des lisps

 

Pour (gile)

Je pense que tu es compétent pour les réacteurs. Tu as largement les bases pour travailler dessus

 

@+

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

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é