Aller au contenu

Comptabiliser des blocs dynamiques


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 à poster
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 la maison; Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien à poster
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 à poster
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 la maison; Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien à poster
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 à poster
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 à poster
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

Chargement
×
×
  • Créer...