Aller au contenu

Comptabiliser des blocs dynamiques


eryk

Messages recommandés

Si j'ai une table avec 6 chaises imbriquées et que je mets un état de visibilité de 2 chaises, le tableau ne comptabilisera que 2 chaises. Les 4 chaises restantes qui ne sont pas visibles ne sont pas comptabilisées.

si je mets l'état de visibilité de 6 chaises, le tableau comptabilisera les 6 chaises.

Ok, merci.

Il faudrait que je m'y mette un jour sur cette extraction de données ;)

 

Sinon, j'ai continué cette histoire de blocs imbriqués et ce n'est pas aussi compliqué que je le pensais

(defun c:cnd(/ blo doc ent sel tbl liste_dyn bloc_imbrique decompte)

 (defun liste_dyn(ent)
   (cons (vla-get-effectivename ent)
  (mapcar '(lambda(x)(list (vlax-get x 'propertyname) (vlax-get x 'value)))
	  (vl-remove-if '(lambda(x)(eq (vla-get-show x) :vlax-false))
			(vlax-invoke ent 'getdynamicblockproperties)
	  )
  )
   )
 )

 (defun bloc_imbrique(nom / ele ok)
   (vlax-for ele (vla-item (vla-get-blocks doc) nom)
     (and (eq (vla-get-objectname ele) "AcDbBlockReference")
   (eq (vla-get-visible ele) :vlax-true)
(or (bloc_imbrique (vla-get-name ele))
  (setq blo (cons (vla-get-effectivename ele) blo)
  	ok  T
  )
)
     )
   )
   ok
 )

 (defun decompte(tbl / js lst n)
   (while tbl	
     (setq n   (length tbl)
    js  (car tbl)
    tbl (vl-remove js tbl)
    lst (cons (cons (- n (length tbl)) js) lst)
     )
   )
   lst
 )

 (vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (and (ssget (list (cons 0 "insert")))
   (progn
     (vlax-for ent (setq sel (vla-get-activeselectionset doc))
(and (eq (vla-get-isdynamicblock ent) :vlax-true)
  (setq tbl (cons (liste_dyn ent) tbl))
  (bloc_imbrique (vla-get-name ent))
)
     )
     (vla-delete sel)
     (mapcar '(lambda(x)
	(princ "\n")
	(repeat (- 6 (strlen (itoa (car x))))
	  (princ " ")
	)
	(princ (car x))
	(princ (strcat " " (cadr x)))
	(mapcar '(lambda(x)
		  (princ (strcat " ... \"" (car x) " : "))
		  (princ (cadr x))
		  (princ "\"")
		)
		(cddr x)
	)
      )
      (vl-sort (decompte tbl) '(lambda(a B)(< (cadr a) (cadr B))))
     )
     (and blo (princ "\n\n       Bloc imbriqués :"))
     (mapcar '(lambda(x)
	(princ "\n")
	(repeat (- 6 (strlen (itoa (car x))))
	  (princ " ")
	)
	(princ (car x))
	(princ (strcat " " (cdr x)))
      )
      (vl-sort (decompte blo) '(lambda(a B)(< (cdr a) (cdr B))))
     )
   )
 )
 (vla-endundomark doc)
 (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

Lien vers le commentaire
Partager sur d’autres sites

Salut Patrick,

 

Nickel, le lisp lorsqu'on a besoin de connaître le nombre de blocs imbriqués dans un bloc dynamique, à la volée :)

 

Une petite précisionil faut absolument que dans le bloc dynamique, il y ai des blocs imbriqués. Si le bloc dynamique n'est constitués avec des blocs dynamique, lisp ne comptabilise que le bloc sélectionné et ne donner qu'une quantité de 1.

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.

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Une petite précisionil faut absolument que dans le bloc dynamique, il y ai des blocs imbriqués.

Non car un bloc dynamique peut avoir d'autres besoin que des blocs imbriqués avec des actions de visibilités. C'est aussi comptabilisé.

 

Si le bloc dynamique n'est constitués avec des blocs dynamique, lisp ne comptabilise que le bloc sélectionné et ne donner qu'une quantité de 1.

Il faut quand même être tordu pour imbriquer un bloc dynamique dans un bloc dynamique car le bloc imbriqué devient statique et perds son sens premier.

J'y avais pensé, mais je me suis dit que non, quand même pas. Ben si. ;)

Là, ça devient une usine à gaz. Plus tard si j'ai du temps, à moins que l'on prenne la suite.

 

@+

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

En fait, je me suis vautré dans ma réponse.

 

Salut Patrick,

 

Nickel, le lisp lorsqu'on a besoin de connaître le nombre de blocs imbriqués dans un bloc dynamique, à la volée :)

 

Une petite précisionil faut absolument que dans le bloc dynamique, il y ai des blocs imbriqués. Si le bloc dynamique n'est constitués avec des blocs dynamique, lisp ne comptabilise que le bloc sélectionné et ne donne qu'une quantité de 1.

 

Je voulais dire:

 

Une petite précision il faut absolument que dans le bloc dynamique, il y ai des blocs imbriqués. Si le bloc dynamique n'est constitués qu'avec de lignes, cercle ou autre objets de dessins, le lisp ne comptabilise que le bloc sélectionné et ne donner qu'une quantité de 1

 

Ci-joint un fichier contenant deux blocs dynamiques.

 

Il y a un bloc dynamique qui s'appelle Carré_de_1x1 qui a une action de réseau . A l'intérieur de celui-ci, il y a un bloc qui s'appelle Carré_et_triangle. CND.lsp comptabilise bien 1 bloc Carré_de_1x1 avec la distance du paramètre de distance et 4 blocs Carré-et-triangle.

 

Il y a un deuxième bloc dynamique qui s'appelle Carré_et_rond, qui lui, n'a pas de bloc imbriqué. Ce sont juste une polyligne et un cercle. CND.lsp ne comptabilise qu'un seul bloc Carré_et_rond et donne la disatnce du paramètre de distance quia servi à mettre l'action de réseau dans le bloc dynamique.

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.

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

En fait, je me suis vautré dans ma réponse.

 

 

 

Je voulais dire:

 

Une petite précision il faut absolument que dans le bloc dynamique, il y ai des blocs imbriqués. Si le bloc dynamique n'est constitués qu'avec de lignes, cercle ou autre objets de dessins, le lisp ne comptabilise que le bloc sélectionné et ne donner qu'une quantité de 1

 

Ci-joint un fichier contenant deux blocs dynamiques.

 

Il y a un bloc dynamique qui s'appelle Carré_de_1x1 qui a une action de réseau . A l'intérieur de celui-ci, il y a un bloc qui s'appelle Carré_et_triangle. CND.lsp comptabilise bien 1 bloc Carré_de_1x1 avec la distance du paramètre de distance et 4 blocs Carré-et-triangle.

 

Il y a un deuxième bloc dynamique qui s'appelle Carré_et_rond, qui lui, n'a pas de bloc imbriqué. Ce sont juste une polyligne et un cercle. CND.lsp ne comptabilise qu'un seul bloc Carré_et_rond et donne la disatnce du paramètre de distance quia servi à mettre l'action de réseau dans le bloc dynamique.

C'est clair comme explication :D

 

@+

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

  • 4 ans après...

Ok, merci.

Il faudrait que je m'y mette un jour sur cette extraction de données ;)

 

Sinon, j'ai continué cette histoire de blocs imbriqués et ce n'est pas aussi compliqué que je le pensais

(defun c:cnd(/ blo doc ent sel tbl liste_dyn bloc_imbrique decompte)

 (defun liste_dyn(ent)
   (cons (vla-get-effectivename ent)
  (mapcar '(lambda(x)(list (vlax-get x 'propertyname) (vlax-get x 'value)))
	  (vl-remove-if '(lambda(x)(eq (vla-get-show x) :vlax-false))
			(vlax-invoke ent 'getdynamicblockproperties)
	  )
  )
   )
 )

 (defun bloc_imbrique(nom / ele ok)
   (vlax-for ele (vla-item (vla-get-blocks doc) nom)
     (and (eq (vla-get-objectname ele) "AcDbBlockReference")
   (eq (vla-get-visible ele) :vlax-true)
(or (bloc_imbrique (vla-get-name ele))
  (setq blo (cons (vla-get-effectivename ele) blo)
  	ok  T
  )
)
     )
   )
   ok
 )

 (defun decompte(tbl / js lst n)
   (while tbl	
     (setq n   (length tbl)
    js  (car tbl)
    tbl (vl-remove js tbl)
    lst (cons (cons (- n (length tbl)) js) lst)
     )
   )
   lst
 )

 (vl-load-com)
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (and (ssget (list (cons 0 "insert")))
   (progn
     (vlax-for ent (setq sel (vla-get-activeselectionset doc))
(and (eq (vla-get-isdynamicblock ent) :vlax-true)
  (setq tbl (cons (liste_dyn ent) tbl))
  (bloc_imbrique (vla-get-name ent))
)
     )
     (vla-delete sel)
     (mapcar '(lambda(x)
	(princ "\n")
	(repeat (- 6 (strlen (itoa (car x))))
	  (princ " ")
	)
	(princ (car x))
	(princ (strcat " " (cadr x)))
	(mapcar '(lambda(x)
		  (princ (strcat " ... \"" (car x) " : "))
		  (princ (cadr x))
		  (princ "\"")
		)
		(cddr x)
	)
      )
      (vl-sort (decompte tbl) '(lambda(a B)(< (cadr a) (cadr B))))
     )
     (and blo (princ "\n\n       Bloc imbriqués :"))
     (mapcar '(lambda(x)
	(princ "\n")
	(repeat (- 6 (strlen (itoa (car x))))
	  (princ " ")
	)
	(princ (car x))
	(princ (strcat " " (cdr x)))
      )
      (vl-sort (decompte blo) '(lambda(a B)(< (cdr a) (cdr B))))
     )
   )
 )
 (vla-endundomark doc)
 (princ)
)

 

@+

 

Bonjour Patrick,

 

Je déterre ce vieux post...

 

Merci pour ton lisp,

Est-il possible de l'améliorer, afin qu'il compte aussi les blocs statiques ?

 

par avance merci

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é