yohan69 Posté(e) le 1 novembre 2010 Posté(e) le 1 novembre 2010 Bonjour, Je cherche un LISP qui supprime tout paramètre dynamique d'un dwg. En clair, j'aimerais éviter d'avoir à "exploser" les blocs dynamiques et/ou rentrer dans l'éditeur de bloc de chaque bloc fixe qui contiennent eux-même des blocs dynamiques à exploser ... En vous remerciant
(gile) Posté(e) le 1 novembre 2010 Posté(e) le 1 novembre 2010 Salut, Tu peux utiliser la fonction vla-ConvertToAnonymousBlock. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Fraid Posté(e) le 1 novembre 2010 Posté(e) le 1 novembre 2010 Bonjour, J'ai cela qui traine sur mon bureau. (defun c:ConvertDyn (/ ActiveDoc taken) (vl-load-com) (setq ActiveDoc (vla-get-ActiveDocument(vlax-get-acad-object))) (foreach taken (vl-remove-if 'listp (mapcar 'cadr (ssnamex (ssget "taken" '((0 . "INSERT"))))) ) (if (equal (vla-get-IsDynamicBlock (vlax-ename->vla-object taken)) :vlax-true ) (vla-ConvertToAnonymousBlock (vlax-ename->vla-object taken)) ) ) (princ) ) Je ne sais plus d'ou j'l'ai eu? Mais c'est dommage d'en arriver a renommer ensuite les blocs.... :exclam: https://github.com/Fraiddd
(gile) Posté(e) le 2 novembre 2010 Posté(e) le 2 novembre 2010 Re, Une sélection de tous les blocs insérés (dans les espaces objet et papier) ne permet pas de traiter les blocs imbriqués (insérés dans des définitions de bloc). L'expression suivante traite toutes les références de blocs qu'elles soient insérées directement dans un espace ou dans une définition de bloc. (vlax-for blk (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))) (vlax-for obj blk (if (and (= (vla-get-ObjectName obj) "AcDbBlockReference") (= (vla-get-IsDynamicBlock obj) :vlax-true) ) (vla-ConvertToAnonymousBlock obj) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
yohan69 Posté(e) le 2 novembre 2010 Auteur Posté(e) le 2 novembre 2010 MERCI !tout simplement parfait, comme d'habitude ...ça me semblait très difficile, et vous résolvez le prb en quelques lignes ...c'est à se demander si vous avez des limites :D encore merci, j'adore ce site :)
Invité eklundh80 Posté(e) le 21 juin 2018 Posté(e) le 21 juin 2018 Salut, La commande fonctionne très bien. Question: j'ai des blocs avec des attributs renseignés par des paramètres de distance. Et donc lorsque l'on passe en statique les attributs deviennent des ####. Est--il possible de convertir en 1er lieu les attributs dans le bloc en texte avec la valeur du paramètre avant de retirer le dynamisme du bloc?
lili2006 Posté(e) le 21 juin 2018 Posté(e) le 21 juin 2018 Bonjour à toutes et tous,As tu testé "Burst" des Express Tools ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Invité eklundh80 Posté(e) le 21 juin 2018 Posté(e) le 21 juin 2018 Oui ,sauf que ça explose. Je préfère nburst de Lee Mac qui explose en n'affichant que la visibilité en cours.Le but étant de conserver les blocs et ne pas avoir des lignes et textes en pagaille.Peut en faisant un vlax-for (vla item attribute ...)??
lili2006 Posté(e) le 21 juin 2018 Posté(e) le 21 juin 2018 Re,Oui ,sauf que ça exploseL'attribut se transforme en texte, je pensais que c'est ce que tu cherchais,.. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Invité eklundh80 Posté(e) le 21 juin 2018 Posté(e) le 21 juin 2018 Exact mais j'aurais souhaité que l'attribut devienne un texte tout en restant dans le bloc.
VDH-Bruno Posté(e) le 21 juin 2018 Posté(e) le 21 juin 2018 Bonjour, 2 petits liens à regarder sur une discussion similaire, à la nuance prés que nous cherchions à verrouiller le dynamisme des blocs plutôt qu'a le supprimer, ce qui devrait éviter d'avoir à modifier les champs de tes attributs A voir si cela peut te convenir: L'explication du procédé:http://cadxp.com/topic/41229-verrouiller-un-bloc-dynamique/page__view__findpost__p__232073 L'automatisationhttp://cadxp.com/topic/41229-verrouiller-un-bloc-dynamique/page__view__findpost__p__232105 A+ Bruno Apprendre => Prendre => Rendre
lili2006 Posté(e) le 21 juin 2018 Posté(e) le 21 juin 2018 Re,Exact mais j'aurais souhaité que l'attribut devienne un texte tout en restant dans le bloc. Ok ! Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Invité eklundh80 Posté(e) le 21 juin 2018 Posté(e) le 21 juin 2018 Merci Bruno mais cela ne fonctionne pas non plus sur tout. C'est un peu mieux cependant.Voici le lien d'un bloc pour exemple. essai blocs Sur les blocs ou les attributs ne dépendent pas des paramétres mais d'objets (cercle ou ligne) cela fonctionne à la différence du lisp ci dessus pour rendre le bloc anonyme (il met les 2 blocs avec ###). Cela vient peut être de la construction de mon bloc. Lorsqu'on régénère les ### apparaissent seulement sur le bloc semelle qui a l'attribut lié au paramètre de distance.Peut-on en lisp basculer les poignées des paramétres ( de 1 ou 2 à 0)??
Invité eklundh80 Posté(e) le 22 août 2018 Posté(e) le 22 août 2018 Salut à tous, Finalement, avec du recul pendant la période estivale j'ai adopté le lisp de VDH Bruno en faisant une modif sur le seul bloc qui me posait un souci (renseignement d'un champs à partir d'un paramètre de distance, je suis passé par la longueur d'une polyligne non imprimable et voila). Sinon j'ai crée un lisp pour reprendre les valeurs du paramètre de distance et le passer en texte, ça marche aussi. Merci à VDH Bruno qui m'a fait chercher plusieurs pistes de réflexion. Voici mes lisp (vlisp et autolisp avec getpropertyvalue) si cela peut aider (même moi si vous avez des remarques pour améliorer mes connaissances en lisp). J'ai dû passer avant la mise à jour de l'attribut par la mise à 0 afin de forcer la prise en compte de la modification et supprimer la copie du paramètre dans la nouvelle valeur de l'attribut (pas compris mais là ça marche :) ). (defun c:UndynSemelle (/ ssx ssf c en *error* acdoc l val1 val2 val3) (vl-load-com) (setq acdoc (vla-get-activedocument (vlax-get-acad-object))); active l'espace de travail (defun *error* (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon")) (princ) (princ (strcat "\nErreur: " msg)) ) ) (vla-regen acdoc acallviewports) (setq ssx (ssget "_X" '((0 . "INSERT") (2 . "`*U*,Semelle"))) ;; créer une liste des objets avec un nom anonyme et Semelle ssf (ssadd) ;; met à 0 la selection finale c 0) ;; met à 0 le compteur (if ssx; si création de la liste (repeat (sslength ssx); répète pour la longueur de la liste (setq en (ssname ssx c); récupère le nom d'objet avec son rang c (1+ c); incrémente le compteur +1 ) (if (= (vla-get-effectivename (vlax-ename->vla-object en)) "Semelle"); si l'objet a son nom = à Semelle (ssadd en ssf); l'ajouter à la liste ) ) ) ssf (if ssf; si création de la liste (repeat (setq i (sslength ssf)) ; répéte jusqu'à la fin de la liste de chaque nom bloc en ename (setq l (cons (vlax-ename->vla-object (ssname ssf (setq i (1- i)))) l)); crée la liste vla-object de chaque bloc ) ) (foreach blc l; Pour chaque bloc de la liste (vl-some '(lambda (att) (if (= "SF80" (strcase (vla-get-tagstring att)));;si l'étiquette de l'attribut = ... (progn (setq val1 (vla-get-textstring att));;récupére la valeur de l'attribut (vla-put-textstring att 0);; la passer à 0 (vla-put-textstring att val1);; et lui remettre la valeur sauvegardée (annule dynamisme) ) ) (if (= "60" (strcase (vla-get-tagstring att)));;si l'étiquette de l'attribut = ... (progn (setq val2 (vla-get-textstring att));;récupére la valeur de l'attribut (vla-put-textstring att 0);; la passer à 0 (vla-put-textstring att val2);; et lui remettre la valeur sauvegardée (annule dynamisme) ) ) (if (= "X80" (strcase (vla-get-tagstring att)));;si l'étiquette de l'attribut = ... (progn (setq val3 (vla-get-textstring att));;récupére la valeur de l'attribut (vla-put-textstring att 0);; la passer à 0 (vla-put-textstring att val3);; et lui remettre la valeur sauvegardée (annule dynamisme) ) ) ) (vlax-invoke blc 'getattributes) ) (princ) (setq *error* nil) (setq ssx nil ssf nil l nil) ) (princ) ) Voici la variante avec les get et set Propertyvalue(defun c:Undyn2semelle (/ ssx ssf c en *error* l val1 val2 val3) (defun *error* (msg) (if (or (= msg "Fonction annulée") (= msg "quitter / sortir abandon")) (princ) (princ (strcat "\nErreur: " msg)) ) ) (vla-regen acdoc acallviewports) (setq ssx (ssget "_X" '((0 . "INSERT") (2 . "`*U*,Semelle"))) ;; créer une liste des objets avec un nom anonyme et Semelle ssf (ssadd) ;; met à 0 la selection finale c 0) ;; met à 0 le compteur (if ssx; si création de la liste (repeat (sslength ssx); répète pour la longueur de la liste (setq en (ssname ssx c); récupère le nom d'objet avec son rang c (1+ c); incrémente le compteur +1 ) (if (= (vla-get-effectivename (vlax-ename->vla-object en)) "Semelle"); si l'objet a son nom = à Semelle (ssadd en ssf); l'ajouter à la liste ) ) ) ssf (if ssf; si création de la liste (repeat (setq i (sslength ssf)) ; répéte jusqu'à la fin de la liste de chaque nom bloc en ename (setq l (cons (ssname ssf (setq i (1- i))) l)); crée la liste ename de chaque bloc ) ) (foreach blc l; Pour chaque bloc de la liste (setq val1 (getpropertyvalue blc "SF80"));;récupére la valeur de l'étiquette (setpropertyvalue blc "SF80" "0");;la passe à 0 (setpropertyvalue blc "SF80" val1);; puis remet la valeur sauvegardée (setq val2 (getpropertyvalue blc "60")) (setpropertyvalue blc "60" "0") (setpropertyvalue blc "60" val2) (setq val3 (getpropertyvalue blc "X80")) (setpropertyvalue blc "X80" "0") (setpropertyvalue blc "X80" val3) (princ) (setq *error* nil) (setq ssx nil ssf nil l nil) ) (princ) )
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