Aller au contenu

Somme d'attribut trié


JEFF.COSTES

Messages recommandés

Bonjour

 

J'ai un bloc de repérage avec 2 attributs. Un qui me permet d'avoir un nom de repère et un second avec le linéaire du repérage (celui ci lié à une distance dynamique.)

 

J'ai sur mes plans plusieurs types d’éléments à repérer avec des noms différent. Mais chacun de ces type peut avoir plusieurs lignes de repérage différente avec des longueurs différentes aussi éparpiller. Il faut donc faire le tri. Je jongle avec 2 Lisp que j'utilise pour cela : TABCOUNT qui permet de lister les attribut différents avec des valeur différente et leur quantité présente sur le plan (tant de M1, tant de M2, tant de M3 etc.... ) mais sans donner le linéaire associé à chaque type. Et un variante du LISP POIDS D'ACIER qui me donne la valeur cumulé des attributs. (mais c'est la somme total de toutes les valeurs de cet attribut sans faire de différence entre les type d’élément (tant de linéaire de murs certes, mais combien pour les M1 ? combien pour les M2 etc...). Bref! je n'ai pas le détail par type d'élément

 

J'aimerai savoir si il est possible de créer un Lisp qui soit, permettrait de copier x fois un bloc et de donner ensuite dans un champs TXT le cumule des valeurs ainsi créé (il faudrait bien sur pouvoir spécifier la longueur de chaque éléments au moment de la création. Ou alors comme TABCOUNT, de faire le cumul linéaire des repère par type.?

 

merci de votre réponse

Lien vers le commentaire
Partager sur d’autres sites

Hello Merci pour ta réponse LeCrabe.

 

 

 

voici le liens de téléchargement du dwg avec le résultat souhaité :https://wetransfer.com/downloads/3a0c4c641a05a9fc0ad8b4367ab9eaed20200317173632/1192d7baa62a7ee63304a3e5dbd5283320200317173707/afd5a8

 

Les blocs de repérage des linéaire sur le repérage sont liés a des formules dans les textes de cumuls (en jaune à la marge de la page A3) + les attributs "linéaire" des blocs des chaînage d'attentes, eux, sont liés à ces fameux cumuls.

 

Pour le moment les addition sont réalisé manuellement via le LISP FIELDARITHMETIC mais ça prend un certain temps et ce n'est pas exempt d'erreur. Attribut non comptabilisé ou comptabilisé en double.

 

merci

 

Pourquoi Triste ? c'est pas Bien la retraite?

Lien vers le commentaire
Partager sur d’autres sites

  • 2 mois après...

Hello

 

Aviez vous pu voir pour ma question. Vous m'aviez demandé les éléments que je vous avais transféré . Mais je n'ai pas eu de réponse de votre part.

 

Cordialement

 

 

Hello

 

SVP un DWG avec qq exemples des Blocs sources et le Resultat VOULU !?

 

Le TOUT dans un lien Download Free / WETransfert / etc ...

 

LA SANTE, Bye, lecrabe "triste"

Automne 2020, la retraite ...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne me suis pas vraiment penchée sur ton problème donc on va faire ça par étape, si tu veux bien :3

 

1°) Le lien WeTransfert est expiré, serait-il possible d'en refaire un si possible ?

 

2°) As-tu des connaissances dans le langage LISP ou pas du tout ?

 

3°) Si oui, as-tu besoin de pistes de recherches pour t'aider dans l'écriture de ton programme ? Si non, cela signifie que tu as besoin d'un programme fonctionnel tout fait et s'appliquant à ce problème spécifique (ou bien tu as quelques notion te permettant d'étaler l'utilisation de ce programme dans d'autres circonstances ?)

 

4°) Quel genre de programme as-tu besoin exactement : un minimum d'intervention utilisateur (sélection automatique des blocs car nom unique, pas de pré-sélection des blocs à prendre en compte, ...), un programme esthétique et agréable à utiliser (utilisation de boîte de dialogue pour choisir le nom du bloc, pré-sélection possible de la part de l'utilisateur et possibilité de lancer la commande sur une sélection spécifique ou bien une sélection totale, ...), ou bien quelque chose d'efficace pour une utilisation quotidienne (nom du bloc à entrer à la main, possibilité de conserver le nom comme valeur par défaut pour les prochains lancements, ...) ?

 

