Bobby_one Posté(e) le 4 mai 2020 Posté(e) le 4 mai 2020 Bonjour, J'utilise souvent la commande CHAMP (_Field) dans mes plans. Je sélectionne l'aire de différentes polylignes que je mets dans du texte et je fais l'addition manuellement à la fin.J'ai donc un élément de texte de ce type : XXm2 + YYm2 + ZZm2 = AAAm2 Ma question : Est-il possible de retrouver ensuite à quelle polyligne dans le plan correspond la valeur XX ou YY? Il m'arrive souvent d'avoir une dizaine de surfaces différentes à additionner.Et pour les autres intervenants sur le plan, ça pourrait être pratique de retrouver facilement les polylignes en question. Je ne pense pas qu'Autocad puisse faire ça mais ça m'aiderai tellement que je tente ma chance ici :)Merci à vous Citer
lecrabe Posté(e) le 4 mai 2020 Posté(e) le 4 mai 2020 Hello As tu des champs "simples et separes" representant la Surface ou Longueur de Polylignes ? Si OUI, veux tu savoir a quel objet est lie un champ "simple et separe" ?? LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite Citer Autodesk Expert Elite Team
Steven Posté(e) le 5 mai 2020 Posté(e) le 5 mai 2020 Salut Bobby_one, Peut-être que ce lisp te serait utile.Il met en surbrillance la polyligne du champ sélectionné. 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.
Bobby_one Posté(e) le 5 mai 2020 Auteur Posté(e) le 5 mai 2020 Merci beaucoup pour vos réponses. Le crabe> Si je comprends bien ce que tu entends par champ "simple et séparé", non ce n'est pas le cas.J'ai un élément texte global dans lequel je mets tous les champs. Et j'en viens à la solution de Steven qui est top mais qui marche seulement si chaque champ est indépendant.Edit :J'avais pas vu ta vidéo, elle s'était pas chargée au début.Tout tes champs sont dans le même objet texte? Je n'arrive pas a selectionner chaque champ comme toi(J'avais pas fait gaffe que j'ai posté dans Autocad 2020 alors que je suis sur 2019, ca vient peut etre de là?) Citer
lecrabe Posté(e) le 5 mai 2020 Posté(e) le 5 mai 2020 Hello As tu des champs "simples et separes" representant la Surface ou Longueur de Polylignes ?Si OUI, veux tu savoir a quel objet est lie un champ "simple et separe" ?? J'avais ecrit CELA, car j'ai la MEME routine que Steven !Et donc je sentais bien que cela ne te conviendra pas !? La version d'AutoCAD n'a RIEN a VOIR !!Les Champs dynamiques n'ont pas evolue dans AutoCAD depuis plus de 12 ans !! LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite Citer Autodesk Expert Elite Team
Steven Posté(e) le 5 mai 2020 Posté(e) le 5 mai 2020 Merci beaucoup pour vos réponses. Le crabe> Si je comprends bien ce que tu entends par champ "simple et séparé", non ce n'est pas le cas.J'ai un élément texte global dans lequel je mets tous les champs. Et j'en viens à la solution de Steven qui est top mais qui marche seulement si chaque champ est indépendant.Edit :J'avais pas vu ta vidéo, elle s'était pas chargée au début.Tout tes champs sont dans le même objet texte? Je n'arrive pas a selectionner chaque champ comme toi(J'avais pas fait gaffe que j'ai posté dans Autocad 2020 alors que je suis sur 2019, ca vient peut etre de là?) Salut, Sur la démo que je t'ai fait, tous les champs sont dans un seul texte multiligne. 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.
Bobby_one Posté(e) le 5 mai 2020 Auteur Posté(e) le 5 mai 2020 Salut, Sur la démo que je t'ai fait, tous les champs sont dans un seul texte multiligne.C'est exactement ce que je voudrais faire! Tu arrives même a faire l'addition en automatique? tu peux me dire comment tu fais ça? De mon côté si je mets plusieurs champs dans un texte multiligne, je ne peux pas selectionner le champ qui m'interesse.Ca selectionne tout l'element texte et ca met en surbrillance uniquement la polyligne du 1er champ.J'ai aussi un petit bug d'affichage, la polyligne reste surbrillance même en faisant "echap"Je dois faire un "Regen" pour l'enlever Citer
Steven Posté(e) le 5 mai 2020 Posté(e) le 5 mai 2020 De mon côté si je mets plusieurs champs dans un texte multiligne, je ne peux pas selectionner le champ qui m'interesse.Ca selectionne tout l'element texte et ca met en surbrillance uniquement la polyligne du 1er champ. Au temps pour moi.En effet, lorsqu'on sélectionne le texte multiligne avec FIELDOBJECT, il ne met bien que la première polyligne en surbrillance. Pour palier à ce soucis, peut-être devrais-tu faire un tableau dans lequel tu peux, insérer dans les cellules, des champs assignés aux polylignes. De cette manière, lorsque tu uTilisera FIELDOBJECT sur un champ du tableau, il mettra la polyligne correspondante en surbrillance. J'ai aussi un petit bug d'affichage, la polyligne reste surbrillance même en faisant "echap"Je dois faire un "Regen" pour l'enlever C'est normal. Tu arrives même a faire l'addition en automatique? tu peux me dire comment tu fais ça?Je créé un denier champ avec une formule dans laquelle j'insère des champs assignés aux polylignes 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.
Bobby_one Posté(e) le 5 mai 2020 Auteur Posté(e) le 5 mai 2020 Au temps pour moi.En effet, lorsqu'on sélectionne le texte multiligne avec FIELDOBJECT, il ne met bien que la première polyligne en surbrillance. Pour palier à ce soucis, peut-être devrais-tu faire un tableau dans lequel tu peux, insérer dans les cellules, des champs assignés aux polylignes. De cette manière, lorsque tu uTilisera FIELDOBJECT sur un champ du tableau, il mettra la polyligne correspondante en surbrillance. https://i.postimg.cc/FsXB4HgY/FIELDOBJECT2.gif Ok je comprends, il faut donc que je passe obligatoirement par l'intermédiaire d'un tableau pour retrouver chaque polyligne.Si les champs sont dans un élément seul texte, c'est impossible. Je créé un denier champ avec une formule dans laquelle j'insère des champs assignés aux polylignes J'ai pigé le principe par contre ça me demande des cellules de tableau.Comment tu fais pour avoir les valeurs 65.80+87.01+.. au dessus du bouton "evaluer"?Moi je vais avoir une formule comme ça "Sum(A2:C2)" Citer
Steven Posté(e) le 5 mai 2020 Posté(e) le 5 mai 2020 Insérer un champ > Formule > Dans le cadre de la formule > clic droit > Insérer un champ > Objet > Sélection d'une polyligne > Ok > + > clic droit > Insérer un champ > Objet > Sélection d'une polyligne> + > clic droit > Insérer un champ > Objet > Sélection d'une polyligne > Etc > Quand tu as mis le nombre de champs que tu souhaites additionner, tu clique sur Evaluer pour voir si tout fonctionne > Valider. 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.
lecrabe Posté(e) le 5 mai 2020 Posté(e) le 5 mai 2020 Hello DONC une routine Lisp qui ferait automatiquement la somme des N champs dynamiques serait interessante !? Voire meme la somme dans un nouveau champ dynamique, ce serait le TOP !! A priori, j'ai en stock !! MERCI au Grand Maitre Gilles !!! Je dois farfouiller un peu dans "mes" 3000 routines !Et si malheureusement je n'ai pas mis un bon mot cle, je risque de ne pas la retrouver !! SVP Gilles si tu nous lis !? LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite Citer Autodesk Expert Elite Team
lecrabe Posté(e) le 5 mai 2020 Posté(e) le 5 mai 2020 Hello ET voici la routine magique "AddFields" de notre Grand Maitre Gilles ! ATTENTION: il ne faut pas TROP cumuler de champs dans la selection ! Mais bon jusqu'a qq centaines (suivant la vitesse du PC) , ca passe !? LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite ;; ;; J'ai fait une routine plus aboutie qui insère un champ ;; dont la valeur est égale à la somme des valeurs des champs sélectionnés ;; dans des textes, mtextes ou attributs pouvant être imbriqués dans des blocs ou des tableaux. ;; ;; ADDFIELDS par GC version 1.00 pour Patrice B. ;; ;; Insère un texte contenant un champ dynamique dont la valeur ;; est égale à la somme des valeurs des champs des textes, mtextes ;; ou attributs sélectionnés ;; ;; NOTA : aucun contrôle sur la conformité des champs sélectionnés ;; (defun c:AddFields (/ ent res code pos ins) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (while (setq ent (car (nentsel "\nSélectionnez un champ: "))) (if (and (setq code (gc:FieldCode ent)) (setq pos (vl-string-search "%<" code)) (setq code (substr code (1+ pos))) (setq pos (vl-string-position 37 code 1 T)) (setq code (substr code 1 (1+ pos))) ) (setq res (cons code res)) (princ "\nEntité non valide") ) ) (if (and res (setq ins (getpoint "\nPoint d'insertion: ")) ) (progn (setq res (strcat "%<\\AcExpr " (lst2str res " + ") " " (if (setq pos (vl-string-position (ascii "\\") code 1 T)) (substr code (1+ pos)) ">%" ) ) ) (vla-addText (if (= 1 (getvar 'cvport)) (vla-get-PaperSpace *acdoc*) (vla-get-ModelSpace *acdoc*) ) res (vlax-3d-point (trans ins 1 0)) (getvar 'textsize) ) ) ) (princ) ) ;;========================= ROUTINES =========================;; ;; gc:FieldCode par GC ;; Retourne la chaîne de caractère d'un attribut, texte ou mtexte ;; avec le(s) code(s) de champ(s) ;; ;; Argument : nom d'entité de l'objet (ENAME) (defun gc:FieldCode (ent / foo elst xdict dict field str) ;;--------------------------------------------------------;; (defun foo (field str / pos fldID objID) (setq pos 0) (if (setq pos (vl-string-search "\\_FldIdx " str pos)) (while (setq pos (vl-string-search "\\_FldIdx " str pos)) (setq fldId (entget (cdr (assoc 360 field))) field (vl-remove (assoc 360 field) field) str (strcat (substr str 1 pos) (if (setq objID (cdr (assoc 331 fldId))) (vl-string-subst (strcat "ObjId " (itoa (gc:EnameToObjectId objID))) "ObjIdx" (cdr (assoc 2 fldId)) ) (foo fldId (cdr (assoc 2 fldId))) ) (substr str (1+ (vl-string-search ">%" str pos))) ) ) ) str ) ) ;;--------------------------------------------------------;; (setq elst (entget ent)) (if (and (member (cdr (assoc 0 elst)) '("ATTRIB" "MTEXT" "TEXT")) (setq xdict (cdr (assoc 360 elst))) (setq dict (dictsearch xdict "ACAD_FIELD")) (setq field (dictsearch (cdr (assoc -1 dict)) "TEXT")) ) (setq str (foo field (cdr (assoc 2 field)))) ) ) ;;============================================================;; ;; gc:EnameToObjectId par GC ;; Retourne l'ObjectID correspondant à un ename ;; ;; Argument : un ename (defun gc:EnameToObjectId (ename) ((lambda (str) (hex2dec (substr (vl-string-right-trim ">" str) (+ 3 (vl-string-search ":" str))) ) ) (vl-princ-to-string ename) ) ) ;;============================================================;; ;; hex2dec par GC ;; conversion hexadécimal -> décimal ;; ;; Argument : un hexadédimal (chaîne) (defun hex2dec (s / r l n) (setq r 0 l (vl-string->list (strcase s))) (while (setq n (car l)) (setq l (cdr l) r (+ (* r 16) (- n (if (<= n 57) 48 55))) ) ) ) ;;============================================================;; ;; lst2str par GC ;; Concatène une liste et un séparateur en une chaine ;; ;; Arguments ;; lst : la liste à transformer en chaine ;; sep : le séparateur (defun lst2str (lst sep) (if (cdr lst) (strcat (vl-princ-to-string (car lst)) sep (lst2str (cdr lst) sep) ) (vl-princ-to-string (car lst)) ) ) Citer Autodesk Expert Elite Team
Steven Posté(e) le 5 mai 2020 Posté(e) le 5 mai 2020 Salut lecrabe,Je l'ai retrouvé aussi mais il a l'air de ne plus fonctionner. Lorsque sélectionne des champs, que je valide et que je dois insérer le champ avec le total, je n'ai que des #### 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.
(gile) Posté(e) le 7 mai 2020 Posté(e) le 7 mai 2020 Salut, Comme ça, ça semble marcher. ;; ;; J'ai fait une routine plus aboutie qui insère un champ ;; dont la valeur est égale à la somme des valeurs des champs sélectionnés ;; dans des textes, mtextes ou attributs pouvant être imbriqués dans des blocs ou des tableaux. ;; ;; ADDFIELDS par GC version 1.00 pour Patrice B. ;; ;; Insère un texte contenant un champ dynamique dont la valeur ;; est égale à la somme des valeurs des champs des textes, mtextes ;; ou attributs sélectionnés ;; ;; NOTA : aucun contrôle sur la conformité des champs sélectionnés ;; (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (defun c:AddFields (/ ent res code pos ins) (while (setq ent (car (nentsel "\nSélectionnez un champ: "))) (if (and (setq code (gc:FieldCode ent)) (setq pos (vl-string-search "%<" code)) (setq code (substr code (1+ pos))) (setq pos (vl-string-position 37 code 1 T)) (setq code (substr code 1 (1+ pos))) ) (setq res (cons code res)) (princ "\nEntité non valide") ) ) (if (and res (setq ins (getpoint "\nPoint d'insertion: ")) ) (progn (setq res (strcat "%<\\AcExpr " (lst2str res " + ") " " (if (setq pos (vl-string-position (ascii "\\") code 1 T)) (substr code (1+ pos)) ">%" ) ) ) (vla-addText (if (= 1 (getvar 'cvport)) (vla-get-PaperSpace *acdoc*) (vla-get-ModelSpace *acdoc*) ) res (vlax-3d-point (trans ins 1 0)) (getvar 'textsize) ) ) ) (princ) ) ;;========================= ROUTINES =========================;; ;; gc:FieldCode par GC ;; Retourne la chaîne de caractère d'un attribut, texte ou mtexte ;; avec le(s) code(s) de champ(s) ;; ;; Argument : nom d'entité de l'objet (ENAME) (defun gc:FieldCode (ent / foo elst xdict dict field str) (setq util (vla-get-Utility *acdoc*)) ;;--------------------------------------------------------;; (defun foo (field str / pos fldID objID) (setq pos 0) (if (setq pos (vl-string-search "\\_FldIdx " str pos)) (while (setq pos (vl-string-search "\\_FldIdx " str pos)) (setq fldId (entget (cdr (assoc 360 field))) field (vl-remove (assoc 360 field) field) str (strcat (substr str 1 pos) (if (setq objID (cdr (assoc 331 fldId))) (vl-string-subst (strcat "ObjId " (vla-GetObjectIdString util (vlax-ename->vla-object objID) :vlax-false) ) "ObjIdx" (cdr (assoc 2 fldId)) ) (foo fldId (cdr (assoc 2 fldId))) ) (substr str (1+ (vl-string-search ">%" str pos))) ) ) ) str ) ) ;;--------------------------------------------------------;; (setq elst (entget ent)) (if (and (member (cdr (assoc 0 elst)) '("ATTRIB" "MTEXT" "TEXT")) (setq xdict (cdr (assoc 360 elst))) (setq dict (dictsearch xdict "ACAD_FIELD")) (setq field (dictsearch (cdr (assoc -1 dict)) "TEXT")) ) (setq str (foo field (cdr (assoc 2 field)))) ) ) ;;============================================================;; ;; lst2str par GC ;; Concatène une liste et un séparateur en une chaine ;; ;; Arguments ;; lst : la liste à transformer en chaine ;; sep : le séparateur (defun lst2str (lst sep) (if (cdr lst) (strcat (vl-princ-to-string (car lst)) sep (lst2str (cdr lst) sep) ) (vl-princ-to-string (car lst)) ) ) Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 7 mai 2020 Posté(e) le 7 mai 2020 Hello Gilles 1) MERCI - MAGNIFIQUE ! 2) Eventuellement SVP serait il possible d'avoir une Selection classique !? Car aller faire un clic sur des dizaines de champs dynamiques, c un peu penible !? LA SANTE (Stay Safe), Bye, lecrabe "triste"Automne 2020, la retraite Citer Autodesk Expert Elite Team
Steven Posté(e) le 7 mai 2020 Posté(e) le 7 mai 2020 Encore, une fois Gile, TOP ! 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.
Messages recommandés