Chris24 Posté(e) le 18 avril 2017 Posté(e) le 18 avril 2017 Bonjour, Je cherche une routine lisp ou autre, qui permet de me calculer un débit suivant la formule suivante. PUISSANCE*0.86/DELTA.sur laquelle je sélectionne Le Premier attribut texte (PUISSANCE) qui celui-ci est multiplier par 0.86, ensuite je sélectionne le deuxième attribut texte (DELTA) qui me donne en positionnant le résultat de la formule ci-dessus.Cordialement.J'ai une routine lisp ci-dessous de ce style, mais elle donne que la somme.[/size] ;; Routine pour le calcul des débits Hydraulique des Radiateurs MINUTE_RAD.LSP ;; en Fonction de la puissance et du Delta. ;; Fonctionne en principe sur les TEXT & MTEXT de type numérique. (defun c:minute_RAD (/ doc sel tot pt nor) (vl-load-com) (setq tot 0 doc (vla-get-activedocument (vlax-get-acad-object)) ) (princ "\nSélectionnez les textes") (if (ssget (list (cons 0 "TEXT,MTEXT"))) (progn (vlax-map-collection (setq sel (vla-get-activeselectionset doc)) '(lambda (x) (setq tot (+ (atof (vla-get-textstring x)) tot)) ) ) (setq ref (vla-item sel 0)) (vla-delete sel) (if (setq pt (getpoint "\nPositionnez le résultat: ")) (progn (setq res (vla-addText (vla-get-ModelSpace doc) (strcat (rtos tot) " l/h") (vlax-3d-point pt) (vla-get-Height ref) ) ) (vla-put-Rotation res (vla-get-Rotation ref)) (vla-put-StyleName res (vla-get-StyleName ref)) ) ) ) ) (princ) )
(gile) Posté(e) le 18 avril 2017 Posté(e) le 18 avril 2017 Salut, Cette demande me rappelle ce sujet. Si tu parles d'attributs, on peut supposer qu'il s'agit d'attributs de bloc. Dans ce cas il serait plus simple de simplement sélectionner un (ou plusieurs) bloc et de traiter ses attributs.Il faut juste s'assurer que le format du texte des valeurs d'attribut permette de retrouver des nombres valides pour faire les opérations. Le mieux serait que tu mettes à disposition un exemple du bloc à traiter s'il est différent de celui du sujet sus-cité. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Chris24 Posté(e) le 19 avril 2017 Auteur Posté(e) le 19 avril 2017 Bonjour Gile, Effectivement, ce sujet à bien été posté par moi même. Je n'arrive pas à joindre le fichier "Erreur Le serveur a retourné une erreur durant l'envoi."Cordialement.
Aleck_Ultimate Posté(e) le 19 avril 2017 Posté(e) le 19 avril 2017 Salut. Ça fait un bon moment qu'il n'est plus possible d’héberger des PJ directement sur le forum , il faut passer par un hébergeur externe. 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
VDH-Bruno Posté(e) le 19 avril 2017 Posté(e) le 19 avril 2017 Bonjour Gile, Effectivement, ce sujet à bien été posté par moi même. Je n'arrive pas à joindre le fichier "Erreur Le serveur a retourné une erreur durant l'envoi."Cordialement. Bonjour, J'ai été faire un petit tour rapide sur le sujet en question, je répond ici n'ayant pas de compte sur ce forum, et je répond peut être à coté car je ne connais pas les évolutions du logiciel depuis d'AutoCAD 2007... Mais pour faire ce que tu souhaites sur version ancienne c'est possible, mais dans une référence de bloc pour avoir accès propriétés des attributs et pas dans une définition de bloc. A l'usage sur d'ancienne version, dans ton dessin tu ne dois pas insérer une définition de bloc mais une référence de bloc.. A+ Bruno Apprendre => Prendre => Rendre
Chris24 Posté(e) le 19 avril 2017 Auteur Posté(e) le 19 avril 2017 Bonjour Bruno, Merci de ta réponse, mais quel est la manip pour insérer une référence de bloc. Chris24
VDH-Bruno Posté(e) le 19 avril 2017 Posté(e) le 19 avril 2017 Bonjour Bruno, Merci de ta réponse, mais quel est la manip pour insérer une référence de bloc. Chris24 Bonjour, Je veux bien essayer de te joindre un exemple si c'est possible (et si je suis bien dans le sujet), mais j'ai besoin de comprendre comment sont renseigné tes attributs puissance et delta (car je ne peux le voir sur ma version) A+ Brun0 Apprendre => Prendre => Rendre
Chris24 Posté(e) le 19 avril 2017 Auteur Posté(e) le 19 avril 2017 Salut, Je te joint un lien pour récupérer le dwg.https://we.tl/EzkWwcsEbm Je rappel que le bloc marche sur les versions depuis 2010 mais pas sur 2009.cdt.
(gile) Posté(e) le 19 avril 2017 Posté(e) le 19 avril 2017 Salut, Voilà un petit LISP qui fonctionne avec des attributs "classiques" et renseigne l'attribut DEBIT en fonction des valeurs des attributs PUISSANCE et DELTA.Il faut bien être conscient que modifier la valeur de l'attribut DEBIT en procédant ainsi détruira le champ dynamique qui permettait de calculer automatiquement la valeur. Autrement dit, les blocs traités avec ce LISP ne fonctionneront plus automatiquement avec AutoCAD 2010 et plus. (defun c:debit (/ getAttribs getAtt getVal block attribs puissance delta debit elst) (defun getAttribs (ent / elst rslt) (while (and ent (= (cdr (assoc 0 (setq elst (entget ent)))) "ATTRIB")) (setq rslt (cons (cons (cdr (assoc 2 elst)) ent) rslt) ent (entnext ent) ) ) rslt ) (defun getAtt (tag /) (cond ((cdr (assoc tag attribs))) (T (prompt (strcat "\nL'attribut '" tag "' est introuvable"))) ) ) (defun getVal (tag / att val) (if (and (setq att (getAtt tag)) (< 0. (setq val (atof (cdr (assoc 1 (entget att)))))) ) val (prompt (strcat "\nLa valeur de l'attribut '" tag "' n'est pas valide")) ) ) (and (setq block (car (entsel "\nSélectionnez un bloc: "))) (setq attribs (getAttribs (entnext block))) (setq puissance (getVal "PUISSANCE")) (setq delta (getval "DELTA")) (setq debit (getAtt "DEBIT")) (setq elst (entget debit)) (entmod (subst (cons 1 (strcat (rtos (/ (* puissance 0.86) delta) 2 0) " l/h")) (assoc 1 elst) elst ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 19 avril 2017 Posté(e) le 19 avril 2017 Salut, Je te joint un lien pour récupérer le dwg.https://we.tl/EzkWwcsEbm Je rappel que le bloc marche sur les versions depuis 2010 mais pas sur 2009.cdt. Re,https://we.tl/HpZLqFj6gF Essaye voir si cela peux te convenir fonctionne sous 2007 et + A+ Bruno Apprendre => Prendre => Rendre
Chris24 Posté(e) le 19 avril 2017 Auteur Posté(e) le 19 avril 2017 Re Gile, Un grand Merci Gile pour ton programme lisp et du temps que tu à passé pour mon cas ici et ailleurs. Cela fonctionne parfaitement. Cordialement. Chris24
Chris24 Posté(e) le 19 avril 2017 Auteur Posté(e) le 19 avril 2017 Re Bruno, Merci pour ton aide cela fonctionne nickel, Pourrais-tu me donner la marche a suivre pour créer se genre de bloc toujours sur une version 2009. Encore Merci. Cordialement. @+ Chris24
VDH-Bruno Posté(e) le 19 avril 2017 Posté(e) le 19 avril 2017 Re, Plusieurs liens sur le sujet, ou je me suis essayé à une explication (avec plus ou moins de clarté…), discussion à lire dans leur intégralité. http://cadxp.com/topic/37644-calcul-entre-attributs-dans-bloc/page__view__findpost__p__207410http://cadxp.com/topic/37644-calcul-entre-attributs-dans-bloc/page__view__findpost__p__210490http://cadxp.com/topic/40695-pb-champ-dans-bloc/page__view__findpost__p__228056 En espérant que tu y trouve ton bonheur. A+ Bruno Apprendre => Prendre => Rendre
PHILPHIL Posté(e) le 20 avril 2017 Posté(e) le 20 avril 2017 bonjour a tous Chris24 j'ai récupéré ton bloc et j'ai voulu tester je suis sur autocad architecture 2017sur quel logiciel es tu ? je suis passé dans l'éditeur de bloc pour reproduire la manip en créant un nouveau paramètre utilisateuret un nouvel attribut faisant référence a ce parametre et la rien ne se produit BATTMAN, controle, regeneration, rien n'y fait sauf sur ton attribut "DEBIT" ou la ca change autant dans la fenetre de propriété je vois bien mes nouveaux paramètres personnalisés qui se modofient, mais rien d'afficher en dessous sous "attributs" ni dans l'espace objet. ca marche chez les autres ? un nouveau BUG autocad ? a+ Phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Chris24 Posté(e) le 20 avril 2017 Auteur Posté(e) le 20 avril 2017 Bonjour PHILPHIL, En faite mon bloc au départ à été réaliser sur une version AutoCAD 2010 où il est possible d'utiliser les gestionnaires de paramètres dans l’Éditeur de Bloc, qui n'est pas le cas sur une version 2009. A l’insertion du bloc sur la version 2009 les attributs on ce type de caractères "######" pas de prise en charge des formules. Les deux solutions données par (Gile) et Bruno fonctionne trés bien. cdt @+ chris24 Les deux solutions données par (Gile) et Bruno fonctionne trés bien.
PHILPHIL Posté(e) le 20 avril 2017 Posté(e) le 20 avril 2017 bonjour ok ce que je ne comprend pas c'est pourquoi je n'arrive pas a reproduire la chosememe sur un version plus recente d'autocad architecture un nouvel attribut qui aurait pour résultat "DELTA*PUISSANCE" par exemple j'ai beau recréer dans le gestionnaire un parametre "toto" "DELTA*PUISSANCE" puis un atribut "TOTO" valeur "toto" rien ne se passe, rien ne s'affiche dans le bloc ( meme en respectant les majuscule minuscule) un BUG ? entre autocad et autocad architecture ? Phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
VDH-Bruno Posté(e) le 21 avril 2017 Posté(e) le 21 avril 2017 Les deux solutions données par (Gile) et Bruno fonctionne trés bien. Le sujet portant sur une demande de solution en lisp, il est possible de mixer les 2 propositions en adaptant très légèrement le code de (gile), donc très rapidement: (defun c:debitfield (/ getAttribs getAtt getVal block attribs puissance delta debit elst) (defun getAttribs (ent / elst rslt) (while (and ent (= (cdr (assoc 0 (setq elst (entget ent)))) "ATTRIB")) (setq rslt (cons (cons (cdr (assoc 2 elst)) ent) rslt) ent (entnext ent) ) ) rslt ) (defun getAtt (tag /) (cond ((cdr (assoc tag attribs))) (T (prompt (strcat "\nL'attribut '" tag "' est introuvable"))) ) ) ;| (defun getVal (tag / att val) (if (and (setq att (getAtt tag)) (< 0. (setq val (atof (cdr (assoc 1 (entget att)))))) ) val (prompt (strcat "\nLa valeur de l'attribut '" tag "' n'est pas valide")) ) ) |;;; remplace la fonction getval (defun getid (tag) (vla-get-ObjectID (vlax-ename->vla-object (getAtt tag)))) (and (setq block (car (entsel "\nSélectionnez un bloc: "))) (setq attribs (getAttribs (entnext block))) (setq puissance (getid "PUISSANCE")) (setq delta (getid "DELTA")) (setq debit (getAtt "DEBIT")) (setq elst (entget debit)) (entmod (subst (cons 1 (strcat ;; (rtos (/ (* puissance 0.86) delta) 2 0) " l/h")) "%<\\AcExpr (%<\\AcObjProp Object(%<\\_ObjId " (itoa puissance) " 0>%).TextString>%*0.86/%<\\AcObjProp Object(%<\\_ObjId " (itoa delta) " 0>%).TextString>%) \\f \"%lu2%pr2%zs8\">%" ) ) (assoc 1 elst) elst ) ) ) (command "_regen") (princ) ) A+ Bruno Apprendre => Prendre => Rendre
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