5°) A quel genre de retour as-tu besoin : une liste dans l'historique de commande, une simple fenêtre d'information d'AutoCAD (pas de trace), un fichier .txt, un fichier .xls ?

 

6°) Quel est le taux de détail dont tu as besoin :

A - une liste des attributs "repères" triée avec la longueur totale pour chacun des repères :

Résultats :

- "M1" :

Lg. = 253.21m

Nb. = 8u

- "M2" :

Lg. = 1581.90m

Nb. = 42u

...

B - une liste des attributs "repères" triée avec des informations intermédiaires pour la répartition des longueurs pour chacun des repères :

Résultats :

- "M1" (8u) :

Lg. totale = 253.21m

Lg. moyenne = 43.95m

Lg. min = 3.10m

Lg. max = 147.86m

- "M2" (42u) :

Lg. totale = 1581.90m

Lg. moyenne = 89.12m

Lg. min = 7.63m

Lg. max = 364.23m

...

C - une liste des attributs "repères" triée avec un résumé (liste A ou B ) à la fin des résultats ainsi que l'ensemble des longueurs pour chaque attribut "repère"

Résultats :

- "M1" :

Obj. n°1 -> 3.10m

Obj. n°2 -> 6.45m

...

- "M2" :

Obj. n°1 -> 7.63m

Obj. n°2 -> 18.76m

...

Résumé :

- "M1" (8u) :

Lg. totale = 253.21m

Lg. moyenne = 43.95m

Lg. min = 3.10m

Lg. max = 147.86m

- "M2" (42u) :

Lg. totale = 1581.90m

Lg. moyenne = 89.12m

Lg. min = 7.63m

Lg. max = 364.23m

...

 

Cela me permettra d'avoir une idée un peu plus précise de ce dont tu as besoin exactement et ainsi t'aider au mieux :3

 

Bisous,

Luna

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

BOF je ne te suis pas vraiment !?

 

MAIS BON comme tu parles d'Attributs sur des Blocs avec une valeur numerique,

je redonne A TOUT HAZARD "mes" 3 routines favorites dans ce domaine !

 

ATT_TOT par Gilles : Total des valeurs de UN Attribut sur N Blocs

Avec en plus definition possible d un Seuil de traitement (Inferieur / Superieur)

 

ATT_ADD par Gilles : Addition d une valeur numerique sur UN Attribut sur N Blocs

 

ATT_MUL par Gilles : Multiplication d une valeur numerique sur UN Attribut sur N Blocs

 

MERCI MERCI MERCI Gilles !!!

 

Le TOUT puise dans mon stock de 3000 Routines ...

 

 

LA SANTE (Stay Safe), Bye, lecrabe "triste"

Automne 2020, la retraite

 

 

;;;
;;; Addition de la valeur d un attribut sur un bloc/symbole
;;; par GC le 09/08/2008 - Anciennement ADDATTVAL
;;;
;;; On selectionne d'abord un attribut
;;; puis APRES par une selection AutoCAD classique
;;; tous les blocs/symboles "concernes" seront traites
;;;
;;; Nouvelles options : Choix d un seuil de traitement
;;; en mode >= ou en mode <=
;;; 

(defun c:ATT_TOT (/ seuil ing att elst tag ss n tot blk) 


(princ "\nTotal des Valeurs de N Blocs sur UN Attribut numerique "    ) 
(princ "\nAvec Choix eventuel d un Seuil Inferieur ou Superieur ... " ) 

(initget "Oui Non")
(if (= "Oui"
(setq seuil (getkword "\nChoix d un Seuil [Oui/Non] <Non> : "))
)
(progn
(initget "Inferieur Superieur")
(or (setq ing
(getkword
"Choisissez une option [inferieur/Superieur] : "
)
)
(setq ing "Superieur")
)
(initget 1)
(setq seuil (getreal "\nValeur du Seuil : "))
)
(setq seuil nil)
) 

(and
(setq att (car (nentsel "\nSelectionnez un Attribut : ")))
(setq elst (entget att))
(= (cdr (assoc 0 elst)) "ATTRIB")
(setq tag (cdr (assoc 2 elst)))
(princ "\nSelectionnez les Blocs ou <Tous> : ")
(or
(setq ss
(ssget
(list
'(0 . "INSERT")
(assoc 2 (entget (cdr (assoc 330 elst))))
)
)
)
(setq ss
(ssget "_X"
(list
'(0 . "INSERT")
(assoc 2 (entget (cdr (assoc 330 elst))))
)
)
)
)
(setq n -1)
(setq tot 0)
(while (setq blk (ssname ss (setq n (1+ n))))
(setq att (entnext blk))
(while (and att
(setq elst (entget att))
(/= (cdr (assoc 2 elst)) tag)
)
(setq att (entnext att))
)
(if (setq val (distof (cdr (assoc 1 elst))))
(if seuil
(if (= ing "Superieur")
(and (<= seuil val) (setq tot (+ tot val)))
(and (<= val seuil) (setq tot (+ tot val)))
)
(setq tot (+ tot val))
)
)
)
) 

;;;;;;;;;; ALERT ou PRINC
;; (alert (strcat "Total = " (vl-princ-to-string tot))) 
  (princ (strcat "Total = " (vl-princ-to-string tot))) 

(princ)
)  

 

 

