Fundream Posté(e) le 7 juillet 2019 Posté(e) le 7 juillet 2019 Bonjour les Lispeurs ! Je cherche à additionner les valeurs de tous les attributs numériques nommés "comddc" des blocs dont l'attribut "REF" est égal à "kiko" ou "kina" uniquement suite à une selection et à retourner cette valeur sous forme de Textmult. Je suis complètement novice en la matière et cela me dépasse complètement, quelqu'un saurait il m'aider ? Merci beaucoup Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
lecrabe Posté(e) le 8 juillet 2019 Posté(e) le 8 juillet 2019 Hello Bon j'ai une routine "Attr_Total" qui genere le total a partir de UN attribut dont tu precises EXACTEMENT l'Etiquette / TagName (Attention aux Minuscules / Majuscules)sur l'ensemble des blocs selectionnes ... Avec cette routine en 2 fois, puisque tu as 2 valeurs d'Attributs specifiques, tu auras le resultat voulu !? Selection du 1er cas avec "REF" est egal a "kiko"puis Attr_Total ... Tu memorises le resultat qui est dans lecran texte !Selection du 1er cas avec "REF" est egal a "kina"puis Attr_Total ... Tu memorises le resultat ... Et tu additionnes les DEUX valeurs !! A priori je pense que c deja un bon debut ! Bye, lecrabe "triste" (Provenant du Stock de 2000 routines) ;|Average of specified attribute - Ranjit Singh 02/23/2017|; ;; ;; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/collect-data-from-blocks/td-p/6898098 ;; ;; Moyenne du contenu d'un Attribut (Tagname) ---> TOTAL des valeurs de UN Attribut numerique ;; ;; Micro-Micro-Modif par Patrice : TOTAL ;; ;; michalus >>> I have a drawing with multiple dynamic blocks with attributes. ;; Is there a way to create a lisp, that when i'll choose number of blocks ;; it will extract the numbers from defined attribute in the block ;; and place a text with the average of those numbers? ;; (vl-load-com) (defun c:Attr_Total (/ tagname entdata vlaobj vallst) (setq tagname (getstring "\nTotal - Enter the Tagname EXACTLY : ")) (mapcar '(lambda (x) (and (= 'ename (type x)) (foreach attobj (safearray-value (variant-value (vla-getattributes (setq vlaobj (vlax-ename->vla-object x))))) (and (= tagname (vla-get-tagstring attobj)) (setq vallst (cons (atof (vla-get-textstring attobj)) vallst)))))) (mapcar 'cadr (ssnamex (ssget '((0 . "INSERT") (66 . 1)))))) ;; (/ (apply '+ vallst) (length vallst)) (+ (apply '+ vallst) ) ) Autodesk Expert Elite Team
Fundream Posté(e) le 8 juillet 2019 Auteur Posté(e) le 8 juillet 2019 Merci beaucoup lecrade mais je n'ai pas deux valeurs d'attribut spécifique, le seul attribut que je veux sommer c'est l'attribut "comddc" MAIS je ne veux sommer que ceux qui se trouvent dans les blocs où l'attribut "REF" est "kiko" ou "kina".Dans ma sélection il y a plein d'autres blocs avec l'attribut "comddc" mais comme leur "REF" n'est pas "kiko" ni "kina", je ne souhaite pas les prendre en compte.Comme tu dis c'est un début, j’essaie maintenant de trouver comment filtrer mes blocs. Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
lecrabe Posté(e) le 8 juillet 2019 Posté(e) le 8 juillet 2019 Hello Mais a priori tu peux facilement selectionner les blocs avec un contenu d'attribut "REF" est "kiko" ou "kina" !?Cela devient en fait ta selection precedente ...Et quand tu lances "Attr_Total" apres la question "\nTotal - Enter the Tagname EXACTLY : " la routine Lisp recupere automatiquement ta selection precedente !? Donc c OK pour moi ! ... Ou alors je n'ai RIEN compris !?Manipulation a faire 2 fois car tu as 2 valeurs critiques !Et tu additionnes (dans ta Tete qui est surement "FUN") les 2 resultats ... Bye, lecrabe "triste" Autodesk Expert Elite Team
Fundream Posté(e) le 8 juillet 2019 Auteur Posté(e) le 8 juillet 2019 Salut,Cela fonctionne mais j'ai pris l'exemple de 2 références de pièces pour ne pas surcharger la demande et juste m'apporter une base.En réalité ma sélection comporte au moins 45 "REF" différentes et je vais devoir sommer leur "comddc" par groupe. Diviser certain totaux par 2, d'autres totaux par 4 et enfin sommer la totalité des résultats obtenus.Donc la routine de sélection par "REF" et sélection précédente j'ai peur que ce soit un peu fastidieux mais je vais tenter de coder ça. Merci Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
Aleck_Ultimate Posté(e) le 8 juillet 2019 Posté(e) le 8 juillet 2019 Salut. EXTRACTDONNEES devrait te permettre de filtrer tout ça assez rapidement, et de faire tous tes filtres à partir de la même extraction. J'ignore si les opérations de fin de colonne permettent l'addition pour des colonnes qui sont considérées comme des textes, mais dans ce cas il suffirait de tout extraire vers un tableur et d'ajouter la bonne formule au bon endroit. Cordialy. Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux. Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage ! Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;]) Utilisateur d'AutoCAD 2021 sous Windows 10
Fundream Posté(e) le 8 juillet 2019 Auteur Posté(e) le 8 juillet 2019 Salut,Non le but est de simplifier au maximum donc de ne pas avoir d'extraction de donné et un tableur.Déja comme mon attribut est toujours "comddc", j'ai retiré le la definition de tagname avec getstring par "comddc" directement, ça évite de le saisir.(and (= "comddc" (vla-get-tagstring attobj)) Sortir le résultat dans un "text" insérable dans l'objet serai un gros plus également. Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
lecrabe Posté(e) le 8 juillet 2019 Posté(e) le 8 juillet 2019 Hello 1) Et le SSATT du Special Selection de Gilles ne pourrait pas t'aider !? 2) Et FILTER ?? Bye, lecrabe "triste" Autodesk Expert Elite Team
Fundream Posté(e) le 8 juillet 2019 Auteur Posté(e) le 8 juillet 2019 Exactement, j'ai modifié le ssatt et compilé les deux, ça donne ça et ca marche à merveille :(defun ssatt (/ att elst ss1 ss2 n ent) (and (setq ss2 (ssadd)) (sssetfirst nil nil) (princ "\nSélectionnez les blocs ou [b]<[/b]Tous>: ") (or (setq ss1 (ssget '((0 . "INSERT") (66 . 1)))) (setq ss1 (ssget "_X" '((0 . "INSERT") (66 . 1)))) ) (if ss1 (repeat (setq n (sslength ss1)) (setq ent (ssname ss1 (setq n (1- n))) att (entnext ent) ) (while (= (cdr (assoc 0 (setq elst (entget att)))) "ATTRIB") (if (and (= (cdr (assoc 2 elst)) "REF") (or (= (cdr (assoc 1 elst)) "kiko") (= (cdr (assoc 1 elst)) "kina") ) ) (ssadd ent ss2) ) (setq att (entnext att)) ) ) ) (sssetfirst nil ss2) ) (princ) ) (defun c:ddc (/ entdata vlaobj vallst ddc ) (ssatt) (mapcar '(lambda (x) (and (= 'ename (type x)) (foreach attobj (safearray-value (variant-value (vla-getattributes (setq vlaobj (vlax-ename->vla-object x))))) (and (= "comddc" (vla-get-tagstring attobj)) (setq vallst (cons (atof (vla-get-textstring attobj)) vallst)))))) (mapcar 'cadr (ssnamex (ssget '((0 . "INSERT") (66 . 1)))))) (setq ddc (+ (apply '+ vallst))) ) Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
lecrabe Posté(e) le 8 juillet 2019 Posté(e) le 8 juillet 2019 Hello Mr FunDream 3D SUPER alors bien qu étant nul ou presque en Lisp, J ai gagné un Apéro !? Au fait kiko / kina ça signifie quoi ?? Bye, lecrabe "triste" Autodesk Expert Elite Team
Fundream Posté(e) le 8 juillet 2019 Auteur Posté(e) le 8 juillet 2019 FunDream 3D, d'où tu sors ça ? Pour le premier bout de code je t'enverrai des pistaches ^^ Ce sont des références de pièce, il faut demander au fabricant le pourquoi du comment. Merci en tout cas Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
lecrabe Posté(e) le 8 juillet 2019 Posté(e) le 8 juillet 2019 Hello Je croyais que tu faisais pas mal de 3D avec AutoCAD !? Bye, lecrabe "triste" Autodesk Expert Elite Team
Fundream Posté(e) le 8 juillet 2019 Auteur Posté(e) le 8 juillet 2019 Oui oui effectivement, mais je suis surpris que tu t'en souvienne, je ne suis pas très actif sur le forum. Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
lecrabe Posté(e) le 8 juillet 2019 Posté(e) le 8 juillet 2019 Hello Mais le vieux Décapode se souvient de Mr FunDream actif en 3D "a long time ago" ... Bye, lecrabe "triste" Autodesk Expert Elite Team
Fundream Posté(e) le 9 juillet 2019 Auteur Posté(e) le 9 juillet 2019 Salut !Tu as une bonne mémoire ;)J'ai un problème sur le code, suite au filtre des blocs, si il s’avère que le jeu de sélection est vide, cela me redemande de sélectionner alors que je voudrai que cela se termine.Il faut donc que je rajoute un (if (ss /= nil)) mais cela ne fonctionne pas. Quelqu'un a une idée pour vérifier qu'un jeu de sélection est présent ? Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
Fundream Posté(e) le 9 juillet 2019 Auteur Posté(e) le 9 juillet 2019 C'est bon ! Un petit (if (/= (cadr ss3) nil) aura résolu mon problème. Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
Olivier Eckmann Posté(e) le 9 juillet 2019 Posté(e) le 9 juillet 2019 Bonjour, Tu as aussi la fonction sslength qui te renvoie le nombre d'objet contenu dans un jeu de sélection.avec l'évaluation de (zerop (sslength ss3)) ça peut le faire aussi. Olivier
Fundream Posté(e) le 10 juillet 2019 Auteur Posté(e) le 10 juillet 2019 Je note, merci pour cette solution. Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
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