Patrick_35 Posté(e) le 29 janvier 2015 Posté(e) le 29 janvier 2015 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Steven Posté(e) le 30 janvier 2015 Posté(e) le 30 janvier 2015 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.
Patrick_35 Posté(e) le 30 janvier 2015 Posté(e) le 30 janvier 2015 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lecrabe Posté(e) le 30 janvier 2015 Posté(e) le 30 janvier 2015 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
Steven Posté(e) le 30 janvier 2015 Posté(e) le 30 janvier 2015 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.
Patrick_35 Posté(e) le 2 février 2015 Posté(e) le 2 février 2015 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
dric Posté(e) le 7 mai 2019 Posté(e) le 7 mai 2019 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant