kitto Posté(e) le 5 mars Posté(e) le 5 mars Bonjour, J'ai un bloc dynamique avec un attribut qui a un champs dynamique. Ce bloc est un carré que l'on peut agrandi en longueur et aussi en largeur. Quand on régénère le dessin, le texte qui accompagne ce bloc se mette à jour et donne les longueurs et largeurs du carré. j'aurai besoin supprimer les champs dynamique en gardant le texte telle qu'elle. j'ai mis le bloc en question en pièce jointe. Est-ce qu'il y aurai un lisp ou une commande autocad pour pouvoir supprimer le champs dynamique et garder le texte telle qu'elle en vous remerciant d'avance pour vos réponses. carre.dwg Citer
lili2006 Posté(e) le 5 mars Posté(e) le 5 mars Bonjour à toutes et tous, Burst des Express Tools ? Citer Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lecrabe Posté(e) le 5 mars Posté(e) le 5 mars Hello As tu essaye TXT2MTXT ? Bye, lecrabe Citer Autodesk Expert Elite Team
Luna Posté(e) le 5 mars Posté(e) le 5 mars Coucou, Une autre solution serait de sélectionner le champ et de faire un clic droit > Convertir le champ en texte. Cependant si le but est de modifier un ensemble de références de bloc, cela peut prendre un peu de temps car il te faut utiliser la commande ATTEDIT donc un par un. Comme le suggère @lili2006, la commande BURST pourrait correspondre à ton besoin (seulement si tu acceptes de décomposer tes références de blocs), mais si tu veux uniquement convertir la valeur du champ dynamique sous forme de texte en conservant ton bloc alors il faudrait trouver autre chose. Petite question : Si tu dois conserver ta référence de bloc intacte, quel est l'intérêt de convertir ton champ dynamique sous forme de texte exactement ? Est-ce parce que les valeurs du champs ne correspondent pas aux valeurs devant être affichées ? Bisous, Luna Citer
kitto Posté(e) le 5 mars Auteur Posté(e) le 5 mars Il y a 6 heures, lili2006 a dit : Bonjour à toutes et tous, Burst des Express Tools ? bonsoir, merci pour l'info , car je ne connaissais pas la commande Burst sur autocad, ça fonctionne mais mon problème c'est que le bloc que j'ai réellement à plusieurs attribut avec des champs dynamique. du coup quand j'utilise la commande Burst , elle me fait apparaitre tout les textes des autres attributs Citer
kitto Posté(e) le 5 mars Auteur Posté(e) le 5 mars Il y a 6 heures, lecrabe a dit : Hello As tu essaye TXT2MTXT ? Bye, lecrabe bonsoir, j'avais déjà essayé cette commande , mais elle ne fonctionne que sur les champs dynamique qui ne sont pas dans des blocs Citer
kitto Posté(e) le 5 mars Auteur Posté(e) le 5 mars Il y a 6 heures, Luna a dit : Coucou, Une autre solution serait de sélectionner le champ et de faire un clic droit > Convertir le champ en texte. Cependant si le but est de modifier un ensemble de références de bloc, cela peut prendre un peu de temps car il te faut utiliser la commande ATTEDIT donc un par un. Comme le suggère @lili2006, la commande BURST pourrait correspondre à ton besoin (seulement si tu acceptes de décomposer tes références de blocs), mais si tu veux uniquement convertir la valeur du champ dynamique sous forme de texte en conservant ton bloc alors il faudrait trouver autre chose. Petite question : Si tu dois conserver ta référence de bloc intacte, quel est l'intérêt de convertir ton champ dynamique sous forme de texte exactement ? Est-ce parce que les valeurs du champs ne correspondent pas aux valeurs devant être affichées ? Bisous, Luna Bonsoir, en fait, le bloc que j'ai transmis était juste un exemple, comme je dessine des plans de bâtiments , j'ai crée plusieurs blocs dynamiques avec attributs personnels et que je ne voudrais pas transmettre à me clients. Du coup si je dois convertir tout les attribut en texte un à un , cela va me prendre un temps fou même si j'utilise la commande ATTEDIT. Par contre la commande BURST fait apparaitre tout les textes des attributs il faudrait que j'efface tout les autres textes. j'ai joint un autre bloc dynamique avec plusieurs attribut. je me demande s'il n'existe pas un lisp qui pourrait m'aider niveau brut - fini - NGF.dwg Citer
(gile) Posté(e) le 6 mars Posté(e) le 6 mars Salut, Pour résumer, tu voudrais que quelqu'un te fournisse gracieusement un programme LISP relativement complexe parce que tu ne veux pas partager quelques formules de champ dynamique. 3 Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Vincent P. Posté(e) le 6 mars Posté(e) le 6 mars Bonjour, J'avoue que je ne comprend pas l'intérêt de la démarche. Hormis générer de la perte d'information et perdre en praticité ... Pour faire ce que tu demande, je passerais par du ATTOUT / ATTIN, et entre les deux, je viderais dans mon dessin les attributs des blocs (par sélection similaire). Pas besoin de faire de LISP pour ça Citer Lispeur éternel débutant! Autocad Map3D 2023 Covadis-Autopist 18.2
(gile) Posté(e) le 6 mars Posté(e) le 6 mars il y a 35 minutes, Vincent P. a dit : Pour faire ce que tu demande, je passerais par du ATTOUT / ATTIN, et entre les deux, je viderais dans mon dessin les attributs des blocs (par sélection similaire). Ça ne serait pas suffisant. Si @kitto veut priver ses clients des formules de champ, il faut aussi supprimer ces formules dans les définitions de bloc. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Vincent P. Posté(e) le 6 mars Posté(e) le 6 mars Effectivement, j'avais pas vue que c'était des champs appliqué dans la définition des blocs. ça ajoute une étape. Encore plus simple, envoyer des plans papier, on y perd toute notion de champs au moins. Citer Lispeur éternel débutant! Autocad Map3D 2023 Covadis-Autopist 18.2
kitto Posté(e) le 6 mars Auteur Posté(e) le 6 mars Il y a 22 heures, (gile) a dit : Salut, Pour résumer, tu voudrais que quelqu'un te fournisse gracieusement un programme LISP relativement complexe parce que tu ne veux pas partager quelques formules de champ dynamique. Bonsoir Gile, Je ne demandes surtout pas que l'on me fasse un programme LISP à ma place , mais juste savoir si cela existait déjà ou pas . après je ne suis pas contre de partager mes formules ou même mes blocs dynamiques sur ce forum. Pour information, j'ai déjà réalisé une formation LISP au Greta de LYON, mais j'en suis encore qu'au début de mon apprentissage. Citer
kitto Posté(e) le 6 mars Auteur Posté(e) le 6 mars Il y a 9 heures, Vincent P. a dit : Effectivement, j'avais pas vue que c'était des champs appliqué dans la définition des blocs. ça ajoute une étape. Encore plus simple, envoyer des plans papier, on y perd toute notion de champs au moins. Bonsoir Vincent, Alors pour information, je suis dessinateur projeteur en bâtiment indépendant, je réalise des plans de coffrage et d'armatures en sous-traitance pour des bureaux d'études structures. Bien sur quand je termines un plan, je l'envois en format PDF au bureau d'étude (pour qui je travailles) . Mais quand je termine la réalisations de toutes les plans , je dois envoyer toutes les fichiers PDF et aussi les fichiers DWG. Et comme j'ai passé énormément de temps pour dessiner (et à créer les blocs dynamiques) de toutes mes fichiers pour la réalisations des plans d'armatures, cela m'ennuierai de les donner à un bureau d'études qui pourrait s'en servir à sa guise. Comme on m'a appris qu'un dessin valait mieux qu'un long discours, j'ai mis en pièce jointe un fichier d'armature pour des semelles filants (fondations) que j'ai réalisé. c'est bloc dynamique qui permet de me calculer le nombre barres pour une longueur linaire, et me donne en plus sont poids . C'est pour cela que je me suis demandé s'il existait une commande autocad ou un lisp pour supprimer toutes les formules et les champes dynamiques des blocs. bloc dynamique - armature semelles filantes.dwg Citer
Fraid Posté(e) le 7 mars Posté(e) le 7 mars Bonjour, Pour supprimer les dynamismes (à faire en premier) ; Chargement des fonctions VLA/Activex. (vl-load-com) ;;;Supprime le dynamisme des blocs (defun c:ddn (/ nom) (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)) (progn (setq nom (strcat(vla-get-effectivename obj)"_ND")) (vla-ConvertToAnonymousBlock obj) (vla-converttostaticblock obj nom) ) ) ) ) (princ) ) Pour supprimer les champs ;;;field2txt Conversion des champs en textes ;;;Supprime les champs et les remplace par leurs valeurs ;;;acdc, (vla-get-activedocument (vlax-get-acad-object)) ou ObjectDBX ;;;tapper f2t pour traiter le dessin courant ou f2tindir pour traiter un dossier ;;;Converti les Textes, Mtextes, repères, repères multiples, cotations, Attributs et tableaux ;;;dans chaques présentations et les blocks (defun field2txt ( acdc / delfield getconstantatt) (defun delfield (ob / objname objlay lays dic ind atts lconst ctc ctr lver) (setq objname (vla-get-objectname ob) objlay (vla-get-layer ob) lays (vla-get-layers acdc) ) (and (= (vla-get-freeze (vla-item lays objlay)) :vlax-false) (= (vla-get-lock (vla-item lays objlay)) :vlax-false) ;(not (member objlay '("0" "EXCLU")));option d'exclusion de calques (progn (and (wcmatch objname "*Text,AcDbMLeader");Texte, Mtextes, repères et repères multiples (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ind (vla-get-textstring ob)) (progn (vla-put-textstring ob " ") (vla-put-textstring ob ind) ) ) (and (wcmatch objname "*Dimension");Cotations (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ind (vla-get-textoverride ob)) (progn (vla-put-textoverride ob " ") (vla-put-textoverride ob ind) ) ) (and (eq objname "AcDbBlockReference");Attributs (setq atts (vlax-invoke ob 'GetAttributes) lconst (getconstantatt ob)) (foreach att atts (and (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary att) "ACAD_FIELD")) (not (member (vla-get-TagString att) lconst)) (setq ind (vla-get-textstring att)) (progn (vla-put-textstring att " ") (vla-put-textstring att ind) ) ) ) ) (and (eq objname "AcDbTable");Tableaux (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ctr 0 ctc 0 ) (while (< ctr (vla-get-rows ob)) (while (< ctc (vla-get-columns ob)) (and (/= (vla-GetCellState ob ctr ctc) 1) (/= (vla-GetCellState ob ctr ctc) 17) (setq ind (vlax-invoke ob 'getcellvalue ctr ctc)) (progn (vlax-invoke ob 'setcellvalue ctr ctc " ") (vlax-invoke ob 'setcellvalue ctr ctc ind) ) ) (setq ctc (1+ ctc)) ) (setq ctc 0 ctr (1+ ctr)) ) ) ) ) );fin delfield ;;;getconstantatt ;;;bl, vla objet (block) ;;;Retourne la liste des étiquettes des attributs constants (defun getconstantatt ( bl / lc) (setq lc '()) (vlax-for bls (vla-get-blocks acdc) (if (eq (vlax-get bls 'Name)(vlax-get bl 'Name)) (vlax-for obj bls (and (= (vla-get-ObjectName obj) "AcDbAttributeDefinition") (= (vla-get-Constant obj) :vlax-true) (setq lc (cons (vla-get-TagString obj) lc)) ) ) ) ) lc ) ;Définitions de blocks (vlax-for bl (vla-get-blocks acdc) (and (= (vla-get-islayout bl) :vlax-false) (= (vla-get-IsXRef bl) :vlax-false) (= (vla-get-IsDynamicBlock bl) :vlax-false) (not (wcmatch (vla-get-name bl) "`*T*")) (vlax-for obj bl (delfield obj) ) ) ) ;Chaque présentations (vlax-for layout (vlax-get-property acdc 'layouts) (vlax-for obj (vlax-get-property layout 'block) (delfield obj) ) ) (princ) );fin field2txt ;Commande pour dessin courant (defun c:f2t (/ ac) (field2txt (setq ac (vla-get-activedocument (vlax-get-acad-object)))) (vla-Regen ac acAllViewports)(princ)) ;Commande pour dossier (non récursif) (defun c:f2tindir ( / dir lf axdbdoc) (and (setq dir (getdir)) (setq lf (vl-directory-files dir "*.dwg" 1)) (foreach f lf (if (setq axdbdoc (getaxdbdoc (strcat dir f))) (field2txt axdbdoc) ) (vla-saveas axdbdoc (strcat dir f)) (vlax-release-object axdbdoc) ) ) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun getdir( / shell rep) (setq shell (vlax-create-object "Shell.Application") rep (vlax-invoke shell 'browseforfolder 0 "Sélectionnez le dossier" 512 "") ) (vlax-release-object shell) (strcat (vlax-get-property (vlax-get-property rep 'self) 'path) "\\") ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun getaxdbdoc (filename / axdbdoc release) (setq axdbdoc (vlax-create-object (if (< (setq release (atoi (getvar "ACADVER"))) 16) "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa release)) ) ) ) (if (vl-catch-all-apply 'vla-open (list axdbdoc filename)) (not (vlax-release-object axdbdoc)) axdbdoc ) ) Citer https://github.com/Fraiddd
kitto Posté(e) le 22 mars Auteur Posté(e) le 22 mars Le 07/03/2024 à 10:49, Fraid a dit : Bonjour, Pour supprimer les dynamismes (à faire en premier) ;;;Supprime le dynamisme des blocs (defun c:ddn (/ nom) (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)) (progn (setq nom (strcat(vla-get-effectivename obj)"_ND")) (vla-ConvertToAnonymousBlock obj) (vla-converttostaticblock obj nom) ) ) ) ) (princ) ) Pour supprimer les champs ;;;field2txt Conversion des champs en textes ;;;Supprime les champs et les remplace par leurs valeurs ;;;acdc, (vla-get-activedocument (vlax-get-acad-object)) ou ObjectDBX ;;;tapper f2t pour traiter le dessin courant ou f2tindir pour traiter un dossier ;;;Converti les Textes, Mtextes, repères, repères multiples, cotations, Attributs et tableaux ;;;dans chaques présentations et les blocks (defun field2txt ( acdc / delfield getconstantatt) (defun delfield (ob / objname objlay lays dic ind atts lconst ctc ctr lver) (setq objname (vla-get-objectname ob) objlay (vla-get-layer ob) lays (vla-get-layers acdc) ) (and (= (vla-get-freeze (vla-item lays objlay)) :vlax-false) (= (vla-get-lock (vla-item lays objlay)) :vlax-false) ;(not (member objlay '("0" "EXCLU")));option d'exclusion de calques (progn (and (wcmatch objname "*Text,AcDbMLeader");Texte, Mtextes, repères et repères multiples (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ind (vla-get-textstring ob)) (progn (vla-put-textstring ob " ") (vla-put-textstring ob ind) ) ) (and (wcmatch objname "*Dimension");Cotations (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ind (vla-get-textoverride ob)) (progn (vla-put-textoverride ob " ") (vla-put-textoverride ob ind) ) ) (and (eq objname "AcDbBlockReference");Attributs (setq atts (vlax-invoke ob 'GetAttributes) lconst (getconstantatt ob)) (foreach att atts (and (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary att) "ACAD_FIELD")) (not (member (vla-get-TagString att) lconst)) (setq ind (vla-get-textstring att)) (progn (vla-put-textstring att " ") (vla-put-textstring att ind) ) ) ) ) (and (eq objname "AcDbTable");Tableaux (vl-catch-all-apply 'vla-item (list (vla-getextensiondictionary ob) "ACAD_FIELD")) (setq ctr 0 ctc 0 ) (while (< ctr (vla-get-rows ob)) (while (< ctc (vla-get-columns ob)) (and (/= (vla-GetCellState ob ctr ctc) 1) (/= (vla-GetCellState ob ctr ctc) 17) (setq ind (vlax-invoke ob 'getcellvalue ctr ctc)) (progn (vlax-invoke ob 'setcellvalue ctr ctc " ") (vlax-invoke ob 'setcellvalue ctr ctc ind) ) ) (setq ctc (1+ ctc)) ) (setq ctc 0 ctr (1+ ctr)) ) ) ) ) );fin delfield ;;;getconstantatt ;;;bl, vla objet (block) ;;;Retourne la liste des étiquettes des attributs constants (defun getconstantatt ( bl / lc) (setq lc '()) (vlax-for bls (vla-get-blocks acdc) (if (eq (vlax-get bls 'Name)(vlax-get bl 'Name)) (vlax-for obj bls (and (= (vla-get-ObjectName obj) "AcDbAttributeDefinition") (= (vla-get-Constant obj) :vlax-true) (setq lc (cons (vla-get-TagString obj) lc)) ) ) ) ) lc ) ;Définitions de blocks (vlax-for bl (vla-get-blocks acdc) (and (= (vla-get-islayout bl) :vlax-false) (= (vla-get-IsXRef bl) :vlax-false) (= (vla-get-IsDynamicBlock bl) :vlax-false) (not (wcmatch (vla-get-name bl) "`*T*")) (vlax-for obj bl (delfield obj) ) ) ) ;Chaque présentations (vlax-for layout (vlax-get-property acdc 'layouts) (vlax-for obj (vlax-get-property layout 'block) (delfield obj) ) ) (princ) );fin field2txt ;Commande pour dessin courant (defun c:f2t (/ ac) (field2txt (setq ac (vla-get-activedocument (vlax-get-acad-object)))) (vla-Regen ac acAllViewports)(princ)) ;Commande pour dossier (non récursif) (defun c:f2tindir ( / dir lf axdbdoc) (and (setq dir (getdir)) (setq lf (vl-directory-files dir "*.dwg" 1)) (foreach f lf (if (setq axdbdoc (getaxdbdoc (strcat dir f))) (field2txt axdbdoc) ) (vla-saveas axdbdoc (strcat dir f)) (vlax-release-object axdbdoc) ) ) (princ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun getdir( / shell rep) (setq shell (vlax-create-object "Shell.Application") rep (vlax-invoke shell 'browseforfolder 0 "Sélectionnez le dossier" 512 "") ) (vlax-release-object shell) (strcat (vlax-get-property (vlax-get-property rep 'self) 'path) "\\") ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun getaxdbdoc (filename / axdbdoc release) (setq axdbdoc (vlax-create-object (if (< (setq release (atoi (getvar "ACADVER"))) 16) "ObjectDBX.AxDbDocument" (strcat "ObjectDBX.AxDbDocument." (itoa release)) ) ) ) (if (vl-catch-all-apply 'vla-open (list axdbdoc filename)) (not (vlax-release-object axdbdoc)) axdbdoc ) ) Bonjour, tout d'abord merci pour Les deux programmes lisp. pourriez-vous me dire s'il a une procédure à suivre ? car quand je lance le 1 er lisp (defun c:ddn (/ nom) autocad me mets "erreur: Erreur Automation clé dupliquée" et pour le 2eme lisp autocad me mets Commande inconnue "FIELD2TXT Citer
Fraid Posté(e) le 22 mars Posté(e) le 22 mars Bonjour, J'ai rajouté, le chargement des fonctions VLA/Activex. (vl-load-com) si cdd ne fonctionne toujours pas, donne moi un exemple de bloc, car avec les bloc dynamique que j'ai sous la main, cela fonctionne. Pour la deuxième routine, c'est f2t qu'il faut taper dans Autocad. C'est indiqué en clair dans le code. Citer https://github.com/Fraiddd
kitto Posté(e) le 7 mai Auteur Posté(e) le 7 mai Bonjour Fraid Je voulais remercier pour les deux programmes Lisp que vous m'avez transmis sont géniaux !!!! Je voudrais savoir est ce que vous un programmeur Lisp ? si oui, je voudrais savoir si vous faites des programme lisp personnalisée à la demande ? contre rémunération bien sur Citer
Fraid Posté(e) le 7 mai Posté(e) le 7 mai Merci Messsage perso envoyé. 😉 Citer https://github.com/Fraiddd
dxxx01 Posté(e) le 9 mai Posté(e) le 9 mai Cool il y a encore des personnes qui de par leur connaissance font encore avancer le chmil blic sans chercher forcement a vendre leur competence tant que cela ne leur pourrit pas la vie moi je galere pour avoir des supports sur ACA et c est tres hard d en trouver ... Car il y en a peu un gus a voulu me vendre son programme 4400€ sur ACA alors que sur le site JTB il y a une appli qui pour 95 € fait le job a 70 % et c est par licence…il a vu la lune le mec Citer
Messages recommandés