;; 
;; Commande:  ATT_ADD 
;; par GC (Anciennement ADDATT) 
;; Pour ajouter/soustraire une valeur numerique SIMPLE 
;; a un Attribut SIMPLE sur un Bloc SIMPLE 
;; 

(defun c:att_add (/ att lst tag nam add ss n)
(if (and
(setq att (car (nentsel "\nSelectionnez un attribut a modifier: ")))
(setq lst (entget att))
(= (cdr (assoc 0 lst)) "ATTRIB")
(numberp (read (cdr (assoc 1 lst))))
(setq tag (cdr (assoc 2 lst)))
(setq nam (cdr (assoc 2 (entget (cdr (assoc 330 lst))))))
)
(if (and
(setq add (getreal "\nEntrez la valeur a ajouter ou soustraire : "))
(princ "\nSélectionnez les blocs à modifier.")
(setq ss (ssget (list '(0 . "INSERT") (cons 2 nam))))
(setq n 0)
)
(while (setq blc (ssname ss n))
(setq att (entnext blc)
lst (entget att)
)
(while (= (cdr (assoc 0 lst)) "ATTRIB")
(if (and (= (cdr (assoc 2 lst)) tag)
(numberp (setq val (read (cdr (assoc 1 lst)))))
)
(progn
(entmod (subst (cons 1 (rtos (+ val add)))
(assoc 1 lst)
lst
)
)
(entupd blc)
)
)
(setq att (entnext att)
lst (entget att)
)
)
(setq n (1+ n))
)
)
(princ "\nL objet selectionne n'est pas un attribut ! ")
)
(princ)
)  

 

 

;; 
;; Commande:  ATT_MUL 
;; par GC (Anciennement MULATT) 
;; Pour ajouter/soustraire une valeur NUMERIQUE 
;; a un Attribut NUMERIQUE SIMPLE sur un Bloc SIMPLE 
;; 

(defun c:att_mul (/ att lst tag nam add ss n)
(if (and
(setq att (car (nentsel "\nSelectionnez un attribut a modifier: ")))
(setq lst (entget att))
(= (cdr (assoc 0 lst)) "ATTRIB")
(numberp (read (cdr (assoc 1 lst))))
(setq tag (cdr (assoc 2 lst)))
(setq nam (cdr (assoc 2 (entget (cdr (assoc 330 lst))))))
)
(if (and
(setq add (getreal "\nEntrez la valeur a multiplier ou diviser : "))
(princ "\nSélectionnez les blocs à modifier.")
(setq ss (ssget (list '(0 . "INSERT") (cons 2 nam))))
(setq n 0)
)
(while (setq blc (ssname ss n))
(setq att (entnext blc)
lst (entget att)
)
(while (= (cdr (assoc 0 lst)) "ATTRIB")
(if (and (= (cdr (assoc 2 lst)) tag)
(numberp (setq val (read (cdr (assoc 1 lst)))))
)
(progn
;; (entmod (subst (cons 1 (rtos (+ val add)))
  (entmod (subst (cons 1 (rtos (* val add)))
(assoc 1 lst)
lst
)
)
(entupd blc)
)
)
(setq att (entnext att)
lst (entget att)
)
)
(setq n (1+ n))
)
)
(princ "\nL'objet selectionne n'est pas un attribut ! ")
)
(princ)
)  

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité