Steven Posté(e) le 15 mars Partager Posté(e) le 15 mars Salut à tous, Ci-joint, un exemple de bloc dans lequel il y a un Mtext à la place d'une définition d'attribut. J'ai un dessin avec une multitude de blocs comme celui-ci mais avec des noms différents. Mais ils sont tous constitués de la même manière. Existe-t-il un moyens de transformer le Mtext ou Texte qui est à l'intérieur des blocs, en attribut et que la valeur valeur de l'attribut soit la valeur du Mtext ou du Texte ? Dans le fichier joint, j'ai nommer le bloc, BLOC, pour l'exemple. EXEMPLE_BLOC.zip Citer 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 15 mars Partager Posté(e) le 15 mars Bonjour Steven Tu en as combien de tels blocs ?, la notion de multitude étant subjective. Te connaissant, je pense que tu as pensé à redéfinir le bloc en mettant le contenu du texte en attribut constant dans un ATTDEF inséré lors du passage par l'éditeur de bloc. On parle de dizaines de secondes, voire quelques minutes, sauf si la multitude s'exprime en centaines. Je viens de tester et ça fonctionne, ensuite, il n'y a qu'à retirer la notion de "constant" pour modifier les futurs blocs et je ne suis même pas certain que ce soit obligé. Tu veux une solution par programme LSP ? Amitiés Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 15 mars Auteur Partager Posté(e) le 15 mars Salut Didier, J'ai 66 blocs composés de polylignes et d'un Mtxt. mais il peut y en voir plus, selon les dessins. Ce Mtxt est différent à chaque fois. J'avais pensé à redéfinir le bloc avec un ATTDEF mais il faudrait que je rentre une valeur différentes à chaque fois. Je souhaiterais pouvoir transformer le Mtxt en valeur d'attribut et que la valeur dudit attribut soit égal au contenu du Mtext. Citer 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 15 mars Partager Posté(e) le 15 mars Hello Steven. La routine que tu espères est ultra-spécifique et de fait ne servira qu'une fois en tout et pour tout. Je suis en train de regarder ce qui serait possible, mais je ne suis pas hyper motivé du fait de l'unicité de la chose. Fais-moi passer un dessin avec les 66 blocs s'i te plaît. En privé si tu préfères. Amitiés Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 15 mars Partager Posté(e) le 15 mars Salut, Tu peux essayer le LISP ci-dessous, il traite toutes les définitions de bloc du dessin et remplace tous les textes et textes multilignes dans ces blocs par un attribut (Invite = "Attrib_n" étiquette = ATTRIB_n avec incrémentation par bloc au cas où il y ait plusieurs textes). (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) (defun ReplaceTextByAttDef (blockDef / i objName attrib just) (setq i 0) (vlax-for obj blockDef (setq objName (vla-get-ObjectName obj)) (cond ((= objName "AcDbMText") (setq attrib (vla-AddAttribute blockdef (vla-get-Height obj) acAttributeModeMultipleLine (strcat "Attrib_" (itoa (setq i (1+ i))) ": ") (vla-get-InsertionPoint obj) (strcat "ATTRIB_" (itoa i)) (vla-get-TextString obj) ) ) (vla-put-Alignment attrib (+ (vla-get-AttachmentPoint obj) 5)) (vla-put-TextAlignmentPoint attrib (vla-get-InsertionPoint obj)) (vla-Delete obj) ) ((= objName "AcDbText") (setq attrib (vla-AddAttribute blockdef (vla-get-Height obj) 0 (strcat "Attrib_" (itoa (setq i (1+ i))) ": ") (vla-get-InsertionPoint obj) (strcat "ATTRIB_" (itoa i)) (vla-get-TextString obj) ) ) (if (/= (vla-get-Alignment obj) acAlignmentLeft) (progn (vla-put-Alignment attrib (vla-get-Alignment obj)) (vla-put-TextAlignmentPoint attrib (vla-get-TextAlignmentPoint obj) ) ) ) (vla-Delete obj) ) ) ) (command-s "_.ATTSYNC" "_Name" (vla-get-Name blockDef)) (princ) ) (defun c:Steven () (vlax-for blockDef *blocks* (if (and (= (vla-get-Islayout blockDef) :vlax-false) (= (vla-get-IsXRef blockDef) :vlax-false) ) (ReplaceTextByAttDef blockDef) ) ) (princ) ) 2 Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 15 mars Auteur Partager Posté(e) le 15 mars Salut @(gile) Je pensais à un truc moins rapide mais là, je n'aurais jamais pensé que ça pouvais prendre si peu de temps pour redéfinir les blocs. 3"12 pour redéfinir tous les blocs 😶 Chapeau bas, @(gile) 👍🏼 Citer 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 15 mars Partager Posté(e) le 15 mars C'est la synchronisation des références de bloc avec ATTSYNC qui prend du temps. Déjà, en mettant CMDECHO à 0 ça devrait être un peu plus rapide. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 15 mars Auteur Partager Posté(e) le 15 mars Da lut @(gile), J'ai mis la variable CMDECHO à 0 mais je n'ai pas trop vu la différence. Mais bon, vu la vitesse avec laquelle ça c'est fait, je ne suis plus à 1/2 seconde près. C'est super rapide😀 Merci 🙂 Citer 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 16 mars Partager Posté(e) le 16 mars Bonjour @(gile) et @Steven Content pour toi Steven Merci encore une fois Gilles, je ne travaille pas assez avec les fonctions VL, je vais le faire, car c'est vachement performant ... Amicalement Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 16 mars Auteur Partager Posté(e) le 16 mars Juste une petite chose, Serait possible que les attributs soient des attributs classiques et non des attributs multilignes ? Citer 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 16 mars Partager Posté(e) le 16 mars J'avais pensé que les textes multilignes devaient être convertis en attributs multilignes et les textes simples en attributs simples... Remplace : acAttributeModeMultipleLine par : 0 (zéro). Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
Steven Posté(e) le 17 mars Auteur Partager Posté(e) le 17 mars Salut @(gile), Y a pas de lézard, c'est moi qui n'est pas suffisamment été précis dans ma demande 😉 C'est top 👍🏼 Merci. Citer 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. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés