CADxp: Comptabiliser des blocs dynamiques - CADxp

Aller au contenu

  • 2 Pages +
  • 1
  • 2
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Comptabiliser des blocs dynamiques

#21 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6381
  • Inscrit(e) : 06-janvier 03

Posté 28 janvier 2015 - 15:10

C'est bien ce qu'il me semblait, il faut compter des blocs en fonction des états de visibilité.
Le problème avec les blocs dynamiques, c'est que l'on peut faire plusieurs choses comme les paramètres d'étirement.
Dans le cas présent, programmer un décompte avec les blocs imbriqués n'est pas simple et alourdi considérablement le temps de traitement.

Le présent lisp indique et fait un trie sur les états de visibilités et comme tu sais à quoi ils correspondent, un petit tout sur Excel et le tour est joué.

ps : le lisp actuel est passe-partout. On peut même faire des métrés comme pour les chemins de câbles (ou gaines) avec un paramètre de longueur et de largeur.
pps : rien ne t'interdit de reprendre 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
0

#22 L'utilisateur est hors-ligne   Steven 

  • ceinture rouge et blanche 7em dan
  • Groupe : Membres
  • Messages : 3581
  • Inscrit(e) : 03-mars 03
  • LocationDans le TARDIS

Posté 28 janvier 2015 - 15:11

Voir le messagePatrick_35, le 28 janvier 2015 - 12:04 , dit :

Et avec des blocs imbriqués qui s'affiche ou pas selon les visibilités ?
@+


Non, ça ne comptabilise pas les blocs qui ne sont pas visible?

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.
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.
0

#23 L'utilisateur est hors-ligne   doberman 

  • ceinture verte
  • Groupe : Membres
  • Messages : 81
  • Inscrit(e) : 05-juillet 05

Posté 28 janvier 2015 - 15:26

Ok, et encore merci a tous...

PS: j'ai poster une question là : Mon lien

Si le coeur vous en dit .. ;)
0

#24 L'utilisateur est hors-ligne   Steven 

  • ceinture rouge et blanche 7em dan
  • Groupe : Membres
  • Messages : 3581
  • Inscrit(e) : 03-mars 03
  • LocationDans le TARDIS

Posté 28 janvier 2015 - 15:34

Voir le messagedoberman, le 28 janvier 2015 - 14:18 , dit :

J'ai du mal m'exprimer....

J'ai un Bloc Dynamique nommé "Gainable" dans lequel j'ai 5 bloc "Normaux" :

- 1 Ventilo-convecteur
- 2 Grilles d'extraction
- 2 Grilles de soufflage

C'est ca que je voulais compter.


Ton bloc "Gainable" doit donc avoir 3 états de visibilités, je suppose.
1 état 1 ventilo-convecteur
1 état 2 grilles d'extaction
1 état 2 grilles de soufflage

Suivant l'état de visibilité du bloc, l'extraction de données comptabilisera les bloc imbriqués qui sont visibles.
Par exemple, dans un dessin vierge, tu insères le bloc "Gainable". Tu mets l'é"tat de visibilité 2 grilles d'extraction, dans ton tableau tu pourras avoir:
1 Gainable
2 grilles d'extractions.
Si tu copies le bloc "Gainable" avec le même état de visibilité, en mettant la table à jour, tu auras
2 Gainable
4 grilles d'extractions.
Si tu copies le bloc "Gainable" une troisième fois et que tu mets, à cette troisième copie, l'état de visibilité 2 grilles de soufflage, tu auras
3 Gainable
4 grilles d'extraction
2 grilles de soufflage
Et ainsi de suite.
Toutefois, tu n'es pas obligé d'indiquer dans ton tableau le nombre de bloc "Gainable". Tu peux juste avoir le nombre de grilles ou de ventilo-convecteurs visibles.
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.
0

#25 L'utilisateur est hors-ligne   doberman 

  • ceinture verte
  • Groupe : Membres
  • Messages : 81
  • Inscrit(e) : 05-juillet 05

Posté 28 janvier 2015 - 15:59

Merci Steven, c'est ce que je cherchai.. Je vais donc voir commment fonctionne cet "Extraction de données"
0

#26 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6381
  • Inscrit(e) : 06-janvier 03

Posté 29 janvier 2015 - 10:43

Voir le messageSteven, le 28 janvier 2015 - 15:11 , dit :

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
0

#27 L'utilisateur est hors-ligne   Steven 

  • ceinture rouge et blanche 7em dan
  • Groupe : Membres
  • Messages : 3581
  • Inscrit(e) : 03-mars 03
  • LocationDans le TARDIS

Posté 30 janvier 2015 - 12:27

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.
0

#28 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6381
  • Inscrit(e) : 06-janvier 03

Posté 30 janvier 2015 - 14:54

Salut

Citation

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é.

Citation

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
0

#29 L'utilisateur est hors-ligne   lecrabe 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8368
  • Inscrit(e) : 10-décembre 03
  • LocationLoire (42)

Posté 30 janvier 2015 - 15:29

Hello

1) Je veux bien imaginer des Blocs Classiques imbriques dans un Bloc Dynamique (ou Classique) !

2) Comme P35, je ne peux pas imaginer (et meme admettre) des imbrications de blocs dynamiques !!

Bye, lecrabe
Autodesk Expert Elite Team
0

#30 L'utilisateur est hors-ligne   Steven 

  • ceinture rouge et blanche 7em dan
  • Groupe : Membres
  • Messages : 3581
  • Inscrit(e) : 03-mars 03
  • LocationDans le TARDIS

Posté 30 janvier 2015 - 17:44

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

Voir le messageSteven, le 30 janvier 2015 - 12:27 , dit :

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.
0

#31 L'utilisateur est hors-ligne   Patrick_35 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 6381
  • Inscrit(e) : 06-janvier 03

Posté 02 février 2015 - 09:46

Salut

Voir le messageSteven, le 30 janvier 2015 - 17:44 , dit :

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
0

#32 L'utilisateur est hors-ligne   dric 

  • ceinture blanche
  • Groupe : Membres
  • Messages : 1
  • Inscrit(e) : 07-mai 19

Posté 07 mai 2019 - 17:22

Voir le messagePatrick_35, le 29 janvier 2015 - 10:43 , dit :

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
0

Partager ce sujet :


  • 2 Pages +
  • 1
  • 2
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)